barsa-sap-ui 1.0.415 → 1.0.417
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/lib/barsa-asp-viewer/barsa-asp-viewer.component.mjs +6 -4
- package/esm2020/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.mjs +28 -0
- package/esm2020/lib/barsa-sap-ui.module.mjs +20 -19
- package/esm2020/lib/barsa-table-row/barsa-table-row.component.mjs +3 -3
- package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +3 -3
- package/esm2020/lib/index.mjs +9 -4
- package/esm2020/lib/sap-ui-report-base.component.mjs +4 -1
- package/esm2020/lib/ui-asp-report-viewer/ui-asp-report-viewer.component.mjs +3 -3
- package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +3 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/barsa-sap-ui.mjs +52 -16
- package/fesm2015/barsa-sap-ui.mjs.map +1 -1
- package/fesm2020/barsa-sap-ui.mjs +50 -16
- package/fesm2020/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-asp-viewer/barsa-asp-viewer.component.d.ts +1 -1
- package/lib/barsa-report-checkbox-switch-button/barsa-report-checkbox-switch-button.component.d.ts +15 -0
- package/lib/barsa-sap-ui.module.d.ts +29 -28
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -213,6 +213,9 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
|
|
|
213
213
|
this._removeCheckedAll();
|
|
214
214
|
this._rowCheck(mo, moIndex, true);
|
|
215
215
|
}
|
|
216
|
+
if (this.viewSetting?.DisableShowFormOnDoubleClick) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
216
219
|
this._openMo(mo, moIndex);
|
|
217
220
|
}
|
|
218
221
|
onUlvCommand($event) {
|
|
@@ -743,4 +746,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
743
746
|
}], RefreshFormPanelControl: [{
|
|
744
747
|
type: Input
|
|
745
748
|
}] } });
|
|
746
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUNILFFBQVEsRUFLUixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFJZixtQkFBbUIsRUFLbkIsZUFBZSxFQUNmLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1B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QyxDQUFDOztxSEE3d0JRLHdCQUF3Qix1UkE4RXJCLFFBQVE7eUdBOUVYLHdCQUF3QixnUUFJdEIsY0FBYyxtRkFDZCxnQkFBZ0Isc0pBRWIsc0JBQXNCLHVFQVYxQixFQUFFOzJGQUdILHdCQUF3QjtrQkFMcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQStFUSxNQUFNOzJCQUFDLFFBQVE7OzBCQUNmLFFBQVE7OzBCQUFJLElBQUk7NENBM0VNLGNBQWM7c0JBQXhDLFNBQVM7dUJBQUMsY0FBYztnQkFDSSxnQkFBZ0I7c0JBQTVDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNBLFlBQVk7c0JBQXRDLFlBQVk7dUJBQUMsV0FBVztnQkFFekIsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLHNCQUFzQjtnQkE4VjNCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLHVCQUF1QjtzQkFBL0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBPdmVybGF5LCBTY3JvbGxTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHksXG4gICAgQ29udGVudERlbnNpdHlTZXJ2aWNlLFxuICAgIERpYWxvZ0NvbmZpZyxcbiAgICBEaWFsb2dTZXJ2aWNlLFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRvb2xiYXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBCYXJzYUFwaSxcbiAgICBjb2x1bW5zUmVzaXplZEV2ZW50QXJncyxcbiAgICBEZWZhdWx0Q29tbWFuZHNBY2Nlc3MsXG4gICAgRGV2aWNlU2l6ZSxcbiAgICBGb3JtUGFuZWxTZXJ2aWNlLFxuICAgIEdldEFsbENvbHVtbnNTb3J0ZWQsXG4gICAgZ2V0Q29udHJvbFNpemVNb2RlLFxuICAgIGdldEdyaWRTZXR0aW5ncyxcbiAgICBMYXlvdXRTZXJ2aWNlLFxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgUG9ydGFsU2VydmljZSxcbiAgICBSZXBvcnRCYXNlQ29tcG9uZW50LFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmcsXG4gICAgVWx2TWFpblNlcnZpY2UsXG4gICAgU2hhcmVCdXR0b25zQ2hvaWNlRGVmLFxuICAgIGdldFBhcmVudEhlaWdodCxcbiAgICBtZWFzdXJlVGV4dCxcbiAgICBnZXRVbmlxdWVJZCxcbiAgICBTZWxlY3Rpb25Nb2RlXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IExheW91dENvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1jb250cm9sL2xheW91dC1jb250cm9sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTW9EYXRhTGlzdCB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFVsdkNvbHVtblNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtY29sdW1uLXNldHRpbmdzL3Vsdi1jb2x1bW4tc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LXNvcnQtc2V0dGluZ3MvdWx2LXNvcnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWdyb3VwYnktc2V0dGluZ3MvdWx2LWdyb3VwYnktc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtZmlsdGVyLXNldHRpbmdzL3Vsdi1maWx0ZXItc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3Utc2FwLXVpLXJlcG9ydC1iYXNlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2FwVWlSZXBvcnRCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZz5cbiAgICBleHRlbmRzIFJlcG9ydEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgQFZpZXdDaGlsZChUYWJsZUNvbXBvbmVudCkgdGFibGVDb21wb25lbnQ6IFRhYmxlQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoVG9vbGJhckNvbXBvbmVudCkgdG9vbGJhckNvbXBvbmVudDogVG9vbGJhckNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkcmVuKCd0YWJsZVJvd3MnKSB0YWJsZVJvd3NSZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgICBAVmlld0NoaWxkcmVuKExheW91dENvbnRyb2xDb21wb25lbnQpXG4gICAgbGF5b3V0Q29udHJvbHNSZWY6IFF1ZXJ5TGlzdDxMYXlvdXRDb250cm9sQ29tcG9uZW50PjtcbiAgICB1c2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wgPSBmYWxzZTtcbiAgICBoYXNTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgc2hvd09rQ2FuY2VsQnV0dG9uczogYW55O1xuICAgIHBhcmVudEhlaWdodCA9IDA7XG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7XG4gICAgICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxuICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IHRydWUsXG4gICAgICAgIG1pbldpZHRoOiAnNDByZW0nLFxuICAgICAgICBtaW5IZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzEwMHZoJyxcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlXG4gICAgfTtcbiAgICBpZCA9IGBSZXBvcnRfJHtnZXRVbmlxdWVJZCgzKX1gO1xuICAgIHNlbGVjdGVkUm93c051bWJlciA9IHt9O1xuICAgIHNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbkFkYXB0ZXJIYW5kbGVyOiB7XG4gICAgICAgIHNjb3BlOiBhbnk7XG4gICAgICAgIHJvd3NlbGVjdDogYW55O1xuICAgICAgICByb3dkZXNlbGVjdDogYW55O1xuICAgICAgICBiZWZvcmVyb3dzZWxlY3Q6IGFueTtcbiAgICB9O1xuICAgIG5hdmlnYXRpb25BcnJvdyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBjdXN0b21Sb3dIZWlnaHQ6IGFueTtcbiAgICByb3dDbGljayA9IHRydWU7XG4gICAgY2VsbENsaWNrID0gZmFsc2U7XG4gICAgZGV2aWNlTmFtZSQ6IE9ic2VydmFibGU8RGV2aWNlU2l6ZT47XG4gICAgbW9iaWxlT3JUYWJsZXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVwb3J0Vmlld0NvbHVtbltdPihbXSk7XG4gICAgc2Vjb25kYXJ5Q29sdW1ucyQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgcG9waW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG4gICAgaGFzRGV0YWlsc0luUm93ID0gZmFsc2U7XG4gICAgcm93QWN0aXZhYmxlID0gdHJ1ZTtcbiAgICBvcGVuT3ZlcmZsb3dDb21tYW5kczogYm9vbGVhbltdID0gW107XG4gICAgY29udGFpbmVyV2lkdGhTb3VyY2UkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICAgIGNsb3NlU2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xuICAgIHJvd0hvdmVyYWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlO1xuICAgIGNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBzZWNvbmRhcnlDb2x1bW5zQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgY29udGFpbmVyV2lkdGgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgY29sdW1ucyQ6IE9ic2VydmFibGU8UmVwb3J0Vmlld0NvbHVtbltdPjtcbiAgICBncmlkRGF0YVNvdXJjZTogR3JpZE1vRGF0YUxpc3Q7XG4gICAgc2luZ2xlU2VsZWN0aW9uID0gU2VsZWN0aW9uTW9kZS5TSU5HTEU7XG4gICAgbXVsdGlwbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xuICAgIGFsbG93SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgaW5saW5lRWRpdE1vZGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIG9ubHlJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBmb3JtUGFuZWxDdHJscjogYW55O1xuICAgIGxheW91dCQ6IE9ic2VydmFibGU8YW55PjtcbiAgICBydGwkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHJlcG9ydElkOiBzdHJpbmc7XG4gICAgdmlld1NldHRpbmc6IFQ7XG4gICAgZGlzYWJsZVJlc3BvbnNpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHByb3RlY3RlZCBfZGV2aWNlTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGV2aWNlU2l6ZT4oJ2Rlc2t0b3AnKTtcbiAgICBwcml2YXRlIF9vbGRDb250YWluZXI6IGFueTtcbiAgICBwcml2YXRlIF9vcGVuT25DbGljazogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJvdGVjdGVkIF9jb250ZW50RGVuc2l0eVNlcnZpY2U6IENvbnRlbnREZW5zaXR5U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9wb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfdWx2TWFpblNlcnZpY2U6IFVsdk1haW5TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2xheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByb3RlY3RlZCBfZm9ybXBhbmVsU2VydmljZTogRm9ybVBhbmVsU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfcG9ydGFsU2VydmljZSwgX3Vsdk1haW5TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCQgPSB0aGlzLmNvbnRhaW5lcldpZHRoU291cmNlJFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgIHRoaXMuZGV2aWNlTmFtZSQgPSB0aGlzLl9kZXZpY2VOYW1lU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVSZXNwb25zaXZlJCA9IHRoaXMuZGV2aWNlTmFtZSQucGlwZShtYXAoKGMpID0+IGMgPT09ICdkZXNrdG9wJykpO1xuICAgICAgICB0aGlzLm1vYmlsZU9yVGFibGV0JCA9IHRoaXMuZGV2aWNlTmFtZSQucGlwZShtYXAoKGRldmljZSkgPT4gZGV2aWNlID09PSAnbW9iaWxlJyB8fCBkZXZpY2UgPT09ICd0YWJsZXQnKSk7XG4gICAgICAgIHRoaXMuX29sZENvbnRhaW5lciA9IEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuQ3VycmVudFN5c3RlbUFkYXB0ZXI7XG4gICAgICAgIHRoaXMuY2xvc2VTY3JvbGxTdHJhdGVneSA9IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5JCA9IHRoaXMuX2NvbnRlbnREZW5zaXR5U2VydmljZS5jb250ZW50RGVuc2l0eTtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zQ291bnQkID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zJC5waXBlKG1hcCgoY29sdW1ucykgPT4gY29sdW1ucy5sZW5ndGgpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ291bnQkID0gdGhpcy52aXNpYmxlQ29sdW1ucyQucGlwZShcbiAgICAgICAgICAgIG1hcCgoY29sdW1ucykgPT4gY29sdW1ucy5sZW5ndGgpLFxuICAgICAgICAgICAgbWFwKChjb3VudDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LCAnU2V0dGluZy5FeHRyYS5EZWZhdWx0Q29tbWFuZHNBY2Nlc3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXNzPy5WaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChjb3VudDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIG9uUmVzZXRXb3JrZmxvd1N0YXRlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vLiRXb3JrZmxvd1N0YXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KCk7XG4gICAgfVxuXG4gICAgZ2V0IF90eXBlRGVmSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhLlJlcG9ydC5UeXBlRGVmSWQ7XG4gICAgfVxuICAgIGdldCBfaW5saW5lRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5nZXRWYWx1ZUlubGluZUVkaXQoKTtcbiAgICB9XG4gICAgZ2V0IF9hbGxvd0lubGluZUVkaXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5nZXRBbGxvd0lubGluZUVkaXQoKTtcbiAgICB9XG4gICAgZ2V0IF9hY2Nlc3MoKTogRGVmYXVsdENvbW1hbmRzQWNjZXNzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzO1xuICAgIH1cbiAgICBzZXQgX2FjY2Vzcyh2YWw6IERlZmF1bHRDb21tYW5kc0FjY2Vzcykge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2VzcyA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhID0geyBEZWZhdWx0Q29tbWFuZHNBY2Nlc3M6IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRQYXJlbnRIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5fcmVhZFZpZXdTZXR0aW5nKCk7XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0QWNjZXNzKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5zaG93T2tDYW5jZWxCdXR0b25zID0gdGhpcy5jb250ZXh0LlNob3dPa0NhbmNlbEJ1dHRvbnM7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmxheW91dEluZm8kLnN1YnNjcmliZSgobGF5b3V0SW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKGxheW91dEluZm8gJiYgbGF5b3V0SW5mby5Vc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudmlld1NldHRpbmc/LlRpdGxlO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZXBvcnRJZCQuc3Vic2NyaWJlKChyZXBvcnRJZCkgPT4gKHRoaXMucmVwb3J0SWQgPSByZXBvcnRJZCkpO1xuICAgICAgICB0aGlzLl9sYXlvdXRTZXJ2aWNlLnNldFJlbmRlcmVkKHRydWUpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPSB0aGlzLmNvbnRleHQuVmlld1NldHRpbmc/LklzQ2hlY2tMaXN0ID8gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA6IHRoaXMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLl9vcGVuT25DbGljayA9IHRoaXMudmlld1NldHRpbmc/Lk9wZW5PbkNsaWNrO1xuICAgICAgICB0aGlzLmN1c3RvbVJvd0hlaWdodCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcsXG4gICAgICAgICAgICAnRXh0cmEuRXh0cmFKc29uUHJvcFJlcG9ydC5HcmlkUm93SGVpZ2h0J1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJ0bCQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnJ0bCQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkFycm93JCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJC5waXBlKFxuICAgICAgICAgICAgbWFwKChpc1J0bCkgPT4gKGlzUnRsID8gJ25hdmlnYXRpb24tbGVmdC1hcnJvdycgOiAnbmF2aWdhdGlvbi1yaWdodC1hcnJvdycpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFsbG93SW5saW5lRWRpdCQgPSB0aGlzLl91bHZNYWluU2VydmljZS5hbGxvd0lubGluZUVkaXQkO1xuICAgICAgICB0aGlzLmlubGluZUVkaXRNb2RlJCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmlubGluZUVkaXRNb2RlJDtcbiAgICAgICAgdGhpcy5vbmx5SW5saW5lRWRpdCQgPSB0aGlzLl91bHZNYWluU2VydmljZS5vbmx5SW5saW5lRWRpdCQ7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldENhblNhdmVHcmlkU2V0dGluZ3ModGhpcy52aWV3U2V0dGluZz8uQ2FuU2F2ZUdyaWRTZXR0aW5nKTtcbiAgICAgICAgdGhpcy5oYXNTZWxlY3RlZCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChtb0xpc3QpID0+IG1vTGlzdC5zb21lKChjKSA9PiBjLiRJc0NoZWNrZWQpKSk7XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChpdGVtcykgPT4gdGhpcy5fbWFwQ2FydGFibGVNbyhpdGVtcykpKTtcbiAgICAgICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBuZXcgR3JpZE1vRGF0YUxpc3QoXG4gICAgICAgICAgICB0aGlzLm1vRGF0YUxpc3QkLFxuICAgICAgICAgICAgdGhpcy5ncmlkU2V0dGluZyQsXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zJCxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSRcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmdyaWREYXRhU291cmNlID0gZ3JpZERhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuY29sdW1ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmdyaWRTZXR0aW5nJCwgdGhpcy5zZWNvbmRhcnlDb2x1bW5zJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtfLCBzZWNvbmRhcnlDb2x1bW5zXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZGFyaWVzID0gc2Vjb25kYXJ5Q29sdW1ucy5tYXAoKGMpID0+IGMuTmFtZSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBHZXRBbGxDb2x1bW5zU29ydGVkKHRoaXMuY29udGV4dCkuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gXz8uU29ydFNldHRpbmdMaXN0Py5maWx0ZXIoKGMpID0+IGMuSXNHcm91cGVkKS5tYXAoKGMpID0+IGMuTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiBncm91cGVkQ29sdW1ucy5pbmRleE9mKGMuTmFtZSkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnMuZmlsdGVyKChjKSA9PiBzZWNvbmRhcmllcy5pbmRleE9mKGMuTmFtZSkgPT09IC0xKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKChjb2x1bW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjOiBSZXBvcnRWaWV3Q29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMuJENTU0NsYXNzTmFtZSA9ICdjb2x1bW5fX0ZpZWxkVHlwZScgKyBjLkZpZWxkVHlwZUlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5GaWVsZFR5cGVJZCA9PT0gMzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuJFdpZHRoID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtID09PSAnSW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICczOHB4JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuJFdpZHRoID0gIUJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNVc2VyTG9nZ2VkSW4gLy8gaWYgdXNlciBpcyBhbm9ueW1vdXMgYWxsIGNvbHVtbiB3aWR0aCBlcXVhbHMgdG8gMTAwJVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLldpZHRoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYy5XaWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxMDAlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkLnBpcGUoXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhhc1NlbGVjdGVkJCksXG4gICAgICAgICAgICBmaWx0ZXIoKFtfLCBfX10pID0+IHRoaXMuX2FjY2Vzcy5BZGQgIT09IGZhbHNlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJXaWR0aCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRXhlY3V0ZVRvb2xiYXJCdXR0b24oZTogeyBpdGVtSWQ6IHN0cmluZzsgb3B0aW9ucz86IGFueSB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgaXRlbUlkLCBvcHRpb25zIH0gPSBlO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5leGVjdXRlVG9vbGJhckJ1dHRvbihpdGVtSWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBvbkVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KCF0aGlzLl9pbmxpbmVFZGl0TW9kZSk7XG4gICAgfVxuICAgIG9uU2VsZWN0TmV4dElubGluZVJlY29yZChtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTtcbiAgICB9XG5cbiAgICBvbkVkaXRGb3JtUGFuZWxTYXZlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vKTtcbiAgICB9XG5cbiAgICBvbkVkaXRGb3JtUGFuZWxDYW5jZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWQgPSBtb0RhdGFMaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG4gICAgICAgIGlmIChoYXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xuICAgICAgICAgICAgdGhpcy5fc2V0SW5saW5lRWRpdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5saW5lRm9ybVBhbmVsVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBvbkNvbHVtblJlc2l6ZWQoY29sdW1uczogY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQ29sdW1uc1Jlc2l6ZWQoY29sdW1ucyk7XG4gICAgfVxuICAgIG9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFkZFdvcmtmbG93QnV0dG9uc0luVG9vbGJhcihlKTtcbiAgICB9XG4gICAgb25Sb3dDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBpZiAobW8uZ3JvdXAgfHwgdGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICBpZiAoIW1vLiRJc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUNoZWNrZWRBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG1vLCBtb0luZGV4LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcGVuTW8obW8sIG1vSW5kZXgpO1xuICAgIH1cblxuICAgIG9uVWx2Q29tbWFuZCgkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICB0aGlzLl91bHZDb21tYW5kQ2xpY2tlZChtbywgbW9JbmRleCk7XG4gICAgfVxuICAgIG9uRGVzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ3Jvd3NlbGVjdCcsIHRoaXMuY29udGV4dCk7IC8vINio2KfYudirINmF24zYtNmI2K8g2K/ZiNio2KfYsSBzZWxlY3Rpb25jaGFuZ2Ug2q/Ystin2LHYtCDZgdix2KfYrtmI2KfZhtuMINi02YjYr1xuICAgIH1cbiAgICBvblJvd0NoZWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuT25DbGljaykge1xuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKCRldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhtbywgbW9JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DYXJ0YWJsZUZvcm1DbG9zZWQoeyBtbyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QyID0gbmV3TW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QyKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xuICAgIH1cbiAgICBvbkV4cGFuZENsaWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vLiRFeHBhbmRlZCA9ICFtby4kRXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuX3NldFZpc2liaWxpdHkobW8uJEV4cGFuZGVkLCBtbyk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdCgpO1xuICAgIH1cblxuICAgIG9uQWxsQ2hlY2tib3goY2hlY2tlZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoY2hlY2tlZCk7XG4gICAgICAgIC8vIGlmIChjaGVja2VkKSB7XG4gICAgICAgIC8vICAgdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5mb3JFYWNoKChtbywgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLl9kZXNlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgb25Tb3J0QXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnQVNDJyk7XG4gICAgfVxuXG4gICAgb25Tb3J0RGVzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU29ydENvbHVtbihjb2x1bW4uTmFtZSwgJ0RFU0MnKTtcbiAgICB9XG4gICAgb25GaWx0ZXIoc2VsZWN0ZWRDb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0ZpbHRlclNldHRpbmcoc2VsZWN0ZWRDb2x1bW4pO1xuICAgIH1cblxuICAgIG9uQ29sdW1uU2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnY29sdW1ucycsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25Tb3J0U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnc29ydCcsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25Hcm91cGJ5U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnZ3JvdXBieScsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25MaXN0Q2hlY2tib3hDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbywgaW5kZXgsIGUgfSA9ICRldmVudDtcbiAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4LCBjYXVzZTogJ3NpbmdsZVNlbGVjdCcgfSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkxpc3ROYXZpZ2F0aW9uQ2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMub25Sb3dDbGljayh7IG1vLCBpbmRleCB9KTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBvblNhdmVUb3BGb3JtKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGV4aXN0c0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKGV4aXN0c0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XG4gICAgICAgIH1cbiAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBvbk5ld1RvcEZvcm1BZGQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIFNob3dGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIEZvcmNlQ2xvc2VDaGlsZCA9ICgpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgUmVmcmVzaEZvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xuXG4gICAgLy8gcHJvdGVjdGVkIF9pbmxpbmVFZGl0TW9kZUNoYW5nZWQoZWRpdE1vZGUpOiB2b2lkIHtcbiAgICAvLyAgICAgaWYgKGVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjYW5BZGQ6IGJvb2xlYW4gPSB0aGlzLl9hY2Nlc3M/LkFkZCAhPT0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIGxldCBzZWxlY3RlZE1vID0gdGhpcy5fZ2V0U2VsZWN0ZWQoKTtcbiAgICAvLyAgICAgICAgIGxldCBuZXdNbztcbiAgICAvLyAgICAgICAgIGlmIChjYW5BZGQgIT09IGZhbHNlICYmICFzZWxlY3RlZE1vKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lUmVjb3JkKCk7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgLy8gaWYgKCFzZWxlY3RlZE1vICYmICFuZXdNbyAmJiB0aGlzLm1vRGF0YUxpc3QubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8gPSB0aGlzLm1vRGF0YUxpc3RbMF07XG4gICAgLy8gICAgICAgICAvLyB9XG4gICAgLy8gICAgICAgICAvLyBpZiAoc2VsZWN0ZWRNbykge1xuICAgIC8vICAgICAgICAgLy8gICAgIGNvbnN0IGlkT2ZTZWxlY3RlZE1vID0gdGhpcy5faW5kZXhPZk1vKHNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8uJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgLy8gICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9yb3dDaGVjayhzZWxlY3RlZE1vLCBpZE9mU2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyB9XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyID0gdGhpcy5fb2xkQ29udGFpbmVyO1xuICAgIC8vICAgICAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8obnVsbCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgLy8gcHJvdGVjdGVkIF9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbz86IE1ldGFvYmplY3REYXRhTW9kZWwpIHtcbiAgICAvLyAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVFZGl0UHJlcGFyZU5ld01vKCk7XG4gICAgLy8gICAgIGNvbnN0IGZvcm1NbyA9IEJhcnNhQXBpLkNvbW1vbi5NZXJnZXIuRmFzdE1lcmdlKG1vLCBzZWxlY3RlZE1vLCB7IGV4dGVuZGVkRmllbGRzOiBbJ0lkLCRDYXB0aW9uJ10gfSk7XG4gICAgLy8gICAgIHRoaXMuX3NldE5ld0lubGluZU1vKGZvcm1Nbyk7XG4gICAgLy8gICAgIHRoaXMuX3NlbGVjdChmb3JtTW8sIC0xKTtcbiAgICAvLyB9XG4gICAgcHJvdGVjdGVkIF9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdD86IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZ2V0V2lkdGgobGFiZWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGxhYmVsV2l0aFBhZGRpbmcgPSBtZWFzdXJlVGV4dChsYWJlbCk7XG4gICAgICAgIGlmIChsYWJlbFdpdGhQYWRkaW5nIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsYWJlbFdpdGhQYWRkaW5nKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRQYXJlbnRIZWlnaHQoKSB7XG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0ID0gZ2V0UGFyZW50SGVpZ2h0KHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfbWFwQ2FydGFibGVNbyhpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XG4gICAgICAgIGlmICghdGhpcy52aWV3U2V0dGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgTmFtZVNlcmlhbGl6ZU1vLCBDYXJ0YWJsZU9iamVjdE5hbWUgfSA9IHRoaXMudmlld1NldHRpbmc7XG4gICAgICAgIGlmICghTmFtZVNlcmlhbGl6ZU1vIHx8ICFDYXJ0YWJsZU9iamVjdE5hbWUgfHwgIWl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKChjKSA9PiAoY1tDYXJ0YWJsZU9iamVjdE5hbWVdID0gQmFyc2FBcGkuRXh0LmRlY29kZSgneycgKyBjW05hbWVTZXJpYWxpemVNb10gKyAnfScpKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBvblRvb2xiYXJDcmVhdGVOZXdJbmxpbmVNbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgb25DcmVhdGVOZXdNbygpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8odHJ1ZSk7XG4gICAgfVxuICAgIG9uTWFuZGF0b3J5KGlzTWFuZGF0b3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnTWFuZGF0b3J5JywgaXNNYW5kYXRvcik7XG4gICAgfVxuICAgIG9uVXBkYXRlTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChtb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG1vRGF0YUxpc3RbbW9JbmRleF0gPSBtbztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uSGFzRGV0YWlsc0luUm93KHZhbHVlOiBib29sZWFuLCBkZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzRGV0YWlsc0luUm93ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2RldmljZVNpemVDaGFuZ2VkKGRldmljZVNpemUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jcmVhdGVOZXdJbmxpbmVNbyhzZXRDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RJbmxpbmVNbyA9IG1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy4kTmV3SW5saW5lTW8pO1xuICAgICAgICBpZiAoZXhpc3RJbmxpbmVNbykge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwoZXhpc3RJbmxpbmVNbyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKTtcbiAgICAgICAgaWYgKHNldENoYW5nZWQpIHtcbiAgICAgICAgICAgIG1vLiRJbmxpbmVNb0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8sIHRydWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmNyZWF0ZU5ld0lubGluZU1vKGlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbmxpbmVGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdE1vSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RNb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RNb0luZGV4XSA9IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViLkNyZWF0ZU1vKG1vKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2VsZWN0TmV4dElubGluZVJlY29yZChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBpZiAoIW1vLiROZXdJbmxpbmVNbykge1xuICAgICAgICAgICAgLy8gc2VsZWN0IG5leHQgcmVjb3JkXG4gICAgICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSAmJiBleGlzdHNJbmRleCArIDEgPCBuZXdNb0RhdGFMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXggKyAxXS4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLCBleGlzdHNJbmRleCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QodGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleF0gPSBtbztcbiAgICAgICAgfVxuICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXREZWZhdWx0QWNjZXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY2Nlc3MgPSB7XG4gICAgICAgICAgICBBZGQ6IGZhbHNlLFxuICAgICAgICAgICAgQWRkVG9MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIERlbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICBFZGl0OiBmYWxzZSxcbiAgICAgICAgICAgIEV4cG9ydDogZmFsc2UsXG4gICAgICAgICAgICBQcmludDogZmFsc2UsXG4gICAgICAgICAgICBSZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgICAgIFJlbW92ZUZyb21MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIFZpZXc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZXhwYW5kTW8oc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgZXhwYW5kKTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGVkTW8uJEV4cGFuZGVkID0gZXhwYW5kO1xuICAgICAgICBzZWxlY3RlZE1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZE1vKGNoaWxkLCBleHBhbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mSWQoaWQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IGlkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mU2VsZWN0ZWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldEluZGV4KG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldElubGluZUVkaXQodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlYWRWaWV3U2V0dGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3U2V0dGluZyA9IHRoaXMuY29udGV4dC5TZXR0aW5nLkNsYXNzTmFtZXMuQ3VzdG9tVWk/LlBhcmFtZXRlcnM7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgLy8gICAgIHN1cGVyLl9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0KTtcbiAgICAvLyAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjaGVja2VkTW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuXG4gICAgLy8gICAgICAgICBpZiAoY2hlY2tlZE1vSW5kZXggPiAtMSkge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRNbyA9IG1vRGF0YUxpc3RbY2hlY2tlZE1vSW5kZXhdO1xuICAgIC8vICAgICAgICAgICAgIGlmIChjaGVja2VkTW8uSWQgIT09IHRoaXMuZm9ybVBhbmVsQ3RybHIuTW8uSWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRDcmVhdGVGb3JtUGFuZWxDdHJscihjaGVja2VkTW8sIGNoZWNrZWRNb0luZGV4KTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX3NldFZpc2liaWxpdHkoXG4gICAgICAgIGV4cGFuZDogYm9vbGVhbixcbiAgICAgICAgbW86IGFueSAvL01ldGFvYmplY3REYXRhTW9kZWxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgbW8uJENoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQuJFZpc2liaWxpdHkgPSBleHBhbmQ7XG4gICAgICAgICAgICBpZiAoY2hpbGQuJENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShleHBhbmQsIGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkIF9zZXROZXdJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0TmV3SW5saW5lTW8obW8pO1xuICAgIC8vIH1cbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgLy8gY29uc3QgbmV3TW8gPSBnZXROZXdNb0dyaWRFZGl0b3IodGhpcy5mb3JtU2V0dGluZywgdGhpcy5fdHlwZURlZklkKTtcbiAgICAvLyBuZXdNby5JZCA9IGdldFVuaXF1ZUlkKDMpO1xuICAgIC8vIGlmICh0aGlzLl9pc0NvbXBvc2l0ZSgpKSB7XG4gICAgLy8gICAgIGNvbnN0IHJlbGF0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbicpO1xuICAgIC8vICAgICBuZXdNb1tyZWxhdGlvbi5QYXJlbnRGZE5hbWVdID0gcmVsYXRpb24uUGFyZW50TW9JZDtcbiAgICAvLyB9XG4gICAgLy8gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsXTtcbiAgICAvLyAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgLy8gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5maXJlRXZlbnQoXG4gICAgLy8gICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkV2ZW50RW51bS5HbG9iYWxSZXBvcnRNb0FkZCxcbiAgICAvLyAgIHRoaXMuY29udGV4dCxcbiAgICAvLyAgIHJlcG9ydEV2ZW50TW9BZGRcbiAgICAvLyApO1xuICAgIC8vICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1JlZnJlc2hDb250ZXh0TW9EYXRhTGlzdCcsIG5ld01vRGF0YUxpc3QpO1xuICAgIC8vICAgIHJldHVybiBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgIC8vIH1cbiAgICBwcm90ZWN0ZWQgX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG5ld0lubGluZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgeyAuLi5uZXdJbmxpbmVNbywgJElzQ2hlY2tlZDogc2VsZWN0IH1dO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcm93Q2hlY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGluZGV4OiBudW1iZXIsIHNlbGVjdGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSB0aGlzLl9pbmxpbmVFZGl0TW9kZSAmJiB0aGlzLl9hbGxvd0lubGluZUVkaXQ7XG4gICAgICAgIGlmIChtby4kSXNDaGVja2VkICYmIGVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICAgIGlmIChlZGl0TW9kZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAhbW8uJElzQ2hlY2tlZCB8fCBzZWxlY3RlZDtcbiAgICAgICAgdGhpcy5yb3dIb3ZlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgJiYgY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldE5ld0lubGluZU1vKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFZhbHVlSW5saW5lTW8obW8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfc2V0VmFsdWVJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgIC8vICAgICAvLyB0aGlzLmZvcm1QYW5lbEN0cmxyLlNldFZhbHVlKHsgLi4ubW8sICRUeXBlRGVmSWQ6IHRoaXMuX3R5cGVEZWZJZCB9KTtcbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZm9ybVBhbmVsQ3RybHIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuX2Zvcm1QYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsci5EZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyID0gbnVsbDtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3dpbmRvd1Jlc2l6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSQubmV4dChlbC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZXZpY2VTaXplQ2hhbmdlZChkZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsTmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncmlkU2l6ZSA9IGdldENvbnRyb2xTaXplTW9kZShlbE5hdGl2ZUVsZW1lbnQsIGRldmljZVNpemUpO1xuICAgICAgICBsZXQgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZSA9ICdkZXNrdG9wJztcbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zXG4gICAgICAgICAgICA/LmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxuICAgICAgICAgICAgLmZvckVhY2goKGMpID0+IChjLiRUZXh0V2lkdGggPSBjLiRUZXh0V2lkdGggPyBjLiRUZXh0V2lkdGggOiB0aGlzLl9nZXRXaWR0aChjLkFsaWFzKSArIDEwKSk7XG5cbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpZHRoID0gdGhpcy5hbGxDb2x1bW5zLm1hcCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uLiRUZXh0V2lkdGggJiYgY29sdW1uLldpZHRoID4gY29sdW1uLiRUZXh0V2lkdGggPyBjb2x1bW4uV2lkdGggOiBjb2x1bW4uJFRleHRXaWR0aCB8fCBjb2x1bW4uV2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSA9IHRoaXMuX3Zpc2libGVDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGxldCBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIHN3aXRjaCAoZ3JpZFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RldmljZU5hbWVTb3VyY2UubmV4dChkZXZpY2VOYW1lKTtcbiAgICAgICAgY29uc3QgY29sV2lkdGhTZXR0aW5ncyA9IHRoaXMuZ3JpZFNldHRpbmdTb3VyY2UuZ2V0VmFsdWUoKT8uQ29sU2V0dGluZ0xpc3Q/Lm1hcCgoYykgPT4gYy5XaWR0aCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNXaWR0aDogbnVtYmVyW10gPSBjb2xXaWR0aFNldHRpbmdzPy5sZW5ndGggPyBjb2xXaWR0aFNldHRpbmdzIDogYWxsQ29sdW1uc1dpZHRoO1xuICAgICAgICBsZXQgc3VtQ29sV2lkdGggPSAwO1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlZpZXdTZXR0aW5nPy5Jc0NoZWNrTGlzdCkge1xuICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gMTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzPy5WaWV3KSB7XG4gICAgICAgICAgICBzdW1Db2xXaWR0aCArPSAzMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNEZXRhaWxzSW5Sb3cpIHtcbiAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IDIxMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsTmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgaWYgKGNvbHVtbnNXaWR0aC5sZW5ndGggPiAwICYmIGNvbnRhaW5lcldpZHRoID4gMCAmJiBkZXZpY2VTaXplICE9PSAncycpIHtcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbHVtbnNXaWR0aC5mb3JFYWNoKCh3aWR0aDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdW1Db2xXaWR0aCArIHdpZHRoID4gY29udGFpbmVyV2lkdGggJiYgY29sdW1uc0NvdW50ID09PSB2aXNpYmxlQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IHdpZHRoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld1NldHRpbmc/LkRpc2FibGVSZXNwb25zaXZlIHx8IHRoaXMuX2RldmljZU5hbWVTb3VyY2UuZ2V0VmFsdWUoKSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjQ29sdW1ucyA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzZWNDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KHZpc2libGVDb2x1bW5zLnNsaWNlKGNvbHVtbnNDb3VudCwgdmlzaWJsZUNvbHVtbnMubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX29wZW5TZXR0aW5ncyhuYW1lLCBkZXZpY2U6IERldmljZVNpemUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gVWx2Q29sdW1uU2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZTb3J0U2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZHcm91cGJ5U2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnOiBEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGRhdGE6IHsgY29udGV4dDogdGhpcy5jb250ZXh0IH0sXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiBkZXZpY2UgPT09ICdtb2JpbGUnLFxuICAgICAgICAgICAgbWluV2lkdGg6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnYXV0bycgOiB0aGlzLmRpYWxvZ0NvbmZpZy5taW5XaWR0aCxcbiAgICAgICAgICAgIG1pbkhlaWdodDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICdhdXRvJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICcxMDAlJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1heEhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJzEwMCUnIDogdGhpcy5kaWFsb2dDb25maWcubWF4V2lkdGgsXG4gICAgICAgICAgICBtb2JpbGU6IGRldmljZSA9PT0gJ21vYmlsZSdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTb3J0Q2hhbmdlZCA9IG5hbWUgPT09ICdzb3J0JyB8fCBuYW1lID09PSAnZ3JvdXBieSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZywgaXNTb3J0Q2hhbmdlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb0RhdGFMaXN0ID0gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3Nob3dGaWx0ZXJTZXR0aW5nKHNlbGVjdGVkQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHR5cGVEZWZJZCA9IHRoaXMuX3R5cGVEZWZJZDtcbiAgICAgICAgY29uc3QgY29udHJvbHNJbmZvJCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmxvYWRNZXRhQ29uZGl0aW9uc0NvbnRyb2xJbmZvcyhcbiAgICAgICAgICAgIHR5cGVEZWZJZCxcbiAgICAgICAgICAgIHRoaXMuYWxsQ29sdW1ucy5tYXAoKGMpID0+IGMuTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNJbmZvJCxcbiAgICAgICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5OYW1lOiBzZWxlY3RlZENvbHVtbi5OYW1lLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9hZGRTb3J0Q29sdW1uKG5hbWU6IGFueSwgc29ydERpcmVjdGlvbjogc3RyaW5nLCBpc0dyb3VwZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzb3J0SXRlbSA9IHtcbiAgICAgICAgICAgIE5hbWU6IG5hbWUsXG4gICAgICAgICAgICBTb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgSXNHcm91cGVkOiBpc0dyb3VwZWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRHcmlkU2V0dGluZ3ModGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgZXhpc3RTb3J0SXRlbUluZGV4ID0gc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5OYW1lID09PSBuYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0U29ydEl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5Tb3J0U2V0dGluZ0xpc3RbZXhpc3RTb3J0SXRlbUluZGV4XSA9IHNvcnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LnB1c2goc29ydEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZ3MsIHRydWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
749
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUNILFFBQVEsRUFLUixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFJZixtQkFBbUIsRUFLbkIsZUFBZSxFQUNmLFdBQVcsRUFDWCxXQUFXLEVBQ1gsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1B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QztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7cUhBaHhCUSx3QkFBd0IsdVJBOEVyQixRQUFRO3lHQTlFWCx3QkFBd0IsZ1FBSXRCLGNBQWMsbUZBQ2QsZ0JBQWdCLHNKQUViLHNCQUFzQix1RUFWMUIsRUFBRTsyRkFHSCx3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEOzswQkErRVEsTUFBTTsyQkFBQyxRQUFROzswQkFDZixRQUFROzswQkFBSSxJQUFJOzRDQTNFTSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0ksZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDQSxZQUFZO3NCQUF0QyxZQUFZO3VCQUFDLFdBQVc7Z0JBRXpCLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBaVczQixvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsZUFBZTtzQkFBdkIsS0FBSztnQkFFRyx1QkFBdUI7c0JBQS9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwsIHRhcCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5LFxuICAgIENvbnRlbnREZW5zaXR5U2VydmljZSxcbiAgICBEaWFsb2dDb25maWcsXG4gICAgRGlhbG9nU2VydmljZSxcbiAgICBUYWJsZUNvbXBvbmVudCxcbiAgICBUb29sYmFyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgQmFyc2FBcGksXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxuICAgIERldmljZVNpemUsXG4gICAgRm9ybVBhbmVsU2VydmljZSxcbiAgICBHZXRBbGxDb2x1bW5zU29ydGVkLFxuICAgIGdldENvbnRyb2xTaXplTW9kZSxcbiAgICBnZXRHcmlkU2V0dGluZ3MsXG4gICAgTGF5b3V0U2VydmljZSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFBvcnRhbFNlcnZpY2UsXG4gICAgUmVwb3J0QmFzZUNvbXBvbmVudCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxuICAgIFVsdk1haW5TZXJ2aWNlLFxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcbiAgICBnZXRQYXJlbnRIZWlnaHQsXG4gICAgbWVhc3VyZVRleHQsXG4gICAgZ2V0VW5pcXVlSWQsXG4gICAgU2VsZWN0aW9uTW9kZVxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XG5pbXBvcnQgeyBMYXlvdXRDb250cm9sQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtY29udHJvbC9sYXlvdXQtY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZE1vRGF0YUxpc3QgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWNvbHVtbi1zZXR0aW5ncy91bHYtY29sdW1uLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZTb3J0U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1zb3J0LXNldHRpbmdzL3Vsdi1zb3J0LXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZHcm91cGJ5U2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1ncm91cGJ5LXNldHRpbmdzL3Vsdi1ncm91cGJ5LXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbHZGaWx0ZXJTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWZpbHRlci1zZXR0aW5ncy91bHYtZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnN1LXNhcC11aS1yZXBvcnQtYmFzZScsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNhcFVpUmVwb3J0QmFzZUNvbXBvbmVudDxUIGV4dGVuZHMgVWlSZXBvcnRWaWV3QmFzZVNldHRpbmc+XG4gICAgZXh0ZW5kcyBSZXBvcnRCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIEBWaWV3Q2hpbGQoVGFibGVDb21wb25lbnQpIHRhYmxlQ29tcG9uZW50OiBUYWJsZUNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkKFRvb2xiYXJDb21wb25lbnQpIHRvb2xiYXJDb21wb25lbnQ6IFRvb2xiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZHJlbigndGFibGVSb3dzJykgdGFibGVSb3dzUmVmOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gICAgQFZpZXdDaGlsZHJlbihMYXlvdXRDb250cm9sQ29tcG9uZW50KVxuICAgIGxheW91dENvbnRyb2xzUmVmOiBRdWVyeUxpc3Q8TGF5b3V0Q29udHJvbENvbXBvbmVudD47XG4gICAgdXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gZmFsc2U7XG4gICAgaGFzU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHNob3dPa0NhbmNlbEJ1dHRvbnM6IGFueTtcbiAgICBwYXJlbnRIZWlnaHQgPSAwO1xuICAgIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICByZXNwb25zaXZlUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgdmVydGljYWxQYWRkaW5nOiB0cnVlLFxuICAgICAgICBtaW5XaWR0aDogJzQwcmVtJyxcbiAgICAgICAgbWluSGVpZ2h0OiAnOTB2aCcsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwdncnLFxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZVxuICAgIH07XG4gICAgaWQgPSBgUmVwb3J0XyR7Z2V0VW5pcXVlSWQoMyl9YDtcbiAgICBzZWxlY3RlZFJvd3NOdW1iZXIgPSB7fTtcbiAgICBzZWxlY3RBbGwgPSBmYWxzZTtcbiAgICBzZWxlY3Rpb25BZGFwdGVySGFuZGxlcjoge1xuICAgICAgICBzY29wZTogYW55O1xuICAgICAgICByb3dzZWxlY3Q6IGFueTtcbiAgICAgICAgcm93ZGVzZWxlY3Q6IGFueTtcbiAgICAgICAgYmVmb3Jlcm93c2VsZWN0OiBhbnk7XG4gICAgfTtcbiAgICBuYXZpZ2F0aW9uQXJyb3ckOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgY3VzdG9tUm93SGVpZ2h0OiBhbnk7XG4gICAgcm93Q2xpY2sgPSB0cnVlO1xuICAgIGNlbGxDbGljayA9IGZhbHNlO1xuICAgIGRldmljZU5hbWUkOiBPYnNlcnZhYmxlPERldmljZVNpemU+O1xuICAgIG1vYmlsZU9yVGFibGV0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHNlY29uZGFyeUNvbHVtbnNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlcG9ydFZpZXdDb2x1bW5bXT4oW10pO1xuICAgIHNlY29uZGFyeUNvbHVtbnMkID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHBvcGluJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBjb250ZW50RGVuc2l0eSQ6IE9ic2VydmFibGU8Q29udGVudERlbnNpdHk+O1xuICAgIGhhc0RldGFpbHNJblJvdyA9IGZhbHNlO1xuICAgIHJvd0FjdGl2YWJsZSA9IHRydWU7XG4gICAgb3Blbk92ZXJmbG93Q29tbWFuZHM6IGJvb2xlYW5bXSA9IFtdO1xuICAgIGNvbnRhaW5lcldpZHRoU291cmNlJCA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgICBjbG9zZVNjcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneTtcbiAgICByb3dIb3ZlcmFibGU6IGJvb2xlYW47XG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZTtcbiAgICBjb2x1bW5zQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgc2Vjb25kYXJ5Q29sdW1uc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGNvbnRhaW5lcldpZHRoJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIGNvbHVtbnMkOiBPYnNlcnZhYmxlPFJlcG9ydFZpZXdDb2x1bW5bXT47XG4gICAgZ3JpZERhdGFTb3VyY2U6IEdyaWRNb0RhdGFMaXN0O1xuICAgIHNpbmdsZVNlbGVjdGlvbiA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xuICAgIG11bHRpcGxlU2VsZWN0aW9uID0gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcbiAgICBhbGxvd0lubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGlubGluZUVkaXRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBvbmx5SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZm9ybVBhbmVsQ3RybHI6IGFueTtcbiAgICBsYXlvdXQkOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcnRsJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICByZXBvcnRJZDogc3RyaW5nO1xuICAgIHZpZXdTZXR0aW5nOiBUO1xuICAgIGRpc2FibGVSZXNwb25zaXZlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2RldmljZU5hbWVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERldmljZVNpemU+KCdkZXNrdG9wJyk7XG4gICAgcHJpdmF0ZSBfb2xkQ29udGFpbmVyOiBhbnk7XG4gICAgcHJpdmF0ZSBfb3Blbk9uQ2xpY2s6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByb3RlY3RlZCBfY29udGVudERlbnNpdHlTZXJ2aWNlOiBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfcG9ydGFsU2VydmljZTogUG9ydGFsU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3Vsdk1haW5TZXJ2aWNlOiBVbHZNYWluU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9sYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcm90ZWN0ZWQgX2Zvcm1wYW5lbFNlcnZpY2U6IEZvcm1QYW5lbFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX3BvcnRhbFNlcnZpY2UsIF91bHZNYWluU2VydmljZSk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGgkID0gdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSRcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICB0aGlzLmRldmljZU5hbWUkID0gdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlUmVzcG9uc2l2ZSQgPSB0aGlzLmRldmljZU5hbWUkLnBpcGUobWFwKChjKSA9PiBjID09PSAnZGVza3RvcCcpKTtcbiAgICAgICAgdGhpcy5tb2JpbGVPclRhYmxldCQgPSB0aGlzLmRldmljZU5hbWUkLnBpcGUobWFwKChkZXZpY2UpID0+IGRldmljZSA9PT0gJ21vYmlsZScgfHwgZGV2aWNlID09PSAndGFibGV0JykpO1xuICAgICAgICB0aGlzLl9vbGRDb250YWluZXIgPSBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyO1xuICAgICAgICB0aGlzLmNsb3NlU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jb250ZW50RGVuc2l0eSQgPSB0aGlzLl9jb250ZW50RGVuc2l0eVNlcnZpY2UuY29udGVudERlbnNpdHk7XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc0NvdW50JCA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyQucGlwZShtYXAoKGNvbHVtbnMpID0+IGNvbHVtbnMubGVuZ3RoKSk7XG4gICAgICAgIHRoaXMuY29sdW1uc0NvdW50JCA9IHRoaXMudmlzaWJsZUNvbHVtbnMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGNvbHVtbnMpID0+IGNvbHVtbnMubGVuZ3RoKSxcbiAgICAgICAgICAgIG1hcCgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjY2VzcyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgaWYgKGFjY2Vzcz8uVmlldykge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoY291bnQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBvblJlc2V0V29ya2Zsb3dTdGF0ZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBtby4kV29ya2Zsb3dTdGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdCgpO1xuICAgIH1cblxuICAgIGdldCBfdHlwZURlZklkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYS5SZXBvcnQuVHlwZURlZklkO1xuICAgIH1cbiAgICBnZXQgX2lubGluZUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuZ2V0VmFsdWVJbmxpbmVFZGl0KCk7XG4gICAgfVxuICAgIGdldCBfYWxsb3dJbmxpbmVFZGl0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuZ2V0QWxsb3dJbmxpbmVFZGl0KCk7XG4gICAgfVxuICAgIGdldCBfYWNjZXNzKCk6IERlZmF1bHRDb21tYW5kc0FjY2VzcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuU2V0dGluZz8uRXh0cmE/LkRlZmF1bHRDb21tYW5kc0FjY2VzcztcbiAgICB9XG4gICAgc2V0IF9hY2Nlc3ModmFsOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3MpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYS5EZWZhdWx0Q29tbWFuZHNBY2Nlc3MgPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYSA9IHsgRGVmYXVsdENvbW1hbmRzQWNjZXNzOiB2YWwgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuX3JlYWRWaWV3U2V0dGluZygpO1xuICAgICAgICBpZiAoIXRoaXMuX2FjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFjY2VzcygpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuc2hvd09rQ2FuY2VsQnV0dG9ucyA9IHRoaXMuY29udGV4dC5TaG93T2tDYW5jZWxCdXR0b25zO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5sYXlvdXRJbmZvJC5zdWJzY3JpYmUoKGxheW91dEluZm8pID0+IHtcbiAgICAgICAgICAgIGlmIChsYXlvdXRJbmZvICYmIGxheW91dEluZm8uVXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnZpZXdTZXR0aW5nPy5UaXRsZTtcbiAgICAgICAgaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVwb3J0SWQkLnN1YnNjcmliZSgocmVwb3J0SWQpID0+ICh0aGlzLnJlcG9ydElkID0gcmVwb3J0SWQpKTtcbiAgICAgICAgdGhpcy5fbGF5b3V0U2VydmljZS5zZXRSZW5kZXJlZCh0cnVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5jb250ZXh0LlZpZXdTZXR0aW5nPy5Jc0NoZWNrTGlzdCA/IHRoaXMubXVsdGlwbGVTZWxlY3Rpb24gOiB0aGlzLnNpbmdsZVNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5fb3Blbk9uQ2xpY2sgPSB0aGlzLnZpZXdTZXR0aW5nPy5PcGVuT25DbGljaztcbiAgICAgICAgdGhpcy5jdXN0b21Sb3dIZWlnaHQgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLFxuICAgICAgICAgICAgJ0V4dHJhLkV4dHJhSnNvblByb3BSZXBvcnQuR3JpZFJvd0hlaWdodCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ydGwkID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25BcnJvdyQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnJ0bCQucGlwZShcbiAgICAgICAgICAgIG1hcCgoaXNSdGwpID0+IChpc1J0bCA/ICduYXZpZ2F0aW9uLWxlZnQtYXJyb3cnIDogJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnKSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5hbGxvd0lubGluZUVkaXQkID0gdGhpcy5fdWx2TWFpblNlcnZpY2UuYWxsb3dJbmxpbmVFZGl0JDtcbiAgICAgICAgdGhpcy5pbmxpbmVFZGl0TW9kZSQgPSB0aGlzLl91bHZNYWluU2VydmljZS5pbmxpbmVFZGl0TW9kZSQ7XG4gICAgICAgIHRoaXMub25seUlubGluZUVkaXQkID0gdGhpcy5fdWx2TWFpblNlcnZpY2Uub25seUlubGluZUVkaXQkO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRDYW5TYXZlR3JpZFNldHRpbmdzKHRoaXMudmlld1NldHRpbmc/LkNhblNhdmVHcmlkU2V0dGluZyk7XG4gICAgICAgIHRoaXMuaGFzU2VsZWN0ZWQkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgobW9MaXN0KSA9PiBtb0xpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKSkpO1xuICAgICAgICB0aGlzLm1vRGF0YUxpc3QkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgoaXRlbXMpID0+IHRoaXMuX21hcENhcnRhYmxlTW8oaXRlbXMpKSk7XG4gICAgICAgIGNvbnN0IGdyaWREYXRhU291cmNlID0gbmV3IEdyaWRNb0RhdGFMaXN0KFxuICAgICAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCxcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNldHRpbmckLFxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyQsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0kXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ncmlkRGF0YVNvdXJjZSA9IGdyaWREYXRhU291cmNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5ncmlkU2V0dGluZyQsIHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbXywgc2Vjb25kYXJ5Q29sdW1uc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRhcmllcyA9IHNlY29uZGFyeUNvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gR2V0QWxsQ29sdW1uc1NvcnRlZCh0aGlzLmNvbnRleHQpLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IF8/LlNvcnRTZXR0aW5nTGlzdD8uZmlsdGVyKChjKSA9PiBjLklzR3JvdXBlZCkubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gZ3JvdXBlZENvbHVtbnMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoYykgPT4gc2Vjb25kYXJpZXMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoY29sdW1ucykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYzogUmVwb3J0Vmlld0NvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiRDU1NDbGFzc05hbWUgPSAnY29sdW1uX19GaWVsZFR5cGUnICsgYy5GaWVsZFR5cGVJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuRmllbGRUeXBlSWQgPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSA9PT0gJ0ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAnMzhweCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICFCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzVXNlckxvZ2dlZEluIC8vIGlmIHVzZXIgaXMgYW5vbnltb3VzIGFsbCBjb2x1bW4gd2lkdGggZXF1YWxzIHRvIDEwMCVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYy5XaWR0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGMuV2lkdGggKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMTAwJSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmlubGluZUVkaXRNb2RlJC5waXBlKFxuICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oYXNTZWxlY3RlZCQpLFxuICAgICAgICAgICAgZmlsdGVyKChbXywgX19dKSA9PiB0aGlzLl9hY2Nlc3MuQWRkICE9PSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtcGFuZWxTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtcGFuZWxTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkV4ZWN1dGVUb29sYmFyQnV0dG9uKGU6IHsgaXRlbUlkOiBzdHJpbmc7IG9wdGlvbnM/OiBhbnkgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGl0ZW1JZCwgb3B0aW9ucyB9ID0gZTtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuZXhlY3V0ZVRvb2xiYXJCdXR0b24oaXRlbUlkLCBvcHRpb25zKTtcbiAgICB9XG4gICAgb25FZGl0TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0SW5saW5lRWRpdCghdGhpcy5faW5saW5lRWRpdE1vZGUpO1xuICAgIH1cbiAgICBvblNlbGVjdE5leHRJbmxpbmVSZWNvcmQobW8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0TmV4dElubGluZVJlY29yZChtbyk7XG4gICAgfVxuXG4gICAgb25FZGl0Rm9ybVBhbmVsU2F2ZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChtbyk7XG4gICAgfVxuXG4gICAgb25FZGl0Rm9ybVBhbmVsQ2FuY2VsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGhhc1NlbGVjdGVkID0gbW9EYXRhTGlzdC5zb21lKChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuICAgICAgICBpZiAoaGFzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vKTtcbiAgICAgICAgICAgIHRoaXMuX3NldElubGluZUVkaXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vKTtcbiAgICB9XG4gICAgb25Db2x1bW5SZXNpemVkKGNvbHVtbnM6IGNvbHVtbnNSZXNpemVkRXZlbnRBcmdzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNvbHVtbnNSZXNpemVkKGNvbHVtbnMpO1xuICAgIH1cbiAgICBvbldvcmtmbG93U2hhcmVCdXR0b25zKGU6IFNoYXJlQnV0dG9uc0Nob2ljZURlZik6IHZvaWQge1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5hZGRXb3JrZmxvd0J1dHRvbnNJblRvb2xiYXIoZSk7XG4gICAgfVxuICAgIG9uUm93Q2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcbiAgICAgICAgaWYgKG1vLmdyb3VwIHx8IHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcbiAgICAgICAgaWYgKCFtby4kSXNDaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVDaGVja2VkQWxsKCk7XG4gICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhtbywgbW9JbmRleCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlld1NldHRpbmc/LkRpc2FibGVTaG93Rm9ybU9uRG91YmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcGVuTW8obW8sIG1vSW5kZXgpO1xuICAgIH1cblxuICAgIG9uVWx2Q29tbWFuZCgkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICB0aGlzLl91bHZDb21tYW5kQ2xpY2tlZChtbywgbW9JbmRleCk7XG4gICAgfVxuICAgIG9uRGVzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ3Jvd3NlbGVjdCcsIHRoaXMuY29udGV4dCk7IC8vINio2KfYudirINmF24zYtNmI2K8g2K/ZiNio2KfYsSBzZWxlY3Rpb25jaGFuZ2Ug2q/Ystin2LHYtCDZgdix2KfYrtmI2KfZhtuMINi02YjYr1xuICAgIH1cbiAgICBvblJvd0NoZWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuT25DbGljaykge1xuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKCRldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhtbywgbW9JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DYXJ0YWJsZUZvcm1DbG9zZWQoeyBtbyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QyID0gbmV3TW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QyKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xuICAgIH1cbiAgICBvbkV4cGFuZENsaWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vLiRFeHBhbmRlZCA9ICFtby4kRXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuX3NldFZpc2liaWxpdHkobW8uJEV4cGFuZGVkLCBtbyk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdCgpO1xuICAgIH1cblxuICAgIG9uQWxsQ2hlY2tib3goY2hlY2tlZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoY2hlY2tlZCk7XG4gICAgICAgIC8vIGlmIChjaGVja2VkKSB7XG4gICAgICAgIC8vICAgdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5mb3JFYWNoKChtbywgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLl9kZXNlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgb25Tb3J0QXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnQVNDJyk7XG4gICAgfVxuXG4gICAgb25Tb3J0RGVzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU29ydENvbHVtbihjb2x1bW4uTmFtZSwgJ0RFU0MnKTtcbiAgICB9XG4gICAgb25GaWx0ZXIoc2VsZWN0ZWRDb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0ZpbHRlclNldHRpbmcoc2VsZWN0ZWRDb2x1bW4pO1xuICAgIH1cblxuICAgIG9uQ29sdW1uU2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnY29sdW1ucycsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25Tb3J0U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnc29ydCcsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25Hcm91cGJ5U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnZ3JvdXBieScsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25MaXN0Q2hlY2tib3hDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbywgaW5kZXgsIGUgfSA9ICRldmVudDtcbiAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4LCBjYXVzZTogJ3NpbmdsZVNlbGVjdCcgfSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkxpc3ROYXZpZ2F0aW9uQ2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMub25Sb3dDbGljayh7IG1vLCBpbmRleCB9KTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBvblNhdmVUb3BGb3JtKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGV4aXN0c0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKGV4aXN0c0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XG4gICAgICAgIH1cbiAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBvbk5ld1RvcEZvcm1BZGQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIFNob3dGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIEZvcmNlQ2xvc2VDaGlsZCA9ICgpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgUmVmcmVzaEZvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xuXG4gICAgLy8gcHJvdGVjdGVkIF9pbmxpbmVFZGl0TW9kZUNoYW5nZWQoZWRpdE1vZGUpOiB2b2lkIHtcbiAgICAvLyAgICAgaWYgKGVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjYW5BZGQ6IGJvb2xlYW4gPSB0aGlzLl9hY2Nlc3M/LkFkZCAhPT0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIGxldCBzZWxlY3RlZE1vID0gdGhpcy5fZ2V0U2VsZWN0ZWQoKTtcbiAgICAvLyAgICAgICAgIGxldCBuZXdNbztcbiAgICAvLyAgICAgICAgIGlmIChjYW5BZGQgIT09IGZhbHNlICYmICFzZWxlY3RlZE1vKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lUmVjb3JkKCk7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgLy8gaWYgKCFzZWxlY3RlZE1vICYmICFuZXdNbyAmJiB0aGlzLm1vRGF0YUxpc3QubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8gPSB0aGlzLm1vRGF0YUxpc3RbMF07XG4gICAgLy8gICAgICAgICAvLyB9XG4gICAgLy8gICAgICAgICAvLyBpZiAoc2VsZWN0ZWRNbykge1xuICAgIC8vICAgICAgICAgLy8gICAgIGNvbnN0IGlkT2ZTZWxlY3RlZE1vID0gdGhpcy5faW5kZXhPZk1vKHNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8uJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgLy8gICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9yb3dDaGVjayhzZWxlY3RlZE1vLCBpZE9mU2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyB9XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyID0gdGhpcy5fb2xkQ29udGFpbmVyO1xuICAgIC8vICAgICAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8obnVsbCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgLy8gcHJvdGVjdGVkIF9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbz86IE1ldGFvYmplY3REYXRhTW9kZWwpIHtcbiAgICAvLyAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVFZGl0UHJlcGFyZU5ld01vKCk7XG4gICAgLy8gICAgIGNvbnN0IGZvcm1NbyA9IEJhcnNhQXBpLkNvbW1vbi5NZXJnZXIuRmFzdE1lcmdlKG1vLCBzZWxlY3RlZE1vLCB7IGV4dGVuZGVkRmllbGRzOiBbJ0lkLCRDYXB0aW9uJ10gfSk7XG4gICAgLy8gICAgIHRoaXMuX3NldE5ld0lubGluZU1vKGZvcm1Nbyk7XG4gICAgLy8gICAgIHRoaXMuX3NlbGVjdChmb3JtTW8sIC0xKTtcbiAgICAvLyB9XG4gICAgcHJvdGVjdGVkIF9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdD86IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZ2V0V2lkdGgobGFiZWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGxhYmVsV2l0aFBhZGRpbmcgPSBtZWFzdXJlVGV4dChsYWJlbCk7XG4gICAgICAgIGlmIChsYWJlbFdpdGhQYWRkaW5nIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsYWJlbFdpdGhQYWRkaW5nKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRQYXJlbnRIZWlnaHQoKSB7XG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0ID0gZ2V0UGFyZW50SGVpZ2h0KHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfbWFwQ2FydGFibGVNbyhpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XG4gICAgICAgIGlmICghdGhpcy52aWV3U2V0dGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgTmFtZVNlcmlhbGl6ZU1vLCBDYXJ0YWJsZU9iamVjdE5hbWUgfSA9IHRoaXMudmlld1NldHRpbmc7XG4gICAgICAgIGlmICghTmFtZVNlcmlhbGl6ZU1vIHx8ICFDYXJ0YWJsZU9iamVjdE5hbWUgfHwgIWl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKChjKSA9PiAoY1tDYXJ0YWJsZU9iamVjdE5hbWVdID0gQmFyc2FBcGkuRXh0LmRlY29kZSgneycgKyBjW05hbWVTZXJpYWxpemVNb10gKyAnfScpKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBvblRvb2xiYXJDcmVhdGVOZXdJbmxpbmVNbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgb25DcmVhdGVOZXdNbygpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8odHJ1ZSk7XG4gICAgfVxuICAgIG9uTWFuZGF0b3J5KGlzTWFuZGF0b3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnTWFuZGF0b3J5JywgaXNNYW5kYXRvcik7XG4gICAgfVxuICAgIG9uVXBkYXRlTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChtb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG1vRGF0YUxpc3RbbW9JbmRleF0gPSBtbztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uSGFzRGV0YWlsc0luUm93KHZhbHVlOiBib29sZWFuLCBkZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzRGV0YWlsc0luUm93ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2RldmljZVNpemVDaGFuZ2VkKGRldmljZVNpemUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jcmVhdGVOZXdJbmxpbmVNbyhzZXRDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RJbmxpbmVNbyA9IG1vRGF0YUxpc3QuZmluZCgoYykgPT4gYy4kTmV3SW5saW5lTW8pO1xuICAgICAgICBpZiAoZXhpc3RJbmxpbmVNbykge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwoZXhpc3RJbmxpbmVNbyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKTtcbiAgICAgICAgaWYgKHNldENoYW5nZWQpIHtcbiAgICAgICAgICAgIG1vLiRJbmxpbmVNb0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiAoYy4kSXNDaGVja2VkID0gZmFsc2UpKTtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8sIHRydWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmNyZWF0ZU5ld0lubGluZU1vKGlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9pbmxpbmVGb3JtUGFuZWxWYWx1ZUNoYW5nZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdE1vSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RNb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RNb0luZGV4XSA9IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViLkNyZWF0ZU1vKG1vKTtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2VsZWN0TmV4dElubGluZVJlY29yZChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBpZiAoIW1vLiROZXdJbmxpbmVNbykge1xuICAgICAgICAgICAgLy8gc2VsZWN0IG5leHQgcmVjb3JkXG4gICAgICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSAmJiBleGlzdHNJbmRleCArIDEgPCBuZXdNb0RhdGFMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXggKyAxXS4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLCBleGlzdHNJbmRleCArIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QodGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICBpZiAoZXhpc3RzSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleF0gPSBtbztcbiAgICAgICAgfVxuICAgICAgICBuZXdNb0RhdGFMaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXREZWZhdWx0QWNjZXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY2Nlc3MgPSB7XG4gICAgICAgICAgICBBZGQ6IGZhbHNlLFxuICAgICAgICAgICAgQWRkVG9MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIERlbGV0ZTogZmFsc2UsXG4gICAgICAgICAgICBFZGl0OiBmYWxzZSxcbiAgICAgICAgICAgIEV4cG9ydDogZmFsc2UsXG4gICAgICAgICAgICBQcmludDogZmFsc2UsXG4gICAgICAgICAgICBSZWZyZXNoOiBmYWxzZSxcbiAgICAgICAgICAgIFJlbW92ZUZyb21MaXN0OiBmYWxzZSxcbiAgICAgICAgICAgIFZpZXc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZXhwYW5kTW8oc2VsZWN0ZWRNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgZXhwYW5kKTogdm9pZCB7XG4gICAgICAgIHNlbGVjdGVkTW8uJEV4cGFuZGVkID0gZXhwYW5kO1xuICAgICAgICBzZWxlY3RlZE1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZE1vKGNoaWxkLCBleHBhbmQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mSWQoaWQpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IGlkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmRleE9mU2VsZWN0ZWQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldEluZGV4KG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldElubGluZUVkaXQodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3JlYWRWaWV3U2V0dGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3U2V0dGluZyA9IHRoaXMuY29udGV4dC5TZXR0aW5nLkNsYXNzTmFtZXMuQ3VzdG9tVWk/LlBhcmFtZXRlcnM7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgLy8gICAgIHN1cGVyLl9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0KTtcbiAgICAvLyAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjaGVja2VkTW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuXG4gICAgLy8gICAgICAgICBpZiAoY2hlY2tlZE1vSW5kZXggPiAtMSkge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRNbyA9IG1vRGF0YUxpc3RbY2hlY2tlZE1vSW5kZXhdO1xuICAgIC8vICAgICAgICAgICAgIGlmIChjaGVja2VkTW8uSWQgIT09IHRoaXMuZm9ybVBhbmVsQ3RybHIuTW8uSWQpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRDcmVhdGVGb3JtUGFuZWxDdHJscihjaGVja2VkTW8sIGNoZWNrZWRNb0luZGV4KTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX3NldFZpc2liaWxpdHkoXG4gICAgICAgIGV4cGFuZDogYm9vbGVhbixcbiAgICAgICAgbW86IGFueSAvL01ldGFvYmplY3REYXRhTW9kZWxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgbW8uJENoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQuJFZpc2liaWxpdHkgPSBleHBhbmQ7XG4gICAgICAgICAgICBpZiAoY2hpbGQuJENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJpbGl0eShleHBhbmQsIGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkIF9zZXROZXdJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwpOiB2b2lkIHtcbiAgICAvLyAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0TmV3SW5saW5lTW8obW8pO1xuICAgIC8vIH1cbiAgICAvLyBwcm90ZWN0ZWQgX2lubGluZUVkaXRQcmVwYXJlTmV3TW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgLy8gY29uc3QgbmV3TW8gPSBnZXROZXdNb0dyaWRFZGl0b3IodGhpcy5mb3JtU2V0dGluZywgdGhpcy5fdHlwZURlZklkKTtcbiAgICAvLyBuZXdNby5JZCA9IGdldFVuaXF1ZUlkKDMpO1xuICAgIC8vIGlmICh0aGlzLl9pc0NvbXBvc2l0ZSgpKSB7XG4gICAgLy8gICAgIGNvbnN0IHJlbGF0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbicpO1xuICAgIC8vICAgICBuZXdNb1tyZWxhdGlvbi5QYXJlbnRGZE5hbWVdID0gcmVsYXRpb24uUGFyZW50TW9JZDtcbiAgICAvLyB9XG4gICAgLy8gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsXTtcbiAgICAvLyAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgLy8gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5maXJlRXZlbnQoXG4gICAgLy8gICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkV2ZW50RW51bS5HbG9iYWxSZXBvcnRNb0FkZCxcbiAgICAvLyAgIHRoaXMuY29udGV4dCxcbiAgICAvLyAgIHJlcG9ydEV2ZW50TW9BZGRcbiAgICAvLyApO1xuICAgIC8vICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1JlZnJlc2hDb250ZXh0TW9EYXRhTGlzdCcsIG5ld01vRGF0YUxpc3QpO1xuICAgIC8vICAgIHJldHVybiBuZXdNbyBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsO1xuICAgIC8vIH1cbiAgICBwcm90ZWN0ZWQgX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG5ld0lubGluZU1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgeyAuLi5uZXdJbmxpbmVNbywgJElzQ2hlY2tlZDogc2VsZWN0IH1dO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfcm93Q2hlY2sobW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGluZGV4OiBudW1iZXIsIHNlbGVjdGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWRpdE1vZGUgPSB0aGlzLl9pbmxpbmVFZGl0TW9kZSAmJiB0aGlzLl9hbGxvd0lubGluZUVkaXQ7XG4gICAgICAgIGlmIChtby4kSXNDaGVja2VkICYmIGVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG4gICAgICAgIGlmIChlZGl0TW9kZSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUuU0lOR0xFO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAhbW8uJElzQ2hlY2tlZCB8fCBzZWxlY3RlZDtcbiAgICAgICAgdGhpcy5yb3dIb3ZlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgJiYgY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldE5ld0lubGluZU1vKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFZhbHVlSW5saW5lTW8obW8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHRoaXMuX2Rlc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgfVxuICAgIC8vIHByb3RlY3RlZCBfc2V0VmFsdWVJbmxpbmVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgIC8vICAgICAvLyB0aGlzLmZvcm1QYW5lbEN0cmxyLlNldFZhbHVlKHsgLi4ubW8sICRUeXBlRGVmSWQ6IHRoaXMuX3R5cGVEZWZJZCB9KTtcbiAgICAvLyB9XG5cbiAgICBwcm90ZWN0ZWQgX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuZm9ybVBhbmVsQ3RybHIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuX2Zvcm1QYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsci5EZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyID0gbnVsbDtcbiAgICAgICAgLy8gfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3dpbmRvd1Jlc2l6ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lcldpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldENvbnRhaW5lcldpZHRoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aFNvdXJjZSQubmV4dChlbC5vZmZzZXRXaWR0aCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9kZXZpY2VTaXplQ2hhbmdlZChkZXZpY2VTaXplKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsTmF0aXZlRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncmlkU2l6ZSA9IGdldENvbnRyb2xTaXplTW9kZShlbE5hdGl2ZUVsZW1lbnQsIGRldmljZVNpemUpO1xuICAgICAgICBsZXQgZGV2aWNlTmFtZTogRGV2aWNlU2l6ZSA9ICdkZXNrdG9wJztcbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zXG4gICAgICAgICAgICA/LmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxuICAgICAgICAgICAgLmZvckVhY2goKGMpID0+IChjLiRUZXh0V2lkdGggPSBjLiRUZXh0V2lkdGggPyBjLiRUZXh0V2lkdGggOiB0aGlzLl9nZXRXaWR0aChjLkFsaWFzKSArIDEwKSk7XG5cbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpZHRoID0gdGhpcy5hbGxDb2x1bW5zLm1hcCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uLiRUZXh0V2lkdGggJiYgY29sdW1uLldpZHRoID4gY29sdW1uLiRUZXh0V2lkdGggPyBjb2x1bW4uV2lkdGggOiBjb2x1bW4uJFRleHRXaWR0aCB8fCBjb2x1bW4uV2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSA9IHRoaXMuX3Zpc2libGVDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGxldCBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIHN3aXRjaCAoZ3JpZFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RldmljZU5hbWVTb3VyY2UubmV4dChkZXZpY2VOYW1lKTtcbiAgICAgICAgY29uc3QgY29sV2lkdGhTZXR0aW5ncyA9IHRoaXMuZ3JpZFNldHRpbmdTb3VyY2UuZ2V0VmFsdWUoKT8uQ29sU2V0dGluZ0xpc3Q/Lm1hcCgoYykgPT4gYy5XaWR0aCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNXaWR0aDogbnVtYmVyW10gPSBjb2xXaWR0aFNldHRpbmdzPy5sZW5ndGggPyBjb2xXaWR0aFNldHRpbmdzIDogYWxsQ29sdW1uc1dpZHRoO1xuICAgICAgICBsZXQgc3VtQ29sV2lkdGggPSAwO1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlZpZXdTZXR0aW5nPy5Jc0NoZWNrTGlzdCkge1xuICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gMTU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzPy5WaWV3KSB7XG4gICAgICAgICAgICBzdW1Db2xXaWR0aCArPSAzMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNEZXRhaWxzSW5Sb3cpIHtcbiAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IDIxMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsTmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgaWYgKGNvbHVtbnNXaWR0aC5sZW5ndGggPiAwICYmIGNvbnRhaW5lcldpZHRoID4gMCAmJiBkZXZpY2VTaXplICE9PSAncycpIHtcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbHVtbnNXaWR0aC5mb3JFYWNoKCh3aWR0aDogbnVtYmVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdW1Db2xXaWR0aCArIHdpZHRoID4gY29udGFpbmVyV2lkdGggJiYgY29sdW1uc0NvdW50ID09PSB2aXNpYmxlQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1bUNvbFdpZHRoICs9IHdpZHRoO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgaWYgKHRoaXMudmlld1NldHRpbmc/LkRpc2FibGVSZXNwb25zaXZlIHx8IHRoaXMuX2RldmljZU5hbWVTb3VyY2UuZ2V0VmFsdWUoKSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjQ29sdW1ucyA9IHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzZWNDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UubmV4dChbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KHZpc2libGVDb2x1bW5zLnNsaWNlKGNvbHVtbnNDb3VudCwgdmlzaWJsZUNvbHVtbnMubGVuZ3RoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX29wZW5TZXR0aW5ncyhuYW1lLCBkZXZpY2U6IERldmljZVNpemUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gVWx2Q29sdW1uU2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZTb3J0U2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncm91cGJ5JzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZHcm91cGJ5U2V0dGluZ3NDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnOiBEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICAgIGRhdGE6IHsgY29udGV4dDogdGhpcy5jb250ZXh0IH0sXG4gICAgICAgICAgICBmdWxsU2NyZWVuOiBkZXZpY2UgPT09ICdtb2JpbGUnLFxuICAgICAgICAgICAgbWluV2lkdGg6IGRldmljZSA9PT0gJ21vYmlsZScgPyAnYXV0bycgOiB0aGlzLmRpYWxvZ0NvbmZpZy5taW5XaWR0aCxcbiAgICAgICAgICAgIG1pbkhlaWdodDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICdhdXRvJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICcxMDAlJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1heEhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJzEwMCUnIDogdGhpcy5kaWFsb2dDb25maWcubWF4V2lkdGgsXG4gICAgICAgICAgICBtb2JpbGU6IGRldmljZSA9PT0gJ21vYmlsZSdcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKGNvbXBvbmVudCwgY29uZmlnKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTb3J0Q2hhbmdlZCA9IG5hbWUgPT09ICdzb3J0JyB8fCBuYW1lID09PSAnZ3JvdXBieSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZywgaXNTb3J0Q2hhbmdlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb0RhdGFMaXN0ID0gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3Nob3dGaWx0ZXJTZXR0aW5nKHNlbGVjdGVkQ29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHR5cGVEZWZJZCA9IHRoaXMuX3R5cGVEZWZJZDtcbiAgICAgICAgY29uc3QgY29udHJvbHNJbmZvJCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmxvYWRNZXRhQ29uZGl0aW9uc0NvbnRyb2xJbmZvcyhcbiAgICAgICAgICAgIHR5cGVEZWZJZCxcbiAgICAgICAgICAgIHRoaXMuYWxsQ29sdW1ucy5tYXAoKGMpID0+IGMuTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNJbmZvJCxcbiAgICAgICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5OYW1lOiBzZWxlY3RlZENvbHVtbi5OYW1lLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9hZGRTb3J0Q29sdW1uKG5hbWU6IGFueSwgc29ydERpcmVjdGlvbjogc3RyaW5nLCBpc0dyb3VwZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzb3J0SXRlbSA9IHtcbiAgICAgICAgICAgIE5hbWU6IG5hbWUsXG4gICAgICAgICAgICBTb3J0RGlyZWN0aW9uOiBzb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgSXNHcm91cGVkOiBpc0dyb3VwZWRcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRHcmlkU2V0dGluZ3ModGhpcy5jb250ZXh0KTtcbiAgICAgICAgY29uc3QgZXhpc3RTb3J0SXRlbUluZGV4ID0gc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5OYW1lID09PSBuYW1lKTtcbiAgICAgICAgaWYgKGV4aXN0U29ydEl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5Tb3J0U2V0dGluZ0xpc3RbZXhpc3RTb3J0SXRlbUluZGV4XSA9IHNvcnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0LnB1c2goc29ydEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZFNldHRpbmcoc2V0dGluZ3MsIHRydWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -6,9 +6,9 @@ import * as i2 from "../barsa-asp-viewer/barsa-asp-viewer.component";
|
|
|
6
6
|
export class UiAspReportViewerComponent extends SapUiReportBaseComponent {
|
|
7
7
|
}
|
|
8
8
|
UiAspReportViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiAspReportViewerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
-
UiAspReportViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiAspReportViewerComponent, selector: "bsu-ui-asp-report-viewer", usesInheritance: true, ngImport: i0, template: "<ng-container *untilInView=\"el\">\n <bsu-barsa-asp-viewer\n fillEmptySpace\n [dontUseTopBound]=\"true\"\n [context]=\"context\"\n [style.min-height.px]=\"parentHeight\"\n [parentHeight]=\"parentHeight\"\n ></bsu-barsa-asp-viewer>\n</ng-container>\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "directive", type: i1.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "dontUseTopBound"] }, { kind: "component", type: i2.BarsaAspViewerComponent, selector: "bsu-barsa-asp-viewer", inputs: ["context", "parentHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9
|
+
UiAspReportViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiAspReportViewerComponent, selector: "bsu-ui-asp-report-viewer", usesInheritance: true, ngImport: i0, template: "<ng-container *untilInView=\"el\">\r\n <bsu-barsa-asp-viewer\r\n fillEmptySpace\r\n [dontUseTopBound]=\"true\"\r\n [context]=\"context\"\r\n [style.min-height.px]=\"parentHeight\"\r\n [parentHeight]=\"parentHeight\"\r\n ></bsu-barsa-asp-viewer>\r\n</ng-container>\r\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "directive", type: i1.FillEmptySpaceDirective, selector: "[fillEmptySpace]", inputs: ["containerDom", "decrement", "disable", "dontUseTopBound"] }, { kind: "component", type: i2.BarsaAspViewerComponent, selector: "bsu-barsa-asp-viewer", inputs: ["context", "parentHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10
10
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiAspReportViewerComponent, decorators: [{
|
|
11
11
|
type: Component,
|
|
12
|
-
args: [{ selector: 'bsu-ui-asp-report-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *untilInView=\"el\">\n <bsu-barsa-asp-viewer\n fillEmptySpace\n [dontUseTopBound]=\"true\"\n [context]=\"context\"\n [style.min-height.px]=\"parentHeight\"\n [parentHeight]=\"parentHeight\"\n ></bsu-barsa-asp-viewer>\n</ng-container>\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
12
|
+
args: [{ selector: 'bsu-ui-asp-report-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *untilInView=\"el\">\r\n <bsu-barsa-asp-viewer\r\n fillEmptySpace\r\n [dontUseTopBound]=\"true\"\r\n [context]=\"context\"\r\n [style.min-height.px]=\"parentHeight\"\r\n [parentHeight]=\"parentHeight\"\r\n ></bsu-barsa-asp-viewer>\r\n</ng-container>\r\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
|
|
13
13
|
}] });
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNwLXJlcG9ydC12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktYXNwLXJlcG9ydC12aWV3ZXIvdWktYXNwLXJlcG9ydC12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvdWktYXNwLXJlcG9ydC12aWV3ZXIvdWktYXNwLXJlcG9ydC12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQVEzRSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsd0JBQWlEOzt1SEFBcEYsMEJBQTBCOzJHQUExQiwwQkFBMEIsdUZDWHZDLHNUQVNBOzJGREVhLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDSSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZyB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgU2FwVWlSZXBvcnRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vc2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LXVpLWFzcC1yZXBvcnQtdmlld2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91aS1hc3AtcmVwb3J0LXZpZXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi91aS1hc3AtcmVwb3J0LXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpQXNwUmVwb3J0Vmlld2VyQ29tcG9uZW50IGV4dGVuZHMgU2FwVWlSZXBvcnRCYXNlQ29tcG9uZW50PFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPiB7fVxyXG4iLCI8bmctY29udGFpbmVyICp1bnRpbEluVmlldz1cImVsXCI+XHJcbiAgICA8YnN1LWJhcnNhLWFzcC12aWV3ZXJcclxuICAgICAgICBmaWxsRW1wdHlTcGFjZVxyXG4gICAgICAgIFtkb250VXNlVG9wQm91bmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXHJcbiAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwicGFyZW50SGVpZ2h0XCJcclxuICAgICAgICBbcGFyZW50SGVpZ2h0XT1cInBhcmVudEhlaWdodFwiXHJcbiAgICA+PC9ic3UtYmFyc2EtYXNwLXZpZXdlcj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
|