@fundamental-ngx/platform 0.43.25 → 0.43.26
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/esm2020/table/table.component.mjs +2 -2
- package/esm2020/table-helpers/directives/table-initial-state.directive.mjs +2 -2
- package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +30 -14
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +29 -12
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +28 -12
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fundamental-ngx-platform-v0.43.26.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +6 -1
- package/fundamental-ngx-platform-v0.43.25.tgz +0 -0
|
@@ -1476,7 +1476,7 @@ export class TableComponent extends Table {
|
|
|
1476
1476
|
}
|
|
1477
1477
|
/** @hidden */
|
|
1478
1478
|
_setSelectionColumnWidth() {
|
|
1479
|
-
this._selectionColumnWidth = this.
|
|
1479
|
+
this._selectionColumnWidth = this.isSelectionColumnShown()
|
|
1480
1480
|
? SELECTION_COLUMN_WIDTH.get(this.contentDensityObserver.value) ?? 0
|
|
1481
1481
|
: 0;
|
|
1482
1482
|
}
|
|
@@ -1753,4 +1753,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
1753
1753
|
}], loading: [{
|
|
1754
1754
|
type: Input
|
|
1755
1755
|
}] } });
|
|
1756
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBSU4sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUU1QixzQkFBc0IsRUFDdEIsT0FBTyxFQUVQLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLElBQUksZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUYsT0FBTyxFQUNILHdCQUF3QixFQUN4QixtQkFBbUIsRUFJbkIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBQ3hC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QUFFLElBQUksRUFBRTtnQkFJaEQsWUFBWTtzQkFEcEIsWUFBWTt1QkFBQyxhQUFhO2dCQXFIM0IsYUFBYTtzQkFEWixXQUFXO3VCQUFDLHVCQUF1QjtnQkEyQzVCLE9BQU87c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbmltcG9ydCB7IFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVHJhY2tCeUZ1bmN0aW9uLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBEbmRMaXN0RGlyZWN0aXZlLFxuICAgIEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUsXG4gICAgRm9jdXNhYmxlQ2VsbFBvc2l0aW9uLFxuICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBSYW5nZVNlbGVjdG9yLFxuICAgIHJlc2l6ZU9ic2VydmFibGUsXG4gICAgUnRsU2VydmljZSxcbiAgICBUYWJiYWJsZUVsZW1lbnRTZXJ2aWNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlNb2RlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IGFzIEZkVGFibGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGFibGUnO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NlYXJjaC1maWVsZCc7XG5pbXBvcnQgeyBGRFBfUFJFU0VUX01BTkFHRURfQ09NUE9ORU5ULCBpc0pzT2JqZWN0IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBhcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4sXG4gICAgYnVpbGROZXdSb3dTa2VsZXRvbixcbiAgICBDb2xsZWN0aW9uRmlsdGVyLFxuICAgIENvbGxlY3Rpb25Hcm91cCxcbiAgICBDb2xsZWN0aW9uU29ydCxcbiAgICBjb252ZXJ0T2JqZWN0c1RvVGFibGVSb3dzLFxuICAgIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzLFxuICAgIGNvbnZlcnRUcmVlVGFibGVSb3dUb0ZsYXRMaXN0LFxuICAgIERFRkFVTFRfSElHSExJR0hUSU5HX0tFWSxcbiAgICBFRElUQUJMRV9ST1dfU0VNQU5USUNfU1RBVEUsXG4gICAgRWRpdGFibGVUYWJsZUNlbGwsXG4gICAgRkRQX1RBQkxFX0RSQUdHQUJMRV9ESVJFQ1RJVkUsXG4gICAgRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSxcbiAgICBGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLFxuICAgIGZpbmRSb3dDaGlsZHJlbixcbiAgICBnZXRGcmVlemFibGVDb2x1bW5zLFxuICAgIGdldEZyZWV6YWJsZUVuZENvbHVtbnMsXG4gICAgZ2V0Um93UGFyZW50cyxcbiAgICBnZXRTZWxlY3RhYmxlUm93cyxcbiAgICBpc1Jvd05hdmlnYXRhYmxlLFxuICAgIGlzVGFibGVSb3csXG4gICAgaXNUcmVlUm93Rmlyc3RDZWxsLFxuICAgIFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0LFxuICAgIFJPV19IRUlHSFQsXG4gICAgUm93Q29tcGFyYXRvcixcbiAgICBTYXZlUm93c0V2ZW50LFxuICAgIFNFTEVDVElPTl9DT0xVTU5fV0lEVEgsXG4gICAgU2VsZWN0aW9uTW9kZSxcbiAgICBTZWxlY3Rpb25Nb2RlVmFsdWUsXG4gICAgU0VNQU5USUNfSElHSExJR0hUSU5HX0NPTFVNTl9XSURUSCxcbiAgICBUYWJsZSxcbiAgICBUYWJsZUNvbHVtbixcbiAgICBUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50LFxuICAgIFRhYmxlQ29sdW1uUmVzaXplU2VydmljZSxcbiAgICBUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudCxcbiAgICBUYWJsZURhdGFTb3VyY2UsXG4gICAgVGFibGVEYXRhU291cmNlRGlyZWN0aXZlLFxuICAgIFRhYmxlRHJhZ2dhYmxlLFxuICAgIFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVHcm91cENoYW5nZUV2ZW50LFxuICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZSxcbiAgICBUYWJsZUluaXRpYWxTdGF0ZSxcbiAgICBUYWJsZVBhZ2VDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgIFRhYmxlUm93LFxuICAgIFRhYmxlUm93QWN0aXZhdGVFdmVudCxcbiAgICBUYWJsZVJvd0NsYXNzLFxuICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVSb3dTZXJ2aWNlLFxuICAgIFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQsXG4gICAgVGFibGVSb3dUeXBlLFxuICAgIFRhYmxlU2Nyb2xsYWJsZSxcbiAgICBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIFRhYmxlU2VydmljZSxcbiAgICBUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVN0YXRlLFxuICAgIFRhYmxlVmlydHVhbFNjcm9sbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgZmlsdGVyLFxuICAgIG1hcCxcbiAgICBzdGFydFdpdGgsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRha2UsXG4gICAgdGFrZVVudGlsLFxuICAgIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUQUJMRV9UT09MQkFSLCBUYWJsZVRvb2xiYXJJbnRlcmZhY2UgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmludGVyZmFjZSBUb29sYmFyQ29udGV4dCB7XG4gICAgY291bnRlcjogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIHNvcnRhYmxlOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGZpbHRlcmFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZ3JvdXBhYmxlOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNvbHVtbnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbmxldCB0YWJsZVVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhIHRhYmxlLlxuICogQSB0YWJsZSBpcyBhIHNldCBvZiB0YWJ1bGFyIGRhdGEuIExpbmUgaXRlbXMgY2FuIHN1cHBvcnQgZGF0YSwgaW1hZ2VzIGFuZCBhY3Rpb25zLlxuICogYGBgaHRtbFxuICogPGZkcC10YWJsZVxuICogIFtkYXRhU291cmNlXT1cInNvdXJjZVwiXG4gKiAgZmRDb21wYWN0XG4gKiAgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCJcbiAqICBlbXB0eVRhYmxlTWVzc2FnZT1cIk5vIGRhdGEgZm91bmRcIj5cbiAqXG4gKiAgPGZkcC10YWJsZS10b29sYmFyXG4gKiAgIHRpdGxlPVwiT3JkZXIgTGluZSBJdGVtc1wiXG4gKiAgIFtoaWRlSXRlbUNvdW50XT1cImZhbHNlXCI+XG4gKiAgPC9mZHAtdGFibGUtdG9vbGJhcj5cbiAqXG4gKiAgPGZkcC1jb2x1bW5cbiAqICAgbmFtZT1cIm5hbWVcIlxuICogICBrZXk9XCJuYW1lXCJcbiAqICAgbGFiZWw9XCJOYW1lXCJcbiAqICAgYWxpZ249XCJzdGFydFwiPlxuICogIDwvZmRwLWNvbHVtbj5cbiAqXG4gKiAgPGZkcC1jb2x1bW5cbiAqICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAqICAga2V5PVwiZGVzY3JpcHRpb25cIlxuICogICBsYWJlbD1cIkRlc2NyaXB0aW9uXCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICogPC9mZHAtdGFibGU+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IFRhYmxlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUYWJsZUNvbXBvbmVudCkgfSxcbiAgICAgICAgVGFibGVSb3dTZXJ2aWNlLFxuICAgICAgICBUYWJsZVNlcnZpY2UsXG4gICAgICAgIFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgICAgIFRhYmxlQ29sdW1uUmVzaXplU2VydmljZSxcbiAgICAgICAgVGFibGVSZXNwb25zaXZlU2VydmljZSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBzdXBwb3J0ZWRDb250ZW50RGVuc2l0eTogW0NvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNULCBDb250ZW50RGVuc2l0eU1vZGUuQ09aWSwgQ29udGVudERlbnNpdHlNb2RlLkNPTkRFTlNFRF1cbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGFibGVDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnZGF0YVNvdXJjZScsICdjaGlsZERhdGFTb3VyY2UnXSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0cy1tZXRhZGF0YS1wcm9wZXJ0eVxuICAgICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgICAgICdjaGlsZERhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICAgICAgICAgICAgICAnb25EYXRhUmVxdWVzdGVkJyxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICAgICAgICAgICAgICAnb25EYXRhUmVjZWl2ZWQnLFxuICAgICAgICAgICAgICAgICdkYXRhU291cmNlQ2hhbmdlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnaXNMb2FkaW5nJ1xuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBUYWJsZUhlYWRlclJlc2l6ZXJEaXJlY3RpdmVcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZHAtdGFibGUnLFxuICAgICAgICAnW2NsYXNzLmZkLXRhYmxlLS1uby1ob3Jpem9udGFsLWJvcmRlcnNdJzogJ25vSG9yaXpvbnRhbEJvcmRlcnMgfHwgbm9Cb3JkZXJzJyxcbiAgICAgICAgJ1tjbGFzcy5mZC10YWJsZS0tbm8tdmVydGljYWwtYm9yZGVyc10nOiAnbm9WZXJ0aWNhbEJvcmRlcnMgfHwgbm9Cb3JkZXJzJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT5cbiAgICBleHRlbmRzIFRhYmxlPFQ+XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkXG57XG4gICAgLyoqIENvbXBvbmVudCBuYW1lIHVzZWQgaW4gYSBQcmVzZXQtbWFuYWdlZCBjb21wb25lbnQuICovXG4gICAgQElucHV0KClcbiAgICBuYW1lID0gJ3BsYXRmb3JtVGFibGUnO1xuXG4gICAgLyoqIElEIGZvciB0aGUgVGFibGUuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gYGZkcC10YWJsZS0ke3RhYmxlVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgcmVzaXppbmcgY29sdW1ucyBieSBkcmFnZ2luZyB0aGUgY29sdW1uIGVkZ2Ugd2l0aCBtb3VzZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZURyYWdSZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmaXggdGhlIHRhYmxlIGhlYWRlciBhbmQgZm9vdGVyLiBEZWZhdWx0IGlzIHRydWUuXG4gICAgICogTm90ZSB0aGF0IGlmIHRoZSB0YWJsZSBjb250YWlucyBmcmVlemFibGUgY29sdW1ucywgdGhlIGhlYWRlciBhbmRcbiAgICAgKiBmb290ZXIgd2lsbCBiZSBmaXhlZCBhdXRvbWF0aWNhbGx5LCByZWdhcmRsZXNzIG9mIHRoaXMgaW5wdXQgdmFsdWUuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGZpeGVkID0gdHJ1ZTtcblxuICAgIC8qKiBUaGUgY29sdW1uIGBuYW1lYCB0byBmcmVlemUgY29sdW1ucyB1cCB0byBhbmQgaW5jbHVkaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZnJlZXplQ29sdW1uc1RvOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGNvbHVtbiBgbmFtZWAgdG8gZnJlZXplIGNvbHVtbnMgYWZ0ZXIgYW5kIGluY2x1ZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZyZWV6ZUVuZENvbHVtbnNUbzogc3RyaW5nO1xuICAgIC8qKiBUb2dnbGUgZm9yIHBhZ2Ugc2Nyb2xsaW5nIGZlYXR1cmUuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTaXplOiBOdWxsYWJsZTxudW1iZXI+O1xuICAgIC8qKiBQYWdlIHNjcm9sbGluZyB0aHJlc2hvbGQgaW4gcHguICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2Nyb2xsaW5nVGhyZXNob2xkID0gODA7XG4gICAgLyoqIFRhYmxlIGJvZHkgaGVpZ2h0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keUhlaWdodDogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVtcHR5VGFibGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRleHQgZGlzcGxheWVkIHdoZW4gdGFibGUgaGFzIG5vIHZpc2libGUgY29sdW1ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vVmlzaWJsZUNvbHVtbnNNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgaG9yaXpvbnRhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Ib3Jpem9udGFsQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IHZlcnRpY2FsIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub1ZlcnRpY2FsQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGFueSBib3JkZXJzLCBidXQgaGVhZGVyIHdpdGggYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9keUJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBvdXRlciBib3JkZXJzICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtdGFibGUtLW5vLW91dGVyLWJvcmRlcicpXG4gICAgQElucHV0KClcbiAgICBub091dGVyQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgaG9yaXpvbnRhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJYID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJZID0gZmFsc2U7XG4gICAgLyoqIEFjY2Vzc29yIHRvIGEgY2hpbGRyZW4gbm9kZXMgb2YgdHJlZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJlbGF0aW9uS2V5OiBzdHJpbmc7XG4gICAgLyoqIFRhYmxlIHJvdyBleHBhbmRlZCBzdGF0ZSBrZXkuIFVzZWQgdG8gc2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRyZWUgcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXhwYW5kZWRTdGF0ZUtleTogc3RyaW5nO1xuICAgIC8qKiBQcm9wZXJ0eSBrZXkgaW5kaWNhdGluZyB0aGF0IHRoZSByb3cgaGFzIGNoaWxkcmVuIGFjY2Vzc2libGUgdmlhIFtjaGlsZERhdGFTb3VyY2VdLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzQ2hpbGRyZW5LZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJvdyBpcyBuYXZpZ2F0YWJsZS5cbiAgICAgKiBQYXNzIGJvb2xlYW4gdmFsdWUgdG8gc2V0IHN0YXRlIGZvciB0aGUgYWxsIHJvd3MuXG4gICAgICogUGFzcyBzdHJpbmcgdmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGNvbXB1dGUgc3RhdGUgZm9yIGV2ZXJ5IHNpbmdsZSByb3cuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dOYXZpZ2F0YWJsZTogc3RyaW5nIHwgYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlnaGxpZ2h0IG5hdmlnYXRlZCByb3cuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWdobGlnaHROYXZpZ2F0ZWRSb3cgPSBmYWxzZTtcbiAgICAvKiogV2hldGhlciB0YWJsZSByb3cgY2FuIGJlIGNsaWNrZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NBY3RpdmFibGUgPSBmYWxzZTtcbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGVuYWJsZSBzZWxlY3RpbmcuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRLZXk6IHN0cmluZztcbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGVuYWJsZSBzZWxlY3RpbmcuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0YWJsZUtleTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRyYWNraW5nIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIHRoZSBkaWZmZXJlbmNlcyBpbiBkYXRhIGNoYW5nZXMuXG4gICAgICogVXNlZCBzaW1pbGFybHkgdG8gYG5nRm9yYCBgdHJhY2tCeWAgZnVuY3Rpb24uXG4gICAgICogQWNjZXB0cyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGluZGV4IGFuZCBpdGVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPFQ+O1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgaWRlbnRpZmllcyB1bmlxdWVuZXNzIG9mIGEgcGFydGljdWxhciByb3cuXG4gICAgICogVGFibGUgY29tcG9uZW50IHVzZXMgaXQgdG8gYmUgYWJsZSB0byBwcmVzZXJ2ZSBzZWxlY3Rpb24gd2hlbiBhIGRhdGEgbGlzdCBpcyBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93Q29tcGFyYXRvcjogUm93Q29tcGFyYXRvcjxUPjtcbiAgICAvKiogU3RyaW5nIG9yIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhZGRpdGlvbmFsIHJvd3MnIENTUyBjbGFzc2VzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93c0NsYXNzOiBUYWJsZVJvd0NsYXNzPFQ+O1xuICAgIC8qKiBVc2VkIHRvIGNvbnN0cnVjdCBlbXB0eSByb3cgb2JqZWN0IGZvciBlZGl0aW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZWRpdGFibGVSb3dTa2VsZXRvbjogVDtcbiAgICAvKiogV2hldGhlciBhbGwgcm93cyBzaG91bGQgYmUgY29sbGFwc2VkIGJ5IGRlZmF1bHQgYWZ0ZXIgdGhlIHRhYmxlIGlzIGxvYWRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZE9uSW5pdCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgcm93LCByZXF1aXJlZCBmb3IgdGhlIHZpcnR1YWxTY3JvbGwsXG4gICAgICogZGVmYXVsdCBpcyA0NHB4IGluIGNvenksIDMycHggaW4gY29tcGFjdCBhbmQgMjRweCBpbiBjb25kZW5zZWQgKHNldCBhdXRvbWF0aWNhbGx5KVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93SGVpZ2h0ID0gUk9XX0hFSUdIVC5nZXQoQ29udGVudERlbnNpdHlNb2RlLkNPWlkpITtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBsb2FkIHByZXZpb3VzIHBhZ2VzLlxuICAgICAqIFRoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2hlbiBgcGFnZVNjcm9sbGluZ2AgaXMgdHJ1ZSwgYW5kIHRoZSBpbml0aWFsIHBhZ2UgPiAxXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkUGFnZXNCZWZvcmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGVWYWx1ZSA9IFNlbGVjdGlvbk1vZGUuTk9ORTtcblxuICAgIC8qKiBTZXRzIHNlbGVjdGlvbiBtb2RlIGZvciB0aGUgdGFibGUuICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8ICdub25lJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGlvbk1vZGUodmFsdWU6IFNlbGVjdGlvbk1vZGVWYWx1ZSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSB0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuTk9ORTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBTZWxlY3Rpb25Nb2RlVmFsdWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VuYWJsZVRyaXN0YXRlTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogIFdoZW4gVHJ1ZSwgdGhlIGNoZWNrZWQgc3RhdGUgb2YgZWFjaCB0cmVlIGl0ZW0gZGVwZW5kcyBvbiB0aGUgY2hlY2tlZFxuICAgICAqICBzdGF0ZSBvZiBpdHMgcGFyZW50IG9yIGRpcmVjdCBjaGlsZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBlbmFibGVUcmlzdGF0ZU1vZGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlVHJpc3RhdGVNb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGVuYWJsZVRyaXN0YXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUcmVlVGFibGUgJiYgdGhpcy5fZW5hYmxlVHJpc3RhdGVNb2RlO1xuICAgIH1cblxuICAgIC8qKiBWYWx1ZSB3aXRoIHRoZSBrZXkgb2YgdGhlIHJvdyBpdGVtJ3MgZmllbGQgdG8gY29tcHV0ZSBzZW1hbnRpYyBzdGF0ZSBvZiB0aGUgcm93LiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZW1hbnRpY0hpZ2hsaWdodGluZyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG4gICAgfVxuICAgIGdldCBzZW1hbnRpY0hpZ2hsaWdodGluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5ICYmIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBERUZBVUxUX0hJR0hMSUdIVElOR19LRVk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmb3JjZSByb3dzIHRvIGZvbGxvdyAnY2hlY2tlZCBhbGwnIHN0YXRlIG9mIHRoZSB0YWJsZS5cbiAgICAgKiBJZiB0cnVlLCBhbGwgbmV3IHJvd3MgdGhhdCBhcmUgY29taW5nIGZyb20gdGhlIGRhdGFTb3VyY2Ugd2lsbCBmb2xsb3cgJ2NoZWNrZWQgYWxsJyBzdGF0ZS5cbiAgICAgKiBJZiBmYWxzZSwgcm93IHdpbGwgcmVzcGVjdCBgY2hlY2tlZEtleWAgcHJvcGVydHkgdG8gZGVmaW5lIGNoZWNrZWQgc3RhdGUgb2YgaXRzZWxmLlxuICAgICAqIERlZmF1bHQgaXMgZmFsc2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZUNoZWNrZWRBbGxTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSB2YWx1ZSBmb3IgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBtaW5pbWFsIHdpZHRoIG9mIHRoZSBub24tZnJvemVuIGNvbHVtbnMuXG4gICAgICogVXNlZnVsIHdoZW4gdGFibGUgaGFzIGxhcmdlIGFtb3VudCBvZiBmcmVlemFibGUgY29sdW1ucyBhbmQgdGFibGUgc3RpbGwgc2hvdWxkIGhhdmUgc29tZSBmcmVlIHNwYWNlIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBub25Gcm96ZW5Db2x1bW5zTWluV2lkdGgodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0ZpeGVkQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgIHRoaXMuX25vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBub25Gcm96ZW5Db2x1bW5zTWluV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vbkZyb3plbkNvbHVtbnNNaW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZENoZWNrTmV3Um93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGN1cnJlbnQgcHJlc2V0IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwcmVzZXRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93U2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudDxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgICAgICBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+XG4gICAgPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIHNvcnQgb3JkZXIgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU29ydENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0Q2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIHRhYmxlIGZpbHRlciBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBmaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUZpbHRlckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXJDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBncm91cGluZyBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBncm91cENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlR3JvdXBDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlR3JvdXBDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB2aXNpYmxlIGNvbHVtbnMgbGlzdCBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNvbHVtbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gcGFnaW5hdGlvbiBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUNoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBmcm96ZW4gY29sdW1uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNvbHVtbkZyZWV6ZTogRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uRnJlZXplRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGdyb3VwL3RyZWUgcm93IGNvbGxhcHNlZC9leHBhbmRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dUb2dnbGVPcGVuU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93QWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiByb3cgbmF2aWdhdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd05hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gZW1wdHkgcm93IGFkZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGVtcHR5Um93QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gc2F2ZSBidXR0b24gcHJlc3NlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlUm93c0V2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGNhbmNlbCBidXR0b24gcHJlc3NlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0YWJsZSBib2R5IGJlaW5nIHNjcm9sbGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlU2Nyb2xsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIG5ldyByb3dzIGhhcyBiZWVuIHNldCBhbmQgcmVuZGVyZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdGFibGVSb3dzU2V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYWxsIHJvd3MgYmVpbmcgZXhwYW5kZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWxsUm93c0V4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYWxsIHJvd3MgYmVpbmcgY29sbGFwc2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NDb2xsYXBzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGNlbGwgaXMgZm9jdXNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjZWxsRm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGFibGVTY3JvbGxhYmxlJylcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGFibGU6IFRhYmxlU2Nyb2xsYWJsZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJylcbiAgICByZWFkb25seSB0YWJsZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZkVGFibGVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHJlYWRvbmx5IHRhYmxlOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRkRLX0ZPQ1VTQUJMRV9HUklEX0RJUkVDVElWRSlcbiAgICByZWFkb25seSBfZm9jdXNhYmxlR3JpZDogRm9jdXNhYmxlR3JpZERpcmVjdGl2ZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlQm9keTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKERuZExpc3REaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZG5kRGlyZWN0aXZlOiBOdWxsYWJsZTxEbmRMaXN0RGlyZWN0aXZlPFRhYmxlUm93Pj47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ29sdW1uKVxuICAgIHJlYWRvbmx5IGNvbHVtbnM6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEVkaXRhYmxlVGFibGVDZWxsLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgY3VzdG9tRWRpdGFibGVDZWxsczogUXVlcnlMaXN0PEVkaXRhYmxlVGFibGVDZWxsPjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVEFCTEVfVE9PTEJBUilcbiAgICByZWFkb25seSB0YWJsZVRvb2xiYXI6IFRhYmxlVG9vbGJhckludGVyZmFjZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpbml0aWFsU29ydEJ5KCk6IENvbGxlY3Rpb25Tb3J0W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxTb3J0QnkgPz8gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbHVtbnMgdG8gYmUgcmVuZGVyZWQgaW4gdGhlIHRlbXBsYXRlXG4gICAgICovXG4gICAgZ2V0IF92aXNpYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1ucyQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbHVtbnMgdG8gYmUgcmVuZGVyZWQgYXMgYSBwb3AtaW4gY29sdW1ucy5cbiAgICAgKi9cbiAgICBnZXQgX3BvcHBpbmdDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLnBvcHBpbmdDb2x1bW5zJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc1RyZWVUYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmlzVHJlZVRhYmxlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGVuYWJsZVJvd1Jlb3JkZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5lbmFibGVSb3dSZW9yZGVyaW5nO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWJsZSByb3dzIGFyZSBkcmFnZ2FibGUuICovXG4gICAgZ2V0IGlzRHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uaXNUcmVlVGFibGUgJiYgISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZW5hYmxlUm93UmVvcmRlcmluZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZyA/IFNFTUFOVElDX0hJR0hMSUdIVElOR19DT0xVTU5fV0lEVEggOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFN1bSBvZiB3aWR0aHMgb2YgZml4ZWQgY29sdW1ucyAoc2VtYW50aWMgaGlnaGxpZ2h0aW5nLCBzZWxlY3Rpb24pICovXG4gICAgZ2V0IF9maXhlZENvbHVtbnNQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoICsgdGhpcy5fc2VsZWN0aW9uQ29sdW1uV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3RhYmxlV2lkdGhQeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGxvYWRpbmdTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA/P1xuICAgICAgICAgICAgKHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ludGVybmFsTG9hZGluZ1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5faW50ZXJuYWxDaGlsZHJlbkxvYWRpbmdTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2RuZExvYWRpbmdTdGF0ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfYXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmFyaWFMYWJlbGxlZEJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRCeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVRvb2xiYXI/LnRhYmxlVG9vbGJhclRpdGxlSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgY29tYmluZWQgdGFibGUgcm93cy5cbiAgICAgKiBDb250YWlucyBhbGwgcm93cyBpbmNsdWRpbmcgZ3JvdXAgcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgdGFibGUgcm93cyB0aGF0IGNhbWUgZnJvbSBkYXRhU291cmNlLlxuICAgICAqIENvbnRhaW5zIGFsbCByb3dzIGluY2x1ZGluZyBncm91cCByb3dzLlxuICAgICAqL1xuICAgIF9kYXRhU291cmNlVGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIGFkZGVkIHRhYmxlIHJvd3MuXG4gICAgICovXG4gICAgX25ld1RhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWaXNpYmxlIHRhYmxlIHJvd3MuXG4gICAgICogUm93cyBsaXN0IHRoYXQgaXMgdXNlZCB0byBiZSByZW5kZXJlZCBpbiB0aGUgdWkuXG4gICAgICogQmFzZWQgb24gX3RhYmxlUm93cyBhbmQgZXhjbHVkZXMgaGlkZGVuIHJvd3MuXG4gICAgICovXG4gICAgX3RhYmxlUm93c1Zpc2libGU6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGFibGUgQ29sdW1uIE1hcC4gV2hlcmUga2V5IGlzIGNvbHVtbiBrZXkgYW5kIHZhbHVlIGlzIGNvbHVtblxuICAgICAqL1xuICAgIF9rZXlUb0NvbHVtbk1hcDogTWFwPHN0cmluZywgVGFibGVDb2x1bW4+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXNcbiAgICAgKi9cbiAgICBfZnJlZXphYmxlQ29sdW1uczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnJlZXphYmxlIGNvbHVtbiBuYW1lcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBpbmRleGVzIGZvciBjb2x1bW5zIHRoYXQgd2lsbCBiZSBmcm96ZW4gdG8gdGhlIGVuZCBvZiB0aGUgdGFibGVcbiAgICAgKi9cbiAgICBfZnJlZXphYmxlRW5kQ29sdW1uczogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90YWJsZUNvbHVtbnNMZW5ndGggPSAwO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NoZWNrZWRTdGF0ZTogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtdGFibGUtLWdyb3VwJylcbiAgICBfaXNHcm91cFRhYmxlID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVzZWQgdG8gY3JlYXRlIGEgcm93IGNvbXBvbmVudCBwbGFjZWhvbGRlciBhbmQgc2V0IGRhdGEgaW4gaXQgcmF0aGVyIHRoYW4gcmUtY3JlYXRlIHRoZSByb3cgY29tcG9uZW50IHdoZW4gZGF0YSBjaGFuZ2VzLlxuICAgICAqIE9wdGltaXplcyBwZXJmb3JtYW5jZSBkdWUgdG8gc2tpcHBpbmcgaW5pdGlhbCBzZXR1cCBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIF90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI6IG51bWJlcltdID0gW107XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZG5kVGFibGVSb3dzUGxhY2Vob2xkZXI6IFRhYmxlUm93W10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc1NlbGVjdGlvbkNvbHVtblNob3duID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfdG9vbGJhckNvbnRleHQ6IFRvb2xiYXJDb250ZXh0O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX25hdmlnYXRlZFJvd0luZGV4OiBudW1iZXI7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uQ29sdW1uV2lkdGggPSAwO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgdGFibGVDb2x1bW5zU3RyZWFtOiBPYnNlcnZhYmxlPFRhYmxlQ29sdW1uW10+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2xvYWRQcmV2aW91c1BhZ2VzID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnRsID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZGF0YVNvdXJjZURpcmVjdGl2ZSA9IGluamVjdDxUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmU8VD4+KFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfdGFibGVSb3dTZXJ2aWNlID0gaW5qZWN0KFRhYmxlUm93U2VydmljZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBpbml0aWFsU3RhdGUgPSBpbmplY3Q8VGFibGVJbml0aWFsU3RhdGU+KEZEUF9UQUJMRV9TVEFURV9ESVJFQ1RJVkUsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlVmlydHVhbFNjcm9sbD4oRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2RuZFRhYmxlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRHJhZ2dhYmxlPihGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8vIGtlZXBpbmcgXCJsb2FkaW5nXCIgZmllbGQgcHJpdmF0ZSB0byBtYWtlIHN1cmUgXCJsb2FkaW5nU3RhdGVcIiBpcyB1c2VkIGluc3RlYWRcbiAgICAvKiogTG9hZGluZyBzdGF0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VtYW50aWNIaWdobGlnaHRpbmdLZXk6IHN0cmluZztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25Db2x1bW5TZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZW4gYWxsIGl0ZW1zIGFyZSBjaGVja2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hlY2tlZEFsbCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhdCBsZWFzdCAxIGl0ZW0gaXMgY2hlY2tlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoZWNrZWRBbnkgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aWV3SW5pdGlhdGVkID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZGRlZEl0ZW1zOiBUW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbHVtbnNXaWR0aFNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZG5kTG9hZGluZ1N0YXRlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yYW5nZVNlbGVjdG9yID0gbmV3IFJhbmdlU2VsZWN0b3IoKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2N1cnJlbnRQcmVzZXQ6IFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0ID0ge307XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsU3RhdGVTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jvd0hlaWdodE1hbnVhbGx5U2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRFbWl0Um93c0NoYW5nZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUhlYWRlclJlc2l6ZXIgPSBpbmplY3QoVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWFwcGluZyBmdW5jdGlvbiBmb3IgdGhlIHRyYWNrQnksIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLlxuICAgICAqIElzIG5lZWRlZCwgYmVjYXVzZSB3ZSBhcmUgd3JhcHBpbmcgdXNlciBzdXBwbGllZCBkYXRhIGludG8gYSBgVGFibGVSb3dgIGNsYXNzLlxuICAgICAqL1xuICAgIF9yb3dUcmFja0J5OiBUcmFja0J5RnVuY3Rpb248VGFibGVSb3c8VD4+IHwgVHJhY2tCeUZ1bmN0aW9uPG51bWJlcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRUcmFja0J5OiBUcmFja0J5RnVuY3Rpb248bnVtYmVyPiA9IChpbmRleDogbnVtYmVyKSA9PiBpbmRleDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICByZWFkb25seSBfdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlcjogVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IF90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2U6IFRhYmxlQ29sdW1uUmVzaXplU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2UsXG4gICAgICAgIHJlYWRvbmx5IGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFiYmFibGVTZXJ2aWNlOiBUYWJiYWJsZUVsZW1lbnRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFN0YXRlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LnNldFRhYmxlKHRoaXMpO1xuICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5zZXRUYWJsZSh0aGlzKTtcblxuICAgICAgICB0aGlzLl9yb3dUcmFja0J5ID0gdGhpcy5fZGVmYXVsdFRyYWNrQnk7XG4gICAgICAgIHRoaXMuX3Rvb2xiYXJDb250ZXh0ID0ge1xuICAgICAgICAgICAgY291bnRlcjogdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS50b3RhbEl0ZW1zJCxcbiAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLl9pc1Nob3duU29ydFNldHRpbmdzSW5Ub29sYmFyJCxcbiAgICAgICAgICAgIGZpbHRlcmFibGU6IHRoaXMuX2lzU2hvd25GaWx0ZXJTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBncm91cGFibGU6IHRoaXMuX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJCxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuX2lzU2hvd25Db2x1bW5TZXR0aW5nc0luVG9vbGJhciRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnRhYmxlQ29sdW1uc1N0cmVhbSA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5zdWJzY3JpYmUoKGlzUnRsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3J0bCA9IGlzUnRsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5jZWxsRm9jdXNlZCQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2VsbEZvY3VzZWQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBXaGV0aGVyIHRoZSBzZWxlY3Rpb24gY29sdW1uIHNob3VsZCBiZSBzaG93bixcbiAgICAgKiAgSWYgdGhlcmUgYXJlIG5vIHZpc2libGUgcm93cyBvciB2aXNpYmxlIGNvbHVtbnNcbiAgICAgKiAgb3Igc2VsZWN0aW9uIG1vZGUgaXMgbm9uZSwgdGhlbiBzZWxlY3Rpb24gY29sdW1uIHNob3VsZCBub3QgYmUgc2hvd24uXG4gICAgICoqL1xuICAgIGlzU2VsZWN0aW9uQ29sdW1uU2hvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duICYmXG4gICAgICAgICAgICAhIXRoaXMuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2Ygcm93cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gdmlld3BvcnQuICovXG4gICAgZ2V0Um93c0luVmlld3BvcnQoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gYXJyYXkgb2Ygcm93cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnQgaW5kZXggb2YgYWxsIHJvd3MuXG4gICAgICogQHBhcmFtIGxlbmd0aCBMZW5ndGggb2Ygdmlld3BvcnQgcm93cy5cbiAgICAgKi9cbiAgICBzZXRSb3dzSW5WaWV3cG9ydChzdGFydEluZGV4ID0gMCwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyID0gbmV3IEFycmF5KGxlbmd0aCkuZmlsbChudWxsKS5tYXAoKF8sIGkpID0+IGkgKyBzdGFydEluZGV4KTtcbiAgICAgICAgdGhpcy5fZG5kVGFibGVSb3dzUGxhY2Vob2xkZXIgPSB0aGlzLl90YWJsZVJvd3Muc2xpY2Uoc3RhcnRJbmRleCwgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCdsb2FkaW5nJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVMb2FkaW5nKHRoaXMubG9hZGluZ1N0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgndHJhY2tCeScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudHJhY2tCeSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IChpbmRleCkgPT4gdGhpcy50cmFja0J5KGluZGV4LCB0aGlzLl90YWJsZVJvd3NWaXNpYmxlW2luZGV4XS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWZhdWx0VHJhY2tCeTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoYW5nZXMgYmVsb3cgc2hvdWxkIGJlIGNoZWNrZWQgb25seSBhZnRlciB2aWV3IGlzIGluaXRpYWxpemVkXG4gICAgICAgIGlmICghdGhpcy5fdmlld0luaXRpYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdzZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAnc2VsZWN0aW9uTW9kZScgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ2ZyZWV6ZUNvbHVtbnNUbycgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ2ZyZWV6ZUVuZENvbHVtbnNUbycgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ3NlbWFudGljSGlnaGxpZ2h0aW5nJyBpbiBjaGFuZ2VzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncm93TmF2aWdhdGFibGUnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93cy5mb3JFYWNoKChyb3cpID0+IChyb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKHJvdy52YWx1ZSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSkpKTtcblxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncm93SGVpZ2h0JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dIZWlnaHRNYW51YWxseVNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2Uuc2V0VGFibGVSZWYodGhpcyk7XG5cbiAgICAgICAgdGhpcy5faXNHcm91cFRhYmxlID0gKHRoaXMuaW5pdGlhbFN0YXRlPy5pbml0aWFsR3JvdXBCeT8ubGVuZ3RoID8/IDApID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld0luaXRpYXRlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsU3RhdGU/LnNldEluaXRpYWxTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuaW5pdGlhbGl6ZURhdGFTb3VyY2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlU3RhdGVDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Db2x1bW5zKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuY29uc3RydWN0VGFibGVNZXRhZGF0YSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVSb3dzUGlwZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvUGFnZVNjcm9sbGluZygpO1xuXG4gICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/Lmxpc3Rlbk9uVmlydHVhbFNjcm9sbCgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvUm93SGVpZ2h0Q2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Db2x1bW5Qcm9wZXJ0aWVzQ2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVdpZHRoQ2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVDb250YWluZXJNb3VzZUxlYXZlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2FkaW5nQW5kUmVmb2N1c0NlbGwoKTtcblxuICAgICAgICB0aGlzLl9pbml0U2Nyb2xsUG9zaXRpb24oKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0ZpeGVkQ29sdW1uc1dpZHRoKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kT25Jbml0KSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZEFsbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsVHJhbnNmb3JtJFxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhIXRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwgJiYgISF0aGlzLl90YWJsZUJvZHkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHRyYW5zZm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZUJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3RyYW5zZm9ybX1weClgO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvY3VzYWJsZUdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWQuc2hvcnRSb3dGb2N1cyA9ICdmaXJzdCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgLy8gV2hlbiB0YWJsZSByb3dzIGFyZSBzZXQsIGVtaXQgYW4gZXZlbnQgdG8gbWFuaXB1bGF0ZSB0aGUgdmlldyAoZS5nLiwgc2Nyb2xsIHRvIHNvbWUgcm93KS5cbiAgICAgICAgaWYgKCF0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLnRhYmxlUm93c1NldDtcbiAgICAgICAgdGhpcy5fb25ab25lRnJlZSgoKSA9PiB7XG4gICAgICAgICAgICBlbWl0dGVyLmVtaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBjdXJyZW50IHN0YXRlL3NldHRpbmdzIG9mIHRoZSBUYWJsZS4gKi9cbiAgICBnZXRUYWJsZVN0YXRlKCk6IFRhYmxlU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLmdldFRhYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIHNldFRhYmxlU3RhdGUoc3RhdGU6IFRhYmxlU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlU3RhdGUoc3RhdGUpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0YWJsZSBjb2x1bW5zIGRlZmluaXRpb24gbGlzdC4gKi9cbiAgICBnZXRUYWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LnRvQXJyYXkoKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEgbGlzdCBvZiB2aXNpYmxlIHRhYmxlIGNvbHVtbnMuICovXG4gICAgZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVDb2x1bW5zIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBTZXQgU29ydGluZyBydWxlcyAqL1xuICAgIHNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIFNvcnRpbmcgcnVsZXMgdG8gdGhlIGV4aXN0aW5nIG9uZXMgKi9cbiAgICBhZGRTb3J0KHNvcnRSdWxlczogQ29sbGVjdGlvblNvcnRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkU29ydChzb3J0UnVsZXMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCBGaWx0ZXIgcnVsZXMgKi9cbiAgICBmaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0RmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEZpbHRlciBydWxlICovXG4gICAgYWRkRmlsdGVyKGZpbHRlclJ1bGVzOiBDb2xsZWN0aW9uRmlsdGVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEZpbHRlcnMoZmlsdGVyUnVsZXMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgZmlsdGVycyBmb3IgdGhlIHByb3ZpZGVkIGZpZWxkcyAqL1xuICAgIHJlbW92ZUZpbHRlcihmaWVsZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5yZW1vdmVGaWx0ZXJzKGZpZWxkcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEdyb3VwcyAqL1xuICAgIGdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBHcm91cHMgKi9cbiAgICBhZGRHcm91cChncm91cHM6IENvbGxlY3Rpb25Hcm91cFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB2aXNpYmxlIHRhYmxlIGNvbHVtbnNcbiAgICAgKiBUaGUgb3JkZXIgaXMgbWF0dGVyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgdGFibGUgY29sdW1ucyBuYW1lc1xuICAgICAqL1xuICAgIHNldENvbHVtbnMoY29sdW1uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgY29sdW1uc09iamVjdDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgICAgICAgICAgY29sdW1uczogW10sXG4gICAgICAgICAgICBrZXlzOiBbXVxuICAgICAgICB9O1xuICAgICAgICB0YWJsZUNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgc2FtZSBvcmRlciBvZiBjb2x1bW5zIGFzIHVzZXIgZGVmaW5lZC5cbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBjb2x1bW5zLmluZGV4T2YoYS5uYW1lKSAtIGNvbHVtbnMuaW5kZXhPZihiLm5hbWUpKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBhY2MuY29sdW1ucy5wdXNoKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBhY2Mua2V5cy5wdXNoKGNvbHVtbi5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBjb2x1bW5zT2JqZWN0KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldENvbHVtbnMoY29sdW1uc09iamVjdC5jb2x1bW5zLCBjb2x1bW5zT2JqZWN0LmtleXMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEZyZWV6ZSB0YWJsZSB0byBjb2x1bW4gKi9cbiAgICBmcmVlemVUb0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgZW5kID8gKHRoaXMuZnJlZXplRW5kQ29sdW1uc1RvID0gY29sdW1uTmFtZSkgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8oY29sdW1uTmFtZSwgZW5kKTtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGFzdEZyZWV6YWJsZUNvbHVtbigpO1xuICAgIH1cblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICB1bmZyZWV6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVuZCA/IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgOiB0aGlzLl9mcmVlemFibGVDb2x1bW5zO1xuICAgICAgICBjb25zdCBmcmVlemVUb0NvbHVtbkluZGV4ID0gY29sdW1ucy5nZXQoY29sdW1uTmFtZSkgPz8gLTE7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lID0gY29sdW1uc1tmcmVlemVUb0NvbHVtbkluZGV4IC0gMV07XG5cbiAgICAgICAgZW5kXG4gICAgICAgICAgICA/ICh0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKVxuICAgICAgICAgICAgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBleHBhbmQgYWxsIHJvd3MgKi9cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGVSb3dzID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiByb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLlRSRUUpO1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXJrQXNFeHBhbmRlZChleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIHRoaXMuYWxsUm93c0V4cGFuZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtBc0V4cGFuZGVkKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgcm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBjb2xsYXBzZSBhbGwgcm93cyAqL1xuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5hbGxSb3dzQ29sbGFwc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGluIHRhYmxlICovXG4gICAgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2VhcmNoKHNlYXJjaElucHV0KTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZWFyY2ggaW4gdGFibGUgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd1NvcnRTZXR0aW5nc0luVG9vbGJhcihzaG93U29ydFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd1NvcnRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0ZpbHRlclNldHRpbmdzSW5Ub29sYmFyKHNob3dGaWx0ZXJTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0ZpbHRlclNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBHcm91cCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dHcm91cFNldHRpbmdzSW5Ub29sYmFyKHNob3dHcm91cFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dHcm91cFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW5zIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0NvbHVtblNldHRpbmdzSW5Ub29sYmFyKHNob3dDb2x1bW5TZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0NvbHVtblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXIgZnJvbSBjb2x1bW4gaGVkZXIgbWVudSAqL1xuICAgIHNldEhlYWRlckNvbHVtbkZpbHRlcmluZ0Rpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNGaWx0ZXJpbmdGcm9tSGVhZGVyRGlzYWJsZWQkLm5leHQoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgc2V0Um93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyLCByb3dOYXZpZ2F0YWJsZTogc3RyaW5nIHwgYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKHJvdy52YWx1ZSwgcm93TmF2aWdhdGFibGUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSByb3cgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXggSW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKi9cbiAgICB0b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdyB8fCByb3cudmFsdWVbdGhpcy5zZWxlY3RhYmxlS2V5XSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVNdWx0aVNlbGVjdFJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hlY2tlZCBzdGF0ZSBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKi9cbiAgICBzZXRSb3dDaGVja2VkU3RhdGUocm93SW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdy5jaGVja2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgcmVtb3ZlUm93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB0cmlnZ2VycyBjb2x1bW4ncyB3aWR0aCByZWNhbGN1bGF0aW9uICovXG4gICAgcmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2Uuc2V0Q29sdW1uTmFtZXModGhpcy5fdmlzaWJsZUNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSk7XG4gICAgICAgIHRoaXMuX3NldEZyZWV6YWJsZUluZm8oKTtcbiAgICB9XG5cbiAgICAvKiogR2V0cyB0aGUgbWF4IGFsbG93ZWQgd2lkdGggZm9yIGFsbCBmcmVlemFibGUgY29sdW1ucyAqL1xuICAgIGdldE1heEFsbG93ZWRGcmVlemFibGVDb2x1bW5zV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFRoZW1lYWJsZSBzY3JvbGxiYXIgaGFzIDAuNzVyZW0gaW4gZGltZW5zaW9uICovXG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemVJblB4ID0gMTI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlV2lkdGhQeCAtIHRoaXMuX2ZpeGVkQ29sdW1uc1BhZGRpbmcgLSBzY3JvbGxiYXJTaXplSW5QeCAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0YWJsZSBkYXRhIHNvdXJjZSAqL1xuICAgIGdldERhdGFTb3VyY2UoKTogVGFibGVEYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGVtcHR5IHJvdyBmb3IgZWRpdGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIGFkZFJvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93ID0gYnVpbGROZXdSb3dTa2VsZXRvbih0aGlzLmVkaXRhYmxlUm93U2tlbGV0b24sIHRoaXMuY29sdW1ucy50b0FycmF5KCkpO1xuICAgICAgICBuZXdSb3dbdGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZ10gPSBFRElUQUJMRV9ST1dfU0VNQU5USUNfU1RBVEU7XG5cbiAgICAgICAgdGhpcy5fYWRkZWRJdGVtcy51bnNoaWZ0KG5ld1Jvdyk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93cyA9IHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKFtuZXdSb3ddKTtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gWy4uLm5ld1Jvd3MsIC4uLnRoaXMuX25ld1RhYmxlUm93c107XG5cbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuZW1wdHlSb3dBZGRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIENhbmNlbHMgZWRpdGluZyBhbmQgZGlzY2FyZHMgbmV3bHkgYWRkZWQgcm93cyAqL1xuICAgIGNhbmNlbEVkaXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzYXZlIGV2ZW50IGFuZCByZXNldHMgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBzYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2F2ZVJvd3NFdmVudDxUPigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2godGhpcy5nZXRUYWJsZVN0YXRlKCkpO1xuICAgICAgICB9LCBbLi4udGhpcy5fYWRkZWRJdGVtc10pO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGxzOiBFZGl0YWJsZVRhYmxlQ2VsbFtdID0gKFtdIGFzIEVkaXRhYmxlVGFibGVDZWxsW10pLmNvbmNhdC5hcHBseShcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl90YWJsZVJvd1NlcnZpY2UuZWRpdGFibGVDZWxscy52YWx1ZXMoKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmb3JtcyA9IFsuLi50aGlzLmN1c3RvbUVkaXRhYmxlQ2VsbHMudG9BcnJheSgpLCAuLi5lZGl0YWJsZUNlbGxzXS5tYXAoKHQpID0+IHQuZm9ybSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBmb3JtIHJldmFsaWRhdGlvblxuICAgICAgICBmb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiBmb3JtLm9uU3VibWl0KG51bGwgYXMgYW55KSk7XG4gICAgICAgIGlmIChmb3Jtcy5zb21lKChmb3JtKSA9PiBmb3JtLmludmFsaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXNldEVkaXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNhdmUuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY3VycmVudCBwcmVzZXQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBzZXRQcmVzZXQoZGF0YTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFByZXNldCA9IGRhdGE7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlOiBUYWJsZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdGFibGVTZXJ2aWNlLmdldERlZmF1bHRTdGF0ZSgpLCBkYXRhKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQobmV3U3RhdGUuc29ydEJ5KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEZpbHRlcnMobmV3U3RhdGUuZmlsdGVyQnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKG5ld1N0YXRlLmdyb3VwQnkpO1xuICAgICAgICB0aGlzLnNldENvbHVtbnMobmV3U3RhdGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZWFyY2gobmV3U3RhdGUuc2VhcmNoSW5wdXQpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8obmV3U3RhdGUuZnJlZXplVG9Db2x1bW4pO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gbmV3U3RhdGUucGFnZS5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKG5ld1N0YXRlLnBhZ2UuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbi4gKi9cbiAgICBnZXRDdXJyZW50UHJlc2V0KCk6IFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50UHJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZXR1cm4gb2JqZWN0IGFzIHNpbWlsYXIgYXMgdGhlIG9yaWdpbmFsIHByZXNldC5cbiAgICAgICAgY29uc3QgY3VycmVudFByZXNldCA9IHsgLi4udGhpcy5fY3VycmVudFByZXNldCB9O1xuICAgICAgICBjb25zdCBwcmVzZXRLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudFByZXNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRTdGF0ZSkuZm9yRWFjaCgoc3RhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFNraXAgc3RhdGUgZW50cnkgaWYgaXQncyBub3QgcHJlc2VudCBpbiBwcmVzZXQgYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWUuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhdGVLZXkgPT09ICdjb2x1bW5LZXlzJyB8fFxuICAgICAgICAgICAgICAgICgoIWN1cnJlbnRTdGF0ZVtzdGF0ZUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3N0YXRlS2V5XSkgJiYgY3VycmVudFN0YXRlW3N0YXRlS2V5XT8ubGVuZ3RoID09PSAwKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXByZXNldEtleXMuaW5jbHVkZXMoc3RhdGVLZXkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UHJlc2V0W3N0YXRlS2V5XSA9IGN1cnJlbnRTdGF0ZVtzdGF0ZUtleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50UHJlc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHRyaWdnZXJzIGxpc3QgaXRlbSBldmVudCBsaXN0ZW5lcnMgZm9yIGRyYWcmZHJvcCBsaXN0IGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICByZWZyZXNoRG5kTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kbmREaXJlY3RpdmU/LnJlZnJlc2hRdWVyeUxpc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRvZ2dsZXMgYGV4cGFuZGAgc3RhdGUgb2YgdGhlIHJvdyB3aXRoIGRlZmluZWQgaW5kZXguXG4gICAgICogQHBhcmFtIHJvd0luZGV4ZXMgcm93IGluZGV4ZXMgaW5jbHVkaW5nIG5lc3RlZCByb3dzLlxuICAgICAqXG4gICAgICogVXNhZ2UgZXhhbXBsZTpcbiAgICAgKiAqIFRvIHRvZ2dsZSBmaXJzdCBsZXZlbCByb3csIHBhc3Mgb25lIGFyZ3VtZW50OlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb3cgaWYgaXQncyB0eXBlIGlzIGBUYWJsZVJvd1R5cGUuVFJFRWAgb3IgYFRhYmxlUm93VHlwZS5HUk9VUGAuXG4gICAgICogYGBgXG4gICAgICogKiBUbyB0b2dnbGUgbmVzdGVkIHJvd3MsIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgb2YgaW5kZXhlczpcbiAgICAgKiBgYGBcbiAgICAgKiB0YWJsZS50b2dnbGVHcm91cFJvd3MoMCwgMSkgLy8gV2lsbCByZXN1bHQgaW4gdG9nZ2xpbmcgZmlyc3Qgcm9vdCByb3csIHRoZW4gaXQncyBzZWNvbmQgY2hpbGQuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9nZ2xlR3JvdXBSb3dzKC4uLnJvd0luZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGxldCB0YWJsZVJvdzogVGFibGVSb3cgfCBudWxsID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCByb3dJbmRleCBvZiByb3dJbmRleGVzKSB7XG4gICAgICAgICAgICB0YWJsZVJvdyA9IHRhYmxlUm93ID8gdGFibGVSb3cuY2hpbGRyZW5bcm93SW5kZXhdIDogdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICAgICAgaWYgKHRhYmxlUm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHRhYmxlUm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZm9jdXMgYSBjZWxsIGluIHRoZSB0YWJsZSB1dGlsaXppbmcgYSBGb2N1c2FibGVDZWxsUG9zaXRpb24gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZvY3VzQ2VsbChwb3NpdGlvbjogRm9jdXNhYmxlQ2VsbFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlRWwgPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgdGFibGVFbC5yb3dzW3Bvc2l0aW9uLnJvd0luZGV4XS5jZWxsc1twb3NpdGlvbi5jb2xJbmRleF0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGFycmF5IG9mIHRhYmxlIHJvd3MuIFRyaWdnZXJlZCB3aGVuIG5ldyBkYXRhIHNvdXJjZSBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGNsZWFyVGFibGVSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IFtdO1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXIgPSBbXTtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKFtdKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGUgQVBJXG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zY3JvbGxUb092ZXJsYXBwZWRDZWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsYWJsZS5zY3JvbGxUb092ZXJsYXBwZWRDZWxsKFxuICAgICAgICAgICAgdGhpcy5fcnRsLFxuICAgICAgICAgICAgdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplLFxuICAgICAgICAgICAgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2FsY3VsYXRpbmdMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZG5kTG9hZGluZ1N0YXRlID09PSBpc0xvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RuZExvYWRpbmdTdGF0ZSA9IGlzTG9hZGluZztcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlTG9hZGluZyh0aGlzLmxvYWRpbmdTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZ2dsZSBzZWxlY3RhYmxlIHJvdyBpbiBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFXG4gICAgICovXG4gICAgX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvd1RvVG9nZ2xlOiBUYWJsZVJvdywgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2VsZWN0aW9uIG1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja2VkID0gKHJvd1RvVG9nZ2xlLmNoZWNrZWQgPSAhcm93VG9Ub2dnbGUuY2hlY2tlZCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLl90YWJsZVJvd3M7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLl90YWJsZVJvd3MuZmluZEluZGV4KChyb3cpID0+IHJvdyA9PT0gcm93VG9Ub2dnbGUpO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5vblJhbmdlRWxlbWVudFRvZ2dsZWQoc2VsZWN0ZWRJbmRleCwgZXZlbnQgYXMgUG9pbnRlckV2ZW50IHwgS2V5Ym9hcmRFdmVudCk7XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5hcHBseVZhbHVlVG9FYWNoSW5SYW5nZSgoaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSByb3dzW2lkeF07XG4gICAgICAgICAgICBpZiAocm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNIHx8IHJvdy5pc1RyZWUpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgY2hlY2tlZCA/IGFkZGVkLnB1c2gocm93KSA6IHJlbW92ZWQucHVzaChyb3cpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlUcmlzdGF0ZVNlbGVjdGlvbihyb3csIGFkZGVkLCByZW1vdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkLCByZW1vdmVkKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvZ2dsZSBzZWxlY3RhYmxlIHJvdyBpbiBTZWxlY3Rpb25Nb2RlLlNJTkdMRVxuICAgICAqL1xuICAgIF90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KHJvd1RvVG9nZ2xlOiBUYWJsZVJvdyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLlNJTkdMRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNlbGVjdGlvbiBtb2RlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGVja2VkID0gKHJvd1RvVG9nZ2xlLmNoZWNrZWQgPSAhcm93VG9Ub2dnbGUuY2hlY2tlZCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICAgICAgICAvLyB1bmNoZWNrIHByZXZpb3VzbHkgY2hlY2tlZFxuICAgICAgICBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAocm93ID09PSByb3dUb1RvZ2dsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJvdy5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNoZWNrZWQgPyBhZGRlZC5wdXNoKHJvd1RvVG9nZ2xlKSA6IHJlbW92ZWQucHVzaChyb3dUb1RvZ2dsZSk7XG5cbiAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkLCByZW1vdmVkKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNlbGVjdCAvIFVuc2VsZWN0IGFsbCBzZWxlY3RhYmxlIHJvd3NcbiAgICAgKi9cbiAgICBfdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3Moc2VsZWN0QWxsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgY29uc3QgYWRkZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICAgICAgICBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAocm93LmNoZWNrZWQgPT09IHNlbGVjdEFsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvdy5jaGVja2VkID0gc2VsZWN0QWxsO1xuICAgICAgICAgICAgc2VsZWN0QWxsID8gYWRkZWQucHVzaChyb3cpIDogcmVtb3ZlZC5wdXNoKHJvdyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcblxuICAgICAgICB0aGlzLl9zaG91bGRDaGVja05ld1Jvd3MgPSBzZWxlY3RBbGw7XG5cbiAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkLCByZW1vdmVkLCB0cnVlKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENyZWF0ZSB0YWJsZSByb3cgc2VsZWN0aW9uIGV2ZW50XG4gICAgICovXG4gICAgX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZDogVGFibGVSb3dbXSwgcmVtb3ZlZDogVGFibGVSb3dbXSwgYWxsOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgY2hlY2tlZCB9KSA9PiBjaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHNlbGVjdGVkLFxuICAgICAgICAgICAgYWRkZWQ6IGFkZGVkLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgICAgICByZW1vdmVkOiByZW1vdmVkLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgICAgICBpbmRleDogYWRkZWQuY29uY2F0KHJlbW92ZWQpLm1hcCgoeyBpbmRleCB9KSA9PiBpbmRleCksXG4gICAgICAgICAgICBhbGxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DZWxsQ2xpY2soY29sSWR4OiBudW1iZXIsIHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdy5zdGF0ZSA9PT0gJ3JlYWRvbmx5JyAmJiBpc1RyZWVSb3dGaXJzdENlbGwoY29sSWR4LCByb3cpKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVHcm91cFJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Sb3dDbGljayhyb3c6IFRhYmxlUm93PFQ+IHwgbnVsbCwgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LnN0YXRlICE9PSAncmVhZG9ubHknKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50ICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdGFiYmFibGVFbGVtZW50ID0gdGhpcy5fdGFiYmFibGVTZXJ2aWNlLmdldFRhYmJhYmxlRWxlbWVudChldmVudFRhcmdldCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgaWYgKHRhYmJhYmxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgdGFiYmFibGVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd05hdmlnYXRlKHJvdyk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93QWN0aXZhdGUocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dBY3RpdmF0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yb3dzQWN0aXZhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKHJvdyk7XG4gICAgICAgIHRoaXMucm93QWN0aXZhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRXhwYW5kL0NvbGxhcHNlIGdyb3VwIHJvd1xuICAgICAqL1xuICAgIF90b2dnbGVHcm91cFJvdyhncm91cFJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnRHJvcEluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KGdyb3VwUm93KTtcblxuICAgICAgICBjb25zdCBncm91cFJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2YoZ3JvdXBSb3cpO1xuICAgICAgICB0aGlzLnJvd1RvZ2dsZU9wZW5TdGF0ZS5lbWl0KFxuICAgICAgICAgICAgbmV3IFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQoZ3JvdXBSb3dJbmRleCwgZ3JvdXBSb3cudmFsdWUsIGdyb3VwUm93LmV4cGFuZGVkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtaXRSb3dOYXZpZ2F0ZShyb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghcm93Lm5hdmlnYXRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodE5hdmlnYXRlZFJvdykge1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVkUm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93TmF2aWdhdGUuZW1pdChuZXcgVGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+KHJvd0luZGV4LCByb3cudmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKiogRmV0Y2ggZGF0YSBzb3VyY2UgZGF0YS4gKi9cbiAgICBmZXRjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uVGFibGVSb3dzQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZVRhYmxlUm93cygpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVDaGVja2VkQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2dnbGVFeHBhbmRhYmxlVGFibGVSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93LCBmb3JjZUZldGNoID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgcm93VG9Ub2dnbGUuZm9yY2VGZXRjaCA9IGZvcmNlRmV0Y2g7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gKHJvd1RvVG9nZ2xlLmV4cGFuZGVkID0gIXJvd1RvVG9nZ2xlLmV4cGFuZGVkKTtcblxuICAgICAgICBmaW5kUm93Q2hpbGRyZW4ocm93VG9Ub2dnbGUsIHRoaXMuX3RhYmxlUm93cykuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAvLyBpZiBwYXJlbnQgaXMgY29sbGFwc2VkIHdlIHdhbnQgdG8gaGlkZSBhbGwgbmVzdGVkIGl0ZW1zXG4gICAgICAgICAgICBpZiAoIWV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBleHBhbmRlZCwgd2Ugd2FudCB0byBzaG93IG9ubHkgaXRlbXMgd2hpY2ggZGlyZWN0IHBhcmVudHMgYXJlIGV4cGFuZGVkIGFzIHdlbGxcbiAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhZ2V0Um93UGFyZW50cyhyb3csIHJvd1RvVG9nZ2xlKS5ldmVyeSgocGFyZW50KSA9PiBwYXJlbnQuZXhwYW5kZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uU3B5SW50ZXJzZWN0KGludGVyc2VjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghaW50ZXJzZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYWdlOiB7IGN1cnJlbnRQYWdlLCBwYWdlU2l6ZSB9XG4gICAgICAgIH0gPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgdG90YWxJdGVtcyA9IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyAocGFnZVNpemUgfHwgdG90YWxJdGVtcykpO1xuICAgICAgICBpZiAoY3VycmVudFBhZ2UgPj0gbGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UoY3VycmVudFBhZ2UgKyAxKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIE1hbnVhbGx5IHVwZGF0ZSBpbmRleCBhZnRlciB3ZSBhZGQgbmV3IGl0ZW1zIHRvIHRoZSBtYWluIGFycmF5ICovXG4gICAgcHJpdmF0ZSBfcmVJbmRleFRhYmxlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKHJvdy5pbmRleCA9IGluZGV4KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93c1BpcGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pdGVtcyRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFwIHNvdXJjZSBpdGVtcyB0byB0YWJsZSByb3dzXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoc291cmNlOiBUW10pID0+IHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZSkpLFxuICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgaXRlbXMgdG8gc2hvdyBncm91cHNcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChyb3dzOiBUYWJsZVJvd1tdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RyZWVUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb2Yocm93cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX3RhYmxlU2VydmljZS5ncm91cFJ1bGVzJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoZ3JvdXBSdWxlcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmdyb3VwVGFibGVSb3dzKHJvd3MsIGdyb3VwUnVsZXMudmFsdWVzKCksIGdyb3VwUnVsZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcm93cyA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTY3JvbGxpbmcgJiYgdGhpcy5nZXRUYWJsZVN0YXRlKCkucGFnZS5jdXJyZW50UGFnZSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFsuLi50aGlzLl90YWJsZVJvd3MsIC4uLnJvd3NdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByb3dzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3Mocm93cyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmNoaWxkSXRlbXMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd01hcCA9IG5ldyBNYXA8VGFibGVSb3c8VD4sIFRhYmxlUm93PFQ+W10+KCk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd0l0ZW1zLCBwYXJlbnRSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd01hcC5zZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Um93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHJvd0l0ZW1zKS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cucGFyZW50ID0gcGFyZW50Um93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubGV2ZWwgPSBwYXJlbnRSb3cubGV2ZWwgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gIXBhcmVudFJvdy5leHBhbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvd01hcDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKChyb3dzLCBwYXJlbnRSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLnNwbGljZShwYXJlbnRSb3cuaW5kZXggKyBwYXJlbnRSb3cuY2hpbGRyZW4ubGVuZ3RoICsgMSwgMCwgLi4ucm93cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Um93LmNoaWxkcmVuLnB1c2goLi4ucm93cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Um93Lmxhc3RDaGlsZCA9IHBhcmVudFJvdy5jaGlsZHJlbltwYXJlbnRSb3cuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlU3RhdGVDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZVN0YXRlQ2hhbmdlcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNldENoYW5nZWQuZW1pdCh0aGlzLmdldEN1cnJlbnRQcmVzZXQoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5uZWVkRmV0Y2gkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChzdGF0ZSkgPT4gISFzdGF0ZSAmJiAhIXRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmdyb3VwUnVsZXMkLnN1YnNjcmliZSgocnVsZXMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0dyb3VwVGFibGUgPSBydWxlcy5zaXplID4gMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoeyB0eXBlLCBzdGF0ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KG5ldyBUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbHRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KG5ldyBUYWJsZUZpbHRlckNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnJlZXplJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GcmVlemUuZW1pdChuZXcgVGFibGVDb2x1bW5GcmVlemVFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlLmVtaXQobmV3IFRhYmxlR3JvdXBDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQobmV3IFRhYmxlUGFnZUNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXcgVGFibGVTb3J0Q2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzJC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3dDaGlsZHJlbkNvdW50KHJvdywgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiByb3cuZm9yY2VGZXRjaCB8fCBjb3VudCA+IHJvdy5jaGlsZHJlbi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocm93LmZvcmNlRmV0Y2ggPSBmYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHJvdy5jaGlsZHJlbi5sZW5ndGggLyBzdGF0ZS5wYWdlLnBhZ2VTaXplKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2UucGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmZldGNoKHJvd1N0YXRlLCBbcm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DZWxsQ2xpY2soZXZ0LmluZGV4LCBldnQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MoZXZ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93JC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZU11bHRpU2VsZWN0Um93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KGV2dC5yb3csIGV2dC5ldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGxldCByb3dzOiBUYWJsZVJvdzxUPltdO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkge1xuICAgICAgICAgICAgcm93cyA9IHRoaXMuX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93cyA9IGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyAmJiB0aGlzLmZvcmNlQ2hlY2tlZEFsbFN0YXRlKSB7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gcm93LmNoZWNrZWQgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGlzVGFibGVSb3coaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdChzb3VyY2UgYXMgVGFibGVSb3dbXSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU3RhdGVLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZSxcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRyaXN0YXRlTW9kZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUYWJsZVJvd3Mocm93cyA9IHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFsuLi50aGlzLl9uZXdUYWJsZVJvd3MsIC4uLnRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3NdO1xuICAgICAgICB0aGlzLl9yZUluZGV4VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcblxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICYmICF0aGlzLl9jb2x1bW5zV2lkdGhTZXQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zV2lkdGhTZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZpc2libGVUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93c1Zpc2libGUgPSB0aGlzLl90YWJsZVJvd3MuZmlsdGVyKChyb3cpID0+ICFyb3cuaGlkZGVuKTtcblxuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dzSW5WaWV3cG9ydCgwLCB0aGlzLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUm93SGVpZ2h0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuY29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiBBcnJheS5mcm9tKFJPV19IRUlHSFQudmFsdWVzKCkpLmluY2x1ZGVzKHRoaXMucm93SGVpZ2h0KSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5fcm93SGVpZ2h0TWFudWFsbHlTZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnREZW5zaXR5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gUk9XX0hFSUdIVC5nZXQoY29udGVudERlbnNpdHkpID8/IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLnJvd0hlaWdodCA9IHRoaXMucm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgJiYgIXByZXZDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDb2x1bW5zID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkuY29sdW1ucztcblxuICAgICAgICAgICAgdGhpcy5fYnVpbGRDb2x1bW5zTWFwKGNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQubmV4dChjb2x1bW5zKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxTdGF0ZVNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29sdW1ucyhbLi4uc3RhdGVDb2x1bW5zLCAuLi5uZXdDb2x1bW5zXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTdGF0ZVNldCA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgICAgICAgICAgaWYgKCFlcXVhbCh1cGRhdGVkQ29sdW1ucywgY3VycmVudENvbHVtbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnN0YXRlQ2hhbmdlJC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogeyBwcmV2aW91czogY3VycmVudENvbHVtbnMsIGN1cnJlbnQ6IHVwZGF0ZWRDb2x1bW5zIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuY29sdW1uc0NoYW5nZSQubmV4dCh7IHByZXZpb3VzOiBjdXJyZW50Q29sdW1ucywgY3VycmVudDogdXBkYXRlZENvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgdmlzaWJsZSBjb2x1bW5zIGZvciByZW5kZXJpbmcgcHVycG9zZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uc0RlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIGdyb3VwQnkgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBncm91cGVkQ29sdW1uc1RvSGlkZSA9IGdyb3VwQnkuZmlsdGVyKCh7IHNob3dBc0NvbHVtbiB9KSA9PiAhc2hvd0FzQ29sdW1uKS5tYXAoKHsgZmllbGQgfSkgPT4gZmllbGQpO1xuXG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBjb2x1bW5zIC8vIG5lZWQgdG8gc3RhcnQgbWFwcGluZyBmcm9tIHN0YXRlLmNvbHVtbnMgbGlzdCB0byBrZWVwIHJpZ2h0IG9yZGVyXG4gICAgICAgICAgICAubWFwKChuYW1lKSA9PiBjb2x1bW5zRGVmaW5pdGlvbi5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbik6IGNvbHVtbiBpcyBUYWJsZUNvbHVtbiA9PiAhIWNvbHVtbilcbiAgICAgICAgICAgIC5maWx0ZXIoKHsga2V5IH0pID0+ICFncm91cGVkQ29sdW1uc1RvSGlkZS5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgICBjb25zdCBbdmlzaWJsZUNvbHVtbnMsIHBvcHBpbmdDb2x1bW5zXSA9IGFsbENvbHVtbnMucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5yZXNwb25zaXZlU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY1tjb2x1bW4ucmVzcG9uc2l2ZVN0YXRlID09PSAndmlzaWJsZScgPyAwIDogMV0ucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1tdLCBbXV0gYXMgVGFibGVDb2x1bW5bXVtdXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFZpc2libGVDb2x1bW5zKHZpc2libGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFBvcHBpbmdDb2x1bW5zKHBvcHBpbmdDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRhYmxlQ29sdW1uc0xlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVGFibGVDb2x1bW5zTGVuZ3RoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtbnNMZW5ndGggPSB0aGlzLl92aXNpYmxlQ29sdW1ucy5sZW5ndGggKyAodGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA/IDEgOiAwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX2lzU2hvd25OYXZpZ2F0aW9uQ29sdW1uJC5uZXh0KHRoaXMuX3RhYmxlUm93cy5zb21lKCh0YWJsZVJvdykgPT4gdGFibGVSb3cubmF2aWdhdGFibGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZyZWV6YWJsZUluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMgPSBnZXRGcmVlemFibGVDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUNvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgPSBnZXRGcmVlemFibGVFbmRDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuZml4ZWQgPSAhIXRoaXMuZml4ZWQgfHwgISF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgISF0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemU7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5fZnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbHVtbi5fZW5kRnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9idWlsZENvbHVtbnNNYXAoY29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleVRvQ29sdW1uTWFwID0gbmV3IE1hcChjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBbY29sdW1uLmtleSwgY29sdW1uXSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2hlY2tlZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZVJvd3MgPSBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSk7XG4gICAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBzZWxlY3RhYmxlUm93cy5maWx0ZXIoKHIpID0+IHIuY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSB0b3RhbFNlbGVjdGVkLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVJvd3MubGVuZ3RoICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFueSA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZFN0YXRlID0gdGhpcy5fY2hlY2tlZEFsbCA/IHRydWUgOiB0aGlzLl9jaGVja2VkQW55ID8gbnVsbCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BhZ2F0ZXMgdHJpc3RhdGUgc2VsZWN0aW9uIG1vZGUgdG8gdGhlIHRyZWUuIEl0IHN0YXJ0cyB3aXRoIHVwZGF0aW5nIGEgc3RhdGUgZm9yIGFsbCB0aGUgcGFyZW50cyBhbmQgdGhlblxuICAgICAqIHRvIGNoaWxkcmVuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYXBwbHlUcmlzdGF0ZVNlbGVjdGlvbihyb3c6IFRhYmxlUm93LCBhZGRlZFJvd3M6IFRhYmxlUm93PFQ+W10sIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVUcmlzdGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvUGFyZW50cyhyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSByb3cucGFyZW50O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihjdXJyZW50Um93LCB0aGlzLl90YWJsZVJvd3MpLmZpbHRlcigocikgPT4gci5wYXJlbnQgPT09IGN1cnJlbnRSb3cpO1xuICAgICAgICAgICAgY29uc3QgdG90YWxDaGVja2VkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgICAgICBjb25zdCB0b3RhbEluZGV0ZXJtaW5hdGU6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoci5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hlY2tlZC5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoci5jaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSW5kZXRlcm1pbmF0ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFsbCA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPT09IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRBbnkgPSB0b3RhbENoZWNrZWQubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkID0gY2hlY2tlZEFsbCA/IHRydWUgOiBjaGVja2VkQW55IHx8IHRvdGFsSW5kZXRlcm1pbmF0ZS5sZW5ndGggPiAwID8gbnVsbCA6IGZhbHNlO1xuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkIHx8IGN1cnJlbnRSb3cuY2hlY2tlZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gYWRkZWRSb3dzLnB1c2goY3VycmVudFJvdylcbiAgICAgICAgICAgICAgICA6IHJlbW92ZWRSb3dzLnB1c2goY3VycmVudFJvdyk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRSb3cgPSBjdXJyZW50Um93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHRoaXMuX3RhYmxlUm93cywgcm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUGFnZVNjcm9sbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuc2Nyb2xsZWQoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLnBhZ2VTY3JvbGxpbmcpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5nZXRTY3JvbGxUb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsZWQuZW1pdChzY3JvbGxUb3ApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgaGF2aW5nIHR3byBwbGFjZXMgdG8gcmVjb3JkIHRoaXMgcG9zc2l0aW9uLCB3ZSBjb3VsZCBqdXN0IHN1YnNjcmliZSBvbmNlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlU3RhdGUoKS5zY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Db2x1bW5Qcm9wZXJ0aWVzQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5tYXJrRm9yQ2hlY2skLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5kZXRlY3RDaGFuZ2VzJC5waXBlKGRlYm91bmNlVGltZSg1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fdGFibGVDb250YWluZXJTY3JvbGxXaWR0aCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnVwZGF0ZUZyb3plbkNvbHVtbnNXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZVNjcm9sbFdpZHRoID0gdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlQ29udGFpbmVyTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5oaWRlUmVzaXplcigpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2Nyb2xsUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbiB8fCB0aGlzLl90YWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuaW5pdGlhbGl6ZVNjcm9sbFRvcChzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlc2V0cyBlZGl0YWJsZSByb3dzIGRpc2NhcmRpbmcgdGhlIGVkaXRhYmxlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVzZXRFZGl0U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJC5waXBlKGZpbHRlcigobG9hZGluZ1N0YXRlKSA9PiAhbG9hZGluZ1N0YXRlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uICYmIHRoaXMuX2ZvY3VzYWJsZUdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWQuZm9jdXNDZWxsKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29uWm9uZUZyZWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZyQubmV4dCh0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoJC5uZXh0KHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoID0gdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93blxuICAgICAgICAgICAgPyBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILmdldCh0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIudmFsdWUpID8/IDBcbiAgICAgICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrQ2VsbE1vY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5jZWxsTW9ja1Zpc2libGUkLm5leHQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZml4ZWRXaWR0aCAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKSA+ICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKVxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyB0byBmaXhlZCBjb2x1bW4gd2lkdGggc3ViamVjdCBhbmQgY2FsY3VsYXRlcyBsYXN0IGFwcGxpY2FibGUgZnJvemVuIGNvbHVtbiBiYXNlZCBvbiBgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoYCB2YXVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmZpeGVkQ29sdW1zV2lkdGhDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NhbGN1bGF0ZUxhc3RGcmVlemFibGVDb2x1bW4oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVMYXN0RnJlZXphYmxlQ29sdW1uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGFibGVTY3JvbGxhYmxlIHx8IHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZml4ZWRDb2x1bXNXaWR0aENoYW5nZS52YWx1ZTtcbiAgICAgICAgY29uc3QgYWxsRnJvemVuQ29sdW1ucyA9IHVuaXEoW1xuICAgICAgICAgICAgLi4udGhpcy5fZnJlZXphYmxlQ29sdW1ucy5rZXlzKCksXG4gICAgICAgICAgICB0aGlzLmZyZWV6ZUNvbHVtbnNUbyxcbiAgICAgICAgICAgIC4uLnRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMua2V5cygpXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBjb2x1bW5TaXplID0ge1xuICAgICAgICAgICAgZnJvemVuOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgICAgICAgICAgdW5Gcm96ZW46IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KClcbiAgICAgICAgfTtcbiAgICAgICAgYWxsQ29sdW1ucy5mb3JFYWNoKChzaXplLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtblNpemVbYWxsRnJvemVuQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pID8gJ2Zyb3plbicgOiAndW5Gcm96ZW4nXS5zZXQoY29sdW1uLCBwYXJzZUludChzaXplLCAxMCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmcm96ZW5Db2x1bW5TaXplcyA9IFsuLi5jb2x1bW5TaXplLmZyb3plbi52YWx1ZXMoKV07XG5cbiAgICAgICAgaWYgKGZyb3plbkNvbHVtblNpemVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbEZyb3plblNpemUgPSBbLi4uY29sdW1uU2l6ZS5mcm96ZW4udmFsdWVzKCldLnJlZHVjZSgoc3VtLCBzaXplKSA9PiBzdW0gKyBzaXplKTtcblxuICAgICAgICBsZXQgZGlmZiA9IHRoaXMudGFibGVTY3JvbGxhYmxlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHRvdGFsRnJvemVuU2l6ZTtcbiAgICAgICAgY29uc3QgZnJlZXplZENvbHVtbnMgPSBbLi4udGhpcy5fZnJlZXphYmxlQ29sdW1ucy5rZXlzKCldO1xuXG4gICAgICAgIGlmIChkaWZmID49IHRoaXMubm9uRnJvemVuQ29sdW1uc01pbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0Q29sdW1uOiBzdHJpbmc7XG5cbiAgICAgICAgd2hpbGUgKGRpZmYgPCB0aGlzLm5vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCkge1xuICAgICAgICAgICAgaWYgKGZyZWV6ZWRDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0Q29sdW1uID0gZnJlZXplZENvbHVtbnMucG9wKCkhO1xuICAgICAgICAgICAgZGlmZiArPSBjb2x1bW5TaXplLmZyb3plbi5nZXQobGFzdENvbHVtbikhO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5mcmVlemVUb0NvbHVtbihmcmVlemVkQ29sdW1uc1tmcmVlemVkQ29sdW1ucy5sZW5ndGggLSAxXSk7XG4gICAgfVxufVxuIiwiPCEtLSBUb29sYmFyIC0tPlxuPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwidGFibGVUb29sYmFyXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVRvb2xiYXIuY29udGVudFRlbXBsYXRlUmVmXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiX3Rvb2xiYXJDb250ZXh0XCJcbj48L25nLWNvbnRhaW5lcj5cblxuPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgW2xvYWRpbmddPVwiKF90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSAmJiBfZGF0YVNvdXJjZURpcmVjdGl2ZS5fZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgW2Jsb2NrXT1cInRydWVcIlxuPlxuICAgIDwhLS0gVGFibGUgQ29udGFpbmVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdGFibGVfX2NvbnRhaW5lclwiICN0YWJsZUNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBjb2x1bW4gcmVzaXplciBmb3IgdmlzdWFsbHkgcmVwcmVzZW50aW5nIHRoZSByZXNpemluZyBwcm9jZXNzIC0tPlxuICAgICAgICA8ZmRwLXRhYmxlLWNvbHVtbi1yZXNpemVyICpuZ0lmPVwiZW5hYmxlRHJhZ1Jlc2l6ZVwiIGNsYXNzPVwiZmRwLXRhYmxlX19jb2x1bW4tcmVzaXplclwiPjwvZmRwLXRhYmxlLWNvbHVtbi1yZXNpemVyPlxuICAgIDwvZGl2PlxuPC9mZC1idXN5LWluZGljYXRvcj5cblxuPCEtLSBUYWJsZSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19ib2R5IGZkLXNjcm9sbGJhclwiXG4gICAgICAgIFtjbGFzcy5mZHAtdGFibGVfX2JvZHktLXZpcnR1YWwtc2Nyb2xsXT1cIiEhX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxcIlxuICAgICAgICBmZHBUYWJsZVNjcm9sbGFibGVcbiAgICAgICAgI3RhYmxlU2Nyb2xsYWJsZT1cInRhYmxlU2Nyb2xsYWJsZVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keUhlaWdodFwiXG4gICAgICAgIFtjbGFzcy5maXhlZC1oZWlnaHRdPVwiISFib2R5SGVpZ2h0XCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJwYWdlU2Nyb2xsaW5nID8gJ2ZlZWQnIDogbnVsbFwiXG4gICAgICAgIFtjbGFzcy5mZC10YWJsZS0tZml4ZWRdPVwiX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCBmaXhlZFwiXG4gICAgPlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICAgIGZkLXRhYmxlXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cImlzVHJlZVRhYmxlID8gJ3RyZWVncmlkJyA6ICdncmlkJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fYm9keS10YWJsZVwiXG4gICAgICAgICAgICBbYWxsQ2VsbHNGb2N1c2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wSW5dPVwiX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlLS1uby1vdXRlci1ib3JkZXJdPVwibm9PdXRlckJvcmRlcnNcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0aGVhZCBmZC10YWJsZS1oZWFkZXIgY2xhc3M9XCJmZHAtdGFibGVfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtaGVhZGVyLXJvd1xuICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBbZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbaXNTaG93blNlbGVjdGlvbkNvbHVtbl09XCJpc1NlbGVjdGlvbkNvbHVtblNob3duKClcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZFN0YXRlXT1cIl9jaGVja2VkU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db2x1bW5XaWR0aF09XCJfc2VsZWN0aW9uQ29sdW1uV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBbZnJlZXplQ29sdW1uc1RvXT1cImZyZWV6ZUNvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgKGZka0NsaWNrZWQpPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlU2VsZWN0aW9uQ2hlY2tib3hdPVwiX2RhdGFTb3VyY2VUYWJsZVJvd3MubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICEhdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgZW1wdHlUYWJsZVRlbXBsYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBmZC10YWJsZS1ib2R5XG4gICAgICAgICAgICAgICAgZmRrRG5kTGlzdFxuICAgICAgICAgICAgICAgICN0YWJsZUJvZHlcbiAgICAgICAgICAgICAgICBbZHJhZ292ZXJQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnb3ZlclByZWRpY2F0ZVwiXG4gICAgICAgICAgICAgICAgW2Ryb3BQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICBbbm9Cb3JkZXJYXT1cIm5vQm9yZGVyWCB8fCBub0JvcmRlcnNcIlxuICAgICAgICAgICAgICAgIFtub0JvcmRlclldPVwibm9Cb3JkZXJZIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cInBhZ2VTY3JvbGxpbmcgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJfZG5kVGFibGVSb3dzUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIFtkcm9wTW9kZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BNb2RlID8/ICdncm91cCdcIlxuICAgICAgICAgICAgICAgIChpdGVtRHJvcHBlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wSXRlbURyb3AoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyb3BQcmVkaWNhdGVDYWxjdWxhdGluZyk9XCJfY2FsY3VsYXRpbmdMb2FkaW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkcm9wQ2FuY2VsbGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcENhbmNlbGxlZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dJbmRleCBvZiBfdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyOyB0cmFja0J5OiBfcm93VHJhY2tCeVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RhYmxlUm93c1Zpc2libGVbcm93SW5kZXhdIGFzIHJvd1wiIFtuZ1N3aXRjaF09XCJyb3cudHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1ncm91cC1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5VG9Db2x1bW5NYXBdPVwiX2tleVRvQ29sdW1uTWFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDb2x1bW5zTGVuZ3RoXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2dnbGVHcm91cFJvdyk9XCJfdG9nZ2xlR3JvdXBSb3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9lbWl0Um93QWN0aXZhdGUocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtEbmRJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGx5RHJhZ0l0ZW1DbGFzc109XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdyB8IHJvd0NsYXNzZXMgOiByb3dzQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9jdXNhYmxlXT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtob3ZlcmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCBpc1NlbGVjdGlvbkNvbHVtblNob3duKCkgfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJyb3dJbmRleCA9PT0gX25hdmlnYXRlZFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0QWN0aXZlXT1cImhpZ2hsaWdodE5hdmlnYXRlZFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiaXNUcmVlVGFibGUgPyByb3cubGV2ZWwgKyAxIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZka0NsaWNrZWQpPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnRlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21haW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlX19yb3ctLWRyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1RyZWVSb3ddPVwicm93LmlzVHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVLZXldPVwic2VsZWN0YWJsZUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVRyaXN0YXRlTW9kZV09XCJlbmFibGVUcmlzdGF0ZU1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy50eXBlID09PSAnaXRlbScgJiYgX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1wb3BwaW5nLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3NlcyA6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrZWQpPVwiX29uQ2VsbENsaWNrKCRldmVudC5pbmRleCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAocm93LmNoaWxkSXRlbXNMb2FkaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhc3QgcmVuZGVyZWQgY2hpbGQgcm93LiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cucGFyZW50Py5sYXN0Q2hpbGQ/LmluZGV4ID09PSByb3cuaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHJvdy5wYXJlbnQhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZCAqIC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX29uU3B5SW50ZXJzZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuXG4gICAgICAgICAgICA8dGJvZHkgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCIgY2xhc3M9XCJmZC10YWJsZV9fYm9keV9fZm9jdXMtbW9ja1wiPjwvdGJvZHk+XG5cbiAgICAgICAgICAgIDwhLS0gdGhlIHRib2R5IGVsZW1lbnQgYmVsb3cgaXMgc28gdGhlIHNjcm9sbGJhciByZW5kZXJzIGNvcnJlY3RseSAtLT5cbiAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMCVcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHRcIj48L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFbXB0eSBUYWJsZSBNZXNzYWdlIC0tPlxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVGVtcGxhdGU+XG4gICAgPHRib2R5ICpuZ0lmPVwiIV9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keT5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiIHR5cGU9XCJ0ZXh0XCIgdGV4dExpbmVzPVwiMVwiIHdpZHRoPVwiNjAlXCI+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cblxuICAgIDx0Ym9keSAqbmdJZj1cIl9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keSBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHlcIj5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdz5cbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwiZmQtdGFibGVfX2NlbGwtLW5vLWRhdGFcIiBbYXR0ci5jb2xzcGFuXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eS10YWJsZS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNub0RhdGFXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkcC10YWJsZS1uby1kYXRhLXdyYXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbm9EYXRhV3JhcHBlci5oYXNDaGlsZE5vZGVzKCkgJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eVRhYmxlTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUuZGVmYXVsdEVtcHR5TWVzc2FnZScgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub1Zpc2libGVDb2x1bW5zTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUubm9WaXNpYmxlQ29sdW1uc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
1756
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBSU4sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUU1QixzQkFBc0IsRUFDdEIsT0FBTyxFQUVQLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLElBQUksZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUYsT0FBTyxFQUNILHdCQUF3QixFQUN4QixtQkFBbUIsRUFJbkIseUJBQXlCLEVBQ3pCLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBQ3hC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QUFXLEVBQUUsSUFBSSxFQUFFO2dCQUloRCxZQUFZO3NCQURwQixZQUFZO3VCQUFDLGFBQWE7Z0JBcUgzQixhQUFhO3NCQURaLFdBQVc7dUJBQUMsdUJBQXVCO2dCQTJDNUIsT0FBTztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUcmFja0J5RnVuY3Rpb24sXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICAgIERuZExpc3REaXJlY3RpdmUsXG4gICAgRkRLX0ZPQ1VTQUJMRV9HUklEX0RJUkVDVElWRSxcbiAgICBGb2N1c2FibGVDZWxsUG9zaXRpb24sXG4gICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZSxcbiAgICBLZXlVdGlsLFxuICAgIE51bGxhYmxlLFxuICAgIFJhbmdlU2VsZWN0b3IsXG4gICAgcmVzaXplT2JzZXJ2YWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIFRhYmJhYmxlRWxlbWVudFNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgVGFibGVDb21wb25lbnQgYXMgRmRUYWJsZUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90YWJsZSc7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIGlzSnNPYmplY3QgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbixcbiAgICBidWlsZE5ld1Jvd1NrZWxldG9uLFxuICAgIENvbGxlY3Rpb25GaWx0ZXIsXG4gICAgQ29sbGVjdGlvbkdyb3VwLFxuICAgIENvbGxlY3Rpb25Tb3J0LFxuICAgIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QsXG4gICAgREVGQVVMVF9ISUdITElHSFRJTkdfS0VZLFxuICAgIEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURSxcbiAgICBFZGl0YWJsZVRhYmxlQ2VsbCxcbiAgICBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSxcbiAgICBGRFBfVEFCTEVfU1RBVEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsXG4gICAgZmluZFJvd0NoaWxkcmVuLFxuICAgIGdldEZyZWV6YWJsZUNvbHVtbnMsXG4gICAgZ2V0RnJlZXphYmxlRW5kQ29sdW1ucyxcbiAgICBnZXRSb3dQYXJlbnRzLFxuICAgIGdldFNlbGVjdGFibGVSb3dzLFxuICAgIGlzUm93TmF2aWdhdGFibGUsXG4gICAgaXNUYWJsZVJvdyxcbiAgICBpc1RyZWVSb3dGaXJzdENlbGwsXG4gICAgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsXG4gICAgUk9XX0hFSUdIVCxcbiAgICBSb3dDb21wYXJhdG9yLFxuICAgIFNhdmVSb3dzRXZlbnQsXG4gICAgU0VMRUNUSU9OX0NPTFVNTl9XSURUSCxcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRILFxuICAgIFRhYmxlLFxuICAgIFRhYmxlQ29sdW1uLFxuICAgIFRhYmxlQ29sdW1uRnJlZXplRXZlbnQsXG4gICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgIFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgVGFibGVEcmFnZ2FibGUsXG4gICAgVGFibGVGaWx0ZXJDaGFuZ2VFdmVudCxcbiAgICBUYWJsZUdyb3VwQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgIFRhYmxlSW5pdGlhbFN0YXRlLFxuICAgIFRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICAgIFRhYmxlUmVzcG9uc2l2ZVNlcnZpY2UsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVSb3dBY3RpdmF0ZUV2ZW50LFxuICAgIFRhYmxlUm93Q2xhc3MsXG4gICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudCxcbiAgICBUYWJsZVJvd1R5cGUsXG4gICAgVGFibGVTY3JvbGxhYmxlLFxuICAgIFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgVGFibGVTZXJ2aWNlLFxuICAgIFRhYmxlU29ydENoYW5nZUV2ZW50LFxuICAgIFRhYmxlU3RhdGUsXG4gICAgVGFibGVWaXJ0dWFsU2Nyb2xsXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUtaGVscGVycyc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlVGltZSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaWx0ZXIsXG4gICAgbWFwLFxuICAgIHN0YXJ0V2l0aCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZSxcbiAgICB0YWtlVW50aWwsXG4gICAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRBQkxFX1RPT0xCQVIsIFRhYmxlVG9vbGJhckludGVyZmFjZSB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW50ZXJmYWNlIFRvb2xiYXJDb250ZXh0IHtcbiAgICBjb3VudGVyOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgc29ydGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZmlsdGVyYWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBncm91cGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgY29sdW1uczogT2JzZXJ2YWJsZTxib29sZWFuPjtcbn1cblxubGV0IHRhYmxlVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGEgdGFibGUuXG4gKiBBIHRhYmxlIGlzIGEgc2V0IG9mIHRhYnVsYXIgZGF0YS4gTGluZSBpdGVtcyBjYW4gc3VwcG9ydCBkYXRhLCBpbWFnZXMgYW5kIGFjdGlvbnMuXG4gKiBgYGBodG1sXG4gKiA8ZmRwLXRhYmxlXG4gKiAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAqICBmZENvbXBhY3RcbiAqICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICogIGVtcHR5VGFibGVNZXNzYWdlPVwiTm8gZGF0YSBmb3VuZFwiPlxuICpcbiAqICA8ZmRwLXRhYmxlLXRvb2xiYXJcbiAqICAgdGl0bGU9XCJPcmRlciBMaW5lIEl0ZW1zXCJcbiAqICAgW2hpZGVJdGVtQ291bnRdPVwiZmFsc2VcIj5cbiAqICA8L2ZkcC10YWJsZS10b29sYmFyPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwibmFtZVwiXG4gKiAgIGtleT1cIm5hbWVcIlxuICogICBsYWJlbD1cIk5hbWVcIlxuICogICBhbGlnbj1cInN0YXJ0XCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICogICBrZXk9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKiA8L2ZkcC10YWJsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVGFibGUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29tcG9uZW50KSB9LFxuICAgICAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgICAgIFRhYmxlU2VydmljZSxcbiAgICAgICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIHN1cHBvcnRlZENvbnRlbnREZW5zaXR5OiBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsIENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLCBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJywgJ2NoaWxkRGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2NoaWxkRGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZXF1ZXN0ZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnZGF0YUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdpc0xvYWRpbmcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC10YWJsZScsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLWhvcml6b250YWwtYm9yZGVyc10nOiAnbm9Ib3Jpem9udGFsQm9yZGVycyB8fCBub0JvcmRlcnMnLFxuICAgICAgICAnW2NsYXNzLmZkLXRhYmxlLS1uby12ZXJ0aWNhbC1ib3JkZXJzXSc6ICdub1ZlcnRpY2FsQm9yZGVycyB8fCBub0JvcmRlcnMnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICAgIGV4dGVuZHMgVGFibGU8VD5cbiAgICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0NoZWNrZWRcbntcbiAgICAvKiogQ29tcG9uZW50IG5hbWUgdXNlZCBpbiBhIFByZXNldC1tYW5hZ2VkIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWUgPSAncGxhdGZvcm1UYWJsZSc7XG5cbiAgICAvKiogSUQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSBgZmRwLXRhYmxlLSR7dGFibGVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogV2hldGhlciB0byBhbGxvdyByZXNpemluZyBjb2x1bW5zIGJ5IGRyYWdnaW5nIHRoZSBjb2x1bW4gZWRnZSB3aXRoIG1vdXNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlRHJhZ1Jlc2l6ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZpeCB0aGUgdGFibGUgaGVhZGVyIGFuZCBmb290ZXIuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICAgKiBOb3RlIHRoYXQgaWYgdGhlIHRhYmxlIGNvbnRhaW5zIGZyZWV6YWJsZSBjb2x1bW5zLCB0aGUgaGVhZGVyIGFuZFxuICAgICAqIGZvb3RlciB3aWxsIGJlIGZpeGVkIGF1dG9tYXRpY2FsbHksIHJlZ2FyZGxlc3Mgb2YgdGhpcyBpbnB1dCB2YWx1ZS5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZml4ZWQgPSB0cnVlO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIHVwIHRvIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBUaGUgY29sdW1uIGBuYW1lYCB0byBmcmVlemUgY29sdW1ucyBhZnRlciBhbmQgaW5jbHVkaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZnJlZXplRW5kQ29sdW1uc1RvOiBzdHJpbmc7XG4gICAgLyoqIFRvZ2dsZSBmb3IgcGFnZSBzY3JvbGxpbmcgZmVhdHVyZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICAvKiogTnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNpemU6IE51bGxhYmxlPG51bWJlcj47XG4gICAgLyoqIFBhZ2Ugc2Nyb2xsaW5nIHRocmVzaG9sZCBpbiBweC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgPSA4MDtcbiAgICAvKiogVGFibGUgYm9keSBoZWlnaHQuICovXG4gICAgQElucHV0KClcbiAgICBib2R5SGVpZ2h0OiBzdHJpbmc7XG4gICAgLyoqIFRleHQgZGlzcGxheWVkIHdoZW4gdGFibGUgaGFzIG5vIGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW1wdHlUYWJsZU1lc3NhZ2U6IHN0cmluZztcbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgd2hlbiB0YWJsZSBoYXMgbm8gdmlzaWJsZSBjb2x1bW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9WaXNpYmxlQ29sdW1uc01lc3NhZ2U6IHN0cmluZztcbiAgICAvKiogVGFibGUgd2l0aG91dCBob3Jpem9udGFsIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0hvcml6b250YWxCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgdmVydGljYWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vVmVydGljYWxCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgYW55IGJvcmRlcnMsIGJ1dCBoZWFkZXIgd2l0aCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb2R5Qm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IG91dGVyIGJvcmRlcnMgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkcC10YWJsZS0tbm8tb3V0ZXItYm9yZGVyJylcbiAgICBASW5wdXQoKVxuICAgIG5vT3V0ZXJCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCBob3Jpem9udGFsIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlclggPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IHZlcnRpY2FsIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlclkgPSBmYWxzZTtcbiAgICAvKiogQWNjZXNzb3IgdG8gYSBjaGlsZHJlbiBub2RlcyBvZiB0cmVlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVsYXRpb25LZXk6IHN0cmluZztcbiAgICAvKiogVGFibGUgcm93IGV4cGFuZGVkIHN0YXRlIGtleS4gVXNlZCB0byBzZXQgdGhlIGluaXRpYWwgc3RhdGUgb2YgdHJlZSByb3cuICovXG4gICAgQElucHV0KClcbiAgICBleHBhbmRlZFN0YXRlS2V5OiBzdHJpbmc7XG4gICAgLyoqIFByb3BlcnR5IGtleSBpbmRpY2F0aW5nIHRoYXQgdGhlIHJvdyBoYXMgY2hpbGRyZW4gYWNjZXNzaWJsZSB2aWEgW2NoaWxkRGF0YVNvdXJjZV0uICovXG4gICAgQElucHV0KClcbiAgICBoYXNDaGlsZHJlbktleTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgcm93IGlzIG5hdmlnYXRhYmxlLlxuICAgICAqIFBhc3MgYm9vbGVhbiB2YWx1ZSB0byBzZXQgc3RhdGUgZm9yIHRoZSBhbGwgcm93cy5cbiAgICAgKiBQYXNzIHN0cmluZyB2YWx1ZSB3aXRoIHRoZSBrZXkgb2YgdGhlIHJvdyBpdGVtJ3MgZmllbGQgdG8gY29tcHV0ZSBzdGF0ZSBmb3IgZXZlcnkgc2luZ2xlIHJvdy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBoaWdobGlnaHQgbmF2aWdhdGVkIHJvdy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZ2hsaWdodE5hdmlnYXRlZFJvdyA9IGZhbHNlO1xuICAgIC8qKiBXaGV0aGVyIHRhYmxlIHJvdyBjYW4gYmUgY2xpY2tlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93c0FjdGl2YWJsZSA9IGZhbHNlO1xuICAgIC8qKiBWYWx1ZSB3aXRoIHRoZSBrZXkgb2YgdGhlIHJvdyBpdGVtJ3MgZmllbGQgdG8gZW5hYmxlIHNlbGVjdGluZy4gICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZEtleTogc3RyaW5nO1xuICAgIC8qKiBWYWx1ZSB3aXRoIHRoZSBrZXkgb2YgdGhlIHJvdyBpdGVtJ3MgZmllbGQgdG8gZW5hYmxlIHNlbGVjdGluZy4gICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RhYmxlS2V5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogVHJhY2tpbmcgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gY2hlY2sgdGhlIGRpZmZlcmVuY2VzIGluIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBVc2VkIHNpbWlsYXJseSB0byBgbmdGb3JgIGB0cmFja0J5YCBmdW5jdGlvbi5cbiAgICAgKiBBY2NlcHRzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0d28gcGFyYW1ldGVycywgaW5kZXggYW5kIGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0cmFja0J5OiBUcmFja0J5RnVuY3Rpb248VD47XG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCBpZGVudGlmaWVzIHVuaXF1ZW5lc3Mgb2YgYSBwYXJ0aWN1bGFyIHJvdy5cbiAgICAgKiBUYWJsZSBjb21wb25lbnQgdXNlcyBpdCB0byBiZSBhYmxlIHRvIHByZXNlcnZlIHNlbGVjdGlvbiB3aGVuIGEgZGF0YSBsaXN0IGlzIGNoYW5nZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dDb21wYXJhdG9yOiBSb3dDb21wYXJhdG9yPFQ+O1xuICAgIC8qKiBTdHJpbmcgb3IgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFkZGl0aW9uYWwgcm93cycgQ1NTIGNsYXNzZXMuICovXG4gICAgQElucHV0KClcbiAgICByb3dzQ2xhc3M6IFRhYmxlUm93Q2xhc3M8VD47XG4gICAgLyoqIFVzZWQgdG8gY29uc3RydWN0IGVtcHR5IHJvdyBvYmplY3QgZm9yIGVkaXRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBlZGl0YWJsZVJvd1NrZWxldG9uOiBUO1xuICAgIC8qKiBXaGV0aGVyIGFsbCByb3dzIHNob3VsZCBiZSBjb2xsYXBzZWQgYnkgZGVmYXVsdCBhZnRlciB0aGUgdGFibGUgaXMgbG9hZGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXhwYW5kT25Jbml0ID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogSGVpZ2h0IG9mIHRoZSByb3csIHJlcXVpcmVkIGZvciB0aGUgdmlydHVhbFNjcm9sbCxcbiAgICAgKiBkZWZhdWx0IGlzIDQ0cHggaW4gY296eSwgMzJweCBpbiBjb21wYWN0IGFuZCAyNHB4IGluIGNvbmRlbnNlZCAoc2V0IGF1dG9tYXRpY2FsbHkpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dIZWlnaHQgPSBST1dfSEVJR0hULmdldChDb250ZW50RGVuc2l0eU1vZGUuQ09aWSkhO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGN1cnJlbnQgcHJlc2V0IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGxvYWQgcHJldmlvdXMgcGFnZXMuXG4gICAgICogVGhpcyBvcHRpb24gd29ya3Mgb25seSB3aGVuIGBwYWdlU2Nyb2xsaW5nYCBpcyB0cnVlLCBhbmQgdGhlIGluaXRpYWwgcGFnZSA+IDFcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRQYWdlc0JlZm9yZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZVZhbHVlID0gU2VsZWN0aW9uTW9kZS5OT05FO1xuXG4gICAgLyoqIFNldHMgc2VsZWN0aW9uIG1vZGUgZm9yIHRoZSB0YWJsZS4gJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgJ25vbmUnICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0aW9uTW9kZSh2YWx1ZTogU2VsZWN0aW9uTW9kZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA9IHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5OT05FO1xuICAgICAgICB0aGlzLl9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3Rpb25Nb2RlKCk6IFNlbGVjdGlvbk1vZGVWYWx1ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZW5hYmxlVHJpc3RhdGVNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgV2hlbiBUcnVlLCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBlYWNoIHRyZWUgaXRlbSBkZXBlbmRzIG9uIHRoZSBjaGVja2VkXG4gICAgICogIHN0YXRlIG9mIGl0cyBwYXJlbnQgb3IgZGlyZWN0IGNoaWxkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGVuYWJsZVRyaXN0YXRlTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9lbmFibGVUcmlzdGF0ZU1vZGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgZW5hYmxlVHJpc3RhdGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1RyZWVUYWJsZSAmJiB0aGlzLl9lbmFibGVUcmlzdGF0ZU1vZGU7XG4gICAgfVxuXG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHNlbWFudGljIHN0YXRlIG9mIHRoZSByb3cuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbWFudGljSGlnaGxpZ2h0aW5nKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXkgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICB9XG4gICAgZ2V0IHNlbWFudGljSGlnaGxpZ2h0aW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXkgJiYgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZykge1xuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfSElHSExJR0hUSU5HX0tFWTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZvcmNlIHJvd3MgdG8gZm9sbG93ICdjaGVja2VkIGFsbCcgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgICAqIElmIHRydWUsIGFsbCBuZXcgcm93cyB0aGF0IGFyZSBjb21pbmcgZnJvbSB0aGUgZGF0YVNvdXJjZSB3aWxsIGZvbGxvdyAnY2hlY2tlZCBhbGwnIHN0YXRlLlxuICAgICAqIElmIGZhbHNlLCByb3cgd2lsbCByZXNwZWN0IGBjaGVja2VkS2V5YCBwcm9wZXJ0eSB0byBkZWZpbmUgY2hlY2tlZCBzdGF0ZSBvZiBpdHNlbGYuXG4gICAgICogRGVmYXVsdCBpcyBmYWxzZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcmNlQ2hlY2tlZEFsbFN0YXRlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBhcmlhLWxhYmVsbGVkYnkgYXR0cmlidXRlIHZhbHVlIGZvciB0aGUgdGFibGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIG1pbmltYWwgd2lkdGggb2YgdGhlIG5vbi1mcm96ZW4gY29sdW1ucy5cbiAgICAgKiBVc2VmdWwgd2hlbiB0YWJsZSBoYXMgbGFyZ2UgYW1vdW50IG9mIGZyZWV6YWJsZSBjb2x1bW5zIGFuZCB0YWJsZSBzdGlsbCBzaG91bGQgaGF2ZSBzb21lIGZyZWUgc3BhY2UgYXZhaWxhYmxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fbm9uRnJvemVuQ29sdW1uc01pbldpZHRoID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IG5vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9uRnJvemVuQ29sdW1uc01pbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbm9uRnJvemVuQ29sdW1uc01pbldpZHRoID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2hvdWxkQ2hlY2tOZXdSb3dzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXNldENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD5cbiAgICA+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgc29ydCBvcmRlciBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0Q2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGUgdGFibGUgZmlsdGVyIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUZpbHRlckNoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIGdyb3VwaW5nIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGdyb3VwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVHcm91cENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVHcm91cENoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHZpc2libGUgY29sdW1ucyBsaXN0IGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBwYWdpbmF0aW9uIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVQYWdlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gdGhlIGZyb3plbiBjb2x1bW4uICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY29sdW1uRnJlZXplOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5GcmVlemVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uRnJlZXplRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gZ3JvdXAvdHJlZSByb3cgY29sbGFwc2VkL2V4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd1RvZ2dsZU9wZW5TdGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiByb3cgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dBY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHJvdyBuYXZpZ2F0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93TmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBlbXB0eSByb3cgYWRkZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZW1wdHlSb3dBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBzYXZlIGJ1dHRvbiBwcmVzc2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFNhdmVSb3dzRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gY2FuY2VsIGJ1dHRvbiBwcmVzc2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRhYmxlIGJvZHkgYmVpbmcgc2Nyb2xsZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gbmV3IHJvd3MgaGFzIGJlZW4gc2V0IGFuZCByZW5kZXJlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0YWJsZVJvd3NTZXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbGwgcm93cyBiZWluZyBleHBhbmRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhbGxSb3dzRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbGwgcm93cyBiZWluZyBjb2xsYXBzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWxsUm93c0NvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGEgY2VsbCBpcyBmb2N1c2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNlbGxGb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZVNjcm9sbGFibGUnKVxuICAgIHJlYWRvbmx5IHRhYmxlU2Nyb2xsYWJsZTogVGFibGVTY3JvbGxhYmxlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKVxuICAgIHJlYWRvbmx5IHRhYmxlQ29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRmRUYWJsZUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcmVhZG9ubHkgdGFibGU6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGREtfRk9DVVNBQkxFX0dSSURfRElSRUNUSVZFKVxuICAgIHJlYWRvbmx5IF9mb2N1c2FibGVHcmlkOiBGb2N1c2FibGVHcmlkRGlyZWN0aXZlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGFibGVCb2R5JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVCb2R5OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRG5kTGlzdERpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kbmREaXJlY3RpdmU6IE51bGxhYmxlPERuZExpc3REaXJlY3RpdmU8VGFibGVSb3c+PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGFibGVDb2x1bW4pXG4gICAgcmVhZG9ubHkgY29sdW1uczogUXVlcnlMaXN0PFRhYmxlQ29sdW1uPjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRWRpdGFibGVUYWJsZUNlbGwsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICByZWFkb25seSBjdXN0b21FZGl0YWJsZUNlbGxzOiBRdWVyeUxpc3Q8RWRpdGFibGVUYWJsZUNlbGw+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUQUJMRV9UT09MQkFSKVxuICAgIHJlYWRvbmx5IHRhYmxlVG9vbGJhcjogVGFibGVUb29sYmFySW50ZXJmYWNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGluaXRpYWxTb3J0QnkoKTogQ29sbGVjdGlvblNvcnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxTdGF0ZT8uaW5pdGlhbFNvcnRCeSA/PyBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ29sdW1ucyB0byBiZSByZW5kZXJlZCBpbiB0aGUgdGVtcGxhdGVcbiAgICAgKi9cbiAgICBnZXQgX3Zpc2libGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ29sdW1ucyB0byBiZSByZW5kZXJlZCBhcyBhIHBvcC1pbiBjb2x1bW5zLlxuICAgICAqL1xuICAgIGdldCBfcG9wcGluZ0NvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UucG9wcGluZ0NvbHVtbnMkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzVHJlZVRhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uaXNUcmVlVGFibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZW5hYmxlUm93UmVvcmRlcmluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhYmxlIHJvd3MgYXJlIGRyYWdnYWJsZS4gKi9cbiAgICBnZXQgaXNEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5pc1RyZWVUYWJsZSAmJiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5lbmFibGVSb3dSZW9yZGVyaW5nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nID8gU0VNQU5USUNfSElHSExJR0hUSU5HX0NPTFVNTl9XSURUSCA6IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3VtIG9mIHdpZHRocyBvZiBmaXhlZCBjb2x1bW5zIChzZW1hbnRpYyBoaWdobGlnaHRpbmcsIHNlbGVjdGlvbikgKi9cbiAgICBnZXQgX2ZpeGVkQ29sdW1uc1BhZGRpbmcoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGggKyB0aGlzLl9zZWxlY3Rpb25Db2x1bW5XaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfdGFibGVXaWR0aFB4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgbG9hZGluZ1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID8/XG4gICAgICAgICAgICAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5faW50ZXJuYWxMb2FkaW5nU3RhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl9pbnRlcm5hbENoaWxkcmVuTG9hZGluZ1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9hcmlhTGFiZWxsZWRCeSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuYXJpYUxhYmVsbGVkQnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyaWFMYWJlbGxlZEJ5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlVG9vbGJhcj8udGFibGVUb29sYmFyVGl0bGVJZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiBjb21iaW5lZCB0YWJsZSByb3dzLlxuICAgICAqIENvbnRhaW5zIGFsbCByb3dzIGluY2x1ZGluZyBncm91cCByb3dzLlxuICAgICAqL1xuICAgIF90YWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiB0YWJsZSByb3dzIHRoYXQgY2FtZSBmcm9tIGRhdGFTb3VyY2UuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX2RhdGFTb3VyY2VUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgYWRkZWQgdGFibGUgcm93cy5cbiAgICAgKi9cbiAgICBfbmV3VGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpc2libGUgdGFibGUgcm93cy5cbiAgICAgKiBSb3dzIGxpc3QgdGhhdCBpcyB1c2VkIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB1aS5cbiAgICAgKiBCYXNlZCBvbiBfdGFibGVSb3dzIGFuZCBleGNsdWRlcyBoaWRkZW4gcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzVmlzaWJsZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUYWJsZSBDb2x1bW4gTWFwLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgY29sdW1uXG4gICAgICovXG4gICAgX2tleVRvQ29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtbj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlc1xuICAgICAqL1xuICAgIF9mcmVlemFibGVDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXMgZm9yIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGZyb3plbiB0byB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIF9mcmVlemFibGVFbmRDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tlZFN0YXRlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZS0tZ3JvdXAnKVxuICAgIF9pc0dyb3VwVGFibGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCB0byBjcmVhdGUgYSByb3cgY29tcG9uZW50IHBsYWNlaG9sZGVyIGFuZCBzZXQgZGF0YSBpbiBpdCByYXRoZXIgdGhhbiByZS1jcmVhdGUgdGhlIHJvdyBjb21wb25lbnQgd2hlbiBkYXRhIGNoYW5nZXMuXG4gICAgICogT3B0aW1pemVzIHBlcmZvcm1hbmNlIGR1ZSB0byBza2lwcGluZyBpbml0aWFsIHNldHVwIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcjogbnVtYmVyW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlcjogVGFibGVSb3dbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90b29sYmFyQ29udGV4dDogVG9vbGJhckNvbnRleHQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSB0YWJsZUNvbHVtbnNTdHJlYW06IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZFByZXZpb3VzUGFnZXMgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ydGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZTxUPj4oVGFibGVEYXRhU291cmNlRGlyZWN0aXZlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZSA9IGluamVjdDxUYWJsZUluaXRpYWxTdGF0ZT4oRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVWaXJ0dWFsU2Nyb2xsPihGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZG5kVGFibGVEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEcmFnZ2FibGU+KEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLy8ga2VlcGluZyBcImxvYWRpbmdcIiBmaWVsZCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBcImxvYWRpbmdTdGF0ZVwiIGlzIHVzZWQgaW5zdGVhZFxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25GaWx0ZXJTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGF0IGxlYXN0IDEgaXRlbSBpcyBjaGVja2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hlY2tlZEFueSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0aWF0ZWQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc1dpZHRoU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kbmRMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFByZXNldDogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQgPSB7fTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxTdGF0ZVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0TWFudWFsbHlTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlSGVhZGVyUmVzaXplciA9IGluamVjdChUYWJsZUhlYWRlclJlc2l6ZXJEaXJlY3RpdmUpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNYXBwaW5nIGZ1bmN0aW9uIGZvciB0aGUgdHJhY2tCeSwgcHJvdmlkZWQgYnkgdGhlIHVzZXIuXG4gICAgICogSXMgbmVlZGVkLCBiZWNhdXNlIHdlIGFyZSB3cmFwcGluZyB1c2VyIHN1cHBsaWVkIGRhdGEgaW50byBhIGBUYWJsZVJvd2AgY2xhc3MuXG4gICAgICovXG4gICAgX3Jvd1RyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUYWJsZVJvdzxUPj4gfCBUcmFja0J5RnVuY3Rpb248bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlYWRvbmx5IF90YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTY3JvbGxEaXNwYXRjaGVyOiBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZTogVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgcmVhZG9ubHkgY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJiYWJsZVNlcnZpY2U6IFRhYmJhYmxlRWxlbWVudFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsU3RhdGU/LnNldFRhYmxlKHRoaXMpO1xuICAgICAgICB0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnNldFRhYmxlKHRoaXMpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLnNldFRhYmxlKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX3Jvd1RyYWNrQnkgPSB0aGlzLl9kZWZhdWx0VHJhY2tCeTtcbiAgICAgICAgdGhpcy5fdG9vbGJhckNvbnRleHQgPSB7XG4gICAgICAgICAgICBjb3VudGVyOiB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLnRvdGFsSXRlbXMkLFxuICAgICAgICAgICAgc29ydGFibGU6IHRoaXMuX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZmlsdGVyYWJsZTogdGhpcy5faXNTaG93bkZpbHRlclNldHRpbmdzSW5Ub29sYmFyJCxcbiAgICAgICAgICAgIGdyb3VwYWJsZTogdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudGFibGVDb2x1bW5zU3RyZWFtID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMuX3J0bFNlcnZpY2UucnRsLnN1YnNjcmliZSgoaXNSdGwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcnRsID0gaXNSdGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmNlbGxGb2N1c2VkJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZWxsRm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIGJlIHNob3duLFxuICAgICAqICBJZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSByb3dzIG9yIHZpc2libGUgY29sdW1uc1xuICAgICAqICBvciBzZWxlY3Rpb24gbW9kZSBpcyBub25lLCB0aGVuIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIG5vdCBiZSBzaG93bi5cbiAgICAgKiovXG4gICAgaXNTZWxlY3Rpb25Db2x1bW5TaG93bigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gJiZcbiAgICAgICAgICAgICEhdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC4gKi9cbiAgICBnZXRSb3dzSW5WaWV3cG9ydCgpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydCBpbmRleCBvZiBhbGwgcm93cy5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB2aWV3cG9ydCByb3dzLlxuICAgICAqL1xuICAgIHNldFJvd3NJblZpZXdwb3J0KHN0YXJ0SW5kZXggPSAwLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXIgPSBuZXcgQXJyYXkobGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gaSArIHN0YXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlciA9IHRoaXMuX3RhYmxlUm93cy5zbGljZShzdGFydEluZGV4LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoJ2xvYWRpbmcnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZUxvYWRpbmcodGhpcy5sb2FkaW5nU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd0cmFja0J5JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dUcmFja0J5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy50cmFja0J5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gKGluZGV4KSA9PiB0aGlzLnRyYWNrQnkoaW5kZXgsIHRoaXMuX3RhYmxlUm93c1Zpc2libGVbaW5kZXhdLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdlcyBiZWxvdyBzaG91bGQgYmUgY2hlY2tlZCBvbmx5IGFmdGVyIHZpZXcgaXMgaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCF0aGlzLl92aWV3SW5pdGlhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3NlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICdzZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplRW5kQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnc2VtYW50aWNIaWdobGlnaHRpbmcnIGluIGNoYW5nZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dOYXZpZ2F0YWJsZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4gKHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCB0aGlzLnJvd05hdmlnYXRhYmxlKSkpO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dIZWlnaHQnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRUYWJsZVJlZih0aGlzKTtcblxuICAgICAgICB0aGlzLl9pc0dyb3VwVGFibGUgPSAodGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxHcm91cEJ5Py5sZW5ndGggPz8gMCkgPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3SW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pbml0aWFsaXplRGF0YVNvdXJjZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb25zdHJ1Y3RUYWJsZU1ldGFkYXRhKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk7XG5cbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8ubGlzdGVuT25WaXJ0dWFsU2Nyb2xsKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTtcblxuICAgICAgICBpZiAodGhpcy5leHBhbmRPbkluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxUcmFuc2Zvcm0kXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAmJiAhIXRoaXMuX3RhYmxlQm9keSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgodHJhbnNmb3JtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7dHJhbnNmb3JtfXB4KWA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5zaG9ydFJvd0ZvY3VzID0gJ2ZpcnN0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyBXaGVuIHRhYmxlIHJvd3MgYXJlIHNldCwgZW1pdCBhbiBldmVudCB0byBtYW5pcHVsYXRlIHRoZSB2aWV3IChlLmcuLCBzY3JvbGwgdG8gc29tZSByb3cpLlxuICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXMudGFibGVSb3dzU2V0O1xuICAgICAgICB0aGlzLl9vblpvbmVGcmVlKCgpID0+IHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0LiAqL1xuICAgIGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBsaXN0IG9mIHZpc2libGUgdGFibGUgY29sdW1ucy4gKi9cbiAgICBnZXRWaXNpYmxlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIFNldCBTb3J0aW5nIHJ1bGVzICovXG4gICAgc29ydChzb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQoc29ydFJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEZpbHRlciBydWxlcyAqL1xuICAgIGZpbHRlcihmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKGZpbHRlclJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgRmlsdGVyIHJ1bGUgKi9cbiAgICBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkRmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBmaWx0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZmllbGRzICovXG4gICAgcmVtb3ZlRmlsdGVyKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnJlbW92ZUZpbHRlcnMoZmllbGRzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgR3JvdXBzICovXG4gICAgZ3JvdXAoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEdyb3VwcyAqL1xuICAgIGFkZEdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHZpc2libGUgdGFibGUgY29sdW1uc1xuICAgICAqIFRoZSBvcmRlciBpcyBtYXR0ZXJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyB0YWJsZSBjb2x1bW5zIG5hbWVzXG4gICAgICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzYW1lIG9yZGVyIG9mIGNvbHVtbnMgYXMgdXNlciBkZWZpbmVkLlxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbnMuaW5kZXhPZihhLm5hbWUpIC0gY29sdW1ucy5pbmRleE9mKGIubmFtZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGFjYy5jb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgIGFjYy5rZXlzLnB1c2goY29sdW1uLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGNvbHVtbnNPYmplY3QpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q29sdW1ucyhjb2x1bW5zT2JqZWN0LmNvbHVtbnMsIGNvbHVtbnNPYmplY3Qua2V5cyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBlbmQgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKSA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGNvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhjb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVMYXN0RnJlZXphYmxlQ29sdW1uKCk7XG4gICAgfVxuXG4gICAgLyoqIFVuZnJlZXplIGNvbHVtbiAqL1xuICAgIHVuZnJlZXplKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZW5kID8gdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucyA6IHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnM7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvQ29sdW1uSW5kZXggPSBjb2x1bW5zLmdldChjb2x1bW5OYW1lKSA/PyAtMTtcbiAgICAgICAgY29uc3QgZnJlZXplVG9QcmV2aW91c0NvbHVtbk5hbWUgPSBjb2x1bW5zW2ZyZWV6ZVRvQ29sdW1uSW5kZXggLSAxXTtcblxuICAgICAgICBlbmRcbiAgICAgICAgICAgID8gKHRoaXMuZnJlZXplRW5kQ29sdW1uc1RvID0gZnJlZXplVG9QcmV2aW91c0NvbHVtbk5hbWUpXG4gICAgICAgICAgICA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8oZnJlZXplVG9QcmV2aW91c0NvbHVtbk5hbWUsIGVuZCk7XG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgfVxuXG4gICAgLyoqIGV4cGFuZCBhbGwgcm93cyAqL1xuICAgIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwYW5kYWJsZVJvd3MgPSB0aGlzLl90YWJsZVJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuVFJFRSk7XG4gICAgICAgIGlmICh0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmNoaWxkRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmxvYWRDaGlsZFJvd3MoZXhwYW5kYWJsZVJvd3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21hcmtBc0V4cGFuZGVkKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgdGhpcy5hbGxSb3dzRXhwYW5kZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWFya0FzRXhwYW5kZWQocm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICByb3dzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgZS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIGNvbGxhcHNlIGFsbCByb3dzICovXG4gICAgY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBlLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLmFsbFJvd3NDb2xsYXBzZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBTZWFyY2ggaW4gdGFibGUgKi9cbiAgICBzZWFyY2goc2VhcmNoSW5wdXQ6IFNlYXJjaElucHV0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZWFyY2goc2VhcmNoSW5wdXQpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFNlYXJjaCBpbiB0YWJsZSAqL1xuICAgIHNldEN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBUb29sYmFyIFNvcnQgU2V0dGluZ3MgYnV0dG9uIHZpc2liaWxpdHkgKi9cbiAgICBzaG93U29ydFNldHRpbmdzSW5Ub29sYmFyKHNob3dTb3J0U2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQubmV4dChzaG93U29ydFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBGaWx0ZXIgU2V0dGluZ3MgYnV0dG9uIHZpc2liaWxpdHkgKi9cbiAgICBzaG93RmlsdGVyU2V0dGluZ3NJblRvb2xiYXIoc2hvd0ZpbHRlclNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25GaWx0ZXJTZXR0aW5nc0luVG9vbGJhciQubmV4dChzaG93RmlsdGVyU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBUb29sYmFyIEdyb3VwIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0dyb3VwU2V0dGluZ3NJblRvb2xiYXIoc2hvd0dyb3VwU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0dyb3VwU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBUb29sYmFyIENvbHVtbnMgU2V0dGluZ3MgYnV0dG9uIHZpc2liaWxpdHkgKi9cbiAgICBzaG93Q29sdW1uU2V0dGluZ3NJblRvb2xiYXIoc2hvd0NvbHVtblNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Db2x1bW5TZXR0aW5nc0luVG9vbGJhciQubmV4dChzaG93Q29sdW1uU2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBEaXNhYmxlIGZpbHRlciBmcm9tIGNvbHVtbiBoZWRlciBtZW51ICovXG4gICAgc2V0SGVhZGVyQ29sdW1uRmlsdGVyaW5nRGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9pc0ZpbHRlcmluZ0Zyb21IZWFkZXJEaXNhYmxlZCQubmV4dChkaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCB0aGUgcm93IG5hdmlnYXRpb24gKi9cbiAgICBzZXRSb3dOYXZpZ2F0aW9uKHJvd0luZGV4OiBudW1iZXIsIHJvd05hdmlnYXRhYmxlOiBzdHJpbmcgfCBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCByb3dOYXZpZ2F0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHJvdyBjaGVja2VkIHN0YXRlLlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqL1xuICAgIHRvZ2dsZVNlbGVjdGFibGVSb3cocm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93IHx8IHJvdy52YWx1ZVt0aGlzLnNlbGVjdGFibGVLZXldID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5TSU5HTEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGVja2VkIHN0YXRlIG9mIHRoZSByb3cuXG4gICAgICogQHBhcmFtIHJvd0luZGV4IEluZGV4IG9mIHRoZSByb3cuXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSBjaGVja2VkIHN0YXRlLlxuICAgICAqL1xuICAgIHNldFJvd0NoZWNrZWRTdGF0ZShyb3dJbmRleDogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93LmNoZWNrZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGFibGVSb3cocm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZSB0aGUgcm93IG5hdmlnYXRpb24gKi9cbiAgICByZW1vdmVSb3dOYXZpZ2F0aW9uKHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93Lm5hdmlnYXRhYmxlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcblxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIE1hbnVhbGx5IHRyaWdnZXJzIGNvbHVtbidzIHdpZHRoIHJlY2FsY3VsYXRpb24gKi9cbiAgICByZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRDb2x1bW5OYW1lcyh0aGlzLl92aXNpYmxlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpKTtcbiAgICAgICAgdGhpcy5fc2V0RnJlZXphYmxlSW5mbygpO1xuICAgIH1cblxuICAgIC8qKiBHZXRzIHRoZSBtYXggYWxsb3dlZCB3aWR0aCBmb3IgYWxsIGZyZWV6YWJsZSBjb2x1bW5zICovXG4gICAgZ2V0TWF4QWxsb3dlZEZyZWV6YWJsZUNvbHVtbnNXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogVGhlbWVhYmxlIHNjcm9sbGJhciBoYXMgMC43NXJlbSBpbiBkaW1lbnNpb24gKi9cbiAgICAgICAgY29uc3Qgc2Nyb2xsYmFyU2l6ZUluUHggPSAxMjtcblxuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVXaWR0aFB4IC0gdGhpcy5fZml4ZWRDb2x1bW5zUGFkZGluZyAtIHNjcm9sbGJhclNpemVJblB4IC0gMTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGRhdGEgc291cmNlICovXG4gICAgZ2V0RGF0YVNvdXJjZSgpOiBUYWJsZURhdGFTb3VyY2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgZW1wdHkgcm93IGZvciBlZGl0aW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcblxuICAgICAgICBjb25zdCBuZXdSb3cgPSBidWlsZE5ld1Jvd1NrZWxldG9uKHRoaXMuZWRpdGFibGVSb3dTa2VsZXRvbiwgdGhpcy5jb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgICAgIG5ld1Jvd1t0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nXSA9IEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURTtcblxuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zLnVuc2hpZnQobmV3Um93KTtcblxuICAgICAgICBjb25zdCBuZXdSb3dzID0gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoW25ld1Jvd10pO1xuICAgICAgICB0aGlzLl9uZXdUYWJsZVJvd3MgPSBbLi4ubmV3Um93cywgLi4udGhpcy5fbmV3VGFibGVSb3dzXTtcblxuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoKTtcbiAgICAgICAgdGhpcy5lbXB0eVJvd0FkZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQ2FuY2VscyBlZGl0aW5nIGFuZCBkaXNjYXJkcyBuZXdseSBhZGRlZCByb3dzICovXG4gICAgY2FuY2VsRWRpdGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVzZXRFZGl0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNhdmUgZXZlbnQgYW5kIHJlc2V0cyBlZGl0YWJsZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIHNhdmVSb3dzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTYXZlUm93c0V2ZW50PFQ+KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZS5mZXRjaCh0aGlzLmdldFRhYmxlU3RhdGUoKSk7XG4gICAgICAgIH0sIFsuLi50aGlzLl9hZGRlZEl0ZW1zXSk7XG4gICAgICAgIGNvbnN0IGVkaXRhYmxlQ2VsbHM6IEVkaXRhYmxlVGFibGVDZWxsW10gPSAoW10gYXMgRWRpdGFibGVUYWJsZUNlbGxbXSkuY29uY2F0LmFwcGx5KFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuX3RhYmxlUm93U2VydmljZS5lZGl0YWJsZUNlbGxzLnZhbHVlcygpKVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZvcm1zID0gWy4uLnRoaXMuY3VzdG9tRWRpdGFibGVDZWxscy50b0FycmF5KCksIC4uLmVkaXRhYmxlQ2VsbHNdLm1hcCgodCkgPT4gdC5mb3JtKTtcblxuICAgICAgICAvLyBUcmlnZ2VyIGZvcm0gcmV2YWxpZGF0aW9uXG4gICAgICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IGZvcm0ub25TdWJtaXQobnVsbCBhcyBhbnkpKTtcbiAgICAgICAgaWYgKGZvcm1zLnNvbWUoKGZvcm0pID0+IGZvcm0uaW52YWxpZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2F2ZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2V0cyBjdXJyZW50IHByZXNldCBmb3IgdGhlIFRhYmxlLiAqL1xuICAgIHNldFByZXNldChkYXRhOiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50UHJlc2V0ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbmV3U3RhdGU6IFRhYmxlU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0RGVmYXVsdFN0YXRlKCksIGRhdGEpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0U29ydChuZXdTdGF0ZS5zb3J0QnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0RmlsdGVycyhuZXdTdGF0ZS5maWx0ZXJCeSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRHcm91cHMobmV3U3RhdGUuZ3JvdXBCeSk7XG4gICAgICAgIHRoaXMuc2V0Q29sdW1ucyhuZXdTdGF0ZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNlYXJjaChuZXdTdGF0ZS5zZWFyY2hJbnB1dCk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhuZXdTdGF0ZS5mcmVlemVUb0NvbHVtbik7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBuZXdTdGF0ZS5wYWdlLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q3VycmVudFBhZ2UobmV3U3RhdGUucGFnZS5jdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZVN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGdldEN1cnJlbnRQcmVzZXQoKTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQge1xuICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRQcmVzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhYmxlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJldHVybiBvYmplY3QgYXMgc2ltaWxhciBhcyB0aGUgb3JpZ2luYWwgcHJlc2V0LlxuICAgICAgICBjb25zdCBjdXJyZW50UHJlc2V0ID0geyAuLi50aGlzLl9jdXJyZW50UHJlc2V0IH07XG4gICAgICAgIGNvbnN0IHByZXNldEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50UHJlc2V0KTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudFN0YXRlKS5mb3JFYWNoKChzdGF0ZUtleSkgPT4ge1xuICAgICAgICAgICAgLy8gU2tpcCBzdGF0ZSBlbnRyeSBpZiBpdCdzIG5vdCBwcmVzZW50IGluIHByZXNldCBhbmQgZG9lc24ndCBoYXZlIGFueSB2YWx1ZS5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdGF0ZUtleSA9PT0gJ2NvbHVtbktleXMnIHx8XG4gICAgICAgICAgICAgICAgKCghY3VycmVudFN0YXRlW3N0YXRlS2V5XSB8fFxuICAgICAgICAgICAgICAgICAgICAoQXJyYXkuaXNBcnJheShjdXJyZW50U3RhdGVbc3RhdGVLZXldKSAmJiBjdXJyZW50U3RhdGVbc3RhdGVLZXldPy5sZW5ndGggPT09IDApKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcHJlc2V0S2V5cy5pbmNsdWRlcyhzdGF0ZUtleSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRQcmVzZXRbc3RhdGVLZXldID0gY3VycmVudFN0YXRlW3N0YXRlS2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcmVzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFudWFsbHkgdHJpZ2dlcnMgbGlzdCBpdGVtIGV2ZW50IGxpc3RlbmVycyBmb3IgZHJhZyZkcm9wIGxpc3QgZGlyZWN0aXZlLlxuICAgICAqL1xuICAgIHJlZnJlc2hEbmRMaXN0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RuZERpcmVjdGl2ZT8ucmVmcmVzaFF1ZXJ5TGlzdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpY2FsbHkgdG9nZ2xlcyBgZXhwYW5kYCBzdGF0ZSBvZiB0aGUgcm93IHdpdGggZGVmaW5lZCBpbmRleC5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXhlcyByb3cgaW5kZXhlcyBpbmNsdWRpbmcgbmVzdGVkIHJvd3MuXG4gICAgICpcbiAgICAgKiBVc2FnZSBleGFtcGxlOlxuICAgICAqICogVG8gdG9nZ2xlIGZpcnN0IGxldmVsIHJvdywgcGFzcyBvbmUgYXJndW1lbnQ6XG4gICAgICogYGBgXG4gICAgICogdGFibGUudG9nZ2xlR3JvdXBSb3dzKDApIC8vIFdpbGwgcmVzdWx0IGluIHRvZ2dsaW5nIGZpcnN0IHJvdyBpZiBpdCdzIHR5cGUgaXMgYFRhYmxlUm93VHlwZS5UUkVFYCBvciBgVGFibGVSb3dUeXBlLkdST1VQYC5cbiAgICAgKiBgYGBcbiAgICAgKiAqIFRvIHRvZ2dsZSBuZXN0ZWQgcm93cywgcGFzcyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBvZiBpbmRleGVzOlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwLCAxKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb290IHJvdywgdGhlbiBpdCdzIHNlY29uZCBjaGlsZC5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b2dnbGVHcm91cFJvd3MoLi4ucm93SW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgbGV0IHRhYmxlUm93OiBUYWJsZVJvdyB8IG51bGwgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IHJvd0luZGV4IG9mIHJvd0luZGV4ZXMpIHtcbiAgICAgICAgICAgIHRhYmxlUm93ID0gdGFibGVSb3cgPyB0YWJsZVJvdy5jaGlsZHJlbltyb3dJbmRleF0gOiB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgICAgICBpZiAodGFibGVSb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlR3JvdXBSb3codGFibGVSb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBmb2N1cyBhIGNlbGwgaW4gdGhlIHRhYmxlIHV0aWxpemluZyBhIEZvY3VzYWJsZUNlbGxQb3NpdGlvbiBpbnRlcmZhY2UuXG4gICAgICovXG4gICAgZm9jdXNDZWxsKHBvc2l0aW9uOiBGb2N1c2FibGVDZWxsUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGVFbCA9IHRoaXMudGFibGUubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgICB0YWJsZUVsLnJvd3NbcG9zaXRpb24ucm93SW5kZXhdLmNlbGxzW3Bvc2l0aW9uLmNvbEluZGV4XS5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgYXJyYXkgb2YgdGFibGUgcm93cy4gVHJpZ2dlcmVkIHdoZW4gbmV3IGRhdGEgc291cmNlIGlzIGFwcGxpZWQuXG4gICAgICovXG4gICAgY2xlYXJUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NWaXNpYmxlID0gW107XG4gICAgICAgIHRoaXMuX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlciA9IFtdO1xuICAgICAgICB0aGlzLl9uZXdUYWJsZVJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoW10pO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZSBBUElcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Njcm9sbFRvT3ZlcmxhcHBlZENlbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVTY3JvbGxhYmxlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwoXG4gICAgICAgICAgICB0aGlzLl9ydGwsXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUsXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxjdWxhdGluZ0xvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kbmRMb2FkaW5nU3RhdGUgPT09IGlzTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlID0gaXNMb2FkaW5nO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVMb2FkaW5nKHRoaXMubG9hZGluZ1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuTVVMVElQTEVcbiAgICAgKi9cbiAgICBfdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZWxlY3Rpb24gbW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX3RhYmxlUm93cztcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5maW5kSW5kZXgoKHJvdykgPT4gcm93ID09PSByb3dUb1RvZ2dsZSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLm9uUmFuZ2VFbGVtZW50VG9nZ2xlZChzZWxlY3RlZEluZGV4LCBldmVudCBhcyBQb2ludGVyRXZlbnQgfCBLZXlib2FyZEV2ZW50KTtcblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaWR4XTtcbiAgICAgICAgICAgIGlmIChyb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0gfHwgcm93LmlzVHJlZSkge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBjaGVja2VkID8gYWRkZWQucHVzaChyb3cpIDogcmVtb3ZlZC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdywgYWRkZWQsIHJlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuU0lOR0xFXG4gICAgICovXG4gICAgX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2VsZWN0aW9uIG1vZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIC8vIHVuY2hlY2sgcHJldmlvdXNseSBjaGVja2VkXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cgPT09IHJvd1RvVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocm93LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tlZCA/IGFkZGVkLnB1c2gocm93VG9Ub2dnbGUpIDogcmVtb3ZlZC5wdXNoKHJvd1RvVG9nZ2xlKTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IC8gVW5zZWxlY3QgYWxsIHNlbGVjdGFibGUgcm93c1xuICAgICAqL1xuICAgIF90b2dnbGVBbGxTZWxlY3RhYmxlUm93cyhzZWxlY3RBbGw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cuY2hlY2tlZCA9PT0gc2VsZWN0QWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBzZWxlY3RBbGw7XG4gICAgICAgICAgICBzZWxlY3RBbGwgPyBhZGRlZC5wdXNoKHJvdykgOiByZW1vdmVkLnB1c2gocm93KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyA9IHNlbGVjdEFsbDtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlIHRhYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgKi9cbiAgICBfZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkOiBUYWJsZVJvd1tdLCByZW1vdmVkOiBUYWJsZVJvd1tdLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBjaGVja2VkIH0pID0+IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgICBhZGRlZDogYWRkZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIGluZGV4OiBhZGRlZC5jb25jYXQocmVtb3ZlZCkubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KSxcbiAgICAgICAgICAgIGFsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNlbGxDbGljayhjb2xJZHg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAocm93LnN0YXRlID09PSAncmVhZG9ubHknICYmIGlzVHJlZVJvd0ZpcnN0Q2VsbChjb2xJZHgsIHJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblJvd0NsaWNrKHJvdzogVGFibGVSb3c8VD4gfCBudWxsLCBldmVudDogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuc3RhdGUgIT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YWJiYWJsZUVsZW1lbnQgPSB0aGlzLl90YWJiYWJsZVNlcnZpY2UuZ2V0VGFiYmFibGVFbGVtZW50KGV2ZW50VGFyZ2V0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAodGFiYmFibGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93TmF2aWdhdGUocm93KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dBY3RpdmF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdFJvd0FjdGl2YXRlKHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NBY3RpdmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2Yocm93KTtcbiAgICAgICAgdGhpcy5yb3dBY3RpdmF0ZS5lbWl0KG5ldyBUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4ocm93SW5kZXgsIHJvdy52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBFeHBhbmQvQ29sbGFwc2UgZ3JvdXAgcm93XG4gICAgICovXG4gICAgX3RvZ2dsZUdyb3VwUm93KGdyb3VwUm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRhYmxlVGFibGVSb3coZ3JvdXBSb3cpO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwUm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihncm91cFJvdyk7XG4gICAgICAgIHRoaXMucm93VG9nZ2xlT3BlblN0YXRlLmVtaXQoXG4gICAgICAgICAgICBuZXcgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudChncm91cFJvd0luZGV4LCBncm91cFJvdy52YWx1ZSwgZ3JvdXBSb3cuZXhwYW5kZWQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdFJvd05hdmlnYXRlKHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFyb3cubmF2aWdhdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKHJvdyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0TmF2aWdhdGVkUm93KSB7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0ZWRSb3dJbmRleCA9IHJvd0luZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dOYXZpZ2F0ZS5lbWl0KG5ldyBUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4ocm93SW5kZXgsIHJvdy52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBkYXRhIHNvdXJjZSBkYXRhLiAqL1xuICAgIGZldGNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2godGhpcy5nZXRUYWJsZVN0YXRlKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25UYWJsZVJvd3NDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlVGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3csIGZvcmNlRmV0Y2ggPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICByb3dUb1RvZ2dsZS5mb3JjZUZldGNoID0gZm9yY2VGZXRjaDtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAocm93VG9Ub2dnbGUuZXhwYW5kZWQgPSAhcm93VG9Ub2dnbGUuZXhwYW5kZWQpO1xuXG4gICAgICAgIGZpbmRSb3dDaGlsZHJlbihyb3dUb1RvZ2dsZSwgdGhpcy5fdGFibGVSb3dzKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBjb2xsYXBzZWQgd2Ugd2FudCB0byBoaWRlIGFsbCBuZXN0ZWQgaXRlbXNcbiAgICAgICAgICAgIGlmICghZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGlzIGV4cGFuZGVkLCB3ZSB3YW50IHRvIHNob3cgb25seSBpdGVtcyB3aGljaCBkaXJlY3QgcGFyZW50cyBhcmUgZXhwYW5kZWQgYXMgd2VsbFxuICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9ICFnZXRSb3dQYXJlbnRzKHJvdywgcm93VG9Ub2dnbGUpLmV2ZXJ5KChwYXJlbnQpID0+IHBhcmVudC5leHBhbmRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25TcHlJbnRlcnNlY3QoaW50ZXJzZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnRlcnNlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2U6IHsgY3VycmVudFBhZ2UsIHBhZ2VTaXplIH1cbiAgICAgICAgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS50b3RhbEl0ZW1zJC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGFzdFBhZ2UgPSBNYXRoLmNlaWwodG90YWxJdGVtcyAvIChwYWdlU2l6ZSB8fCB0b3RhbEl0ZW1zKSk7XG4gICAgICAgIGlmIChjdXJyZW50UGFnZSA+PSBsYXN0UGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSArIDEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTWFudWFsbHkgdXBkYXRlIGluZGV4IGFmdGVyIHdlIGFkZCBuZXcgaXRlbXMgdG8gdGhlIG1haW4gYXJyYXkgKi9cbiAgICBwcml2YXRlIF9yZUluZGV4VGFibGVSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MubWFwKChyb3csIGluZGV4KSA9PiAocm93LmluZGV4ID0gaW5kZXgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVSb3dzUGlwZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLml0ZW1zJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBtYXAgc291cmNlIGl0ZW1zIHRvIHRhYmxlIHJvd3NcbiAgICAgICAgICAgICAgICAgICAgbWFwKChzb3VyY2U6IFRbXSkgPT4gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBpdGVtcyB0byBzaG93IGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJvd3M6IFRhYmxlUm93W10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVHJlZVRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvZihyb3dzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdGFibGVTZXJ2aWNlLmdyb3VwUnVsZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChncm91cFJ1bGVzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuZ3JvdXBUYWJsZVJvd3Mocm93cywgZ3JvdXBSdWxlcy52YWx1ZXMoKSwgZ3JvdXBSdWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByb3dzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNjcm9sbGluZyAmJiB0aGlzLmdldFRhYmxlU3RhdGUoKS5wYWdlLmN1cnJlbnRQYWdlID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnRoaXMuX3RhYmxlUm93cywgLi4ucm93c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhyb3dzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGRJdGVtcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxUYWJsZVJvdzxUPiwgVGFibGVSb3c8VD5bXT4oKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgocm93SXRlbXMsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93TWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMocm93SXRlbXMpLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnRSb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZXZlbCA9IHBhcmVudFJvdy5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhcGFyZW50Um93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93TWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd3MsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3Muc3BsaWNlKHBhcmVudFJvdy5pbmRleCArIHBhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggKyAxLCAwLCAuLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cuY2hpbGRyZW4ucHVzaCguLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cubGFzdENoaWxkID0gcGFyZW50Um93LmNoaWxkcmVuW3BhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlU3RhdGVDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2V0Q2hhbmdlZC5lbWl0KHRoaXMuZ2V0Q3VycmVudFByZXNldCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm5lZWRGZXRjaCRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX3RhYmxlU2VydmljZS5nZXRUYWJsZVN0YXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiAhIXN0YXRlICYmICEhdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2goc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlcyQuc3Vic2NyaWJlKChydWxlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzR3JvdXBUYWJsZSA9IHJ1bGVzLnNpemUgPiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKCh7IHR5cGUsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ2hhbmdlLmVtaXQobmV3IFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQobmV3IFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmcmVlemUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZyZWV6ZS5lbWl0KG5ldyBUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpeGVkID0gISF0aGlzLmZpeGVkIHx8ICEhdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8ICEhdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlYXJjaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBDaGFuZ2UuZW1pdChuZXcgVGFibGVHcm91cENoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncGFnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChuZXcgVGFibGVQYWdlQ2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KG5ldyBUYWJsZVNvcnRDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVSb3dTdGF0ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2Uuc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxUb092ZXJsYXBwZWRDZWxsKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmxvYWRDaGlsZFJvd3MkLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmRhdGFQcm92aWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJvd0NoaWxkcmVuQ291bnQocm93LCBzdGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoY291bnQpID0+IHJvdy5mb3JjZUZldGNoIHx8IGNvdW50ID4gcm93LmNoaWxkcmVuLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IChyb3cuZm9yY2VGZXRjaCA9IGZhbHNlKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IE1hdGguZmxvb3Iocm93LmNoaWxkcmVuLmxlbmd0aCAvIHN0YXRlLnBhZ2UucGFnZVNpemUpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogc3RhdGUucGFnZS5wYWdlU2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLmNoaWxkRGF0YVNvdXJjZT8uZmV0Y2gocm93U3RhdGUsIFtyb3ddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5jZWxsQ2xpY2tlZCQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNlbGxDbGljayhldnQuaW5kZXgsIGV2dC5yb3cpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS50b2dnbGVBbGxTZWxlY3RhYmxlUm93cyQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVBbGxTZWxlY3RhYmxlUm93cyhldnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS50b2dnbGVSb3ckLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChldnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGVSb3cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlR3JvdXBSb3coZXZ0LnJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlTXVsdGlTZWxlY3RSb3cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlTXVsdGlTZWxlY3RSb3coZXZ0LnJvdywgZXZ0LmV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3coZXZ0LnJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgbGV0IHJvd3M6IFRhYmxlUm93PFQ+W107XG4gICAgICAgIGlmICh0aGlzLmlzVHJlZVRhYmxlKSB7XG4gICAgICAgICAgICByb3dzID0gdGhpcy5fY3JlYXRlVHJlZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dzID0gY29udmVydE9iamVjdHNUb1RhYmxlUm93cyhcbiAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkZWRJdGVtcyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMucm93TmF2aWdhdGFibGUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlLFxuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93cyxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0NvbXBhcmF0b3JcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2hvdWxkQ2hlY2tOZXdSb3dzICYmIHRoaXMuZm9yY2VDaGVja2VkQWxsU3RhdGUpIHtcbiAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgcm93LmNoZWNrZWQgPSByb3cuY2hlY2tlZCB8fCB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm93cztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2U6IFRbXSk6IFRhYmxlUm93PFQ+W10ge1xuICAgICAgICBjb25zdCBpdGVtID0gc291cmNlWzBdIGFzIGFueTtcblxuICAgICAgICBpZiAoaXNUYWJsZVJvdyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlVGFibGVSb3dUb0ZsYXRMaXN0KHNvdXJjZSBhcyBUYWJsZVJvd1tdLCB0aGlzLnJvd05hdmlnYXRhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydFRyZWVPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yLFxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpb25LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbktleSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRTdGF0ZUtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVHJpc3RhdGVNb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFRhYmxlUm93cyhyb3dzID0gdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlVGFibGVSb3dzID0gcm93cztcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzID0gWy4uLnRoaXMuX25ld1RhYmxlUm93cywgLi4udGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93c107XG4gICAgICAgIHRoaXMuX3JlSW5kZXhUYWJsZVJvd3MoKTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgICBpZiAocm93cy5sZW5ndGggJiYgIXRoaXMuX2NvbHVtbnNXaWR0aFNldCkge1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNXaWR0aFNldCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVmlzaWJsZVRhYmxlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzVmlzaWJsZSA9IHRoaXMuX3RhYmxlUm93cy5maWx0ZXIoKHJvdykgPT4gIXJvdy5oaWRkZW4pO1xuXG4gICAgICAgIGlmICh0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFJvd3NJblZpZXdwb3J0KDAsIHRoaXMuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5jb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IEFycmF5LmZyb20oUk9XX0hFSUdIVC52YWx1ZXMoKSkuaW5jbHVkZXModGhpcy5yb3dIZWlnaHQpKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLl9yb3dIZWlnaHRNYW51YWxseVNldClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY29udGVudERlbnNpdHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBST1dfSEVJR0hULmdldChjb250ZW50RGVuc2l0eSkgPz8gUk9XX0hFSUdIVC5nZXQoQ29udGVudERlbnNpdHlNb2RlLkNPWlkpITtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUucm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLmNhbGN1bGF0ZVZpcnR1YWxTY3JvbGxSb3dzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Db2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgY29uc3QgcHJldkNvbHVtbnMgPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC52YWx1ZS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbHVtbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSAmJiAhcHJldkNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlU3RhdGUoKS5jb2x1bW5zO1xuXG4gICAgICAgICAgICB0aGlzLl9idWlsZENvbHVtbnNNYXAoY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5uZXh0KGNvbHVtbnMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbFN0YXRlU2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb2x1bW5zKFsuLi5zdGF0ZUNvbHVtbnMsIC4uLm5ld0NvbHVtbnNdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5faW5pdGlhbFN0YXRlU2V0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbHVtbnMgPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC52YWx1ZS5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoIWVxdWFsKHVwZGF0ZWRDb2x1bW5zLCBjdXJyZW50Q29sdW1ucykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc3RhdGVDaGFuZ2UkLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiB7IHByZXZpb3VzOiBjdXJyZW50Q29sdW1ucywgY3VycmVudDogdXBkYXRlZENvbHVtbnMgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb2x1bW5zQ2hhbmdlJC5uZXh0KHsgcHJldmlvdXM6IGN1cnJlbnRDb2x1bW5zLCBjdXJyZW50OiB1cGRhdGVkQ29sdW1ucyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCB2aXNpYmxlIGNvbHVtbnMgZm9yIHJlbmRlcmluZyBwdXJwb3NlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zRGVmaW5pdGlvbiA9IHRoaXMuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgIGNvbnN0IHsgY29sdW1ucywgZ3JvdXBCeSB9ID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zVG9IaWRlID0gZ3JvdXBCeS5maWx0ZXIoKHsgc2hvd0FzQ29sdW1uIH0pID0+ICFzaG93QXNDb2x1bW4pLm1hcCgoeyBmaWVsZCB9KSA9PiBmaWVsZCk7XG5cbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IGNvbHVtbnMgLy8gbmVlZCB0byBzdGFydCBtYXBwaW5nIGZyb20gc3RhdGUuY29sdW1ucyBsaXN0IHRvIGtlZXAgcmlnaHQgb3JkZXJcbiAgICAgICAgICAgIC5tYXAoKG5hbWUpID0+IGNvbHVtbnNEZWZpbml0aW9uLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUpKVxuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKTogY29sdW1uIGlzIFRhYmxlQ29sdW1uID0+ICEhY29sdW1uKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBrZXkgfSkgPT4gIWdyb3VwZWRDb2x1bW5zVG9IaWRlLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICAgIGNvbnN0IFt2aXNpYmxlQ29sdW1ucywgcG9wcGluZ0NvbHVtbnNdID0gYWxsQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLnJlc3BvbnNpdmVTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjW2NvbHVtbi5yZXNwb25zaXZlU3RhdGUgPT09ICd2aXNpYmxlJyA/IDAgOiAxXS5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbW10sIFtdXSBhcyBUYWJsZUNvbHVtbltdW11cbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VmlzaWJsZUNvbHVtbnModmlzaWJsZUNvbHVtbnMpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0UG9wcGluZ0NvbHVtbnMocG9wcGluZ0NvbHVtbnMpO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVGFibGVDb2x1bW5zTGVuZ3RoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVUYWJsZUNvbHVtbnNMZW5ndGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uc0xlbmd0aCA9IHRoaXMuX3Zpc2libGVDb2x1bW5zLmxlbmd0aCArICh0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duID8gMSA6IDApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNTaG93bk5hdmlnYXRpb25Db2x1bW4kLm5leHQodGhpcy5fdGFibGVSb3dzLnNvbWUoKHRhYmxlUm93KSA9PiB0YWJsZVJvdy5uYXZpZ2F0YWJsZSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0RnJlZXphYmxlSW5mbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZnJlZXphYmxlQ29sdW1ucyA9IGdldEZyZWV6YWJsZUNvbHVtbnModGhpcy5fdmlzaWJsZUNvbHVtbnMsIHRoaXMuZnJlZXplQ29sdW1uc1RvKTtcbiAgICAgICAgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucyA9IGdldEZyZWV6YWJsZUVuZENvbHVtbnModGhpcy5fdmlzaWJsZUNvbHVtbnMsIHRoaXMuZnJlZXplRW5kQ29sdW1uc1RvKTtcbiAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgY29sdW1uLl9mcmVlemVkID0gdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5oYXMoY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgY29sdW1uLl9lbmRGcmVlemVkID0gdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5oYXMoY29sdW1uLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2J1aWxkQ29sdW1uc01hcChjb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5VG9Db2x1bW5NYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjb2x1bW4pID0+IFtjb2x1bW4ua2V5LCBjb2x1bW5dKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVDaGVja2VkQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlUm93cyA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KTtcbiAgICAgICAgY29uc3QgdG90YWxTZWxlY3RlZCA9IHNlbGVjdGFibGVSb3dzLmZpbHRlcigocikgPT4gci5jaGVja2VkKTtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFsbCA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID09PSBzZWxlY3RhYmxlUm93cy5sZW5ndGggJiYgc2VsZWN0YWJsZVJvd3MubGVuZ3RoICE9PSAwO1xuICAgICAgICB0aGlzLl9jaGVja2VkQW55ID0gdG90YWxTZWxlY3RlZC5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLl9jaGVja2VkU3RhdGUgPSB0aGlzLl9jaGVja2VkQWxsID8gdHJ1ZSA6IHRoaXMuX2NoZWNrZWRBbnkgPyBudWxsIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0cmlzdGF0ZSBzZWxlY3Rpb24gbW9kZSB0byB0aGUgdHJlZS4gSXQgc3RhcnRzIHdpdGggdXBkYXRpbmcgYSBzdGF0ZSBmb3IgYWxsIHRoZSBwYXJlbnRzIGFuZCB0aGVuXG4gICAgICogdG8gY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZVRyaXN0YXRlTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdywgYWRkZWRSb3dzLCByZW1vdmVkUm93cyk7XG4gICAgICAgIHRoaXMuX2FwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbihyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub1BhcmVudHMocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFJvdyA9IHJvdy5wYXJlbnQ7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZmluZFJvd0NoaWxkcmVuKGN1cnJlbnRSb3csIHRoaXMuX3RhYmxlUm93cykuZmlsdGVyKChyKSA9PiByLnBhcmVudCA9PT0gY3VycmVudFJvdyk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbENoZWNrZWQ6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsSW5kZXRlcm1pbmF0ZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyLmNoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxDaGVja2VkLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyLmNoZWNrZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdG90YWxJbmRldGVybWluYXRlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkQWxsID0gdG90YWxDaGVja2VkLmxlbmd0aCA9PT0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFueSA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICBjdXJyZW50Um93LmNoZWNrZWQgPSBjaGVja2VkQWxsID8gdHJ1ZSA6IGNoZWNrZWRBbnkgfHwgdG90YWxJbmRldGVybWluYXRlLmxlbmd0aCA+IDAgPyBudWxsIDogZmFsc2U7XG4gICAgICAgICAgICBjdXJyZW50Um93LmNoZWNrZWQgfHwgY3VycmVudFJvdy5jaGVja2VkID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBhZGRlZFJvd3MucHVzaChjdXJyZW50Um93KVxuICAgICAgICAgICAgICAgIDogcmVtb3ZlZFJvd3MucHVzaChjdXJyZW50Um93KTtcblxuICAgICAgICAgICAgY3VycmVudFJvdyA9IGN1cnJlbnRSb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93OiBUYWJsZVJvdywgYWRkZWRSb3dzOiBUYWJsZVJvdzxUPltdLCByZW1vdmVkUm93czogVGFibGVSb3c8VD5bXSk6IHZvaWQge1xuICAgICAgICBhcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4odGhpcy5fdGFibGVSb3dzLCByb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5zY3JvbGxlZCgpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMucGFnZVNjcm9sbGluZykpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBzY3JvbGxhYmxlLmdldFNjcm9sbFRvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTY3JvbGxlZC5lbWl0KHNjcm9sbFRvcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBoYXZpbmcgdHdvIHBsYWNlcyB0byByZWNvcmQgdGhpcyBwb3NzaXRpb24sIHdlIGNvdWxkIGp1c3Qgc3Vic2NyaWJlIG9uY2UuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGFibGVTdGF0ZSgpLnNjcm9sbFRvcFBvc2l0aW9uID0gc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm1hcmtGb3JDaGVjayQucGlwZShkZWJvdW5jZVRpbWUoNSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmRldGVjdENoYW5nZXMkLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVXaWR0aENoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZUNvbnRhaW5lclNjcm9sbFdpZHRoID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDZWxsTW9jaygpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgdGhpcy5fZnJlZXphYmxlRW5kQ29sdW1ucy5zaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UudXBkYXRlRnJvemVuQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3RhYmxlU2Nyb2xsV2lkdGggPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tDZWxsTW9jaygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVDb250YWluZXJNb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmhpZGVSZXNpemVyKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRTY3JvbGxQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcblxuICAgICAgICBpZiAoIXN0YXRlLnNjcm9sbFRvcFBvc2l0aW9uIHx8IHRoaXMuX3RhYmxlUm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsYWJsZS5pbml0aWFsaXplU2Nyb2xsVG9wKHN0YXRlLnNjcm9sbFRvcFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzZXRzIGVkaXRhYmxlIHJvd3MgZGlzY2FyZGluZyB0aGUgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNldEVkaXRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gW107XG4gICAgICAgIHRoaXMuX2FkZGVkSXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTG9hZGluZ0FuZFJlZm9jdXNDZWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUxvYWRpbmckLnBpcGUoZmlsdGVyKChsb2FkaW5nU3RhdGUpID0+ICFsb2FkaW5nU3RhdGUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFibGVIZWFkZXJSZXNpemVyLmZvY3VzZWRDZWxsUG9zaXRpb24gJiYgdGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5mb2N1c0NlbGwodGhpcy5fdGFibGVIZWFkZXJSZXNpemVyLmZvY3VzZWRDZWxsUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25ab25lRnJlZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nJC5uZXh0KHRoaXMuc2VtYW50aWNIaWdobGlnaHRpbmcpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgkLm5leHQodGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZWxlY3Rpb25Db2x1bW5XaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uQ29sdW1uV2lkdGggPSB0aGlzLmlzU2VsZWN0aW9uQ29sdW1uU2hvd24oKVxuICAgICAgICAgICAgPyBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILmdldCh0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIudmFsdWUpID8/IDBcbiAgICAgICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrQ2VsbE1vY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5jZWxsTW9ja1Zpc2libGUkLm5leHQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZml4ZWRXaWR0aCAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKSA+ICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKVxuICAgICAgICApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdGVucyB0byBmaXhlZCBjb2x1bW4gd2lkdGggc3ViamVjdCBhbmQgY2FsY3VsYXRlcyBsYXN0IGFwcGxpY2FibGUgZnJvemVuIGNvbHVtbiBiYXNlZCBvbiBgbm9uRnJvemVuQ29sdW1uc01pbldpZHRoYCB2YXVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvRml4ZWRDb2x1bW5zV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZyb3plbkNvbHVtblJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlRnJvemVuQ29sdW1uUmVmcmVzaCQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmZpeGVkQ29sdW1zV2lkdGhDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9jYWxjdWxhdGVGcm96ZW5Db2x1bW5SZWZyZXNoJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2NhbGN1bGF0ZUxhc3RGcmVlemFibGVDb2x1bW4oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVMYXN0RnJlZXphYmxlQ29sdW1uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGFibGVTY3JvbGxhYmxlIHx8IHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RGcmVlemFibGVDb2x1bW5DYWxjdWxhdGlvbiA9IHRydWU7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZml4ZWRDb2x1bXNXaWR0aENoYW5nZS52YWx1ZTtcbiAgICAgICAgY29uc3QgYWxsRnJvemVuQ29sdW1ucyA9IHVuaXEoW1xuICAgICAgICAgICAgLi4udGhpcy5fZnJlZXphYmxlQ29sdW1ucy5rZXlzKCksXG4gICAgICAgICAgICB0aGlzLmZyZWV6ZUNvbHVtbnNUbyxcbiAgICAgICAgICAgIC4uLnRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMua2V5cygpXG4gICAgICAgIF0pO1xuICAgICAgICBjb25zdCBjb2x1bW5TaXplID0ge1xuICAgICAgICAgICAgZnJvemVuOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgICAgICAgICAgdW5Gcm96ZW46IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KClcbiAgICAgICAgfTtcbiAgICAgICAgYWxsQ29sdW1ucy5mb3JFYWNoKChzaXplLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtblNpemVbYWxsRnJvemVuQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pID8gJ2Zyb3plbicgOiAndW5Gcm96ZW4nXS5zZXQoY29sdW1uLCBwYXJzZUludChzaXplLCAxMCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmcm96ZW5Db2x1bW5TaXplcyA9IFsuLi5jb2x1bW5TaXplLmZyb3plbi52YWx1ZXMoKV07XG5cbiAgICAgICAgaWYgKGZyb3plbkNvbHVtblNpemVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbEZyb3plblNpemUgPSBbLi4uY29sdW1uU2l6ZS5mcm96ZW4udmFsdWVzKCldLnJlZHVjZSgoc3VtLCBzaXplKSA9PiBzdW0gKyBzaXplKTtcblxuICAgICAgICBsZXQgZGlmZiA9IHRoaXMudGFibGVTY3JvbGxhYmxlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHRvdGFsRnJvemVuU2l6ZTtcbiAgICAgICAgY29uc3QgZnJlZXplZENvbHVtbnMgPSBbLi4udGhpcy5fZnJlZXphYmxlQ29sdW1ucy5rZXlzKCldO1xuXG4gICAgICAgIGlmIChkaWZmID49IHRoaXMubm9uRnJvemVuQ29sdW1uc01pbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0RnJlZXphYmxlQ29sdW1uQ2FsY3VsYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0Q29sdW1uOiBzdHJpbmc7XG5cbiAgICAgICAgd2hpbGUgKGRpZmYgPCB0aGlzLm5vbkZyb3plbkNvbHVtbnNNaW5XaWR0aCkge1xuICAgICAgICAgICAgaWYgKGZyZWV6ZWRDb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsYXN0Q29sdW1uID0gZnJlZXplZENvbHVtbnMucG9wKCkhO1xuICAgICAgICAgICAgZGlmZiArPSBjb2x1bW5TaXplLmZyb3plbi5nZXQobGFzdENvbHVtbikhO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbGFzdEZyZWV6YWJsZUNvbHVtbkNhbGN1bGF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5mcmVlemVUb0NvbHVtbihmcmVlemVkQ29sdW1uc1tmcmVlemVkQ29sdW1ucy5sZW5ndGggLSAxXSk7XG4gICAgfVxufVxuIiwiPCEtLSBUb29sYmFyIC0tPlxuPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwidGFibGVUb29sYmFyXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVRvb2xiYXIuY29udGVudFRlbXBsYXRlUmVmXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiX3Rvb2xiYXJDb250ZXh0XCJcbj48L25nLWNvbnRhaW5lcj5cblxuPGZkLWJ1c3ktaW5kaWNhdG9yXG4gICAgW2xvYWRpbmddPVwiKF90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJCB8IGFzeW5jKSA9PT0gdHJ1ZSAmJiBfZGF0YVNvdXJjZURpcmVjdGl2ZS5fZmlyc3RMb2FkaW5nRG9uZVwiXG4gICAgW2Jsb2NrXT1cInRydWVcIlxuPlxuICAgIDwhLS0gVGFibGUgQ29udGFpbmVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdGFibGVfX2NvbnRhaW5lclwiICN0YWJsZUNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBjb2x1bW4gcmVzaXplciBmb3IgdmlzdWFsbHkgcmVwcmVzZW50aW5nIHRoZSByZXNpemluZyBwcm9jZXNzIC0tPlxuICAgICAgICA8ZmRwLXRhYmxlLWNvbHVtbi1yZXNpemVyICpuZ0lmPVwiZW5hYmxlRHJhZ1Jlc2l6ZVwiIGNsYXNzPVwiZmRwLXRhYmxlX19jb2x1bW4tcmVzaXplclwiPjwvZmRwLXRhYmxlLWNvbHVtbi1yZXNpemVyPlxuICAgIDwvZGl2PlxuPC9mZC1idXN5LWluZGljYXRvcj5cblxuPCEtLSBUYWJsZSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjdGFibGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19ib2R5IGZkLXNjcm9sbGJhclwiXG4gICAgICAgIFtjbGFzcy5mZHAtdGFibGVfX2JvZHktLXZpcnR1YWwtc2Nyb2xsXT1cIiEhX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxcIlxuICAgICAgICBmZHBUYWJsZVNjcm9sbGFibGVcbiAgICAgICAgI3RhYmxlU2Nyb2xsYWJsZT1cInRhYmxlU2Nyb2xsYWJsZVwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiYm9keUhlaWdodFwiXG4gICAgICAgIFtjbGFzcy5maXhlZC1oZWlnaHRdPVwiISFib2R5SGVpZ2h0XCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJwYWdlU2Nyb2xsaW5nID8gJ2ZlZWQnIDogbnVsbFwiXG4gICAgICAgIFtjbGFzcy5mZC10YWJsZS0tZml4ZWRdPVwiX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCBmaXhlZFwiXG4gICAgPlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICAgIGZkLXRhYmxlXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cImlzVHJlZVRhYmxlID8gJ3RyZWVncmlkJyA6ICdncmlkJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fYm9keS10YWJsZVwiXG4gICAgICAgICAgICBbYWxsQ2VsbHNGb2N1c2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcG9wSW5dPVwiX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlLS1uby1vdXRlci1ib3JkZXJdPVwibm9PdXRlckJvcmRlcnNcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9hcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0aGVhZCBmZC10YWJsZS1oZWFkZXIgY2xhc3M9XCJmZHAtdGFibGVfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtaGVhZGVyLXJvd1xuICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICBbZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgICAgICAgICBbaXNTaG93blNlbGVjdGlvbkNvbHVtbl09XCJpc1NlbGVjdGlvbkNvbHVtblNob3duKClcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZFN0YXRlXT1cIl9jaGVja2VkU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db2x1bW5XaWR0aF09XCJfc2VsZWN0aW9uQ29sdW1uV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBbZnJlZXplQ29sdW1uc1RvXT1cImZyZWV6ZUNvbHVtbnNUb1wiXG4gICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgKGZka0NsaWNrZWQpPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlU2VsZWN0aW9uQ2hlY2tib3hdPVwiX2RhdGFTb3VyY2VUYWJsZVJvd3MubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICEhdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgZW1wdHlUYWJsZVRlbXBsYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBmZC10YWJsZS1ib2R5XG4gICAgICAgICAgICAgICAgZmRrRG5kTGlzdFxuICAgICAgICAgICAgICAgICN0YWJsZUJvZHlcbiAgICAgICAgICAgICAgICBbZHJhZ292ZXJQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnb3ZlclByZWRpY2F0ZVwiXG4gICAgICAgICAgICAgICAgW2Ryb3BQcmVkaWNhdGVdPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICBbbm9Cb3JkZXJYXT1cIm5vQm9yZGVyWCB8fCBub0JvcmRlcnNcIlxuICAgICAgICAgICAgICAgIFtub0JvcmRlclldPVwibm9Cb3JkZXJZIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cInBhZ2VTY3JvbGxpbmcgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJfZG5kVGFibGVSb3dzUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIFtkcm9wTW9kZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BNb2RlID8/ICdncm91cCdcIlxuICAgICAgICAgICAgICAgIChpdGVtRHJvcHBlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wSXRlbURyb3AoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyb3BQcmVkaWNhdGVDYWxjdWxhdGluZyk9XCJfY2FsY3VsYXRpbmdMb2FkaW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkcm9wQ2FuY2VsbGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcENhbmNlbGxlZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dJbmRleCBvZiBfdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyOyB0cmFja0J5OiBfcm93VHJhY2tCeVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RhYmxlUm93c1Zpc2libGVbcm93SW5kZXhdIGFzIHJvd1wiIFtuZ1N3aXRjaF09XCJyb3cudHlwZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1ncm91cC1yb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJhZ2dhYmxlXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2V5VG9Db2x1bW5NYXBdPVwiX2tleVRvQ29sdW1uTWFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFibGVDb2x1bW5zTGVuZ3RoXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2dnbGVHcm91cFJvdyk9XCJfdG9nZ2xlR3JvdXBSb3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9lbWl0Um93QWN0aXZhdGUocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtEbmRJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGx5RHJhZ0l0ZW1DbGFzc109XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvdyB8IHJvd0NsYXNzZXMgOiByb3dzQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJyb3dzQWN0aXZhYmxlIHx8ICEhcm93Lm5hdmlnYXRhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9jdXNhYmxlXT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtob3ZlcmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCBpc1NlbGVjdGlvbkNvbHVtblNob3duKCkgfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJyb3dJbmRleCA9PT0gX25hdmlnYXRlZFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0QWN0aXZlXT1cImhpZ2hsaWdodE5hdmlnYXRlZFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiaXNUcmVlVGFibGUgPyByb3cubGV2ZWwgKyAxIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZka0NsaWNrZWQpPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhcnRlZCk9XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21haW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlX19yb3ctLWRyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1RyZWVSb3ddPVwicm93LmlzVHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVLZXldPVwic2VsZWN0YWJsZUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVRyaXN0YXRlTW9kZV09XCJlbmFibGVUcmlzdGF0ZU1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy50eXBlID09PSAnaXRlbScgJiYgX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1wb3BwaW5nLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3NlcyA6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrZWQpPVwiX29uQ2VsbENsaWNrKCRldmVudC5pbmRleCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAocm93LmNoaWxkSXRlbXNMb2FkaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhc3QgcmVuZGVyZWQgY2hpbGQgcm93LiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cucGFyZW50Py5sYXN0Q2hpbGQ/LmluZGV4ID09PSByb3cuaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHJvdy5wYXJlbnQhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZCAqIC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX29uU3B5SW50ZXJzZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuXG4gICAgICAgICAgICA8dGJvZHkgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCIgY2xhc3M9XCJmZC10YWJsZV9fYm9keV9fZm9jdXMtbW9ja1wiPjwvdGJvZHk+XG5cbiAgICAgICAgICAgIDwhLS0gdGhlIHRib2R5IGVsZW1lbnQgYmVsb3cgaXMgc28gdGhlIHNjcm9sbGJhciByZW5kZXJzIGNvcnJlY3RseSAtLT5cbiAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMCVcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHRcIj48L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFbXB0eSBUYWJsZSBNZXNzYWdlIC0tPlxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVGVtcGxhdGU+XG4gICAgPHRib2R5ICpuZ0lmPVwiIV9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keT5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiIHR5cGU9XCJ0ZXh0XCIgdGV4dExpbmVzPVwiMVwiIHdpZHRoPVwiNjAlXCI+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cblxuICAgIDx0Ym9keSAqbmdJZj1cIl9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keSBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHlcIj5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdz5cbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwiZmQtdGFibGVfX2NlbGwtLW5vLWRhdGFcIiBbYXR0ci5jb2xzcGFuXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eS10YWJsZS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNub0RhdGFXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkcC10YWJsZS1uby1kYXRhLXdyYXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbm9EYXRhV3JhcHBlci5oYXNDaGlsZE5vZGVzKCkgJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eVRhYmxlTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUuZGVmYXVsdEVtcHR5TWVzc2FnZScgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub1Zpc2libGVDb2x1bW5zTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUubm9WaXNpYmxlQ29sdW1uc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuIl19
|