barsa-sap-ui 1.0.310 → 1.0.312
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-table-row/barsa-table-row.component.mjs +3 -3
- package/esm2020/lib/barsa-ulv-main/barsa-ulv-main.component.mjs +1 -1
- package/esm2020/lib/blob-viewer/blob-viewer.component.mjs +1 -1
- package/esm2020/lib/file-viewer-content/file-viewer-content.component.mjs +1 -1
- package/esm2020/lib/form-wizard/form-wizard.component.mjs +1 -1
- package/esm2020/lib/fundamental-dynamic-form/fundamental-dynamic-form.component.mjs +1 -1
- package/esm2020/lib/mask/mask.component.mjs +4 -4
- package/esm2020/lib/notification-item/notification-item.component.mjs +3 -3
- package/esm2020/lib/report-navigator/report-navigator.component.mjs +1 -1
- package/esm2020/lib/report-search-fields-manage/report-search-fields-manage.component.mjs +1 -1
- package/esm2020/lib/report-search-panel-save/report-search-panel-save.component.mjs +1 -1
- package/esm2020/lib/sap-ui-report-base.component.mjs +3 -4
- package/esm2020/lib/ui-file-linear-list-box/ui-file-linear-list-box.component.mjs +1 -1
- package/esm2020/lib/ui-form-panel/ui-form-panel.component.mjs +1 -1
- package/esm2020/lib/ui-grid-filter-settings/ui-grid-filter-settings.component.mjs +1 -1
- package/esm2020/lib/ui-linear-list-container-with-button/ui-linear-list-container-with-button.component.mjs +21 -17
- package/esm2020/lib/ui-mo-info-ulv-combo/ui-mo-info-ulv-combo.component.mjs +3 -3
- package/esm2020/lib/ui-picture-file/ui-picture-file.component.mjs +3 -3
- package/esm2020/lib/ui-pictures-info/ui-pictures-info.component.mjs +1 -1
- package/esm2020/lib/ui-read-only-field/ui-read-only-field.component.mjs +3 -3
- package/esm2020/lib/ui-table-view/ui-table-view.component.mjs +3 -3
- package/esm2020/lib/ui-tinymce/ui-tinymce.component.mjs +1 -1
- package/esm2020/lib/ul-loading-mask-ui/ul-loading-mask-ui.component.mjs +1 -1
- package/esm2020/lib/ul-msg-box-adapter/ul-msg-box-adapter.component.mjs +1 -1
- package/fesm2015/barsa-sap-ui.mjs +118 -114
- package/fesm2015/barsa-sap-ui.mjs.map +1 -1
- package/fesm2020/barsa-sap-ui.mjs +118 -114
- package/fesm2020/barsa-sap-ui.mjs.map +1 -1
- package/lib/mask/mask.component.d.ts +2 -2
- package/package.json +1 -1
|
@@ -594,7 +594,7 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
|
|
|
594
594
|
}
|
|
595
595
|
this._deviceNameSource.next(deviceName);
|
|
596
596
|
const colWidthSettings = this.gridSettingSource.getValue()?.ColSettingList?.map((c) => c.Width);
|
|
597
|
-
const columnsWidth = colWidthSettings
|
|
597
|
+
const columnsWidth = colWidthSettings?.length ? colWidthSettings : allColumnsWidth;
|
|
598
598
|
let sumColWidth = 0;
|
|
599
599
|
const containerWidth = elNativeElement.clientWidth;
|
|
600
600
|
if (columnsWidth.length > 0 && containerWidth > 0) {
|
|
@@ -607,8 +607,7 @@ export class SapUiReportBaseComponent extends ReportBaseComponent {
|
|
|
607
607
|
});
|
|
608
608
|
}
|
|
609
609
|
if (visibleColumns.length > 2) {
|
|
610
|
-
if (this.viewSetting?.DisableResponsive ||
|
|
611
|
-
(!this.viewSetting && this._deviceNameSource.getValue() === 'desktop')) {
|
|
610
|
+
if (this.viewSetting?.DisableResponsive || this._deviceNameSource.getValue() === 'desktop') {
|
|
612
611
|
const secColumns = this.secondaryColumnsSource.getValue();
|
|
613
612
|
if (secColumns.length) {
|
|
614
613
|
this.secondaryColumnsSource.next([]);
|
|
@@ -723,4 +722,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImpor
|
|
|
723
722
|
}], RefreshFormPanelControl: [{
|
|
724
723
|
type: Input
|
|
725
724
|
}] } });
|
|
726
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsUUFBUSxFQUtSLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZUFBZSxFQUlmLG1CQUFtQixFQUtuQixlQUFlLEVBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUs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O2tCQUxwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs7MEJBaUZRLE1BQU07MkJBQUMsUUFBUTs7MEJBQ2YsUUFBUTs7MEJBQUksSUFBSTs0Q0E3RU0sY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNJLGdCQUFnQjtzQkFBNUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0EsWUFBWTtzQkFBdEMsWUFBWTt1QkFBQyxXQUFXO2dCQUNjLFNBQVM7c0JBQS9DLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLHNCQUFzQjtnQkF5VjNCLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLHVCQUF1QjtzQkFBL0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBPdmVybGF5LCBTY3JvbGxTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHksXG4gICAgQ29udGVudERlbnNpdHlTZXJ2aWNlLFxuICAgIERpYWxvZ0NvbmZpZyxcbiAgICBEaWFsb2dTZXJ2aWNlLFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRvb2xiYXJDb21wb25lbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGUsIFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0nO1xuXG5pbXBvcnQge1xuICAgIEJhcnNhQXBpLFxuICAgIGNvbHVtbnNSZXNpemVkRXZlbnRBcmdzLFxuICAgIERlZmF1bHRDb21tYW5kc0FjY2VzcyxcbiAgICBEZXZpY2VTaXplLFxuICAgIEZvcm1QYW5lbFNlcnZpY2UsXG4gICAgR2V0QWxsQ29sdW1uc1NvcnRlZCxcbiAgICBnZXRDb250cm9sU2l6ZU1vZGUsXG4gICAgZ2V0R3JpZFNldHRpbmdzLFxuICAgIExheW91dFNlcnZpY2UsXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBQb3J0YWxTZXJ2aWNlLFxuICAgIFJlcG9ydEJhc2VDb21wb25lbnQsXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcbiAgICBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZyxcbiAgICBVbHZNYWluU2VydmljZSxcbiAgICBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYsXG4gICAgZ2V0UGFyZW50SGVpZ2h0XG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcbmltcG9ydCB7IExheW91dENvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1jb250cm9sL2xheW91dC1jb250cm9sLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTW9EYXRhTGlzdCB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFVsdkNvbHVtblNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtY29sdW1uLXNldHRpbmdzL3Vsdi1jb2x1bW4tc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LXNvcnQtc2V0dGluZ3MvdWx2LXNvcnQtc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdWx2LWdyb3VwYnktc2V0dGluZ3MvdWx2LWdyb3VwYnktc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtZmlsdGVyLXNldHRpbmdzL3Vsdi1maWx0ZXItc2V0dGluZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3Utc2FwLXVpLXJlcG9ydC1iYXNlJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2FwVWlSZXBvcnRCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZz5cbiAgICBleHRlbmRzIFJlcG9ydEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gICAgQFZpZXdDaGlsZChUYWJsZUNvbXBvbmVudCkgdGFibGVDb21wb25lbnQ6IFRhYmxlQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoVG9vbGJhckNvbXBvbmVudCkgdG9vbGJhckNvbXBvbmVudDogVG9vbGJhckNvbXBvbmVudDtcbiAgICBAVmlld0NoaWxkcmVuKCd0YWJsZVJvd3MnKSB0YWJsZVJvd3NSZWY6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgICBAVmlld0NoaWxkKCdjYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjYW52YXNSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZHJlbihMYXlvdXRDb250cm9sQ29tcG9uZW50KVxuICAgIGxheW91dENvbnRyb2xzUmVmOiBRdWVyeUxpc3Q8TGF5b3V0Q29udHJvbENvbXBvbmVudD47XG4gICAgdXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gZmFsc2U7XG4gICAgaGFzU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHNob3dPa0NhbmNlbEJ1dHRvbnM6IGFueTtcbiAgICBwYXJlbnRIZWlnaHQgPSAwO1xuICAgIGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICByZXNwb25zaXZlUGFkZGluZzogdHJ1ZSxcbiAgICAgICAgdmVydGljYWxQYWRkaW5nOiB0cnVlLFxuICAgICAgICBtaW5XaWR0aDogJzQwcmVtJyxcbiAgICAgICAgbWluSGVpZ2h0OiAnOTB2aCcsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwdncnLFxuICAgICAgICBtYXhIZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZVxuICAgIH07XG5cbiAgICBzZWxlY3RlZFJvd3NOdW1iZXIgPSB7fTtcbiAgICBzZWxlY3RBbGwgPSBmYWxzZTtcbiAgICBzZWxlY3Rpb25BZGFwdGVySGFuZGxlcjoge1xuICAgICAgICBzY29wZTogYW55O1xuICAgICAgICByb3dzZWxlY3Q6IGFueTtcbiAgICAgICAgcm93ZGVzZWxlY3Q6IGFueTtcbiAgICAgICAgYmVmb3Jlcm93c2VsZWN0OiBhbnk7XG4gICAgfTtcbiAgICBuYXZpZ2F0aW9uQXJyb3ckOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgY3VzdG9tUm93SGVpZ2h0OiBhbnk7XG4gICAgcm93Q2xpY2sgPSB0cnVlO1xuICAgIGNlbGxDbGljayA9IGZhbHNlO1xuICAgIGRldmljZU5hbWUkOiBPYnNlcnZhYmxlPERldmljZVNpemU+O1xuICAgIG1vYmlsZU9yVGFibGV0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHNlY29uZGFyeUNvbHVtbnNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlcG9ydFZpZXdDb2x1bW5bXT4oW10pO1xuICAgIHNlY29uZGFyeUNvbHVtbnMkID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHBvcGluJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBjb250ZW50RGVuc2l0eSQ6IE9ic2VydmFibGU8Q29udGVudERlbnNpdHk+O1xuXG4gICAgcm93QWN0aXZhYmxlID0gdHJ1ZTtcbiAgICBvcGVuT3ZlcmZsb3dDb21tYW5kczogYm9vbGVhbltdID0gW107XG4gICAgY29udGFpbmVyV2lkdGhTb3VyY2UkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICAgIGNsb3NlU2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xuICAgIHJvd0hvdmVyYWJsZTogYm9vbGVhbjtcbiAgICBzb3VyY2U6IFRhYmxlRGF0YVNvdXJjZTxNZXRhb2JqZWN0RGF0YU1vZGVsPjtcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlO1xuICAgIGNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBzZWNvbmRhcnlDb2x1bW5zQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgY29udGFpbmVyV2lkdGgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgY29sdW1ucyQ6IE9ic2VydmFibGU8UmVwb3J0Vmlld0NvbHVtbltdPjtcbiAgICBncmlkRGF0YVNvdXJjZTogR3JpZE1vRGF0YUxpc3Q7XG4gICAgc2luZ2xlU2VsZWN0aW9uID0gU2VsZWN0aW9uTW9kZS5TSU5HTEU7XG4gICAgbXVsdGlwbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xuICAgIGFsbG93SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgaW5saW5lRWRpdE1vZGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIG9ubHlJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBmb3JtUGFuZWxDdHJscjogYW55O1xuICAgIGxheW91dCQ6IE9ic2VydmFibGU8YW55PjtcbiAgICBydGwkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHJlcG9ydElkOiBzdHJpbmc7XG4gICAgdmlld1NldHRpbmc6IFQ7XG4gICAgZGlzYWJsZVJlc3BvbnNpdmUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHByb3RlY3RlZCBfZGV2aWNlTmFtZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGV2aWNlU2l6ZT4oJ2Rlc2t0b3AnKTtcbiAgICBwcml2YXRlIF9vbGRDb250YWluZXI6IGFueTtcbiAgICBwcml2YXRlIF9vcGVuT25DbGljazogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJvdGVjdGVkIF9jb250ZW50RGVuc2l0eVNlcnZpY2U6IENvbnRlbnREZW5zaXR5U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9wb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfdWx2TWFpblNlcnZpY2U6IFVsdk1haW5TZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2xheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIGRvY3VtZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByb3RlY3RlZCBfZm9ybXBhbmVsU2VydmljZTogRm9ybVBhbmVsU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfcG9ydGFsU2VydmljZSwgX3Vsdk1haW5TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJXaWR0aCQgPSB0aGlzLmNvbnRhaW5lcldpZHRoU291cmNlJFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgIHRoaXMuZGV2aWNlTmFtZSQgPSB0aGlzLl9kZXZpY2VOYW1lU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVSZXNwb25zaXZlJCA9IHRoaXMuZGV2aWNlTmFtZSQucGlwZShtYXAoKGMpID0+IGMgPT09ICdkZXNrdG9wJykpO1xuICAgICAgICB0aGlzLm1vYmlsZU9yVGFibGV0JCA9IHRoaXMuZGV2aWNlTmFtZSQucGlwZShtYXAoKGRldmljZSkgPT4gZGV2aWNlID09PSAnbW9iaWxlJyB8fCBkZXZpY2UgPT09ICd0YWJsZXQnKSk7XG4gICAgICAgIHRoaXMuX29sZENvbnRhaW5lciA9IEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuQ3VycmVudFN5c3RlbUFkYXB0ZXI7XG4gICAgICAgIHRoaXMuY2xvc2VTY3JvbGxTdHJhdGVneSA9IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNvbnRlbnREZW5zaXR5JCA9IHRoaXMuX2NvbnRlbnREZW5zaXR5U2VydmljZS5jb250ZW50RGVuc2l0eTtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zQ291bnQkID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zJC5waXBlKG1hcCgoY29sdW1ucykgPT4gY29sdW1ucy5sZW5ndGgpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ291bnQkID0gdGhpcy52aXNpYmxlQ29sdW1ucyQucGlwZShcbiAgICAgICAgICAgIG1hcCgoY29sdW1ucykgPT4gY29sdW1ucy5sZW5ndGgpLFxuICAgICAgICAgICAgbWFwKChjb3VudDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LCAnU2V0dGluZy5FeHRyYS5EZWZhdWx0Q29tbWFuZHNBY2Nlc3MnKTtcbiAgICAgICAgICAgICAgICBpZiAoYWNjZXNzPy5WaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChjb3VudDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IF90eXBlRGVmSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhLlJlcG9ydC5UeXBlRGVmSWQ7XG4gICAgfVxuICAgIGdldCBfaW5saW5lRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5nZXRWYWx1ZUlubGluZUVkaXQoKTtcbiAgICB9XG4gICAgZ2V0IF9hbGxvd0lubGluZUVkaXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5nZXRBbGxvd0lubGluZUVkaXQoKTtcbiAgICB9XG4gICAgZ2V0IF9hY2Nlc3MoKTogRGVmYXVsdENvbW1hbmRzQWNjZXNzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5TZXR0aW5nPy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzO1xuICAgIH1cbiAgICBzZXQgX2FjY2Vzcyh2YWw6IERlZmF1bHRDb21tYW5kc0FjY2Vzcykge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2VzcyA9IHZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5TZXR0aW5nLkV4dHJhID0geyBEZWZhdWx0Q29tbWFuZHNBY2Nlc3M6IHZhbCB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRQYXJlbnRIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5fcmVhZFZpZXdTZXR0aW5nKCk7XG4gICAgICAgIGlmICghdGhpcy5fYWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0QWNjZXNzKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5zaG93T2tDYW5jZWxCdXR0b25zID0gdGhpcy5jb250ZXh0LlNob3dPa0NhbmNlbEJ1dHRvbnM7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmxheW91dEluZm8kLnN1YnNjcmliZSgobGF5b3V0SW5mbykgPT4ge1xuICAgICAgICAgICAgaWYgKGxheW91dEluZm8gJiYgbGF5b3V0SW5mby5Vc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudmlld1NldHRpbmc/LlRpdGxlO1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldFRpdGxlKHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZXBvcnRJZCQuc3Vic2NyaWJlKChyZXBvcnRJZCkgPT4gKHRoaXMucmVwb3J0SWQgPSByZXBvcnRJZCkpO1xuICAgICAgICB0aGlzLl9sYXlvdXRTZXJ2aWNlLnNldFJlbmRlcmVkKHRydWUpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPSB0aGlzLmNvbnRleHQuVmlld1NldHRpbmc/LklzQ2hlY2tMaXN0ID8gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA6IHRoaXMuc2luZ2xlU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLl9vcGVuT25DbGljayA9IHRoaXMudmlld1NldHRpbmc/Lk9wZW5PbkNsaWNrO1xuICAgICAgICB0aGlzLmN1c3RvbVJvd0hlaWdodCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcsXG4gICAgICAgICAgICAnRXh0cmEuRXh0cmFKc29uUHJvcFJlcG9ydC5HcmlkUm93SGVpZ2h0J1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJ0bCQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnJ0bCQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkFycm93JCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJC5waXBlKFxuICAgICAgICAgICAgbWFwKChpc1J0bCkgPT4gKGlzUnRsID8gJ25hdmlnYXRpb24tbGVmdC1hcnJvdycgOiAnbmF2aWdhdGlvbi1yaWdodC1hcnJvdycpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFsbG93SW5saW5lRWRpdCQgPSB0aGlzLl91bHZNYWluU2VydmljZS5hbGxvd0lubGluZUVkaXQkO1xuICAgICAgICB0aGlzLmlubGluZUVkaXRNb2RlJCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmlubGluZUVkaXRNb2RlJDtcbiAgICAgICAgdGhpcy5vbmx5SW5saW5lRWRpdCQgPSB0aGlzLl91bHZNYWluU2VydmljZS5vbmx5SW5saW5lRWRpdCQ7XG4gICAgICAgIHRoaXMuaGFzU2VsZWN0ZWQkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgobW9MaXN0KSA9PiBtb0xpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKSkpO1xuICAgICAgICB0aGlzLm1vRGF0YUxpc3QkID0gdGhpcy5tb0RhdGFMaXN0JC5waXBlKG1hcCgoaXRlbXMpID0+IHRoaXMuX21hcENhcnRhYmxlTW8oaXRlbXMpKSk7XG4gICAgICAgIGNvbnN0IGdyaWREYXRhU291cmNlID0gbmV3IEdyaWRNb0RhdGFMaXN0KFxuICAgICAgICAgICAgdGhpcy5tb0RhdGFMaXN0JCxcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNldHRpbmckLFxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyQsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0kXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ncmlkRGF0YVNvdXJjZSA9IGdyaWREYXRhU291cmNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMkID0gY29tYmluZUxhdGVzdChbdGhpcy5ncmlkU2V0dGluZyQsIHRoaXMuc2Vjb25kYXJ5Q29sdW1ucyRdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbXywgc2Vjb25kYXJ5Q29sdW1uc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRhcmllcyA9IHNlY29uZGFyeUNvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gR2V0QWxsQ29sdW1uc1NvcnRlZCh0aGlzLmNvbnRleHQpLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IF8/LlNvcnRTZXR0aW5nTGlzdD8uZmlsdGVyKChjKSA9PiBjLklzR3JvdXBlZCkubWFwKChjKSA9PiBjLk5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gZ3JvdXBlZENvbHVtbnMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcigoYykgPT4gc2Vjb25kYXJpZXMuaW5kZXhPZihjLk5hbWUpID09PSAtMSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoY29sdW1ucykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYzogUmVwb3J0Vmlld0NvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjLiRDU1NDbGFzc05hbWUgPSAnY29sdW1uX19GaWVsZFR5cGUnICsgYy5GaWVsZFR5cGVJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuRmllbGRUeXBlSWQgPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSA9PT0gJ0ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy4kV2lkdGggPSAnMzhweCc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICFCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzVXNlckxvZ2dlZEluIC8vIGlmIHVzZXIgaXMgYW5vbnltb3VzIGFsbCBjb2x1bW4gd2lkdGggZXF1YWxzIHRvIDEwMCVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYy5XaWR0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGMuV2lkdGggKyAncHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnMTAwJSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmlubGluZUVkaXRNb2RlJC5waXBlKFxuICAgICAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oYXNTZWxlY3RlZCQpLFxuICAgICAgICAgICAgZmlsdGVyKChbXywgX19dKSA9PiB0aGlzLl9hY2Nlc3MuQWRkICE9PSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLl9mb3JtcGFuZWxTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtcGFuZWxTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkV4ZWN1dGVUb29sYmFyQnV0dG9uKGU6IHsgaXRlbUlkOiBzdHJpbmc7IG9wdGlvbnM/OiBhbnkgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGl0ZW1JZCwgb3B0aW9ucyB9ID0gZTtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuZXhlY3V0ZVRvb2xiYXJCdXR0b24oaXRlbUlkLCBvcHRpb25zKTtcbiAgICB9XG4gICAgb25FZGl0TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0SW5saW5lRWRpdCghdGhpcy5faW5saW5lRWRpdE1vZGUpO1xuICAgIH1cbiAgICBvblNlbGVjdE5leHRJbmxpbmVSZWNvcmQobW8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0TmV4dElubGluZVJlY29yZChtbyk7XG4gICAgfVxuXG4gICAgb25FZGl0Rm9ybVBhbmVsU2F2ZShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChtbyk7XG4gICAgfVxuXG4gICAgb25FZGl0Rm9ybVBhbmVsQ2FuY2VsKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGhhc1NlbGVjdGVkID0gbW9EYXRhTGlzdC5zb21lKChjKSA9PiBjLiRJc0NoZWNrZWQpO1xuICAgICAgICBpZiAoaGFzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vKTtcbiAgICAgICAgICAgIHRoaXMuX3NldElubGluZUVkaXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRWRpdEZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vKTtcbiAgICB9XG4gICAgb25Db2x1bW5SZXNpemVkKGNvbHVtbnM6IGNvbHVtbnNSZXNpemVkRXZlbnRBcmdzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNvbHVtbnNSZXNpemVkKGNvbHVtbnMpO1xuICAgIH1cbiAgICBvbldvcmtmbG93U2hhcmVCdXR0b25zKGU6IFNoYXJlQnV0dG9uc0Nob2ljZURlZik6IHZvaWQge1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5hZGRXb3JrZmxvd0J1dHRvbnNJblRvb2xiYXIoZSk7XG4gICAgfVxuICAgIG9uUm93Q2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcbiAgICAgICAgaWYgKG1vLmdyb3VwIHx8IHRoaXMuX2lubGluZUVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcbiAgICAgICAgaWYgKCFtby4kSXNDaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhtbywgbW9JbmRleCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb3Blbk1vKG1vLCBtb0luZGV4KTtcbiAgICB9XG5cbiAgICBvblVsdkNvbW1hbmQoJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8gfSA9ICRldmVudDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IHRoaXMuX2dldEluZGV4KG1vKTtcbiAgICAgICAgdGhpcy5fdWx2Q29tbWFuZENsaWNrZWQobW8sIG1vSW5kZXgpO1xuICAgIH1cbiAgICBvbkRlc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoZmFsc2UpO1xuICAgICAgICAvLyB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdyb3dzZWxlY3QnLCB0aGlzLmNvbnRleHQpOyAvLyDYqNin2LnYqyDZhduM2LTZiNivINiv2YjYqNin2LEgc2VsZWN0aW9uY2hhbmdlINqv2LLYp9ix2LQg2YHYsdin2K7ZiNin2YbbjCDYtNmI2K9cbiAgICB9XG4gICAgb25Sb3dDaGVjaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICBpZiAodGhpcy5fb3Blbk9uQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMub25Sb3dDbGljaygkZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcm93Q2hlY2sobW8sIG1vSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQ2FydGFibGVGb3JtQ2xvc2VkKHsgbW8gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0MiA9IG5ld01vRGF0YUxpc3QuZmlsdGVyKChjKSA9PiBjLklkICE9PSBtby5JZCk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0Mik7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QyKTtcbiAgICB9XG4gICAgb25FeHBhbmRDbGljayhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBtby4kRXhwYW5kZWQgPSAhbW8uJEV4cGFuZGVkO1xuICAgICAgICB0aGlzLl9zZXRWaXNpYmlsaXR5KG1vLiRFeHBhbmRlZCwgbW8pO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QoKTtcbiAgICB9XG5cbiAgICBvbkFsbENoZWNrYm94KGNoZWNrZWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGNoZWNrZWQpO1xuICAgICAgICAvLyBpZiAoY2hlY2tlZCkge1xuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLl9zZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZvckVhY2goKG1vLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyAgICAgdGhpcy5fZGVzZWxlY3QobW8sIGluZGV4KTtcbiAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIG9uU29ydEFzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU29ydENvbHVtbihjb2x1bW4uTmFtZSwgJ0FTQycpO1xuICAgIH1cblxuICAgIG9uU29ydERlc2NlbmRpbmcoY29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZFNvcnRDb2x1bW4oY29sdW1uLk5hbWUsICdERVNDJyk7XG4gICAgfVxuICAgIG9uRmlsdGVyKHNlbGVjdGVkQ29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Nob3dGaWx0ZXJTZXR0aW5nKHNlbGVjdGVkQ29sdW1uKTtcbiAgICB9XG5cbiAgICBvbkNvbHVtblNldHRpbmdzKGRldmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ2NvbHVtbnMnLCBkZXZpY2UpO1xuICAgIH1cblxuICAgIG9uU29ydFNldHRpbmdzKGRldmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ3NvcnQnLCBkZXZpY2UpO1xuICAgIH1cblxuICAgIG9uR3JvdXBieVNldHRpbmdzKGRldmljZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vcGVuU2V0dGluZ3MoJ2dyb3VwYnknLCBkZXZpY2UpO1xuICAgIH1cblxuICAgIG9uTGlzdENoZWNrYm94Q2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMub25Sb3dDaGVjayh7IG1vLCBpbmRleCwgY2F1c2U6ICdzaW5nbGVTZWxlY3QnIH0pO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25MaXN0TmF2aWdhdGlvbkNsaWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vLCBpbmRleCwgZSB9ID0gJGV2ZW50O1xuICAgICAgICB0aGlzLm9uUm93Q2xpY2soeyBtbywgaW5kZXggfSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgb25TYXZlVG9wRm9ybShtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4XSA9IG1vO1xuICAgICAgICB9XG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XG4gICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGMuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICB9XG4gICAgb25OZXdUb3BGb3JtQWRkKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG1vKTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBTaG93Rm9ybVBhbmVsQ29udHJvbCA9IChmb3JtcGFuZWxDdHJscikgPT4ge307XG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cbiAgICBASW5wdXQoKSBGb3JjZUNsb3NlQ2hpbGQgPSAoKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIFJlZnJlc2hGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcblxuICAgIC8vIHByb3RlY3RlZCBfaW5saW5lRWRpdE1vZGVDaGFuZ2VkKGVkaXRNb2RlKTogdm9pZCB7XG4gICAgLy8gICAgIGlmIChlZGl0TW9kZSkge1xuICAgIC8vICAgICAgICAgY29uc3QgY2FuQWRkOiBib29sZWFuID0gdGhpcy5fYWNjZXNzPy5BZGQgIT09IGZhbHNlO1xuXG4gICAgLy8gICAgICAgICBsZXQgc2VsZWN0ZWRNbyA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG4gICAgLy8gICAgICAgICBsZXQgbmV3TW87XG4gICAgLy8gICAgICAgICBpZiAoY2FuQWRkICE9PSBmYWxzZSAmJiAhc2VsZWN0ZWRNbykge1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZCgpO1xuICAgIC8vICAgICAgICAgICAgIHJldHVybjtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIC8vIGlmICghc2VsZWN0ZWRNbyAmJiAhbmV3TW8gJiYgdGhpcy5tb0RhdGFMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICAgIC8vICAgICBzZWxlY3RlZE1vID0gdGhpcy5tb0RhdGFMaXN0WzBdO1xuICAgIC8vICAgICAgICAgLy8gfVxuICAgIC8vICAgICAgICAgLy8gaWYgKHNlbGVjdGVkTW8pIHtcbiAgICAvLyAgICAgICAgIC8vICAgICBjb25zdCBpZE9mU2VsZWN0ZWRNbyA9IHRoaXMuX2luZGV4T2ZNbyhzZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vICAgICBzZWxlY3RlZE1vLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyAgICAgdGhpcy5fcm93Q2hlY2soc2VsZWN0ZWRNbywgaWRPZlNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gfVxuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlciA9IHRoaXMuX29sZENvbnRhaW5lcjtcbiAgICAvLyAgICAgICAgIHRoaXMuX3NldE5ld0lubGluZU1vKG51bGwpO1xuICAgIC8vICAgICB9XG4gICAgLy8gfVxuICAgIC8vIHByb3RlY3RlZCBfY3JlYXRlTmV3SW5saW5lUmVjb3JkKHNlbGVjdGVkTW8/OiBNZXRhb2JqZWN0RGF0YU1vZGVsKSB7XG4gICAgLy8gICAgIGNvbnN0IG1vID0gdGhpcy5faW5saW5lRWRpdFByZXBhcmVOZXdNbygpO1xuICAgIC8vICAgICBjb25zdCBmb3JtTW8gPSBCYXJzYUFwaS5Db21tb24uTWVyZ2VyLkZhc3RNZXJnZShtbywgc2VsZWN0ZWRNbywgeyBleHRlbmRlZEZpZWxkczogWydJZCwkQ2FwdGlvbiddIH0pO1xuICAgIC8vICAgICB0aGlzLl9zZXROZXdJbmxpbmVNbyhmb3JtTW8pO1xuICAgIC8vICAgICB0aGlzLl9zZWxlY3QoZm9ybU1vLCAtMSk7XG4gICAgLy8gfVxuICAgIHByb3RlY3RlZCBfcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3Q/OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVTZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2dldFdpZHRoKGxhYmVsOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuY2FudmFzUmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmNhbnZhc1JlZi5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIGN0eC5mb250ID0gJ25vcm1hbCAwLjg4NXJlbSBJUkFOWWVrYW5EaWdpdHMnO1xuICAgICAgICBjb25zdCBsYWJlbFdpdGhQYWRkaW5nID0gY3R4Lm1lYXN1cmVUZXh0KGxhYmVsKS53aWR0aDtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChsYWJlbFdpdGhQYWRkaW5nKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRQYXJlbnRIZWlnaHQoKSB7XG4gICAgICAgIHRoaXMucGFyZW50SGVpZ2h0ID0gZ2V0UGFyZW50SGVpZ2h0KHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfbWFwQ2FydGFibGVNbyhpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdKSB7XG4gICAgICAgIGlmICghdGhpcy52aWV3U2V0dGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgTmFtZVNlcmlhbGl6ZU1vLCBDYXJ0YWJsZU9iamVjdE5hbWUgfSA9IHRoaXMudmlld1NldHRpbmc7XG4gICAgICAgIGlmICghTmFtZVNlcmlhbGl6ZU1vIHx8ICFDYXJ0YWJsZU9iamVjdE5hbWUgfHwgIWl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKChjKSA9PiAoY1tDYXJ0YWJsZU9iamVjdE5hbWVdID0gQmFyc2FBcGkuRXh0LmRlY29kZSgneycgKyBjW05hbWVTZXJpYWxpemVNb10gKyAnfScpKSk7XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICBvblRvb2xiYXJDcmVhdGVOZXdJbmxpbmVNbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8oKTtcbiAgICB9XG4gICAgb25DcmVhdGVOZXdNbygpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lTW8odHJ1ZSk7XG4gICAgfVxuICAgIG9uTWFuZGF0b3J5KGlzTWFuZGF0b3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnTWFuZGF0b3J5JywgaXNNYW5kYXRvcik7XG4gICAgfVxuICAgIG9uVXBkYXRlTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgbW9JbmRleCA9IG1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChtb0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG1vRGF0YUxpc3RbbW9JbmRleF0gPSBtbztcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChtb0RhdGFMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2NyZWF0ZU5ld0lubGluZU1vKHNldENoYW5nZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBleGlzdElubGluZU1vID0gbW9EYXRhTGlzdC5maW5kKChjKSA9PiBjLiROZXdJbmxpbmVNbyk7XG4gICAgICAgIGlmIChleGlzdElubGluZU1vKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChleGlzdElubGluZU1vKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtbyA9IHRoaXMuX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKHRydWUpO1xuICAgICAgICBpZiAoc2V0Q2hhbmdlZCkge1xuICAgICAgICAgICAgbW8uJElubGluZU1vQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb0RhdGFMaXN0LmZvckVhY2goKGMpID0+IChjLiRJc0NoZWNrZWQgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChtbywgdHJ1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKGlzQ2hlY2tlZDogYm9vbGVhbik6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWx2TWFpblNlcnZpY2UuY3JlYXRlTmV3SW5saW5lTW8oaXNDaGVja2VkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2lubGluZUZvcm1QYW5lbFZhbHVlQ2hhbmdlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGV4aXN0TW9JbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChleGlzdE1vSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdE1vSW5kZXhdID0gQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIuQ3JlYXRlTW8obW8pO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGlmICghbW8uJE5ld0lubGluZU1vKSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgbmV4dCByZWNvcmRcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0c0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xICYmIGV4aXN0c0luZGV4ICsgMSA8IG5ld01vRGF0YUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbmV3TW9EYXRhTGlzdFtleGlzdHNJbmRleCArIDFdLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4ICsgMV0sIGV4aXN0c0luZGV4ICsgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBjLiRJc0NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdCh0aGlzLl9pbmxpbmVSZXBvcnRDcmVhdGVOZXdNbyh0cnVlKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgaWYgKCFtby4kTmV3SW5saW5lTW8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdHNJbmRleCA9IG5ld01vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgICAgIGlmIChleGlzdHNJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4XSA9IG1vO1xuICAgICAgICB9XG4gICAgICAgIG5ld01vRGF0YUxpc3QubWFwKChjKSA9PiB7XG4gICAgICAgICAgICBjLiROZXdJbmxpbmVNbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGMuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0aGlzLl91bHZNYWluU2VydmljZS5jcmVhdGVOZXdJbmxpbmVNbygpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldERlZmF1bHRBY2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjY2VzcyA9IHtcbiAgICAgICAgICAgIEFkZDogZmFsc2UsXG4gICAgICAgICAgICBBZGRUb0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgRGVsZXRlOiBmYWxzZSxcbiAgICAgICAgICAgIEVkaXQ6IGZhbHNlLFxuICAgICAgICAgICAgRXhwb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIFByaW50OiBmYWxzZSxcbiAgICAgICAgICAgIFJlZnJlc2g6IGZhbHNlLFxuICAgICAgICAgICAgUmVtb3ZlRnJvbUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgVmlldzogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9leHBhbmRNbyhzZWxlY3RlZE1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBleHBhbmQpOiB2b2lkIHtcbiAgICAgICAgc2VsZWN0ZWRNby4kRXhwYW5kZWQgPSBleHBhbmQ7XG4gICAgICAgIHNlbGVjdGVkTW8uJENoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kTW8oY2hpbGQsIGV4cGFuZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZJZChpZCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gaWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2luZGV4T2ZTZWxlY3RlZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5maW5kSW5kZXgoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZ2V0SW5kZXgobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldElubGluZUVkaXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0SW5saW5lRWRpdCh2YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfcmVhZFZpZXdTZXR0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdTZXR0aW5nID0gdGhpcy5jb250ZXh0LlNldHRpbmcuQ2xhc3NOYW1lcy5DdXN0b21VaT8uUGFyYW1ldGVycztcbiAgICB9XG4gICAgLy8gcHJvdGVjdGVkIF9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAvLyAgICAgc3VwZXIuX21vRGF0YUxpc3RDaGFuZ2VkKG1vRGF0YUxpc3QpO1xuICAgIC8vICAgICBpZiAodGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGNoZWNrZWRNb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG5cbiAgICAvLyAgICAgICAgIGlmIChjaGVja2VkTW9JbmRleCA+IC0xKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgY2hlY2tlZE1vID0gbW9EYXRhTGlzdFtjaGVja2VkTW9JbmRleF07XG4gICAgLy8gICAgICAgICAgICAgaWYgKGNoZWNrZWRNby5JZCAhPT0gdGhpcy5mb3JtUGFuZWxDdHJsci5Nby5JZCkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0b3JEZXN0cm95Rm9ybVBhbmVsQ3RybHIoKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdENyZWF0ZUZvcm1QYW5lbEN0cmxyKGNoZWNrZWRNbywgY2hlY2tlZE1vSW5kZXgpO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHByb3RlY3RlZCBfc2V0VmlzaWJpbGl0eShcbiAgICAgICAgZXhwYW5kOiBib29sZWFuLFxuICAgICAgICBtbzogYW55IC8vTWV0YW9iamVjdERhdGFNb2RlbFxuICAgICk6IHZvaWQge1xuICAgICAgICBtby4kQ2hpbGRyZW4/LmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICBjaGlsZC4kVmlzaWJpbGl0eSA9IGV4cGFuZDtcbiAgICAgICAgICAgIGlmIChjaGlsZC4kQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRWaXNpYmlsaXR5KGV4cGFuZCwgY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWQgX3NldE5ld0lubGluZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCk6IHZvaWQge1xuICAgIC8vICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXROZXdJbmxpbmVNbyhtbyk7XG4gICAgLy8gfVxuICAgIC8vIHByb3RlY3RlZCBfaW5saW5lRWRpdFByZXBhcmVOZXdNbygpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICAvLyBjb25zdCBuZXdNbyA9IGdldE5ld01vR3JpZEVkaXRvcih0aGlzLmZvcm1TZXR0aW5nLCB0aGlzLl90eXBlRGVmSWQpO1xuICAgIC8vIG5ld01vLklkID0gZ2V0VW5pcXVlSWQoMyk7XG4gICAgLy8gaWYgKHRoaXMuX2lzQ29tcG9zaXRlKCkpIHtcbiAgICAvLyAgICAgY29uc3QgcmVsYXRpb24gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQuU2V0dGluZywgJ0V4dHJhLlJlbGF0aW9uJyk7XG4gICAgLy8gICAgIG5ld01vW3JlbGF0aW9uLlBhcmVudEZkTmFtZV0gPSByZWxhdGlvbi5QYXJlbnRNb0lkO1xuICAgIC8vIH1cbiAgICAvLyAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IFsuLi50aGlzLm1vRGF0YUxpc3QsIG5ld01vIGFzIE1ldGFvYmplY3REYXRhTW9kZWxdO1xuICAgIC8vICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlU2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAvLyBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLmZpcmVFdmVudChcbiAgICAvLyAgIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuRXZlbnRFbnVtLkdsb2JhbFJlcG9ydE1vQWRkLFxuICAgIC8vICAgdGhpcy5jb250ZXh0LFxuICAgIC8vICAgcmVwb3J0RXZlbnRNb0FkZFxuICAgIC8vICk7XG4gICAgLy8gICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudCgnUmVmcmVzaENvbnRleHRNb0RhdGFMaXN0JywgbmV3TW9EYXRhTGlzdCk7XG4gICAgLy8gICAgcmV0dXJuIG5ld01vIGFzIE1ldGFvYmplY3REYXRhTW9kZWw7XG4gICAgLy8gfVxuICAgIHByb3RlY3RlZCBfYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobmV3SW5saW5lTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIHNlbGVjdDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSBbLi4udGhpcy5tb0RhdGFMaXN0LCB7IC4uLm5ld0lubGluZU1vLCAkSXNDaGVja2VkOiBzZWxlY3QgfV07XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9yb3dDaGVjayhtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgaW5kZXg6IG51bWJlciwgc2VsZWN0ZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZGl0TW9kZSA9IHRoaXMuX2lubGluZUVkaXRNb2RlICYmIHRoaXMuX2FsbG93SW5saW5lRWRpdDtcbiAgICAgICAgaWYgKG1vLiRJc0NoZWNrZWQgJiYgZWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaWYgKGVkaXRNb2RlKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5TSU5HTEU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tlZCA9ICFtby4kSXNDaGVja2VkIHx8IHNlbGVjdGVkO1xuICAgICAgICB0aGlzLnJvd0hvdmVyYWJsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJyAmJiBjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9DaGVja2VkQWxsKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0TmV3SW5saW5lTW8obnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0VmFsdWVJbmxpbmVNbyhtbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgdGhpcy5fZGVzZWxlY3QobW8sIGluZGV4KTtcbiAgICB9XG4gICAgLy8gcHJvdGVjdGVkIF9zZXRWYWx1ZUlubGluZU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgLy8gICAgIC8vIHRoaXMuZm9ybVBhbmVsQ3RybHIuU2V0VmFsdWUoeyAuLi5tbywgJFR5cGVEZWZJZDogdGhpcy5fdHlwZURlZklkIH0pO1xuICAgIC8vIH1cblxuICAgIHByb3RlY3RlZCBfaW5saW5lRWRpdG9yRGVzdHJveUZvcm1QYW5lbEN0cmxyKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiAodGhpcy5mb3JtUGFuZWxDdHJscikge1xuICAgICAgICAvLyAgICAgdGhpcy5fZm9ybVBhbmVsU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm1QYW5lbEN0cmxyLkRlc3Ryb3koKTtcbiAgICAgICAgLy8gICAgIHRoaXMuZm9ybVBhbmVsQ3RybHIgPSBudWxsO1xuICAgICAgICAvLyB9XG4gICAgfVxuICAgIHByb3RlY3RlZCBfd2luZG93UmVzaXplZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0Q29udGFpbmVyV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFyZW50SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0Q29udGFpbmVyV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoU291cmNlJC5uZXh0KGVsLm9mZnNldFdpZHRoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2RldmljZVNpemVDaGFuZ2VkKGRldmljZVNpemUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxOYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyaWRTaXplID0gZ2V0Q29udHJvbFNpemVNb2RlKGVsTmF0aXZlRWxlbWVudCwgZGV2aWNlU2l6ZSk7XG4gICAgICAgIGxldCBkZXZpY2VOYW1lOiBEZXZpY2VTaXplID0gJ2Rlc2t0b3AnO1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zV2lkdGggPSB0aGlzLmFsbENvbHVtbnMubWFwKChjb2x1bW4pID0+XG4gICAgICAgICAgICBjb2x1bW4uV2lkdGggPT0gMCA/IHRoaXMuX2dldFdpZHRoKGNvbHVtbi5BbGlhcykgOiBjb2x1bW4uV2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLl92aXNpYmxlQ29sdW1uc1NvdXJjZS5nZXRWYWx1ZSgpO1xuICAgICAgICBsZXQgY29sdW1uc0NvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuICAgICAgICBzd2l0Y2ggKGdyaWRTaXplKSB7XG4gICAgICAgICAgICBjYXNlICdsJzpcbiAgICAgICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ2Rlc2t0b3AnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgZGV2aWNlTmFtZSA9ICdtb2JpbGUnO1xuICAgICAgICAgICAgICAgIGNvbHVtbnNDb3VudCA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ3RhYmxldCc7XG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZXZpY2VOYW1lU291cmNlLm5leHQoZGV2aWNlTmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbFdpZHRoU2V0dGluZ3MgPSB0aGlzLmdyaWRTZXR0aW5nU291cmNlLmdldFZhbHVlKCk/LkNvbFNldHRpbmdMaXN0Py5tYXAoKGMpID0+IGMuV2lkdGgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zV2lkdGggPSBjb2xXaWR0aFNldHRpbmdzLmxlbmd0aCA/IGNvbFdpZHRoU2V0dGluZ3MgOiBhbGxDb2x1bW5zV2lkdGg7XG4gICAgICAgIGxldCBzdW1Db2xXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWxOYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBpZiAoY29sdW1uc1dpZHRoLmxlbmd0aCA+IDAgJiYgY29udGFpbmVyV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb2x1bW5zV2lkdGguZm9yRWFjaCgod2lkdGgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1bUNvbFdpZHRoICsgd2lkdGggPiBjb250YWluZXJXaWR0aCAmJiBjb2x1bW5zQ291bnQgPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gd2lkdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3U2V0dGluZz8uRGlzYWJsZVJlc3BvbnNpdmUgfHxcbiAgICAgICAgICAgICAgICAoIXRoaXMudmlld1NldHRpbmcgJiYgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5nZXRWYWx1ZSgpID09PSAnZGVza3RvcCcpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNDb2x1bW5zID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlY0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQodmlzaWJsZUNvbHVtbnMuc2xpY2UoY29sdW1uc0NvdW50LCB2aXNpYmxlQ29sdW1ucy5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfb3BlblNldHRpbmdzKG5hbWUsIGRldmljZTogRGV2aWNlU2l6ZSk6IHZvaWQge1xuICAgICAgICBsZXQgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwYnknOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YTogeyBjb250ZXh0OiB0aGlzLmNvbnRleHQgfSxcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IGRldmljZSA9PT0gJ21vYmlsZScsXG4gICAgICAgICAgICBtaW5XaWR0aDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICdhdXRvJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1pbldpZHRoLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSBuYW1lID09PSAnc29ydCcgfHwgbmFtZSA9PT0gJ2dyb3VwYnknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmcsIGlzU29ydENoYW5nZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubW9EYXRhTGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSB0aGlzLl90eXBlRGVmSWQ7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzSW5mbyQgPSB0aGlzLl91bHZNYWluU2VydmljZS5sb2FkTWV0YUNvbmRpdGlvbnNDb250cm9sSW5mb3MoXG4gICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICB0aGlzLmFsbENvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzSW5mbyQsXG4gICAgICAgICAgICAgICAgdHlwZURlZklkLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uTmFtZTogc2VsZWN0ZWRDb2x1bW4uTmFtZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50LCBjb25maWcpO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfYWRkU29ydENvbHVtbihuYW1lOiBhbnksIHNvcnREaXJlY3Rpb246IHN0cmluZywgaXNHcm91cGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydEl0ZW0gPSB7XG4gICAgICAgICAgICBOYW1lOiBuYW1lLFxuICAgICAgICAgICAgU29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIElzR3JvdXBlZDogaXNHcm91cGVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKHRoaXMuY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4aXN0U29ydEl0ZW1JbmRleCA9IHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChleGlzdFNvcnRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0W2V4aXN0U29ydEl0ZW1JbmRleF0gPSBzb3J0SXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5wdXNoKHNvcnRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmdzLCB0cnVlKTtcbiAgICB9XG59XG4iXX0=
|
|
725
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLXVpLXJlcG9ydC1iYXNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL3NhcC11aS1yZXBvcnQtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBR1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pILE9BQU8sRUFLSCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGFBQWEsRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUUzRSxPQUFPLEVBQ0gsUUFBUSxFQUtSLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsZUFBZSxFQUlmLG1CQUFtQixFQUtuQixlQUFlLEVBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUs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QUF3QjtvQkFDbEMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEOzswQkFpRlEsTUFBTTsyQkFBQyxRQUFROzswQkFDZixRQUFROzswQkFBSSxJQUFJOzRDQTdFTSxjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0ksZ0JBQWdCO3NCQUE1QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDQSxZQUFZO3NCQUF0QyxZQUFZO3VCQUFDLFdBQVc7Z0JBQ2MsU0FBUztzQkFBL0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVyQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQXlWM0Isb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNlbGYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIE92ZXJsYXksIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eSxcbiAgICBDb250ZW50RGVuc2l0eVNlcnZpY2UsXG4gICAgRGlhbG9nQ29uZmlnLFxuICAgIERpYWxvZ1NlcnZpY2UsXG4gICAgVGFibGVDb21wb25lbnQsXG4gICAgVG9vbGJhckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZSwgVGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7XG4gICAgQmFyc2FBcGksXG4gICAgY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MsXG4gICAgRGVmYXVsdENvbW1hbmRzQWNjZXNzLFxuICAgIERldmljZVNpemUsXG4gICAgRm9ybVBhbmVsU2VydmljZSxcbiAgICBHZXRBbGxDb2x1bW5zU29ydGVkLFxuICAgIGdldENvbnRyb2xTaXplTW9kZSxcbiAgICBnZXRHcmlkU2V0dGluZ3MsXG4gICAgTGF5b3V0U2VydmljZSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFBvcnRhbFNlcnZpY2UsXG4gICAgUmVwb3J0QmFzZUNvbXBvbmVudCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxuICAgIFVsdk1haW5TZXJ2aWNlLFxuICAgIFNoYXJlQnV0dG9uc0Nob2ljZURlZixcbiAgICBnZXRQYXJlbnRIZWlnaHRcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuaW1wb3J0IHsgTGF5b3V0Q29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRNb0RhdGFMaXN0IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVWx2Q29sdW1uU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1jb2x1bW4tc2V0dGluZ3MvdWx2LWNvbHVtbi1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2U29ydFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtc29ydC1zZXR0aW5ncy91bHYtc29ydC1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2R3JvdXBieVNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi91bHYtZ3JvdXBieS1zZXR0aW5ncy91bHYtZ3JvdXBieS1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVWx2RmlsdGVyU2V0dGluZ3NDb21wb25lbnQgfSBmcm9tICcuL3Vsdi1maWx0ZXItc2V0dGluZ3MvdWx2LWZpbHRlci1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1zYXAtdWktcmVwb3J0LWJhc2UnLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTYXBVaVJlcG9ydEJhc2VDb21wb25lbnQ8VCBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nPlxuICAgIGV4dGVuZHMgUmVwb3J0QmFzZUNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICBAVmlld0NoaWxkKFRhYmxlQ29tcG9uZW50KSB0YWJsZUNvbXBvbmVudDogVGFibGVDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZChUb29sYmFyQ29tcG9uZW50KSB0b29sYmFyQ29tcG9uZW50OiBUb29sYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlUm93cycpIHRhYmxlUm93c1JlZjogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ2NhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhc1JlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkcmVuKExheW91dENvbnRyb2xDb21wb25lbnQpXG4gICAgbGF5b3V0Q29udHJvbHNSZWY6IFF1ZXJ5TGlzdDxMYXlvdXRDb250cm9sQ29tcG9uZW50PjtcbiAgICB1c2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2wgPSBmYWxzZTtcbiAgICBoYXNTZWxlY3RlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgc2hvd09rQ2FuY2VsQnV0dG9uczogYW55O1xuICAgIHBhcmVudEhlaWdodCA9IDA7XG4gICAgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7XG4gICAgICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxuICAgICAgICB2ZXJ0aWNhbFBhZGRpbmc6IHRydWUsXG4gICAgICAgIG1pbldpZHRoOiAnNDByZW0nLFxuICAgICAgICBtaW5IZWlnaHQ6ICc5MHZoJyxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzEwMHZoJyxcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlXG4gICAgfTtcblxuICAgIHNlbGVjdGVkUm93c051bWJlciA9IHt9O1xuICAgIHNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbkFkYXB0ZXJIYW5kbGVyOiB7XG4gICAgICAgIHNjb3BlOiBhbnk7XG4gICAgICAgIHJvd3NlbGVjdDogYW55O1xuICAgICAgICByb3dkZXNlbGVjdDogYW55O1xuICAgICAgICBiZWZvcmVyb3dzZWxlY3Q6IGFueTtcbiAgICB9O1xuICAgIG5hdmlnYXRpb25BcnJvdyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBjdXN0b21Sb3dIZWlnaHQ6IGFueTtcbiAgICByb3dDbGljayA9IHRydWU7XG4gICAgY2VsbENsaWNrID0gZmFsc2U7XG4gICAgZGV2aWNlTmFtZSQ6IE9ic2VydmFibGU8RGV2aWNlU2l6ZT47XG4gICAgbW9iaWxlT3JUYWJsZXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVwb3J0Vmlld0NvbHVtbltdPihbXSk7XG4gICAgc2Vjb25kYXJ5Q29sdW1ucyQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgcG9waW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGNvbnRlbnREZW5zaXR5JDogT2JzZXJ2YWJsZTxDb250ZW50RGVuc2l0eT47XG5cbiAgICByb3dBY3RpdmFibGUgPSB0cnVlO1xuICAgIG9wZW5PdmVyZmxvd0NvbW1hbmRzOiBib29sZWFuW10gPSBbXTtcbiAgICBjb250YWluZXJXaWR0aFNvdXJjZSQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgY2xvc2VTY3JvbGxTdHJhdGVneTogU2Nyb2xsU3RyYXRlZ3k7XG4gICAgcm93SG92ZXJhYmxlOiBib29sZWFuO1xuICAgIHNvdXJjZTogVGFibGVEYXRhU291cmNlPE1ldGFvYmplY3REYXRhTW9kZWw+O1xuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGU7XG4gICAgY29sdW1uc0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAgIHNlY29uZGFyeUNvbHVtbnNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjb250YWluZXJXaWR0aCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBjb2x1bW5zJDogT2JzZXJ2YWJsZTxSZXBvcnRWaWV3Q29sdW1uW10+O1xuICAgIGdyaWREYXRhU291cmNlOiBHcmlkTW9EYXRhTGlzdDtcbiAgICBzaW5nbGVTZWxlY3Rpb24gPSBTZWxlY3Rpb25Nb2RlLlNJTkdMRTtcbiAgICBtdWx0aXBsZVNlbGVjdGlvbiA9IFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XG4gICAgYWxsb3dJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgb25seUlubGluZUVkaXQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGZvcm1QYW5lbEN0cmxyOiBhbnk7XG4gICAgbGF5b3V0JDogT2JzZXJ2YWJsZTxhbnk+O1xuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcmVwb3J0SWQ6IHN0cmluZztcbiAgICB2aWV3U2V0dGluZzogVDtcbiAgICBkaXNhYmxlUmVzcG9uc2l2ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9kZXZpY2VOYW1lU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEZXZpY2VTaXplPignZGVza3RvcCcpO1xuICAgIHByaXZhdGUgX29sZENvbnRhaW5lcjogYW55O1xuICAgIHByaXZhdGUgX29wZW5PbkNsaWNrOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcm90ZWN0ZWQgX2NvbnRlbnREZW5zaXR5U2VydmljZTogQ29udGVudERlbnNpdHlTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF91bHZNYWluU2VydmljZTogVWx2TWFpblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgZG9jdW1lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJvdGVjdGVkIF9mb3JtcGFuZWxTZXJ2aWNlOiBGb3JtUGFuZWxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9wb3J0YWxTZXJ2aWNlLCBfdWx2TWFpblNlcnZpY2UpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoJCA9IHRoaXMuY29udGFpbmVyV2lkdGhTb3VyY2UkXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgyMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAgICAgdGhpcy5kZXZpY2VOYW1lJCA9IHRoaXMuX2RldmljZU5hbWVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZVJlc3BvbnNpdmUkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoYykgPT4gYyA9PT0gJ2Rlc2t0b3AnKSk7XG4gICAgICAgIHRoaXMubW9iaWxlT3JUYWJsZXQkID0gdGhpcy5kZXZpY2VOYW1lJC5waXBlKG1hcCgoZGV2aWNlKSA9PiBkZXZpY2UgPT09ICdtb2JpbGUnIHx8IGRldmljZSA9PT0gJ3RhYmxldCcpKTtcbiAgICAgICAgdGhpcy5fb2xkQ29udGFpbmVyID0gQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5DdXJyZW50U3lzdGVtQWRhcHRlcjtcbiAgICAgICAgdGhpcy5jbG9zZVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY29udGVudERlbnNpdHkkID0gdGhpcy5fY29udGVudERlbnNpdHlTZXJ2aWNlLmNvbnRlbnREZW5zaXR5O1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbHVtbnNDb3VudCQgPSB0aGlzLnNlY29uZGFyeUNvbHVtbnMkLnBpcGUobWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCkpO1xuICAgICAgICB0aGlzLmNvbHVtbnNDb3VudCQgPSB0aGlzLnZpc2libGVDb2x1bW5zJC5waXBlKFxuICAgICAgICAgICAgbWFwKChjb2x1bW5zKSA9PiBjb2x1bW5zLmxlbmd0aCksXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY2Nlc3MgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZSh0aGlzLmNvbnRleHQsICdTZXR0aW5nLkV4dHJhLkRlZmF1bHRDb21tYW5kc0FjY2VzcycpO1xuICAgICAgICAgICAgICAgIGlmIChhY2Nlc3M/LlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGNvdW50OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXQgX3R5cGVEZWZJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuUmVwb3J0LlR5cGVEZWZJZDtcbiAgICB9XG4gICAgZ2V0IF9pbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmdldFZhbHVlSW5saW5lRWRpdCgpO1xuICAgIH1cbiAgICBnZXQgX2FsbG93SW5saW5lRWRpdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmdldEFsbG93SW5saW5lRWRpdCgpO1xuICAgIH1cbiAgICBnZXQgX2FjY2VzcygpOiBEZWZhdWx0Q29tbWFuZHNBY2Nlc3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LlNldHRpbmc/LkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M7XG4gICAgfVxuICAgIHNldCBfYWNjZXNzKHZhbDogRGVmYXVsdENvbW1hbmRzQWNjZXNzKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuU2V0dGluZy5FeHRyYSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEuRGVmYXVsdENvbW1hbmRzQWNjZXNzID0gdmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LlNldHRpbmcuRXh0cmEgPSB7IERlZmF1bHRDb21tYW5kc0FjY2VzczogdmFsIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFBhcmVudEhlaWdodCgpO1xuICAgICAgICB0aGlzLl9yZWFkVmlld1NldHRpbmcoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRBY2Nlc3MoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnNob3dPa0NhbmNlbEJ1dHRvbnMgPSB0aGlzLmNvbnRleHQuU2hvd09rQ2FuY2VsQnV0dG9ucztcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UubGF5b3V0SW5mbyQuc3Vic2NyaWJlKChsYXlvdXRJbmZvKSA9PiB7XG4gICAgICAgICAgICBpZiAobGF5b3V0SW5mbyAmJiBsYXlvdXRJbmZvLlVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlTGF5b3V0SXRlbVRleHRGb3JDb250cm9sID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy52aWV3U2V0dGluZz8uVGl0bGU7XG4gICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnJlcG9ydElkJC5zdWJzY3JpYmUoKHJlcG9ydElkKSA9PiAodGhpcy5yZXBvcnRJZCA9IHJlcG9ydElkKSk7XG4gICAgICAgIHRoaXMuX2xheW91dFNlcnZpY2Uuc2V0UmVuZGVyZWQodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IHRoaXMuY29udGV4dC5WaWV3U2V0dGluZz8uSXNDaGVja0xpc3QgPyB0aGlzLm11bHRpcGxlU2VsZWN0aW9uIDogdGhpcy5zaW5nbGVTZWxlY3Rpb247XG4gICAgICAgIHRoaXMuX29wZW5PbkNsaWNrID0gdGhpcy52aWV3U2V0dGluZz8uT3Blbk9uQ2xpY2s7XG4gICAgICAgIHRoaXMuY3VzdG9tUm93SGVpZ2h0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuU2V0dGluZyxcbiAgICAgICAgICAgICdFeHRyYS5FeHRyYUpzb25Qcm9wUmVwb3J0LkdyaWRSb3dIZWlnaHQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucnRsJCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UucnRsJDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQXJyb3ckID0gdGhpcy5fcG9ydGFsU2VydmljZS5ydGwkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGlzUnRsKSA9PiAoaXNSdGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93JykpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxsb3dJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFsbG93SW5saW5lRWRpdCQ7XG4gICAgICAgIHRoaXMuaW5saW5lRWRpdE1vZGUkID0gdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkO1xuICAgICAgICB0aGlzLm9ubHlJbmxpbmVFZGl0JCA9IHRoaXMuX3Vsdk1haW5TZXJ2aWNlLm9ubHlJbmxpbmVFZGl0JDtcbiAgICAgICAgdGhpcy5oYXNTZWxlY3RlZCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChtb0xpc3QpID0+IG1vTGlzdC5zb21lKChjKSA9PiBjLiRJc0NoZWNrZWQpKSk7XG4gICAgICAgIHRoaXMubW9EYXRhTGlzdCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChpdGVtcykgPT4gdGhpcy5fbWFwQ2FydGFibGVNbyhpdGVtcykpKTtcbiAgICAgICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBuZXcgR3JpZE1vRGF0YUxpc3QoXG4gICAgICAgICAgICB0aGlzLm1vRGF0YUxpc3QkLFxuICAgICAgICAgICAgdGhpcy5ncmlkU2V0dGluZyQsXG4gICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zJCxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSRcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmdyaWREYXRhU291cmNlID0gZ3JpZERhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuY29sdW1ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmdyaWRTZXR0aW5nJCwgdGhpcy5zZWNvbmRhcnlDb2x1bW5zJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtfLCBzZWNvbmRhcnlDb2x1bW5zXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZGFyaWVzID0gc2Vjb25kYXJ5Q29sdW1ucy5tYXAoKGMpID0+IGMuTmFtZSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBHZXRBbGxDb2x1bW5zU29ydGVkKHRoaXMuY29udGV4dCkuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gXz8uU29ydFNldHRpbmdMaXN0Py5maWx0ZXIoKGMpID0+IGMuSXNHcm91cGVkKS5tYXAoKGMpID0+IGMuTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiBncm91cGVkQ29sdW1ucy5pbmRleE9mKGMuTmFtZSkgPT09IC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnMuZmlsdGVyKChjKSA9PiBzZWNvbmRhcmllcy5pbmRleE9mKGMuTmFtZSkgPT09IC0xKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKChjb2x1bW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjOiBSZXBvcnRWaWV3Q29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMuJENTU0NsYXNzTmFtZSA9ICdjb2x1bW5fX0ZpZWxkVHlwZScgKyBjLkZpZWxkVHlwZUlkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5GaWVsZFR5cGVJZCA9PT0gMzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuJFdpZHRoID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtID09PSAnSW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLiRXaWR0aCA9ICczOHB4JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuJFdpZHRoID0gIUJhcnNhQXBpLkxvZ2luRm9ybURhdGEuSXNVc2VyTG9nZ2VkSW4gLy8gaWYgdXNlciBpcyBhbm9ueW1vdXMgYWxsIGNvbHVtbiB3aWR0aCBlcXVhbHMgdG8gMTAwJVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzEwMCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjLldpZHRoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYy5XaWR0aCArICdweCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcxMDAlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UuaW5saW5lRWRpdE1vZGUkLnBpcGUoXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhhc1NlbGVjdGVkJCksXG4gICAgICAgICAgICBmaWx0ZXIoKFtfLCBfX10pID0+IHRoaXMuX2FjY2Vzcy5BZGQgIT09IGZhbHNlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJXaWR0aCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1wYW5lbFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRXhlY3V0ZVRvb2xiYXJCdXR0b24oZTogeyBpdGVtSWQ6IHN0cmluZzsgb3B0aW9ucz86IGFueSB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgaXRlbUlkLCBvcHRpb25zIH0gPSBlO1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5leGVjdXRlVG9vbGJhckJ1dHRvbihpdGVtSWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBvbkVkaXRNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJbmxpbmVFZGl0KCF0aGlzLl9pbmxpbmVFZGl0TW9kZSk7XG4gICAgfVxuICAgIG9uU2VsZWN0TmV4dElubGluZVJlY29yZChtbyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3ROZXh0SW5saW5lUmVjb3JkKG1vKTtcbiAgICB9XG5cbiAgICBvbkVkaXRGb3JtUGFuZWxTYXZlKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKG1vKTtcbiAgICB9XG5cbiAgICBvbkVkaXRGb3JtUGFuZWxDYW5jZWwobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWQgPSBtb0RhdGFMaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCk7XG4gICAgICAgIGlmIChoYXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5saW5lRWRpdFNhdmVGb3JtUGFuZWwobW8pO1xuICAgICAgICAgICAgdGhpcy5fc2V0SW5saW5lRWRpdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25FZGl0Rm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5saW5lRm9ybVBhbmVsVmFsdWVDaGFuZ2UobW8pO1xuICAgIH1cbiAgICBvbkNvbHVtblJlc2l6ZWQoY29sdW1uczogY29sdW1uc1Jlc2l6ZWRFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlQ29sdW1uc1Jlc2l6ZWQoY29sdW1ucyk7XG4gICAgfVxuICAgIG9uV29ya2Zsb3dTaGFyZUJ1dHRvbnMoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmFkZFdvcmtmbG93QnV0dG9uc0luVG9vbGJhcihlKTtcbiAgICB9XG4gICAgb25Sb3dDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBpZiAobW8uZ3JvdXAgfHwgdGhpcy5faW5saW5lRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICBpZiAoIW1vLiRJc0NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG1vLCBtb0luZGV4LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcGVuTW8obW8sIG1vSW5kZXgpO1xuICAgIH1cblxuICAgIG9uVWx2Q29tbWFuZCgkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbyB9ID0gJGV2ZW50O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gdGhpcy5fZ2V0SW5kZXgobW8pO1xuICAgICAgICB0aGlzLl91bHZDb21tYW5kQ2xpY2tlZChtbywgbW9JbmRleCk7XG4gICAgfVxuICAgIG9uRGVzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RvQ2hlY2tlZEFsbChmYWxzZSk7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ3Jvd3NlbGVjdCcsIHRoaXMuY29udGV4dCk7IC8vINio2KfYudirINmF24zYtNmI2K8g2K/ZiNio2KfYsSBzZWxlY3Rpb25jaGFuZ2Ug2q/Ystin2LHYtCDZgdix2KfYrtmI2KfZhtuMINi02YjYr1xuICAgIH1cbiAgICBvblJvd0NoZWNrKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vIH0gPSAkZXZlbnQ7XG4gICAgICAgIGNvbnN0IG1vSW5kZXggPSB0aGlzLl9nZXRJbmRleChtbyk7XG4gICAgICAgIGlmICh0aGlzLl9vcGVuT25DbGljaykge1xuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKCRldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dDaGVjayhtbywgbW9JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DYXJ0YWJsZUZvcm1DbG9zZWQoeyBtbyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QyID0gbmV3TW9EYXRhTGlzdC5maWx0ZXIoKGMpID0+IGMuSWQgIT09IG1vLklkKTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QyKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdDIpO1xuICAgIH1cbiAgICBvbkV4cGFuZENsaWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vLiRFeHBhbmRlZCA9ICFtby4kRXhwYW5kZWQ7XG4gICAgICAgIHRoaXMuX3NldFZpc2liaWxpdHkobW8uJEV4cGFuZGVkLCBtbyk7XG4gICAgICAgIHRoaXMuX3Jlc2V0TW9EYXRhTGlzdCgpO1xuICAgIH1cblxuICAgIG9uQWxsQ2hlY2tib3goY2hlY2tlZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoY2hlY2tlZCk7XG4gICAgICAgIC8vIGlmIChjaGVja2VkKSB7XG4gICAgICAgIC8vICAgdGhpcy5ncmlkRGF0YVNvdXJjZS5yZXN1bHRJdGVtcy5mb3JFYWNoKChtbywgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuX3NlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZm9yRWFjaCgobW8sIGluZGV4KSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLl9kZXNlbGVjdChtbywgaW5kZXgpO1xuICAgICAgICAvLyAgIH0pO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgb25Tb3J0QXNjZW5kaW5nKGNvbHVtbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTb3J0Q29sdW1uKGNvbHVtbi5OYW1lLCAnQVNDJyk7XG4gICAgfVxuXG4gICAgb25Tb3J0RGVzY2VuZGluZyhjb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU29ydENvbHVtbihjb2x1bW4uTmFtZSwgJ0RFU0MnKTtcbiAgICB9XG4gICAgb25GaWx0ZXIoc2VsZWN0ZWRDb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0ZpbHRlclNldHRpbmcoc2VsZWN0ZWRDb2x1bW4pO1xuICAgIH1cblxuICAgIG9uQ29sdW1uU2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnY29sdW1ucycsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25Tb3J0U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnc29ydCcsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25Hcm91cGJ5U2V0dGluZ3MoZGV2aWNlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29wZW5TZXR0aW5ncygnZ3JvdXBieScsIGRldmljZSk7XG4gICAgfVxuXG4gICAgb25MaXN0Q2hlY2tib3hDbGljaygkZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtbywgaW5kZXgsIGUgfSA9ICRldmVudDtcbiAgICAgICAgdGhpcy5vblJvd0NoZWNrKHsgbW8sIGluZGV4LCBjYXVzZTogJ3NpbmdsZVNlbGVjdCcgfSk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkxpc3ROYXZpZ2F0aW9uQ2xpY2soJGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgbW8sIGluZGV4LCBlIH0gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMub25Sb3dDbGljayh7IG1vLCBpbmRleCB9KTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBvblNhdmVUb3BGb3JtKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld01vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGV4aXN0c0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKGV4aXN0c0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XG4gICAgICAgIH1cbiAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgIHRoaXMucmVmcmVzaENvbnRleHRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIH1cbiAgICBvbk5ld1RvcEZvcm1BZGQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkSW5saW5lTW9Ub01vZGF0YUxpc3QobW8pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIFNob3dGb3JtUGFuZWxDb250cm9sID0gKGZvcm1wYW5lbEN0cmxyKSA9PiB7fTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xuICAgIEBJbnB1dCgpIEZvcmNlQ2xvc2VDaGlsZCA9ICgpID0+IHt9O1xuICAgIC8qIGVzbGludC1kaXNhYmxlICovXG4gICAgQElucHV0KCkgUmVmcmVzaEZvcm1QYW5lbENvbnRyb2wgPSAoZm9ybXBhbmVsQ3RybHIpID0+IHt9O1xuXG4gICAgLy8gcHJvdGVjdGVkIF9pbmxpbmVFZGl0TW9kZUNoYW5nZWQoZWRpdE1vZGUpOiB2b2lkIHtcbiAgICAvLyAgICAgaWYgKGVkaXRNb2RlKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjYW5BZGQ6IGJvb2xlYW4gPSB0aGlzLl9hY2Nlc3M/LkFkZCAhPT0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIGxldCBzZWxlY3RlZE1vID0gdGhpcy5fZ2V0U2VsZWN0ZWQoKTtcbiAgICAvLyAgICAgICAgIGxldCBuZXdNbztcbiAgICAvLyAgICAgICAgIGlmIChjYW5BZGQgIT09IGZhbHNlICYmICFzZWxlY3RlZE1vKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fY3JlYXRlTmV3SW5saW5lUmVjb3JkKCk7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgICAgLy8gaWYgKCFzZWxlY3RlZE1vICYmICFuZXdNbyAmJiB0aGlzLm1vRGF0YUxpc3QubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8gPSB0aGlzLm1vRGF0YUxpc3RbMF07XG4gICAgLy8gICAgICAgICAvLyB9XG4gICAgLy8gICAgICAgICAvLyBpZiAoc2VsZWN0ZWRNbykge1xuICAgIC8vICAgICAgICAgLy8gICAgIGNvbnN0IGlkT2ZTZWxlY3RlZE1vID0gdGhpcy5faW5kZXhPZk1vKHNlbGVjdGVkTW8pO1xuICAgIC8vICAgICAgICAgLy8gICAgIHNlbGVjdGVkTW8uJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgIC8vICAgICAgICAgLy8gICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZVJlY29yZChzZWxlY3RlZE1vKTtcbiAgICAvLyAgICAgICAgIC8vICAgICB0aGlzLl9yb3dDaGVjayhzZWxlY3RlZE1vLCBpZE9mU2VsZWN0ZWRNbyk7XG4gICAgLy8gICAgICAgICAvLyB9XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICBCYXJzYUFwaS5VbC5BcHBsaWNhdGlvbkN0cmxyLkN1cnJlbnRTeXN0ZW1BZGFwdGVyID0gdGhpcy5fb2xkQ29udGFpbmVyO1xuICAgIC8vICAgICAgICAgdGhpcy5fc2V0TmV3SW5saW5lTW8obnVsbCk7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgLy8gcHJvdGVjdGVkIF9jcmVhdGVOZXdJbmxpbmVSZWNvcmQoc2VsZWN0ZWRNbz86IE1ldGFvYmplY3REYXRhTW9kZWwpIHtcbiAgICAvLyAgICAgY29uc3QgbW8gPSB0aGlzLl9pbmxpbmVFZGl0UHJlcGFyZU5ld01vKCk7XG4gICAgLy8gICAgIGNvbnN0IGZvcm1NbyA9IEJhcnNhQXBpLkNvbW1vbi5NZXJnZXIuRmFzdE1lcmdlKG1vLCBzZWxlY3RlZE1vLCB7IGV4dGVuZGVkRmllbGRzOiBbJ0lkLCRDYXB0aW9uJ10gfSk7XG4gICAgLy8gICAgIHRoaXMuX3NldE5ld0lubGluZU1vKGZvcm1Nbyk7XG4gICAgLy8gICAgIHRoaXMuX3NlbGVjdChmb3JtTW8sIC0xKTtcbiAgICAvLyB9XG4gICAgcHJvdGVjdGVkIF9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdD86IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5yZVNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfZ2V0V2lkdGgobGFiZWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXNSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgY3R4LmZvbnQgPSAnbm9ybWFsIDAuODg1cmVtIElSQU5ZZWthbkRpZ2l0cyc7XG4gICAgICAgIGNvbnN0IGxhYmVsV2l0aFBhZGRpbmcgPSBjdHgubWVhc3VyZVRleHQobGFiZWwpLndpZHRoO1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGxhYmVsV2l0aFBhZGRpbmcpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NldFBhcmVudEhlaWdodCgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRIZWlnaHQgPSBnZXRQYXJlbnRIZWlnaHQodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9tYXBDYXJ0YWJsZU1vKGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdTZXR0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBOYW1lU2VyaWFsaXplTW8sIENhcnRhYmxlT2JqZWN0TmFtZSB9ID0gdGhpcy52aWV3U2V0dGluZztcbiAgICAgICAgaWYgKCFOYW1lU2VyaWFsaXplTW8gfHwgIUNhcnRhYmxlT2JqZWN0TmFtZSB8fCAhaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGMpID0+IChjW0NhcnRhYmxlT2JqZWN0TmFtZV0gPSBCYXJzYUFwaS5FeHQuZGVjb2RlKCd7JyArIGNbTmFtZVNlcmlhbGl6ZU1vXSArICd9JykpKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIG9uVG9vbGJhckNyZWF0ZU5ld0lubGluZU1vKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbygpO1xuICAgIH1cbiAgICBvbkNyZWF0ZU5ld01vKCkge1xuICAgICAgICB0aGlzLl9jcmVhdGVOZXdJbmxpbmVNbyh0cnVlKTtcbiAgICB9XG4gICAgb25NYW5kYXRvcnkoaXNNYW5kYXRvcjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdNYW5kYXRvcnknLCBpc01hbmRhdG9yKTtcbiAgICB9XG4gICAgb25VcGRhdGVNbyhtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBjb25zdCBtb0luZGV4ID0gbW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKG1vSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgbW9EYXRhTGlzdFttb0luZGV4XSA9IG1vO1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG1vRGF0YUxpc3QpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QobW9EYXRhTGlzdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpdmF0ZSBfY3JlYXRlTmV3SW5saW5lTW8oc2V0Q2hhbmdlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XG4gICAgICAgIGNvbnN0IGV4aXN0SW5saW5lTW8gPSBtb0RhdGFMaXN0LmZpbmQoKGMpID0+IGMuJE5ld0lubGluZU1vKTtcbiAgICAgICAgaWYgKGV4aXN0SW5saW5lTW8pIHtcbiAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRTYXZlRm9ybVBhbmVsKGV4aXN0SW5saW5lTW8pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vID0gdGhpcy5faW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8odHJ1ZSk7XG4gICAgICAgIGlmIChzZXRDaGFuZ2VkKSB7XG4gICAgICAgICAgICBtby4kSW5saW5lTW9DaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vRGF0YUxpc3QuZm9yRWFjaCgoYykgPT4gKGMuJElzQ2hlY2tlZCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KG1vLCB0cnVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5saW5lUmVwb3J0Q3JlYXRlTmV3TW8oaXNDaGVja2VkOiBib29sZWFuKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl91bHZNYWluU2VydmljZS5jcmVhdGVOZXdJbmxpbmVNbyhpc0NoZWNrZWQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfaW5saW5lRm9ybVBhbmVsVmFsdWVDaGFuZ2UobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgY29uc3QgZXhpc3RNb0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKGV4aXN0TW9JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0TW9JbmRleF0gPSBCYXJzYUFwaS5Db21tb24uTWV0YU9iamVjdFdlYi5DcmVhdGVNbyhtbyk7XG4gICAgICAgICAgICB0aGlzLl9yZXNldE1vRGF0YUxpc3QobmV3TW9EYXRhTGlzdCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgX3NlbGVjdE5leHRJbmxpbmVSZWNvcmQobW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IHRoaXMubW9EYXRhTGlzdDtcbiAgICAgICAgaWYgKCFtby4kTmV3SW5saW5lTW8pIHtcbiAgICAgICAgICAgIC8vIHNlbGVjdCBuZXh0IHJlY29yZFxuICAgICAgICAgICAgY29uc3QgZXhpc3RzSW5kZXggPSBuZXdNb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy5JZCA9PT0gbW8uSWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0c0luZGV4ID4gLTEgJiYgZXhpc3RzSW5kZXggKyAxIDwgbmV3TW9EYXRhTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXdNb0RhdGFMaXN0W2V4aXN0c0luZGV4ICsgMV0uJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jvd0NoZWNrKG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXggKyAxXSwgZXhpc3RzSW5kZXggKyAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYy4kTmV3SW5saW5lTW8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGMuJElzQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZElubGluZU1vVG9Nb2RhdGFMaXN0KHRoaXMuX2lubGluZVJlcG9ydENyZWF0ZU5ld01vKHRydWUpLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZU5ld0lubGluZU1vKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9pbmxpbmVFZGl0U2F2ZUZvcm1QYW5lbChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gdGhpcy5tb0RhdGFMaXN0O1xuICAgICAgICBpZiAoIW1vLiROZXdJbmxpbmVNbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4aXN0c0luZGV4ID0gbmV3TW9EYXRhTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuSWQgPT09IG1vLklkKTtcbiAgICAgICAgaWYgKGV4aXN0c0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIG5ld01vRGF0YUxpc3RbZXhpc3RzSW5kZXhdID0gbW87XG4gICAgICAgIH1cbiAgICAgICAgbmV3TW9EYXRhTGlzdC5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMuJE5ld0lubGluZU1vID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgYy4kSXNDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLmNyZWF0ZU5ld0lubGluZU1vKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0RGVmYXVsdEFjY2VzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWNjZXNzID0ge1xuICAgICAgICAgICAgQWRkOiBmYWxzZSxcbiAgICAgICAgICAgIEFkZFRvTGlzdDogZmFsc2UsXG4gICAgICAgICAgICBEZWxldGU6IGZhbHNlLFxuICAgICAgICAgICAgRWRpdDogZmFsc2UsXG4gICAgICAgICAgICBFeHBvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgUHJpbnQ6IGZhbHNlLFxuICAgICAgICAgICAgUmVmcmVzaDogZmFsc2UsXG4gICAgICAgICAgICBSZW1vdmVGcm9tTGlzdDogZmFsc2UsXG4gICAgICAgICAgICBWaWV3OiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX2V4cGFuZE1vKHNlbGVjdGVkTW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGV4cGFuZCk6IHZvaWQge1xuICAgICAgICBzZWxlY3RlZE1vLiRFeHBhbmRlZCA9IGV4cGFuZDtcbiAgICAgICAgc2VsZWN0ZWRNby4kQ2hpbGRyZW4/LmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRNbyhjaGlsZCwgZXhwYW5kKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5kZXhPZklkKGlkKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBpZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5kZXhPZk1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXMuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaW5kZXhPZlNlbGVjdGVkKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWREYXRhU291cmNlLnJlc3VsdEl0ZW1zLmZpbmRJbmRleCgoYykgPT4gYy4kSXNDaGVja2VkKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9nZXRJbmRleChtbzogTWV0YW9iamVjdERhdGFNb2RlbCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vRGF0YUxpc3QuZmluZEluZGV4KChjKSA9PiBjLklkID09PSBtby5JZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfc2V0SW5saW5lRWRpdCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl91bHZNYWluU2VydmljZS5zZXRJbmxpbmVFZGl0KHZhbHVlKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9yZWFkVmlld1NldHRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld1NldHRpbmcgPSB0aGlzLmNvbnRleHQuU2V0dGluZy5DbGFzc05hbWVzLkN1c3RvbVVpPy5QYXJhbWV0ZXJzO1xuICAgIH1cbiAgICAvLyBwcm90ZWN0ZWQgX21vRGF0YUxpc3RDaGFuZ2VkKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xuICAgIC8vICAgICBzdXBlci5fbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdCk7XG4gICAgLy8gICAgIGlmICh0aGlzLl9pbmxpbmVFZGl0TW9kZSkge1xuICAgIC8vICAgICAgICAgY29uc3QgY2hlY2tlZE1vSW5kZXggPSBtb0RhdGFMaXN0LmZpbmRJbmRleCgoYykgPT4gYy4kSXNDaGVja2VkKTtcblxuICAgIC8vICAgICAgICAgaWYgKGNoZWNrZWRNb0luZGV4ID4gLTEpIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBjaGVja2VkTW8gPSBtb0RhdGFMaXN0W2NoZWNrZWRNb0luZGV4XTtcbiAgICAvLyAgICAgICAgICAgICBpZiAoY2hlY2tlZE1vLklkICE9PSB0aGlzLmZvcm1QYW5lbEN0cmxyLk1vLklkKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuX2lubGluZUVkaXRvckRlc3Ryb3lGb3JtUGFuZWxDdHJscigpO1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLl9pbmxpbmVFZGl0Q3JlYXRlRm9ybVBhbmVsQ3RybHIoY2hlY2tlZE1vLCBjaGVja2VkTW9JbmRleCk7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgcHJvdGVjdGVkIF9zZXRWaXNpYmlsaXR5KFxuICAgICAgICBleHBhbmQ6IGJvb2xlYW4sXG4gICAgICAgIG1vOiBhbnkgLy9NZXRhb2JqZWN0RGF0YU1vZGVsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIG1vLiRDaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgIGNoaWxkLiRWaXNpYmlsaXR5ID0gZXhwYW5kO1xuICAgICAgICAgICAgaWYgKGNoaWxkLiRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFZpc2liaWxpdHkoZXhwYW5kLCBjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHByb3RlY3RlZCBfc2V0TmV3SW5saW5lTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsKTogdm9pZCB7XG4gICAgLy8gICAgIHRoaXMuX3Vsdk1haW5TZXJ2aWNlLnNldE5ld0lubGluZU1vKG1vKTtcbiAgICAvLyB9XG4gICAgLy8gcHJvdGVjdGVkIF9pbmxpbmVFZGl0UHJlcGFyZU5ld01vKCk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIC8vIGNvbnN0IG5ld01vID0gZ2V0TmV3TW9HcmlkRWRpdG9yKHRoaXMuZm9ybVNldHRpbmcsIHRoaXMuX3R5cGVEZWZJZCk7XG4gICAgLy8gbmV3TW8uSWQgPSBnZXRVbmlxdWVJZCgzKTtcbiAgICAvLyBpZiAodGhpcy5faXNDb21wb3NpdGUoKSkge1xuICAgIC8vICAgICBjb25zdCByZWxhdGlvbiA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dC5TZXR0aW5nLCAnRXh0cmEuUmVsYXRpb24nKTtcbiAgICAvLyAgICAgbmV3TW9bcmVsYXRpb24uUGFyZW50RmROYW1lXSA9IHJlbGF0aW9uLlBhcmVudE1vSWQ7XG4gICAgLy8gfVxuICAgIC8vICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gWy4uLnRoaXMubW9EYXRhTGlzdCwgbmV3TW8gYXMgTWV0YW9iamVjdERhdGFNb2RlbF07XG4gICAgLy8gICAgICAgdGhpcy5fdWx2TWFpblNlcnZpY2UucmVTZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgIC8vIEJhcnNhQXBpLlVsLkFwcGxpY2F0aW9uQ3RybHIuZmlyZUV2ZW50KFxuICAgIC8vICAgQmFyc2FBcGkuVWwuQXBwbGljYXRpb25DdHJsci5FdmVudEVudW0uR2xvYmFsUmVwb3J0TW9BZGQsXG4gICAgLy8gICB0aGlzLmNvbnRleHQsXG4gICAgLy8gICByZXBvcnRFdmVudE1vQWRkXG4gICAgLy8gKTtcbiAgICAvLyAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdSZWZyZXNoQ29udGV4dE1vRGF0YUxpc3QnLCBuZXdNb0RhdGFMaXN0KTtcbiAgICAvLyAgICByZXR1cm4gbmV3TW8gYXMgTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICAvLyB9XG4gICAgcHJvdGVjdGVkIF9hZGRJbmxpbmVNb1RvTW9kYXRhTGlzdChuZXdJbmxpbmVNbzogTWV0YW9iamVjdERhdGFNb2RlbCwgc2VsZWN0OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IFsuLi50aGlzLm1vRGF0YUxpc3QsIHsgLi4ubmV3SW5saW5lTW8sICRJc0NoZWNrZWQ6IHNlbGVjdCB9XTtcbiAgICAgICAgdGhpcy5fcmVzZXRNb0RhdGFMaXN0KG5ld01vRGF0YUxpc3QpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDb250ZXh0TW9EYXRhTGlzdChuZXdNb0RhdGFMaXN0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3Jvd0NoZWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBpbmRleDogbnVtYmVyLCBzZWxlY3RlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVkaXRNb2RlID0gdGhpcy5faW5saW5lRWRpdE1vZGUgJiYgdGhpcy5fYWxsb3dJbmxpbmVFZGl0O1xuICAgICAgICBpZiAobW8uJElzQ2hlY2tlZCAmJiBlZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3Rpb25Nb2RlO1xuICAgICAgICBpZiAoZWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLlNJTkdMRTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja2VkID0gIW1vLiRJc0NoZWNrZWQgfHwgc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMucm93SG92ZXJhYmxlID0gZmFsc2U7XG4gICAgICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnICYmIGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kb0NoZWNrZWRBbGwoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVkaXRNb2RlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXROZXdJbmxpbmVNbyhudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRWYWx1ZUlubGluZU1vKG1vKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0KG1vLCBpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB0aGlzLl9kZXNlbGVjdChtbywgaW5kZXgpO1xuICAgIH1cbiAgICAvLyBwcm90ZWN0ZWQgX3NldFZhbHVlSW5saW5lTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAvLyAgICAgLy8gdGhpcy5mb3JtUGFuZWxDdHJsci5TZXRWYWx1ZSh7IC4uLm1vLCAkVHlwZURlZklkOiB0aGlzLl90eXBlRGVmSWQgfSk7XG4gICAgLy8gfVxuXG4gICAgcHJvdGVjdGVkIF9pbmxpbmVFZGl0b3JEZXN0cm95Rm9ybVBhbmVsQ3RybHIoKTogdm9pZCB7XG4gICAgICAgIC8vIGlmICh0aGlzLmZvcm1QYW5lbEN0cmxyKSB7XG4gICAgICAgIC8vICAgICB0aGlzLl9mb3JtUGFuZWxTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgLy8gICAgIHRoaXMuZm9ybVBhbmVsQ3RybHIuRGVzdHJveSgpO1xuICAgICAgICAvLyAgICAgdGhpcy5mb3JtUGFuZWxDdHJsciA9IG51bGw7XG4gICAgICAgIC8vIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF93aW5kb3dSZXNpemVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJXaWR0aCgpO1xuICAgICAgICB0aGlzLl9zZXRQYXJlbnRIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zZXRDb250YWluZXJXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGhTb3VyY2UkLm5leHQoZWwub2Zmc2V0V2lkdGgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfZGV2aWNlU2l6ZUNoYW5nZWQoZGV2aWNlU2l6ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbE5hdGl2ZUVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLl9pbmxpbmVFZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQoW10pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JpZFNpemUgPSBnZXRDb250cm9sU2l6ZU1vZGUoZWxOYXRpdmVFbGVtZW50LCBkZXZpY2VTaXplKTtcbiAgICAgICAgbGV0IGRldmljZU5hbWU6IERldmljZVNpemUgPSAnZGVza3RvcCc7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnNXaWR0aCA9IHRoaXMuYWxsQ29sdW1ucy5tYXAoKGNvbHVtbikgPT5cbiAgICAgICAgICAgIGNvbHVtbi5XaWR0aCA9PSAwID8gdGhpcy5fZ2V0V2lkdGgoY29sdW1uLkFsaWFzKSA6IGNvbHVtbi5XaWR0aFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuX3Zpc2libGVDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgIGxldCBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgIHN3aXRjaCAoZ3JpZFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgICAgY2FzZSAneGwnOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAnZGVza3RvcCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICBkZXZpY2VOYW1lID0gJ21vYmlsZSc7XG4gICAgICAgICAgICAgICAgY29sdW1uc0NvdW50ID0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIGRldmljZU5hbWUgPSAndGFibGV0JztcbiAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RldmljZU5hbWVTb3VyY2UubmV4dChkZXZpY2VOYW1lKTtcbiAgICAgICAgY29uc3QgY29sV2lkdGhTZXR0aW5ncyA9IHRoaXMuZ3JpZFNldHRpbmdTb3VyY2UuZ2V0VmFsdWUoKT8uQ29sU2V0dGluZ0xpc3Q/Lm1hcCgoYykgPT4gYy5XaWR0aCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNXaWR0aCA9IGNvbFdpZHRoU2V0dGluZ3M/Lmxlbmd0aCA/IGNvbFdpZHRoU2V0dGluZ3MgOiBhbGxDb2x1bW5zV2lkdGg7XG4gICAgICAgIGxldCBzdW1Db2xXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gZWxOYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBpZiAoY29sdW1uc1dpZHRoLmxlbmd0aCA+IDAgJiYgY29udGFpbmVyV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5zQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICBjb2x1bW5zV2lkdGguZm9yRWFjaCgod2lkdGgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1bUNvbFdpZHRoICsgd2lkdGggPiBjb250YWluZXJXaWR0aCAmJiBjb2x1bW5zQ291bnQgPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zQ291bnQgPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3VtQ29sV2lkdGggKz0gd2lkdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aXNpYmxlQ29sdW1ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3U2V0dGluZz8uRGlzYWJsZVJlc3BvbnNpdmUgfHwgdGhpcy5fZGV2aWNlTmFtZVNvdXJjZS5nZXRWYWx1ZSgpID09PSAnZGVza3RvcCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWNDb2x1bW5zID0gdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlY0NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kYXJ5Q29sdW1uc1NvdXJjZS5uZXh0KFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2x1bW5zU291cmNlLm5leHQodmlzaWJsZUNvbHVtbnMuc2xpY2UoY29sdW1uc0NvdW50LCB2aXNpYmxlQ29sdW1ucy5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBfb3BlblNldHRpbmdzKG5hbWUsIGRldmljZTogRGV2aWNlU2l6ZSk6IHZvaWQge1xuICAgICAgICBsZXQgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBVbHZDb2x1bW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NvcnQnOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdlNvcnRTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwYnknOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IFVsdkdyb3VwYnlTZXR0aW5nc0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25maWc6IERpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YTogeyBjb250ZXh0OiB0aGlzLmNvbnRleHQgfSxcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IGRldmljZSA9PT0gJ21vYmlsZScsXG4gICAgICAgICAgICBtaW5XaWR0aDogZGV2aWNlID09PSAnbW9iaWxlJyA/ICdhdXRvJyA6IHRoaXMuZGlhbG9nQ29uZmlnLm1pbldpZHRoLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiBkZXZpY2UgPT09ICdtb2JpbGUnID8gJ2F1dG8nIDogdGhpcy5kaWFsb2dDb25maWcubWluSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3Blbihjb21wb25lbnQsIGNvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSBuYW1lID09PSAnc29ydCcgfHwgbmFtZSA9PT0gJ2dyb3VwYnknO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmcsIGlzU29ydENoYW5nZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQubW9EYXRhTGlzdCA9IHRoaXMuZ3JpZERhdGFTb3VyY2UucmVzdWx0SXRlbXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIF9zaG93RmlsdGVyU2V0dGluZyhzZWxlY3RlZENvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSB0aGlzLl90eXBlRGVmSWQ7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzSW5mbyQgPSB0aGlzLl91bHZNYWluU2VydmljZS5sb2FkTWV0YUNvbmRpdGlvbnNDb250cm9sSW5mb3MoXG4gICAgICAgICAgICB0eXBlRGVmSWQsXG4gICAgICAgICAgICB0aGlzLmFsbENvbHVtbnMubWFwKChjKSA9PiBjLk5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xzSW5mbyQsXG4gICAgICAgICAgICAgICAgdHlwZURlZklkLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29sdW1uTmFtZTogc2VsZWN0ZWRDb2x1bW4uTmFtZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKFVsdkZpbHRlclNldHRpbmdzQ29tcG9uZW50LCBjb25maWcpO1xuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfYWRkU29ydENvbHVtbihuYW1lOiBhbnksIHNvcnREaXJlY3Rpb246IHN0cmluZywgaXNHcm91cGVkID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydEl0ZW0gPSB7XG4gICAgICAgICAgICBOYW1lOiBuYW1lLFxuICAgICAgICAgICAgU29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICAgICAgICAgIElzR3JvdXBlZDogaXNHcm91cGVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKHRoaXMuY29udGV4dCk7XG4gICAgICAgIGNvbnN0IGV4aXN0U29ydEl0ZW1JbmRleCA9IHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSk7XG4gICAgICAgIGlmIChleGlzdFNvcnRJdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgc2V0dGluZ3MuU29ydFNldHRpbmdMaXN0W2V4aXN0U29ydEl0ZW1JbmRleF0gPSBzb3J0SXRlbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldHRpbmdzLlNvcnRTZXR0aW5nTGlzdC5wdXNoKHNvcnRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRTZXR0aW5nKHNldHRpbmdzLCB0cnVlKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -107,7 +107,7 @@ export class UiFileLinearListBoxComponent extends DeviceInfoFieldBaseComponent {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
UiFileLinearListBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiFileLinearListBoxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
110
|
-
UiFileLinearListBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiFileLinearListBoxComponent, selector: "bsu-ui-file-linear-list-box", inputs: { value: "value" }, providers: [UploadService], viewQueries: [{ propertyName: "fileUploadComponent", first: true, predicate: FileUploaderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"value\">\r\n <div class=\"token-container\">\r\n <div class=\"token-wrapper\">\r\n <ng-container *ngFor=\"let file of value; trackBy: trackById\">\r\n <fd-popover *ngIf=\"!file.IsDeleted\">\r\n <fd-popover-control>\r\n <fd-token (onCloseClick)=\"onFileDeleted(file.Id)\" [readOnly]=\"(disableOrReadonly$ | async)!!\"\r\n >{{ file.FileName }}\r\n <ng-container *ngIf=\"file.IsNew\">\r\n <ng-container *ngIf=\"valueExtra$ | async as valueExtra\">\r\n <span\r\n *ngIf=\"valueExtra[file.Id].UploadState !== 'Complete'\"\r\n fd-object-status\r\n [status]=\"file.Id | uploadFileStatus: valueExtra\"\r\n [label]=\"valueExtra[file.Id]?.UploadState || ''\"\r\n [title]=\"valueExtra[file.Id]?.UploadState\"\r\n [aria-label]=\"'File Upload Status Is ' + valueExtra[file.Id]?.UploadState\"\r\n ></span>\r\n <fd-object-number\r\n *ngIf=\"valueExtra[file.Id].Progress\"\r\n [number]=\"valueExtra[file.Id].Progress || 0\"\r\n unit=\"%\"\r\n status=\"informative\"\r\n ></fd-object-number>\r\n <ng-container *ngIf=\"valueExtra[file.Id].UploadState === 'Uploading'\">\r\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\"></fd-busy-indicator>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </fd-token>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <ng-container *ngIf=\"valueExtra$ | async as valueExtra\">\r\n <ul\r\n fd-list\r\n *ngIf=\"\r\n valueExtra[file.Id].UploadState !== 'Error' ||\r\n valueExtra[file.Id].UploadState === 'Complete'\r\n \"\r\n >\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onDownloadFile(file)\">\r\n <i fd-list-icon glyph=\"download\"></i>\r\n <span fd-list-title>\r\n {{ 'Download' | bbbTranslate }}\r\n </span>\r\n <fd-busy-indicator [loading]=\"fileDownloading\" [size]=\"'s'\"></fd-busy-indicator>\r\n </a>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </ng-container>\r\n <div style=\"display: flex\">\r\n <div style=\"position: relative; width: 3rem\" *ngIf=\"loading\">\r\n <bsu-mask [size]=\"'s'\" style=\"background: transparent\"></bsu-mask>\r\n </div>\r\n <fd-file-uploader\r\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\"\r\n class=\"file-linear-upload\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'linear_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [multiple]=\"maxFileCount > 1 || Setting.IsMultiSelect\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .fd-file-uploader input{display:none}:host.isMobile ::ng-deep fd-token>span{-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:pre-wrap;height:auto;text-align:right}:host.isMobile ::ng-deep body[dir=ltr] fd-token>span{text-align:left}.token-container{background:transparent;padding:3px;display:flex}.token-wrapper{align-items:center;flex-grow:1;display:flex;flex-wrap:wrap}.token-wrapper fd-token,.token-wrapper .file-linear-upload{padding:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i3.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i4.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i4.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "directive", type: i4.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i4.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "directive", type: i4.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated"] }, { kind: "component", type: i5.ObjectNumberComponent, selector: "fd-object-number", inputs: ["number", "decimal", "unit", "emphasized", "large", "status", "class", "ariaLabelledBy", "ariaLabel"] }, { kind: "component", type: i6.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i8.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i9.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown"] }, { kind: "component", type: i10.MaskComponent, selector: "bsu-mask", inputs: ["size", "
|
|
110
|
+
UiFileLinearListBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiFileLinearListBoxComponent, selector: "bsu-ui-file-linear-list-box", inputs: { value: "value" }, providers: [UploadService], viewQueries: [{ propertyName: "fileUploadComponent", first: true, predicate: FileUploaderComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"value\">\r\n <div class=\"token-container\">\r\n <div class=\"token-wrapper\">\r\n <ng-container *ngFor=\"let file of value; trackBy: trackById\">\r\n <fd-popover *ngIf=\"!file.IsDeleted\">\r\n <fd-popover-control>\r\n <fd-token (onCloseClick)=\"onFileDeleted(file.Id)\" [readOnly]=\"(disableOrReadonly$ | async)!!\"\r\n >{{ file.FileName }}\r\n <ng-container *ngIf=\"file.IsNew\">\r\n <ng-container *ngIf=\"valueExtra$ | async as valueExtra\">\r\n <span\r\n *ngIf=\"valueExtra[file.Id].UploadState !== 'Complete'\"\r\n fd-object-status\r\n [status]=\"file.Id | uploadFileStatus: valueExtra\"\r\n [label]=\"valueExtra[file.Id]?.UploadState || ''\"\r\n [title]=\"valueExtra[file.Id]?.UploadState\"\r\n [aria-label]=\"'File Upload Status Is ' + valueExtra[file.Id]?.UploadState\"\r\n ></span>\r\n <fd-object-number\r\n *ngIf=\"valueExtra[file.Id].Progress\"\r\n [number]=\"valueExtra[file.Id].Progress || 0\"\r\n unit=\"%\"\r\n status=\"informative\"\r\n ></fd-object-number>\r\n <ng-container *ngIf=\"valueExtra[file.Id].UploadState === 'Uploading'\">\r\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\"></fd-busy-indicator>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </fd-token>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <ng-container *ngIf=\"valueExtra$ | async as valueExtra\">\r\n <ul\r\n fd-list\r\n *ngIf=\"\r\n valueExtra[file.Id].UploadState !== 'Error' ||\r\n valueExtra[file.Id].UploadState === 'Complete'\r\n \"\r\n >\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onDownloadFile(file)\">\r\n <i fd-list-icon glyph=\"download\"></i>\r\n <span fd-list-title>\r\n {{ 'Download' | bbbTranslate }}\r\n </span>\r\n <fd-busy-indicator [loading]=\"fileDownloading\" [size]=\"'s'\"></fd-busy-indicator>\r\n </a>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </ng-container>\r\n <div style=\"display: flex\">\r\n <div style=\"position: relative; width: 3rem\" *ngIf=\"loading\">\r\n <bsu-mask [size]=\"'s'\" style=\"background: transparent\"></bsu-mask>\r\n </div>\r\n <fd-file-uploader\r\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\"\r\n class=\"file-linear-upload\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'linear_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [multiple]=\"maxFileCount > 1 || Setting.IsMultiSelect\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .fd-file-uploader input{display:none}:host.isMobile ::ng-deep fd-token>span{-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:pre-wrap;height:auto;text-align:right}:host.isMobile ::ng-deep body[dir=ltr] fd-token>span{text-align:left}.token-container{background:transparent;padding:3px;display:flex}.token-wrapper{align-items:center;flex-grow:1;display:flex;flex-wrap:wrap}.token-wrapper fd-token,.token-wrapper .file-linear-upload{padding:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i3.FileUploaderComponent, selector: "fd-file-uploader", inputs: ["disabled", "required", "multiple", "accept", "dragndrop", "maxFileSize", "minFileSize", "id", "ariaLabel", "ariaLabelledBy", "placeholder", "buttonLabel", "buttonAriaLabel", "state", "fileLimit", "inputHidden", "width"], outputs: ["selectedFilesChanged", "selectedInvalidFiles", "onDragEnter", "onDragLeave"] }, { kind: "component", type: i4.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i4.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "directive", type: i4.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i4.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "class", "role"] }, { kind: "directive", type: i4.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated"] }, { kind: "component", type: i5.ObjectNumberComponent, selector: "fd-object-number", inputs: ["number", "decimal", "unit", "emphasized", "large", "status", "class", "ariaLabelledBy", "ariaLabel"] }, { kind: "component", type: i6.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i8.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i9.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly", "deleteButtonLabel", "ariaRoleDescription"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown"] }, { kind: "component", type: i10.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.CanUploadFilePipe, name: "canUploadFile" }, { kind: "pipe", type: i11.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i12.UploadFileStatusPipe, name: "uploadFileStatus" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
111
111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiFileLinearListBoxComponent, decorators: [{
|
|
112
112
|
type: Component,
|
|
113
113
|
args: [{ selector: 'bsu-ui-file-linear-list-box', providers: [UploadService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"value\">\r\n <div class=\"token-container\">\r\n <div class=\"token-wrapper\">\r\n <ng-container *ngFor=\"let file of value; trackBy: trackById\">\r\n <fd-popover *ngIf=\"!file.IsDeleted\">\r\n <fd-popover-control>\r\n <fd-token (onCloseClick)=\"onFileDeleted(file.Id)\" [readOnly]=\"(disableOrReadonly$ | async)!!\"\r\n >{{ file.FileName }}\r\n <ng-container *ngIf=\"file.IsNew\">\r\n <ng-container *ngIf=\"valueExtra$ | async as valueExtra\">\r\n <span\r\n *ngIf=\"valueExtra[file.Id].UploadState !== 'Complete'\"\r\n fd-object-status\r\n [status]=\"file.Id | uploadFileStatus: valueExtra\"\r\n [label]=\"valueExtra[file.Id]?.UploadState || ''\"\r\n [title]=\"valueExtra[file.Id]?.UploadState\"\r\n [aria-label]=\"'File Upload Status Is ' + valueExtra[file.Id]?.UploadState\"\r\n ></span>\r\n <fd-object-number\r\n *ngIf=\"valueExtra[file.Id].Progress\"\r\n [number]=\"valueExtra[file.Id].Progress || 0\"\r\n unit=\"%\"\r\n status=\"informative\"\r\n ></fd-object-number>\r\n <ng-container *ngIf=\"valueExtra[file.Id].UploadState === 'Uploading'\">\r\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\"></fd-busy-indicator>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </fd-token>\r\n </fd-popover-control>\r\n <fd-popover-body>\r\n <ng-container *ngIf=\"valueExtra$ | async as valueExtra\">\r\n <ul\r\n fd-list\r\n *ngIf=\"\r\n valueExtra[file.Id].UploadState !== 'Error' ||\r\n valueExtra[file.Id].UploadState === 'Complete'\r\n \"\r\n >\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onDownloadFile(file)\">\r\n <i fd-list-icon glyph=\"download\"></i>\r\n <span fd-list-title>\r\n {{ 'Download' | bbbTranslate }}\r\n </span>\r\n <fd-busy-indicator [loading]=\"fileDownloading\" [size]=\"'s'\"></fd-busy-indicator>\r\n </a>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </fd-popover-body>\r\n </fd-popover>\r\n </ng-container>\r\n <div style=\"display: flex\">\r\n <div style=\"position: relative; width: 3rem\" *ngIf=\"loading\">\r\n <bsu-mask [size]=\"'s'\" style=\"background: transparent\"></bsu-mask>\r\n </div>\r\n <fd-file-uploader\r\n *ngIf=\"value | canUploadFile: maxFileCount:(disable$ | async)!!:(readonly$ | async)!!\"\r\n class=\"file-linear-upload\"\r\n fd-toolbar-item\r\n [id]=\"id\"\r\n [name]=\"'linear_' + id\"\r\n [placeholder]=\"'AttachFile' | bbbTranslate\"\r\n [buttonLabel]=\"'AttachFile' | bbbTranslate\"\r\n [buttonAriaLabel]=\"'AttachFile' | bbbTranslate\"\r\n [accept]=\"validExtension\"\r\n [multiple]=\"maxFileCount > 1 || Setting.IsMultiSelect\"\r\n (selectedFilesChanged)=\"onFileSelection($event)\"\r\n [contentDensity]=\"(contentDensity$ | async)!!\"\r\n ></fd-file-uploader>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep .fd-slider__handle{display:none}:host ::ng-deep .fd-file-uploader input{display:none}:host.isMobile ::ng-deep fd-token>span{-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:pre-wrap;height:auto;text-align:right}:host.isMobile ::ng-deep body[dir=ltr] fd-token>span{text-align:left}.token-container{background:transparent;padding:3px;display:flex}.token-wrapper{align-items:center;flex-grow:1;display:flex;flex-wrap:wrap}.token-wrapper fd-token,.token-wrapper .file-linear-upload{padding:4px}\n"] }]
|
|
@@ -32,7 +32,7 @@ export class UiFormPanelComponent extends FormBaseComponent {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
UiFormPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiFormPanelComponent, deps: [{ token: i1.BreadcrumbService }, { token: i1.PortalService }, { token: i2.Router }, { token: i0.ElementRef }, { token: i1.ControlUiPipe }, { token: i1.FormPanelService, self: true }, { token: i2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i3.ContentDensityService }], target: i0.ɵɵFactoryTarget.Component });
|
|
35
|
-
UiFormPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiFormPanelComponent, selector: "bsu-ui-form-panel", host: { properties: { "attr.typeDefName": "this._typeDefName" } }, providers: [FormPanelService], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isSearchPanel || (isSimple$ | async) || isSubForm || isModal || isFormReport; else dynamicPage\">\n <bsu-mask *ngIf=\"mask$ | async\"> </bsu-mask>\n <div style=\"min-height: 100%\">\n <bsu-ly-layout-container-of-root\n [config]=\"layout94$ | async\"\n [isPanel]=\"false\"\n [isRoot]=\"true\"\n ></bsu-ly-layout-container-of-root>\n <ng-container *ngIf=\"workflowButtons$ | async as workflowButtons\">\n <div class=\"workflow-buttons\" *ngIf=\"workflowButtons.length\">\n <div style=\"flex-grow: 1\"></div>\n <bsu-layout-actions\n style=\"display: flex; column-gap: 1rem\"\n [simple]=\"true\"\n [buttons]=\"[]\"\n [workflowButtons]=\"workflowButtons\"\n (toolClick)=\"onToolbarClick($event)\"\n >\n </bsu-layout-actions>\n </div>\n </ng-container>\n </div>\n <!-- <div fd-bar barDesign=\"floating-footer\">\n <div\n *ngIf=\"context.WorkflowPanelUi\"\n fd-bar-right\n [footerActions]=\"context.WorkflowPanelUi\"\n ></div>\n <div\n *ngIf=\"\n !context.WorkflowPanelUi &&\n showToolbar &&\n \n toolbar.items.length > 0\n \"\n fd-bar-right\n [footerActions]=\"toolbar\"\n ></div>\n </div> -->\n</ng-container>\n<ng-template #dynamicPage>\n <bsu-fundamental-dynamic-form\n [style.position]=\"(mask$ | async) ? 'relative' : null\"\n [canSend]=\"(canSend$ | async) === true\"\n [formVisibilityStatus]=\"formVisibilityStatus\"\n [removeContentPadding]=\"(headerRemoveContentPadding$ | async)!!\"\n [breadCrumbs]=\"breadCrumbs$ | async\"\n [description]=\"(headerDescription$ | async)!!\"\n [hideClose]=\"(hideClose$ | async)!!\"\n [hideTitle]=\"(hideTitle$ | async)!!\"\n [hidePin]=\"(hidePin$ | async)!!\"\n [title]=\"(title$ | async)!!\"\n [subtitle]=\"(headerSubtitle$ | async)!!\"\n [toolbarItems]=\"toolbarItems$ | async | tlbButtons: 'inFooter':false\"\n [layoutActions]=\"toolbarItems$ | async | tlbButtons: 'inFooter':true\"\n [toolbarVisible]=\"(toolbarVisible$ | async)!!\"\n [facetList]=\"(headerLayout$ | async)?.FacetList2\"\n [parameters]=\"parameters\"\n [workflowPanelUi]=\"workflowPanelUi$ | async\"\n [isMobile]=\"isMobile\"\n [layout94]=\"layout94$ | async\"\n [rtl]=\"(rtl$ | async)!!\"\n [mask]=\"(mask$ | async)!!\"\n [mo]=\"(mo$ | async)!!\"\n [dirValue]=\"(dirValue$ | async)!!\"\n [deviceSize]=\"(deviceSize$ | async)!!\"\n [contentDensity]=\"(contentDensity$ | async)!!\"\n [modernTabs]=\"(modernTabs$ | async)!!\"\n [avatar]=\"(avatar$ | async)!!\"\n [fieldDict]=\"(fieldDict$ | async)!!\"\n [landscape]=\"(landscape$ | async) === true\"\n [standalone]=\"(standalone$ | async) === true\"\n (close)=\"onClose()\"\n (toolbarClick)=\"onToolbarClick($event)\"\n [contentIsPage]=\"parameters?.ContentIsPage\"\n (workflowChoiceClick)=\"onWorkflowChoiceClick($event)\"\n ></bsu-fundamental-dynamic-form>\n</ng-template>\n", styles: [":host{display:block;width:100%;min-height:100%}.workflow-buttons{display:flex;margin-top:5px;padding:5px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LyLayoutContainerOfRootComponent, selector: "bsu-ly-layout-container-of-root" }, { kind: "component", type: i6.MaskComponent, selector: "bsu-mask", inputs: ["size", "
|
|
35
|
+
UiFormPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiFormPanelComponent, selector: "bsu-ui-form-panel", host: { properties: { "attr.typeDefName": "this._typeDefName" } }, providers: [FormPanelService], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"isSearchPanel || (isSimple$ | async) || isSubForm || isModal || isFormReport; else dynamicPage\">\n <bsu-mask *ngIf=\"mask$ | async\"> </bsu-mask>\n <div style=\"min-height: 100%\">\n <bsu-ly-layout-container-of-root\n [config]=\"layout94$ | async\"\n [isPanel]=\"false\"\n [isRoot]=\"true\"\n ></bsu-ly-layout-container-of-root>\n <ng-container *ngIf=\"workflowButtons$ | async as workflowButtons\">\n <div class=\"workflow-buttons\" *ngIf=\"workflowButtons.length\">\n <div style=\"flex-grow: 1\"></div>\n <bsu-layout-actions\n style=\"display: flex; column-gap: 1rem\"\n [simple]=\"true\"\n [buttons]=\"[]\"\n [workflowButtons]=\"workflowButtons\"\n (toolClick)=\"onToolbarClick($event)\"\n >\n </bsu-layout-actions>\n </div>\n </ng-container>\n </div>\n <!-- <div fd-bar barDesign=\"floating-footer\">\n <div\n *ngIf=\"context.WorkflowPanelUi\"\n fd-bar-right\n [footerActions]=\"context.WorkflowPanelUi\"\n ></div>\n <div\n *ngIf=\"\n !context.WorkflowPanelUi &&\n showToolbar &&\n \n toolbar.items.length > 0\n \"\n fd-bar-right\n [footerActions]=\"toolbar\"\n ></div>\n </div> -->\n</ng-container>\n<ng-template #dynamicPage>\n <bsu-fundamental-dynamic-form\n [style.position]=\"(mask$ | async) ? 'relative' : null\"\n [canSend]=\"(canSend$ | async) === true\"\n [formVisibilityStatus]=\"formVisibilityStatus\"\n [removeContentPadding]=\"(headerRemoveContentPadding$ | async)!!\"\n [breadCrumbs]=\"breadCrumbs$ | async\"\n [description]=\"(headerDescription$ | async)!!\"\n [hideClose]=\"(hideClose$ | async)!!\"\n [hideTitle]=\"(hideTitle$ | async)!!\"\n [hidePin]=\"(hidePin$ | async)!!\"\n [title]=\"(title$ | async)!!\"\n [subtitle]=\"(headerSubtitle$ | async)!!\"\n [toolbarItems]=\"toolbarItems$ | async | tlbButtons: 'inFooter':false\"\n [layoutActions]=\"toolbarItems$ | async | tlbButtons: 'inFooter':true\"\n [toolbarVisible]=\"(toolbarVisible$ | async)!!\"\n [facetList]=\"(headerLayout$ | async)?.FacetList2\"\n [parameters]=\"parameters\"\n [workflowPanelUi]=\"workflowPanelUi$ | async\"\n [isMobile]=\"isMobile\"\n [layout94]=\"layout94$ | async\"\n [rtl]=\"(rtl$ | async)!!\"\n [mask]=\"(mask$ | async)!!\"\n [mo]=\"(mo$ | async)!!\"\n [dirValue]=\"(dirValue$ | async)!!\"\n [deviceSize]=\"(deviceSize$ | async)!!\"\n [contentDensity]=\"(contentDensity$ | async)!!\"\n [modernTabs]=\"(modernTabs$ | async)!!\"\n [avatar]=\"(avatar$ | async)!!\"\n [fieldDict]=\"(fieldDict$ | async)!!\"\n [landscape]=\"(landscape$ | async) === true\"\n [standalone]=\"(standalone$ | async) === true\"\n (close)=\"onClose()\"\n (toolbarClick)=\"onToolbarClick($event)\"\n [contentIsPage]=\"parameters?.ContentIsPage\"\n (workflowChoiceClick)=\"onWorkflowChoiceClick($event)\"\n ></bsu-fundamental-dynamic-form>\n</ng-template>\n", styles: [":host{display:block;width:100%;min-height:100%}.workflow-buttons{display:flex;margin-top:5px;padding:5px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LyLayoutContainerOfRootComponent, selector: "bsu-ly-layout-container-of-root" }, { kind: "component", type: i6.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i7.FundamentalDynamicFormComponent, selector: "bsu-fundamental-dynamic-form", inputs: ["breadCrumbs", "toolbarVisible", "toolbarItems", "layoutActions", "layout94", "parameters", "workflowPanelUi", "context", "title", "subtitle", "description", "facetList", "fieldDict", "removeHeaderBorder", "removeContentPadding", "isMobile", "mo", "avatar", "rtl", "hideTitle", "hideClose", "hidePin", "mask", "canSend", "contentIsPage", "contentDensity", "deviceSize", "dirValue", "landscape", "standalone", "modernTabs", "formVisibilityStatus"], outputs: ["toolbarClick", "workflowChoiceClick", "close"] }, { kind: "component", type: i8.LayoutActionsComponent, selector: "bsu-layout-actions", inputs: ["workflowButtons", "workflowButtonsComboMode", "canSend", "simple"], outputs: ["workflowChoiceSelect"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TlbButtonsPipe, name: "tlbButtons" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
36
36
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiFormPanelComponent, decorators: [{
|
|
37
37
|
type: Component,
|
|
38
38
|
args: [{ selector: 'bsu-ui-form-panel', changeDetection: ChangeDetectionStrategy.OnPush, providers: [FormPanelService], template: "<ng-container *ngIf=\"isSearchPanel || (isSimple$ | async) || isSubForm || isModal || isFormReport; else dynamicPage\">\n <bsu-mask *ngIf=\"mask$ | async\"> </bsu-mask>\n <div style=\"min-height: 100%\">\n <bsu-ly-layout-container-of-root\n [config]=\"layout94$ | async\"\n [isPanel]=\"false\"\n [isRoot]=\"true\"\n ></bsu-ly-layout-container-of-root>\n <ng-container *ngIf=\"workflowButtons$ | async as workflowButtons\">\n <div class=\"workflow-buttons\" *ngIf=\"workflowButtons.length\">\n <div style=\"flex-grow: 1\"></div>\n <bsu-layout-actions\n style=\"display: flex; column-gap: 1rem\"\n [simple]=\"true\"\n [buttons]=\"[]\"\n [workflowButtons]=\"workflowButtons\"\n (toolClick)=\"onToolbarClick($event)\"\n >\n </bsu-layout-actions>\n </div>\n </ng-container>\n </div>\n <!-- <div fd-bar barDesign=\"floating-footer\">\n <div\n *ngIf=\"context.WorkflowPanelUi\"\n fd-bar-right\n [footerActions]=\"context.WorkflowPanelUi\"\n ></div>\n <div\n *ngIf=\"\n !context.WorkflowPanelUi &&\n showToolbar &&\n \n toolbar.items.length > 0\n \"\n fd-bar-right\n [footerActions]=\"toolbar\"\n ></div>\n </div> -->\n</ng-container>\n<ng-template #dynamicPage>\n <bsu-fundamental-dynamic-form\n [style.position]=\"(mask$ | async) ? 'relative' : null\"\n [canSend]=\"(canSend$ | async) === true\"\n [formVisibilityStatus]=\"formVisibilityStatus\"\n [removeContentPadding]=\"(headerRemoveContentPadding$ | async)!!\"\n [breadCrumbs]=\"breadCrumbs$ | async\"\n [description]=\"(headerDescription$ | async)!!\"\n [hideClose]=\"(hideClose$ | async)!!\"\n [hideTitle]=\"(hideTitle$ | async)!!\"\n [hidePin]=\"(hidePin$ | async)!!\"\n [title]=\"(title$ | async)!!\"\n [subtitle]=\"(headerSubtitle$ | async)!!\"\n [toolbarItems]=\"toolbarItems$ | async | tlbButtons: 'inFooter':false\"\n [layoutActions]=\"toolbarItems$ | async | tlbButtons: 'inFooter':true\"\n [toolbarVisible]=\"(toolbarVisible$ | async)!!\"\n [facetList]=\"(headerLayout$ | async)?.FacetList2\"\n [parameters]=\"parameters\"\n [workflowPanelUi]=\"workflowPanelUi$ | async\"\n [isMobile]=\"isMobile\"\n [layout94]=\"layout94$ | async\"\n [rtl]=\"(rtl$ | async)!!\"\n [mask]=\"(mask$ | async)!!\"\n [mo]=\"(mo$ | async)!!\"\n [dirValue]=\"(dirValue$ | async)!!\"\n [deviceSize]=\"(deviceSize$ | async)!!\"\n [contentDensity]=\"(contentDensity$ | async)!!\"\n [modernTabs]=\"(modernTabs$ | async)!!\"\n [avatar]=\"(avatar$ | async)!!\"\n [fieldDict]=\"(fieldDict$ | async)!!\"\n [landscape]=\"(landscape$ | async) === true\"\n [standalone]=\"(standalone$ | async) === true\"\n (close)=\"onClose()\"\n (toolbarClick)=\"onToolbarClick($event)\"\n [contentIsPage]=\"parameters?.ContentIsPage\"\n (workflowChoiceClick)=\"onWorkflowChoiceClick($event)\"\n ></bsu-fundamental-dynamic-form>\n</ng-template>\n", styles: [":host{display:block;width:100%;min-height:100%}.workflow-buttons{display:flex;margin-top:5px;padding:5px}\n"] }]
|
|
@@ -53,7 +53,7 @@ export class UiGridFilterSettingsComponent extends BaseComponent {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
UiGridFilterSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiGridFilterSettingsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
56
|
-
UiGridFilterSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiGridFilterSettingsComponent, selector: "bsu-ui-grid-filter-settings", inputs: { sortDirections: "sortDirections", typeDefId: "typeDefId", selectedColumnName: "selectedColumnName", filters: "filters", columns: "columns", controlsInfo: "controlsInfo" }, viewQueries: [{ propertyName: "filterItemList", predicate: UiGridFilterItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<bsu-ui-grid-filter-item\r\n #sortItemsRef\r\n *ngFor=\"let formPanelCtrlr of listOfFormPanelCtrlr; let i = index\"\r\n [isFirst]=\"i === 0\"\r\n (remove)=\"onRemove(i)\"\r\n [columns]=\"columns\"\r\n [selectedColumnName]=\"selectedColumnName\"\r\n [formPanelCtrlr]=\"formPanelCtrlr\"\r\n [style.margin-top.px]=\"i > 0 ? 5 : 0\"\r\n>\r\n</bsu-ui-grid-filter-item>\r\n<div style=\"display: flex\">\r\n <div class=\"spacer\"></div>\r\n <button fd-button label=\"Add\" fdType=\"standard\" (click)=\"onAdd()\" [disabled]=\"addingForm\">\r\n <bsu-mask *ngIf=\"addingForm\" size=\"s\"></bsu-mask>\r\n </button>\r\n <button\r\n style=\"visibility: hidden; pointer-events: none; margin: 0 3px\"\r\n fd-button\r\n label=\"Add\"\r\n fdType=\"standard\"\r\n ></button>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;margin-bottom:30px}.spacer{flex:1;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3.MaskComponent, selector: "bsu-mask", inputs: ["size", "
|
|
56
|
+
UiGridFilterSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: UiGridFilterSettingsComponent, selector: "bsu-ui-grid-filter-settings", inputs: { sortDirections: "sortDirections", typeDefId: "typeDefId", selectedColumnName: "selectedColumnName", filters: "filters", columns: "columns", controlsInfo: "controlsInfo" }, viewQueries: [{ propertyName: "filterItemList", predicate: UiGridFilterItemComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<bsu-ui-grid-filter-item\r\n #sortItemsRef\r\n *ngFor=\"let formPanelCtrlr of listOfFormPanelCtrlr; let i = index\"\r\n [isFirst]=\"i === 0\"\r\n (remove)=\"onRemove(i)\"\r\n [columns]=\"columns\"\r\n [selectedColumnName]=\"selectedColumnName\"\r\n [formPanelCtrlr]=\"formPanelCtrlr\"\r\n [style.margin-top.px]=\"i > 0 ? 5 : 0\"\r\n>\r\n</bsu-ui-grid-filter-item>\r\n<div style=\"display: flex\">\r\n <div class=\"spacer\"></div>\r\n <button fd-button label=\"Add\" fdType=\"standard\" (click)=\"onAdd()\" [disabled]=\"addingForm\">\r\n <bsu-mask *ngIf=\"addingForm\" size=\"s\"></bsu-mask>\r\n </button>\r\n <button\r\n style=\"visibility: hidden; pointer-events: none; margin: 0 3px\"\r\n fd-button\r\n label=\"Add\"\r\n fdType=\"standard\"\r\n ></button>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;margin-bottom:30px}.spacer{flex:1;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i4.UiGridFilterItemComponent, selector: "bsu-ui-grid-filter-item", inputs: ["formPanelCtrlr", "columns", "selectedColumnName", "selectedColumn"], outputs: ["add", "remove"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
57
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UiGridFilterSettingsComponent, decorators: [{
|
|
58
58
|
type: Component,
|
|
59
59
|
args: [{ selector: 'bsu-ui-grid-filter-settings', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bsu-ui-grid-filter-item\r\n #sortItemsRef\r\n *ngFor=\"let formPanelCtrlr of listOfFormPanelCtrlr; let i = index\"\r\n [isFirst]=\"i === 0\"\r\n (remove)=\"onRemove(i)\"\r\n [columns]=\"columns\"\r\n [selectedColumnName]=\"selectedColumnName\"\r\n [formPanelCtrlr]=\"formPanelCtrlr\"\r\n [style.margin-top.px]=\"i > 0 ? 5 : 0\"\r\n>\r\n</bsu-ui-grid-filter-item>\r\n<div style=\"display: flex\">\r\n <div class=\"spacer\"></div>\r\n <button fd-button label=\"Add\" fdType=\"standard\" (click)=\"onAdd()\" [disabled]=\"addingForm\">\r\n <bsu-mask *ngIf=\"addingForm\" size=\"s\"></bsu-mask>\r\n </button>\r\n <button\r\n style=\"visibility: hidden; pointer-events: none; margin: 0 3px\"\r\n fd-button\r\n label=\"Add\"\r\n fdType=\"standard\"\r\n ></button>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;margin-bottom:30px}.spacer{flex:1;width:100%}\n"] }]
|