ets-fe-ng-sdk 17.0.167 → 17.0.168
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/esm2022/lib/Shared/components/table-https/table-https.component.mjs +2 -2
- package/esm2022/lib/Shared/components/table-plain/table-base.component.mjs +230 -0
- package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +6 -228
- package/fesm2022/ets-fe-ng-sdk.mjs +240 -238
- package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
- package/lib/Services/utility.service.d.ts +1 -1
- package/lib/Shared/components/table-https/table-https.component.d.ts +1 -1
- package/lib/Shared/components/table-plain/table-base.component.d.ts +94 -0
- package/lib/Shared/components/table-plain/table-plain.component.d.ts +5 -91
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@ import { LoaderComponent } from '../loader/loader.component';
|
|
|
21
21
|
import { CommonModule } from '@angular/common';
|
|
22
22
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
23
23
|
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
24
|
-
import { TableBaseComponent } from '../table-plain/table-
|
|
24
|
+
import { TableBaseComponent } from '../table-plain/table-base.component';
|
|
25
25
|
import * as i0 from "@angular/core";
|
|
26
26
|
import * as i1 from "@angular/common";
|
|
27
27
|
import * as i2 from "@angular/material/checkbox";
|
|
@@ -191,4 +191,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
191
191
|
}], dataFetched: [{
|
|
192
192
|
type: Output
|
|
193
193
|
}] } });
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaHR0cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWh0dHBzL3RhYmxlLWh0dHBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1odHRwcy90YWJsZS1odHRwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxh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QUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGlucHV0LCBzaWduYWwsIGluamVjdCwgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIG9mIGFzIG9ic2VydmFibGVPZiwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGdW5jdGlvbkNhbGxlcjIsIFRvQW55UGlwZSwgVmFsdWVPclhQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBHZXRDb2xGb3JtYXR0ZWRQaXBlLCBHZXRSYXdGaWVsZHNQaXBlLCBUYWJsZVBpcGVzTW9kdWxlLCBUYWJsZVRvU3RyaW5nUGlwZSB9IGZyb20gJy4uL3RhYmxlLXBsYWluL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTXJvdXRlckxpbmtpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvaW5kZXguZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0TkdNb2RlbENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LU5nTW9kZWwvaW5wdXQtbmdtb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5mb0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9pbmZvLWljb24vaW5mby1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IEZpZWxkc1RvRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkcy10by1kaXNwbGF5L2ZpZWxkcy10by1kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFeHBvcnRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2V4cG9ydC10YWJsZS9leHBvcnQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IFRhYmxlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhYmxlLWh0dHBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWh0dHBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXG4gICAgXSksXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBCdG5Db21wb25lbnQsXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEV4cG9ydFRhYmxlQ29tcG9uZW50LFxuICAgIEZpZWxkc1RvRGlzcGxheUNvbXBvbmVudCxcbiAgICBGdW5jdGlvbkNhbGxlcjIsXG4gICAgR2V0Q29sRm9ybWF0dGVkUGlwZSxcbiAgICBHZXRSYXdGaWVsZHNQaXBlLFxuICAgIEluZm9JY29uQ29tcG9uZW50LFxuICAgIElucHV0TkdNb2RlbENvbXBvbmVudCxcbiAgICBMb2FkZXJDb21wb25lbnQsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgTWF0TWVudU1vZHVsZSxcbiAgICBWYWx1ZU9yWFBpcGUsXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgIE1hdFNvcnRNb2R1bGUsXG4gICAgTWF0VGFibGVNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNcm91dGVyTGlua2lyZWN0aXZlLFxuICAgIFJvdXRlck1vZHVsZSxcbiAgICBUYWJsZVBpcGVzTW9kdWxlLFxuICAgIFRhYmxlVG9TdHJpbmdQaXBlLFxuICAgIFRvQW55UGlwZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUh0dHBzQ29tcG9uZW50PFRJdGVtID0gYW55PiBleHRlbmRzIFRhYmxlQmFzZUNvbXBvbmVudDxUSXRlbT4gaW1wbGVtZW50cyBPbkluaXQge1xuICBvYnNlcnZhYmxlRnVuYyA9IGlucHV0PChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8SVRhYmxlU2VhcmNoUmVzcDxUSXRlbT4+PigpO1xuICBASW5wdXQoKSBwYWdlTnVtYmVyID0gMDtcbiAgQElucHV0KCkgcXVlcnlEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHNlYXJjaElmTm9RdWVyeSA9IHRydWU7XG4gIHNob3dSZWZyZXNoQnRuID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICBAT3V0cHV0KCkgZGF0YUZldGNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRJdGVtPigpO1xuXG4gIG92ZXJyaWRlIHJlc3VsdHNMZW5ndGggPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgb3ZlcnJpZGUgZGF0YSA9IHNpZ25hbDxUSXRlbVtdPihbXSk7XG4gIGFsbFF1ZXJ5RGF0YSA9IHNpZ25hbCh7fSk7XG4gIGZpbHRlcmVkQW5kUGFnZWRSZXN1bHRzID0gc2lnbmFsPFRJdGVtW10+KFtdKTtcbiAgZmlsdGVyZWRBbmRQYWdlZFJlc3VsdHNTdWI6IFN1YnNjcmlwdGlvbjtcbiAgaXNMb2FkaW5nUmVzdWx0cyA9IHNpZ25hbCh0cnVlKTtcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgcGFnZU51bWJlcjogbmV3IEZvcm1Db250cm9sPG51bWJlcj4obnVsbCksXG4gICAgc29ydEJ5OiBuZXcgRm9ybUNvbnRyb2w8a2V5b2YgVEl0ZW0+KG51bGwpLFxuICAgIHNvcnREaXJlY3Rpb246IG5ldyBGb3JtQ29udHJvbDwnQVNDJyB8ICdERVNDJyB8ICcnPihudWxsKSxcbiAgICBwYWdlU2l6ZTogbmV3IEZvcm1Db250cm9sPG51bWJlcj4obnVsbCksXG4gIH0pO1xuICBwdWJsaWMgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwdWJsaWMgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBwYWdlTnVtYmVyOiB0aGlzLnBhZ2VOdW1iZXIgfHwgMSxcbiAgICAgIHNvcnRCeTogdGhpcy5vcmRlckZpZWxkKCksXG4gICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uKCkgPT0gJ2FzYycgPyAnQVNDJyA6IHRoaXMub3JkZXJEaXJlY3Rpb24oKSA9PSAnZGVzYycgPyAnREVTQycgOiAnJyxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXG4gICAgfSk7XG4gICAgdGhpcy5hbGxRdWVyeURhdGEuc2V0KHsgLi4udGhpcy5xdWVyeURhdGEsIC4uLnRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpIH0pO1xuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICB0aGlzLmFsbFF1ZXJ5RGF0YS5zZXQoeyAuLi50aGlzLnF1ZXJ5RGF0YSwgLi4uciB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQocik7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5xdWVyeURhdGEgPSB0aGlzLnF1ZXJ5RGF0YTtcbiAgICAvLyB0aGlzLnF1ZXJ5RGF0YSA9IHRoaXMucXVlcnlEYXRhIHx8IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZS5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBwYWdlTnVtYmVyOiByLnBhZ2VJbmRleCArIDEsIHBhZ2VTaXplOiByLnBhZ2VTaXplIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBzb3J0RGlyZWN0aW9uOiByLmRpcmVjdGlvbiA9PSAnYXNjJyA/ICdBU0MnIDogci5kaXJlY3Rpb24gPT0gJ2Rlc2MnID8gJ0RFU0MnIDogJycsXG4gICAgICAgIHNvcnRCeTogci5hY3RpdmUgYXMgYW55LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLmZpbHRlcmVkQW5kUGFnZWRSZXN1bHRzU3ViPy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmZpbHRlcmVkQW5kUGFnZWRSZXN1bHRzU3ViID0gbWVyZ2UodGhpcy5mb3JtLnZhbHVlQ2hhbmdlcylcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoe30pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIC8vIGRlYnVnZ2VyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzLnNldCh0cnVlKTtcbiAgICAgICAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnF1ZXJ5RGF0YTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJZk5vUXVlcnkgfHwgT2JqZWN0LnZhbHVlcyhxdWVyeURhdGF8fHt9KS5zb21lKCh4KSA9PiB4ICE9IG51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlRnVuYygpKHtcbiAgICAgICAgICAgICAgLi4ucXVlcnlEYXRhLFxuICAgICAgICAgICAgICAuLi50aGlzLmZvcm0udmFsdWUsXG4gICAgICAgICAgICB9KS5waXBlKGNhdGNoRXJyb3IoKGUpID0+IG9mKDxJVGFibGVTZWFyY2hSZXNwPnsgY29udGVudDogW10sIHRvdGFsOiAwIH0pKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvZig8SVRhYmxlU2VhcmNoUmVzcD57IGNvbnRlbnQ6IFtdLCB0b3RhbDogMCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHIpID0+IHRoaXMuc2VsZWN0aW9uLmNsZWFyKCkpLFxuICAgICAgICBtYXAoKGRhdGEpID0+IHtcbiAgICAgICAgICAvLyBGbGlwIGZsYWcgdG8gc2hvdyB0aGF0IGxvYWRpbmcgaGFzIGZpbmlzaGVkLlxuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMucmVzdWx0c0xlbmd0aC5zZXQoZGF0YT8udG90YWwgfHwgZGF0YT8udG90YWxFbGVtZW50cyk7XG4gICAgICAgICAgdGhpcy5kYXRhLnNldChkYXRhLmNvbnRlbnQgfHwgZGF0YT8ucGFnZT8uY29udGVudCk7XG4gICAgICAgICAgdGhpcy5kYXRhRmV0Y2hlZC5lbWl0KHRoaXMuZGF0YSBhcyBhbnkpO1xuICAgICAgICAgIHJldHVybiBkYXRhPy5jb250ZW50O1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUmVzdWx0cy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHIpID0+IHRoaXMuZmlsdGVyZWRBbmRQYWdlZFJlc3VsdHMuc2V0KHIpKTtcbiAgfVxuXG4gIHNlYXJjaChxdWVyeT86IGFueSkge1xuICAgIGRlYnVnZ2VyO1xuICAgIHRoaXMucXVlcnlEYXRhID0gcXVlcnk7XG4gICAgLy8gdGhpcy5mb3JtLmNvbnRyb2xzLnBhZ2VOdW1iZXIucGF0Y2hWYWx1ZSgwKTtcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID4gMCkgdGhpcy5yZXNldFBhZ2luZygpO1xuICAgIGVsc2UgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuICovXG4gIG92ZXJyaWRlIGlzQWxsU2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5zZWxlY3RlZD8ubGVuZ3RoID09PSB0aGlzLmRhdGE/Lmxlbmd0aDtcbiAgfTtcblxuICAvKiogU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4udGhpcy5kYXRhKCkpO1xuICB9XG5cbiAgcmVzZXRQYWdpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgLy8gLnBhZ2VJbmRleCA9IDA7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMuc2VhcmNoKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVTZWFyY2hSZXNwPFQgPSBhbnk+IHtcbiAgdG90YWxFbGVtZW50cz86IG51bWJlcjtcbiAgcGFnZT86IHsgY29udGVudDogVFtdIH07XG4gIGNvbnRlbnQ/OiBUW107XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVTZWFyY2hGdW5jPFQgPSBhbnk+IHtcbiAgdG90YWxFbGVtZW50cz86IG51bWJlcjtcbiAgcGFnZT86IHsgY29udGVudDogVFtdIH07XG4gIGNvbnRlbnQ/OiBUW107XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWh0dHBzXCI+XG4gIEBpZiAoaGVhZGVyKCkpIHtcbiAgICA8aDYgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj5cbiAgICAgIHt7IGhlYWRlcigpIHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L2g2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGctMyBtLTAgcm93LWNvbHMtbWQtYXV0byBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwcy0wXCI+XG4gICAgICAgIEBpZiAoc3RhcnRTZWN0aW9uVGVtcGxhdGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0YXJ0U2VjdGlvblRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGUtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMyByb3ctY29scy1sZy1hdXRvIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgQGlmIChzaG93RXhwb3J0KCkpIHtcbiAgICAgICAgICAgICAgPGFwcC1leHBvcnQtdGFibGVcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRhdGEoKT8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgW3NlYXJjaFF1ZXJ5XT1cImFsbFF1ZXJ5RGF0YSgpXCJcbiAgICAgICAgICAgICAgICBbc2VhcmNoRnVuY109XCJvYnNlcnZhYmxlRnVuYygpXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCJjb21wdXRlZERpc3BsYXllZENvbHVucygpXCI+PC9hcHAtZXhwb3J0LXRhYmxlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoc2hvd0FkZGl0aW9uYWxDb2x1bW5zKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICA8ZmllbGRzLXRvLWRpc3BsYXkgW2ZpZWxkc109XCJhbGxUYWJsZUNvbHVtbnMoKVwiIFtjdXJyZW50Q29sdW1uc109XCJjb21wdXRlZERpc3BsYXllZENvbHVucygpXCIgKGZpZWxkc0NoYW5nZWQpPVwiZmllbGRzQ2hhbmdlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNob3dSZWZyZXNoQnRuKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICA8YXBwLWJ0biBpY29uPVwicmVmcmVzaFwiIFtpY29uQnRuXT1cInRydWVcIiAobWNsaWNrKT1cInJlZnJlc2goKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm10LTIgb3ZlcmZsb3ctYXV0byB7eyB0YWJsZUNvbnRhaW5lckNsYXNzKCkgfX0gdGFibGUtY29udGFpbmVyIHJvdW5kZWQtMTBcIiBbbmdDbGFzc109XCJ7IGJvcmRlcjogZGlzdGluY3QoKSB9XCI+XG4gICAgICA8bG9hZGVyIFtsb2FkaW5nXT1cImlzTG9hZGluZ1Jlc3VsdHMoKVwiIFtoZWlnaHRdPVwiY29udGFpbmVyPy5zY3JvbGxIZWlnaHQgKyA0MDBcIj5cbiAgICAgICAgPGRpdiAjY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgICAgICA8dGFibGVcbiAgICAgICAgICAgICAgbWF0LXRhYmxlXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImZpbHRlcmVkQW5kUGFnZWRSZXN1bHRzPy4oKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgZC10YWJsZSB0YWJsZVwiXG4gICAgICAgICAgICAgIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwiaXNFeHBhbmRhYmxlKClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IHNtYWxsZXJGb250czogc21hbGxlckZvbnRzKCksIG5vd3JhcDogbm93cmFwKCksIGNlbnRlckNlbGxzOiBjZW50ZXJDZWxscygpLCBjdXJ2eTogY3VydnkoKSwgJ3RhYmxlLXN0cmlwZWQnOiBzdHJpcGVkKCkgfVwiXG4gICAgICAgICAgICAgIG1hdFNvcnRcbiAgICAgICAgICAgICAgbWF0U29ydEFjdGl2ZT1cInt7IG9yZGVyRmllbGQoKSB8IHRvQW55IH19XCJcbiAgICAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhclxuICAgICAgICAgICAgICBbbWF0U29ydERpcmVjdGlvbl09XCJvcmRlckRpcmVjdGlvbigpXCJcbiAgICAgICAgICAgICAgI3RhYmxlXG4gICAgICAgICAgICAgIChtYXRTb3J0Q2hhbmdlKT1cInJlc2V0UGFnaW5nKClcIj5cbiAgICAgICAgICAgICAgPCEtLSBDaGVja2JveCBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwibXNlbGVjdFwiIFtzdGlja3ldPVwiIXBsYWNlU2VsZWN0aW9uQXRSaWdodCgpXCIgW3N0aWNreUVuZF09XCJwbGFjZVNlbGVjdGlvbkF0UmlnaHQoKVwiPlxuICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gbWFzdGVyVG9nZ2xlKCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cImNoZWNrYm94TGFiZWwoKVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKHJvdykgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cImNoZWNrYm94TGFiZWwocm93KVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8IS0tIENPTFVNTlMgLS0+XG4gICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiBjb21wdXRlZERpc3BsYXllZENvbHVucygpOyB0cmFjayBjb2w7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0tCT1ggLS0+XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInt7IGNvbC5mIHwgdG9BbnkgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1pbmZvLWljb24gW3RleHRdPVwiY29sLmhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sLnQgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtaW5mby1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZW1vdmluZyB0aGUgZW1wdHkgc3BhY2UgYWJvdmUgY2hlY2tib3hlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaW5wdXQtbmdtb2RlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YWNrZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2wuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb2wuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInJvd1tjb2wuZl1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobWNoYW5nZSk9XCJvdXRwdXRDaGVja2JveChjb2wuZiwgcm93LCAkZXZlbnQpXCI+PC9hcHAtaW5wdXQtbmdtb2RlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwhLS0vLyAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gU3ViIFRhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCd0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wuZiB8IHRvQW55IH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCBjbGFzcz1cInRleHQtY2VudGVyXCIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2wuaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXJrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJjb2wuYWN0aW9uID8gY29sLmFjdGlvbihyb3csIGNvbC5mKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVscF09XCJjb2wuc3ViVGFibGUgfCB0YWJsZVRvU3RyaW5nOiByb3cgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SGVscEljb25dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWNsYXNzPVwidy1hdXRvXCI+PC9hcHAtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPCEtLS8vIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBDT0xPUiAtLT5cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnY29sb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwie3sgY29sLmYgfCB0b0FueSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWluZm8taWNvbiBbdGV4dF09XCJjb2wuaGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1pbmZvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3F1YXJlLTJcIiBbc3R5bGVdPVwiJ2JhY2tncm91bmQtY29sb3I6JyArIHJvd1tjb2wuZl1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwhLS0vLyAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdidXR0b24nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3N0aWNreV09XCJjb2wuc3RpY2t5XCIgbWF0Q29sdW1uRGVmPVwie3sgY29sLmYgfCB0b0FueSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1pbmZvLWljb24gW3RleHRdPVwiY29sLmhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sLnQgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtaW5mby1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXhcIiBjbGFzcz1cImJ0bi1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2wuaWNvbiB8fCBjb2wuYnRuPy5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiY29sLmJ0bj8udHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtY2xpY2spPVwiY29sLmFjdGlvbiA/IGNvbC5hY3Rpb24ocm93LCBjb2wuZiwgZ2V0QWN0aW9uU3RhdHVzQ2FsbGJhY2soY29sKSwgaW5kZXgpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwXT1cImNvbC5idG4/LmhlbHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0hlbHBJY29uXT1cImNvbC5idG4/LnNob3dIZWxwSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNvbC5idG4/LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbmldPVwiY29sLmJ0bj8ubWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImNvbC5idG4/LmxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJjb2wuYnRuPy5pY29uQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWNsYXNzPVwidy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbC5idG4/LmRpc2FibGVkIHx8IGNvbC5idG4/LmxvYWRpbmdcIj48L2FwcC1idG4+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8IS0tLy8gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIEFDVElPTi9CVE5TIENPTFVNTlMgLS0+XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ2J0bnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwie3sgY29sLmYgfCB0b0FueSB9fVwiIFtzdGlja3lFbmRdPVwidHJ1ZVwiIFtzdGlja3ldPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJidG4tY2VsbCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1pbmZvLWljb24gW3RleHRdPVwiY29sLmhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sLnQgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtaW5mby1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdzsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiYnRuLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggY29sLW1kLWF1dG8gY29sLXNtLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYnV0dG9uIG9mIGNvbC5idXR0b25zOyB0cmFjayBidXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiYnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJidXR0b24ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVscF09XCJidXR0b24uaGVscFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SGVscEljb25dPVwiYnV0dG9uLnNob3dIZWxwSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImJ1dHRvbi50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImJ1dHRvbi5ncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5pXT1cImJ1dHRvbi5taW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25CdG5dPVwiIWJ1dHRvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jbGFzcz1cInctYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtY2xpY2spPVwiYnV0dG9uLmFjdGlvbihyb3csIGksIGJ0bilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYnRuPjwvYXBwLWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8IS0tIEVESVRBQkxFIC0tPlxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdlZGl0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wuZiB8IHRvQW55IH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbXF1ZXJ5UGFyYW1zXT1cImNvbC5tcXVlcnlQYXJhbXMgfCBmdW5jdGlvbkNhbGxlcjI6IHJvdyA6IGNvbC5mXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21yb3V0ZXJMaW5rXT1cImNvbC5yb3V0ZUZvcm1hdHRlciB8IGZ1bmN0aW9uQ2FsbGVyMjogcm93IDogY29sLmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInJvdyB8IGdldENvbEZvcm1hdHRlZDogY29sIHwgYXN5bmMgfCB2YWx1ZU9yWDogJy0nXCI+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cImNvbC5hY3Rpb24gPyBjb2wuYWN0aW9uKHJvdywgY29sLmYpIDogbnVsbFwiIGNsYXNzPVwicHMtMSBwb2ludGVyIGZhcyBmYS1wZW5jaWwtYWx0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPCEtLSBERUZBVUxUIC0tPlxuICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInt7IGNvbC5mIHwgdG9BbnkgfX1cIiBbc3RpY2t5XT1cImNvbC5zdGlja3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBkaXNhYmxlQ2xlYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5yb3V0ZUZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV4dHJhY3RSb3V0ZSB8IGZ1bmN0aW9uQ2FsbGVyMjogY29sIDogcm93OyBhcyBjZWxsUm91dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgcG9pbnRlcjogY29sLmFjdGlvbiwgbGluazogY29sLmFjdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wuYWN0aW9uID8gY29sLmFjdGlvbihyb3csIGNvbC5mKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cImNlbGxSb3V0ZS5xdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rPVwie3sgY2VsbFJvdXRlLnJvdXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicm93IHwgZ2V0Q29sRm9ybWF0dGVkOiBjb2wgfCBhc3luYyB8IHZhbHVlT3JYOiAnLSdcIj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBwb2ludGVyOiBjb2wuYWN0aW9uLCBsaW5rOiBjb2wuYWN0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wuYWN0aW9uID8gY29sLmFjdGlvbihyb3csIGNvbC5mKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicm93IHwgZ2V0Q29sRm9ybWF0dGVkOiBjb2wgfCBhc3luYyB8IHZhbHVlT3JYOiAnLSdcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8IS0tLy8gLS0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwhLS0vLyAtLT5cbiAgICAgICAgICAgICAgPCEtLSBFWFBBTkRBQkxFIENPTFVNTi0tPlxuICAgICAgICAgICAgICBAaWYgKGlzRXhwYW5kYWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJfZXhwYW5kQ29sXCIgc3RpY2t5RW5kPlxuICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBhcmlhLWxhYmVsPVwicm93IGFjdGlvbnNcIj4mbmJzcDs8L3RoPlxuICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25CdG5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUljb25dPVwiZXhwYW5kZWRFbGVtZW50KCkgIT09IHJvdyA/ICdmYSBmYS1jaGV2cm9uLWRvd24nIDogJ2ZhIGZhLWNoZXZyb24tdXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmdWYWx1ZT1cIkV4cGFuZCBSb3cgQnV0dG9uIHt7IHJvdyB8IGpzb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJleHBhbmRlZEVsZW1lbnQuc2V0KGV4cGFuZGVkRWxlbWVudCgpID09PSByb3cgPyBudWxsIDogcm93KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+PC9hcHAtYnRuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPCEtLS8vIC0tPlxuICAgICAgICAgICAgICA8IS0tIE9QVElPTlMgQ09MVU1OIC0tPlxuICAgICAgICAgICAgICBAaWYgKHJvd09wdGlvbnMoKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwib3B0aW9uXCIgc3RpY2t5RW5kPlxuICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgZGlzYWJsZUNsZWFyPjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gbXMtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtdiBtZS0wXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiByb3dPcHRpb25zKCk7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwie3sgb3B0aW9uLml0ZW1DbGFzcyB9fVwiIChjbGljayk9XCJvcHRpb24uYWN0aW9uKHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChvcHRpb24uaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ7eyBvcHRpb24uaWNvbkNsYXNzIH19XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi50IHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPCEtLS8vIC0tPlxuXG4gICAgICAgICAgICAgIEBpZiAocmF3Q29sdW1ucygpOyBhcyBkY29scykge1xuICAgICAgICAgICAgICAgIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgZGV0YWlsIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGlzRXhwYW5kYWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbYXR0ci5jb2xzcGFuXT1cImRjb2xzPy5sZW5ndGggfHwgMVwiIFtuZ0NsYXNzXT1cInsgaGlkZUJvcmRlcjogcm93ICE9IGV4cGFuZGVkRWxlbWVudCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4YW1wbGUtZWxlbWVudC1kZXRhaWxcIiBbQGRldGFpbEV4cGFuZF09XCJyb3cgPT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXhwYW5kZWRSb3dUZW1wbGF0ZSgpOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyByb3cgfSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkY29sc1wiPjwvdHI+XG4gICAgICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgICBtYXQtcm93XG4gICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGNvbHNcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBwb2ludGVyOiBzaG93Um93UG9pbnRlcigpLCBkaXNhYmxlZDogaXNEaXNhYmxlZEZ1bmMoKSA/IGlzRGlzYWJsZWRGdW5jKCkocm93KSA6IGZhbHNlIH1cIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXNEaXNhYmxlZEZ1bmMoKSAmJiBpc0Rpc2FibGVkRnVuYygpKHJvdykgPyAnRGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicm93Q2xpY2socm93KVwiPjwvdHI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICptYXROb0RhdGFSb3c+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJtYXQtY2VsbCBuby1pdGVtXCIgW2F0dHIuY29sc3Bhbl09XCJkY29scz8ubGVuZ3RoIHx8IDFcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbm9JdGVtVHh0KCkgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2V4cGFuZGVkRGV0YWlsJ11cIiBjbGFzcz1cImV4cGFuZGVkLWRldGFpbC1yb3dcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIjBcIj48L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT1cInJlc3VsdHNMZW5ndGgoKVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiY29tcHV0ZWRQYWdlU2l6ZU9wdGlvbnMoKVwiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xvYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaHR0cHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWh0dHBzL3RhYmxlLWh0dHBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1odHRwcy90YWJsZS1odHRwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsSUFBSSxZQUFZLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFVLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxh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QUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGlucHV0LCBzaWduYWwsIGluamVjdCwgRGVzdHJveVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIG9mIGFzIG9ic2VydmFibGVPZiwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGdW5jdGlvbkNhbGxlcjIsIFRvQW55UGlwZSwgVmFsdWVPclhQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBHZXRDb2xGb3JtYXR0ZWRQaXBlLCBHZXRSYXdGaWVsZHNQaXBlLCBUYWJsZVBpcGVzTW9kdWxlLCBUYWJsZVRvU3RyaW5nUGlwZSB9IGZyb20gJy4uL3RhYmxlLXBsYWluL3RhYmxlLnBpcGUnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTXJvdXRlckxpbmtpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvaW5kZXguZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0TkdNb2RlbENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LU5nTW9kZWwvaW5wdXQtbmdtb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5mb0ljb25Db21wb25lbnQgfSBmcm9tICcuLi9pbmZvLWljb24vaW5mby1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IEZpZWxkc1RvRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uL2ZpZWxkcy10by1kaXNwbGF5L2ZpZWxkcy10by1kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFeHBvcnRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2V4cG9ydC10YWJsZS9leHBvcnQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIGFuaW1hdGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IFRhYmxlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLXBsYWluL3RhYmxlLWJhc2UuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtaHR0cHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaHR0cHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vdGFibGUtcGxhaW4vdGFibGUtcGxhaW4uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQnLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnIH0pKSxcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICBdKSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRXhwb3J0VGFibGVDb21wb25lbnQsXG4gICAgRmllbGRzVG9EaXNwbGF5Q29tcG9uZW50LFxuICAgIEZ1bmN0aW9uQ2FsbGVyMixcbiAgICBHZXRDb2xGb3JtYXR0ZWRQaXBlLFxuICAgIEdldFJhd0ZpZWxkc1BpcGUsXG4gICAgSW5mb0ljb25Db21wb25lbnQsXG4gICAgSW5wdXROR01vZGVsQ29tcG9uZW50LFxuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRNZW51TW9kdWxlLFxuICAgIFZhbHVlT3JYUGlwZSxcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gICAgTWF0U29ydE1vZHVsZSxcbiAgICBNYXRUYWJsZU1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1yb3V0ZXJMaW5raXJlY3RpdmUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIFRhYmxlUGlwZXNNb2R1bGUsXG4gICAgVGFibGVUb1N0cmluZ1BpcGUsXG4gICAgVG9BbnlQaXBlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSHR0cHNDb21wb25lbnQ8VEl0ZW0gPSBhbnk+IGV4dGVuZHMgVGFibGVCYXNlQ29tcG9uZW50PFRJdGVtPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG9ic2VydmFibGVGdW5jID0gaW5wdXQ8KGRhdGE6IGFueSkgPT4gT2JzZXJ2YWJsZTxJVGFibGVTZWFyY2hSZXNwPFRJdGVtPj4+KCk7XG4gIEBJbnB1dCgpIHBhZ2VOdW1iZXIgPSAwO1xuICBASW5wdXQoKSBxdWVyeURhdGE6IGFueTtcbiAgQElucHV0KCkgc2VhcmNoSWZOb1F1ZXJ5ID0gdHJ1ZTtcbiAgc2hvd1JlZnJlc2hCdG4gPSBpbnB1dDxib29sZWFuPigpO1xuXG4gIEBPdXRwdXQoKSBkYXRhRmV0Y2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VEl0ZW0+KCk7XG5cbiAgb3ZlcnJpZGUgcmVzdWx0c0xlbmd0aCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBvdmVycmlkZSBkYXRhID0gc2lnbmFsPFRJdGVtW10+KFtdKTtcbiAgYWxsUXVlcnlEYXRhID0gc2lnbmFsKHt9KTtcbiAgZmlsdGVyZWRBbmRQYWdlZFJlc3VsdHMgPSBzaWduYWw8VEl0ZW1bXT4oW10pO1xuICBmaWx0ZXJlZEFuZFBhZ2VkUmVzdWx0c1N1YjogU3Vic2NyaXB0aW9uO1xuICBpc0xvYWRpbmdSZXN1bHRzID0gc2lnbmFsKHRydWUpO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBwYWdlTnVtYmVyOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsKSxcbiAgICBzb3J0Qnk6IG5ldyBGb3JtQ29udHJvbDxrZXlvZiBUSXRlbT4obnVsbCksXG4gICAgc29ydERpcmVjdGlvbjogbmV3IEZvcm1Db250cm9sPCdBU0MnIHwgJ0RFU0MnIHwgJyc+KG51bGwpLFxuICAgIHBhZ2VTaXplOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihudWxsKSxcbiAgfSk7XG4gIHB1YmxpYyByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHB1YmxpYyBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHBhZ2VOdW1iZXI6IHRoaXMucGFnZU51bWJlciB8fCAxLFxuICAgICAgc29ydEJ5OiB0aGlzLm9yZGVyRmllbGQoKSxcbiAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMub3JkZXJEaXJlY3Rpb24oKSA9PSAnYXNjJyA/ICdBU0MnIDogdGhpcy5vcmRlckRpcmVjdGlvbigpID09ICdkZXNjJyA/ICdERVNDJyA6ICcnLFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUoKSxcbiAgICB9KTtcbiAgICB0aGlzLmFsbFF1ZXJ5RGF0YS5zZXQoeyAuLi50aGlzLnF1ZXJ5RGF0YSwgLi4udGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkgfSk7XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgIHRoaXMuYWxsUXVlcnlEYXRhLnNldCh7IC4uLnRoaXMucXVlcnlEYXRhLCAuLi5yIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZWQuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChyKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnF1ZXJ5RGF0YSA9IHRoaXMucXVlcnlEYXRhO1xuICAgIC8vIHRoaXMucXVlcnlEYXRhID0gdGhpcy5xdWVyeURhdGEgfHwgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgLy8gZGVidWdnZXI7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHBhZ2VOdW1iZXI6IHIucGFnZUluZGV4ICsgMSwgcGFnZVNpemU6IHIucGFnZVNpemUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2Uuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHNvcnREaXJlY3Rpb246IHIuZGlyZWN0aW9uID09ICdhc2MnID8gJ0FTQycgOiByLmRpcmVjdGlvbiA9PSAnZGVzYycgPyAnREVTQycgOiAnJyxcbiAgICAgICAgc29ydEJ5OiByLmFjdGl2ZSBhcyBhbnksXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHRoaXMuZmlsdGVyZWRBbmRQYWdlZFJlc3VsdHNTdWI/LnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuZmlsdGVyZWRBbmRQYWdlZFJlc3VsdHNTdWIgPSBtZXJnZSh0aGlzLmZvcm0udmFsdWVDaGFuZ2VzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh7fSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgLy8gZGVidWdnZXJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ1Jlc3VsdHMuc2V0KHRydWUpO1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IHRoaXMucXVlcnlEYXRhO1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElmTm9RdWVyeSB8fCBPYmplY3QudmFsdWVzKHF1ZXJ5RGF0YXx8e30pLnNvbWUoKHgpID0+IHggIT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9ic2VydmFibGVGdW5jKCkoe1xuICAgICAgICAgICAgICAuLi5xdWVyeURhdGEsXG4gICAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICAgICAgICAgIH0pLnBpcGUoY2F0Y2hFcnJvcigoZSkgPT4gb2YoPElUYWJsZVNlYXJjaFJlc3A+eyBjb250ZW50OiBbXSwgdG90YWw6IDAgfSkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKDxJVGFibGVTZWFyY2hSZXNwPnsgY29udGVudDogW10sIHRvdGFsOiAwIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgocikgPT4gdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSksXG4gICAgICAgIG1hcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIC8vIEZsaXAgZmxhZyB0byBzaG93IHRoYXQgbG9hZGluZyBoYXMgZmluaXNoZWQuXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoLnNldChkYXRhPy50b3RhbCB8fCBkYXRhPy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICB0aGlzLmRhdGEuc2V0KGRhdGEuY29udGVudCB8fCBkYXRhPy5wYWdlPy5jb250ZW50KTtcbiAgICAgICAgICB0aGlzLmRhdGFGZXRjaGVkLmVtaXQodGhpcy5kYXRhIGFzIGFueSk7XG4gICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbnRlbnQ7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdSZXN1bHRzLnNldChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocikgPT4gdGhpcy5maWx0ZXJlZEFuZFBhZ2VkUmVzdWx0cy5zZXQocikpO1xuICB9XG5cbiAgc2VhcmNoKHF1ZXJ5PzogYW55KSB7XG4gICAgZGVidWdnZXI7XG4gICAgdGhpcy5xdWVyeURhdGEgPSBxdWVyeTtcbiAgICAvLyB0aGlzLmZvcm0uY29udHJvbHMucGFnZU51bWJlci5wYXRjaFZhbHVlKDApO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPiAwKSB0aGlzLnJlc2V0UGFnaW5nKCk7XG4gICAgZWxzZSB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBlbGVtZW50cyBtYXRjaGVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cy4gKi9cbiAgb3ZlcnJpZGUgaXNBbGxTZWxlY3RlZCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24/LnNlbGVjdGVkPy5sZW5ndGggPT09IHRoaXMuZGF0YT8ubGVuZ3RoO1xuICB9O1xuXG4gIC8qKiBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIG1hc3RlclRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmRhdGEoKSk7XG4gIH1cblxuICByZXNldFBhZ2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAvLyAucGFnZUluZGV4ID0gMDtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVNlYXJjaFJlc3A8VCA9IGFueT4ge1xuICB0b3RhbEVsZW1lbnRzPzogbnVtYmVyO1xuICBwYWdlPzogeyBjb250ZW50OiBUW10gfTtcbiAgY29udGVudD86IFRbXTtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZVNlYXJjaEZ1bmM8VCA9IGFueT4ge1xuICB0b3RhbEVsZW1lbnRzPzogbnVtYmVyO1xuICBwYWdlPzogeyBjb250ZW50OiBUW10gfTtcbiAgY29udGVudD86IFRbXTtcbiAgdG90YWw/OiBudW1iZXI7XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtaHR0cHNcIj5cbiAgQGlmIChoZWFkZXIoKSkge1xuICAgIDxoNiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPlxuICAgICAge3sgaGVhZGVyKCkgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvaDY+XG4gIH1cbiAgPGRpdiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG0tMCByb3ctY29scy1tZC1hdXRvIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzLTBcIj5cbiAgICAgICAgQGlmIChzdGFydFNlY3Rpb25UZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RhcnRTZWN0aW9uVGVtcGxhdGUoKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwZS0wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIHJvdy1jb2xzLWxnLWF1dG8gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICBAaWYgKHNob3dFeHBvcnQoKSkge1xuICAgICAgICAgICAgICA8YXBwLWV4cG9ydC10YWJsZVxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZGF0YSgpPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgICAgICBbc2VhcmNoUXVlcnldPVwiYWxsUXVlcnlEYXRhKClcIlxuICAgICAgICAgICAgICAgIFtzZWFyY2hGdW5jXT1cIm9ic2VydmFibGVGdW5jKClcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cImNvbXB1dGVkRGlzcGxheWVkQ29sdW5zKClcIj48L2FwcC1leHBvcnQtdGFibGU+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChzaG93QWRkaXRpb25hbENvbHVtbnMoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgIDxmaWVsZHMtdG8tZGlzcGxheSBbZmllbGRzXT1cImFsbFRhYmxlQ29sdW1ucygpXCIgW2N1cnJlbnRDb2x1bW5zXT1cImNvbXB1dGVkRGlzcGxheWVkQ29sdW5zKClcIiAoZmllbGRzQ2hhbmdlZCk9XCJmaWVsZHNDaGFuZ2VkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc2hvd1JlZnJlc2hCdG4oKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgIDxhcHAtYnRuIGljb249XCJyZWZyZXNoXCIgW2ljb25CdG5dPVwidHJ1ZVwiIChtY2xpY2spPVwicmVmcmVzaCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMiBvdmVyZmxvdy1hdXRvIHt7IHRhYmxlQ29udGFpbmVyQ2xhc3MoKSB9fSB0YWJsZS1jb250YWluZXIgcm91bmRlZC0xMFwiIFtuZ0NsYXNzXT1cInsgYm9yZGVyOiBkaXN0aW5jdCgpIH1cIj5cbiAgICAgIDxsb2FkZXIgW2xvYWRpbmddPVwiaXNMb2FkaW5nUmVzdWx0cygpXCIgW2hlaWdodF09XCJjb250YWluZXI/LnNjcm9sbEhlaWdodCArIDQwMFwiPlxuICAgICAgICA8ZGl2ICNjb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgICAgIDx0YWJsZVxuICAgICAgICAgICAgICBtYXQtdGFibGVcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZmlsdGVyZWRBbmRQYWdlZFJlc3VsdHM/LigpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBkLXRhYmxlIHRhYmxlXCJcbiAgICAgICAgICAgICAgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJpc0V4cGFuZGFibGUoKVwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgc21hbGxlckZvbnRzOiBzbWFsbGVyRm9udHMoKSwgbm93cmFwOiBub3dyYXAoKSwgY2VudGVyQ2VsbHM6IGNlbnRlckNlbGxzKCksIGN1cnZ5OiBjdXJ2eSgpLCAndGFibGUtc3RyaXBlZCc6IHN0cmlwZWQoKSB9XCJcbiAgICAgICAgICAgICAgbWF0U29ydFxuICAgICAgICAgICAgICBtYXRTb3J0QWN0aXZlPVwie3sgb3JkZXJGaWVsZCgpIHwgdG9BbnkgfX1cIlxuICAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyXG4gICAgICAgICAgICAgIFttYXRTb3J0RGlyZWN0aW9uXT1cIm9yZGVyRGlyZWN0aW9uKClcIlxuICAgICAgICAgICAgICAjdGFibGVcbiAgICAgICAgICAgICAgKG1hdFNvcnRDaGFuZ2UpPVwicmVzZXRQYWdpbmcoKVwiPlxuICAgICAgICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJtc2VsZWN0XCIgW3N0aWNreV09XCIhcGxhY2VTZWxlY3Rpb25BdFJpZ2h0KClcIiBbc3RpY2t5RW5kXT1cInBsYWNlU2VsZWN0aW9uQXRSaWdodCgpXCI+XG4gICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiY2hlY2tib3hMYWJlbCgpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUocm93KSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiY2hlY2tib3hMYWJlbChyb3cpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwhLS0gQ09MVU1OUyAtLT5cbiAgICAgICAgICAgICAgQGZvciAoY29sIG9mIGNvbXB1dGVkRGlzcGxheWVkQ29sdW5zKCk7IHRyYWNrIGNvbDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAc3dpdGNoIChjb2wudHlwZSkge1xuICAgICAgICAgICAgICAgICAgPCEtLSBDSEVDS0JPWCAtLT5cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwie3sgY29sLmYgfCB0b0FueSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWluZm8taWNvbiBbdGV4dF09XCJjb2wuaGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1pbmZvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlbW92aW5nIHRoZSBlbXB0eSBzcGFjZSBhYm92ZSBjaGVja2JveGVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1pbnB1dC1uZ21vZGVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhY2tlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbC5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwicm93W2NvbC5mXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtY2hhbmdlKT1cIm91dHB1dENoZWNrYm94KGNvbC5mLCByb3csICRldmVudClcIj48L2FwcC1pbnB1dC1uZ21vZGVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPCEtLS8vIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBTdWIgVGFibGUgLS0+XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ3RhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInt7IGNvbC5mIHwgdG9BbnkgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsIGNsYXNzPVwidGV4dC1jZW50ZXJcIiAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50IHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbC5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhcmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobWNsaWNrKT1cImNvbC5hY3Rpb24gPyBjb2wuYWN0aW9uKHJvdywgY29sLmYpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwXT1cImNvbC5zdWJUYWJsZSB8IHRhYmxlVG9TdHJpbmc6IHJvdyB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dIZWxwSWNvbl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQnRuXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtY2xhc3M9XCJ3LWF1dG9cIj48L2FwcC1idG4+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8IS0tLy8gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIENPTE9SIC0tPlxuICAgICAgICAgICAgICAgICAgQGNhc2UgKCdjb2xvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wuZiB8IHRvQW55IH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaW5mby1pY29uIFt0ZXh0XT1cImNvbC5oaW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50IHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWluZm8taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcXVhcmUtMlwiIFtzdHlsZV09XCInYmFja2dyb3VuZC1jb2xvcjonICsgcm93W2NvbC5mXVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPCEtLS8vIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ2J1dHRvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc3RpY2t5XT1cImNvbC5zdGlja3lcIiBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wuZiB8IHRvQW55IH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCBjbGFzcz1cInRleHQtY2VudGVyXCIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWluZm8taWNvbiBbdGV4dF09XCJjb2wuaGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1pbmZvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgaW5kZXggPSBpbmRleFwiIGNsYXNzPVwiYnRuLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImNvbC5pY29uIHx8IGNvbC5idG4/Lmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJjb2wuYnRuPy50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJjb2wuYWN0aW9uID8gY29sLmFjdGlvbihyb3csIGNvbC5mLCBnZXRBY3Rpb25TdGF0dXNDYWxsYmFjayhjb2wpLCBpbmRleCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBdPVwiY29sLmJ0bj8uaGVscFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SGVscEljb25dPVwiY29sLmJ0bj8uc2hvd0hlbHBJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiY29sLmJ0bj8ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluaV09XCJjb2wuYnRuPy5taW5pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiY29sLmJ0bj8ubG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQnRuXT1cImNvbC5idG4/Lmljb25CdG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtY2xhc3M9XCJ3LWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sLmJ0bj8uZGlzYWJsZWQgfHwgY29sLmJ0bj8ubG9hZGluZ1wiPjwvYXBwLWJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwhLS0vLyAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gQUNUSU9OL0JUTlMgQ09MVU1OUyAtLT5cbiAgICAgICAgICAgICAgICAgIEBjYXNlICgnYnRucycpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wuZiB8IHRvQW55IH19XCIgW3N0aWNreUVuZF09XCJ0cnVlXCIgW3N0aWNreV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImJ0bi1jZWxsIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWluZm8taWNvbiBbdGV4dF09XCJjb2wuaGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2wudCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1pbmZvLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93OyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJidG4tY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBjb2wtbWQtYXV0byBjb2wtc20tYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChidXR0b24gb2YgY29sLmJ1dHRvbnM7IHRyYWNrIGJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJidXR0b24uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwXT1cImJ1dHRvbi5oZWxwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dIZWxwSWNvbl09XCJidXR0b24uc2hvd0hlbHBJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiYnV0dG9uLmdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbmldPVwiYnV0dG9uLm1pbmlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkJ0bl09XCIhYnV0dG9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNsYXNzPVwidy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJidXR0b24uYWN0aW9uKHJvdywgaSwgYnRuKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNidG4+PC9hcHAtYnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwhLS0gRURJVEFCTEUgLS0+XG4gICAgICAgICAgICAgICAgICBAY2FzZSAoJ2VkaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInt7IGNvbC5mIHwgdG9BbnkgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50IHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttcXVlcnlQYXJhbXNdPVwiY29sLm1xdWVyeVBhcmFtcyB8IGZ1bmN0aW9uQ2FsbGVyMjogcm93IDogY29sLmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbXJvdXRlckxpbmtdPVwiY29sLnJvdXRlRm9ybWF0dGVyIHwgZnVuY3Rpb25DYWxsZXIyOiByb3cgOiBjb2wuZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicm93IHwgZ2V0Q29sRm9ybWF0dGVkOiBjb2wgfCBhc3luYyB8IHZhbHVlT3JYOiAnLSdcIj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwiY29sLmFjdGlvbiA/IGNvbC5hY3Rpb24ocm93LCBjb2wuZikgOiBudWxsXCIgY2xhc3M9XCJwcy0xIHBvaW50ZXIgZmFzIGZhLXBlbmNpbC1hbHRcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8IS0tIERFRkFVTFQgLS0+XG4gICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwie3sgY29sLmYgfCB0b0FueSB9fVwiIFtzdGlja3ldPVwiY29sLnN0aWNreVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIGRpc2FibGVDbGVhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50IHwgYXBwVHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnJvdXRlRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXh0cmFjdFJvdXRlIHwgZnVuY3Rpb25DYWxsZXIyOiBjb2wgOiByb3c7IGFzIGNlbGxSb3V0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBwb2ludGVyOiBjb2wuYWN0aW9uLCBsaW5rOiBjb2wuYWN0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbC5hY3Rpb24gPyBjb2wuYWN0aW9uKHJvdywgY29sLmYpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiY2VsbFJvdXRlLnF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbms9XCJ7eyBjZWxsUm91dGUucm91dGUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3cgfCBnZXRDb2xGb3JtYXR0ZWQ6IGNvbCB8IGFzeW5jIHwgdmFsdWVPclg6ICctJ1wiPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IHBvaW50ZXI6IGNvbC5hY3Rpb24sIGxpbms6IGNvbC5hY3Rpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbC5hY3Rpb24gPyBjb2wuYWN0aW9uKHJvdywgY29sLmYpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3cgfCBnZXRDb2xGb3JtYXR0ZWQ6IGNvbCB8IGFzeW5jIHwgdmFsdWVPclg6ICctJ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwhLS0vLyAtLT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPCEtLS8vIC0tPlxuICAgICAgICAgICAgICA8IS0tIEVYUEFOREFCTEUgQ09MVU1OLS0+XG4gICAgICAgICAgICAgIEBpZiAoaXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIl9leHBhbmRDb2xcIiBzdGlja3lFbmQ+XG4gICAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGFyaWEtbGFiZWw9XCJyb3cgYWN0aW9uc1wiPiZuYnNwOzwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tSWNvbl09XCJleHBhbmRlZEVsZW1lbnQoKSAhPT0gcm93ID8gJ2ZhIGZhLWNoZXZyb24tZG93bicgOiAnZmEgZmEtY2hldnJvbi11cCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImV4cGFuZCByb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZ1ZhbHVlPVwiRXhwYW5kIFJvdyBCdXR0b24ge3sgcm93IHwganNvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobWNsaWNrKT1cImV4cGFuZGVkRWxlbWVudC5zZXQoZXhwYW5kZWRFbGVtZW50KCkgPT09IHJvdyA/IG51bGwgOiByb3cpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2FwcC1idG4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8IS0tLy8gLS0+XG4gICAgICAgICAgICAgIDwhLS0gT1BUSU9OUyBDT0xVTU4gLS0+XG4gICAgICAgICAgICAgIEBpZiAocm93T3B0aW9ucygpPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJvcHRpb25cIiBzdGlja3lFbmQ+XG4gICAgICAgICAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBkaXNhYmxlQ2xlYXI+PC90aD5cbiAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBtcy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12IG1lLTBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHJvd09wdGlvbnMoKTsgdHJhY2sgb3B0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJ7eyBvcHRpb24uaXRlbUNsYXNzIH19XCIgKGNsaWNrKT1cIm9wdGlvbi5hY3Rpb24ocm93KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9wdGlvbi5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7IG9wdGlvbi5pY29uQ2xhc3MgfX1cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnQgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8IS0tLy8gLS0+XG5cbiAgICAgICAgICAgICAgQGlmIChyYXdDb2x1bW5zKCk7IGFzIGRjb2xzKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNFeHBhbmRhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIFthdHRyLmNvbHNwYW5dPVwiZGNvbHM/Lmxlbmd0aCB8fCAxXCIgW25nQ2xhc3NdPVwieyBoaWRlQm9yZGVyOiByb3cgIT0gZXhwYW5kZWRFbGVtZW50IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1lbGVtZW50LWRldGFpbFwiIFtAZGV0YWlsRXhwYW5kXT1cInJvdyA9PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbmRlZFJvd1RlbXBsYXRlKCk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHJvdyB9IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRjb2xzXCI+PC90cj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkY29sc1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IHBvaW50ZXI6IHNob3dSb3dQb2ludGVyKCksIGRpc2FibGVkOiBpc0Rpc2FibGVkRnVuYygpID8gaXNEaXNhYmxlZEZ1bmMoKShyb3cpIDogZmFsc2UgfVwiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJpc0Rpc2FibGVkRnVuYygpICYmIGlzRGlzYWJsZWRGdW5jKCkocm93KSA/ICdEaXNhYmxlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3dDbGljayhyb3cpXCI+PC90cj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1hdC1jZWxsIG5vLWl0ZW1cIiBbYXR0ci5jb2xzcGFuXT1cImRjb2xzPy5sZW5ndGggfHwgMVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub0l0ZW1UeHQoKSB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgQGlmIChpc0V4cGFuZGFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiZXhwYW5kZWQtZGV0YWlsLXJvd1wiIFtzdHlsZS5oZWlnaHQucHhdPVwiMFwiPjwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yIFtsZW5ndGhdPVwicmVzdWx0c0xlbmd0aCgpXCIgW3BhZ2VTaXplT3B0aW9uc109XCJjb21wdXRlZFBhZ2VTaXplT3B0aW9ucygpXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplKClcIiBzaG93Rmlyc3RMYXN0QnV0dG9ucyAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbG9hZGVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
+
import { Component, EventEmitter, Output, ViewChild, computed, inject, input, signal } from '@angular/core';
|
|
3
|
+
import { MatPaginator as MatPaginator } from '@angular/material/paginator';
|
|
4
|
+
import { MatSort } from '@angular/material/sort';
|
|
5
|
+
import { cloneDeep } from 'lodash-es';
|
|
6
|
+
import { UtilityService } from '../../../Services/utility.service';
|
|
7
|
+
import { TableService } from './table-plain.service';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class TableBaseComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.rowOptions = input();
|
|
12
|
+
this.centerCells = input(false);
|
|
13
|
+
this.curvy = input(false);
|
|
14
|
+
this.distinct = input(true);
|
|
15
|
+
/**Appears above the table */
|
|
16
|
+
this.header = input();
|
|
17
|
+
this.isExpandable = input(false);
|
|
18
|
+
/** Used to name metadata of the table like exported files */
|
|
19
|
+
this.label = input();
|
|
20
|
+
this.isDisabledFunc = input();
|
|
21
|
+
this.noItemTxt = input('There are no items');
|
|
22
|
+
this.nowrap = input(true);
|
|
23
|
+
this.expandedRowTemplate = input();
|
|
24
|
+
this.orderDirection = input('asc');
|
|
25
|
+
this.orderField = input();
|
|
26
|
+
this.pageSize = input(10);
|
|
27
|
+
this.startSectionTemplate = input();
|
|
28
|
+
this.computedPageSizeOptions = computed(() => {
|
|
29
|
+
const defaultPageSizeOptions = this.defaultPageSizeOptions(), pageSizeOptions = this.pageSizeOptions(), resultsLength = this.resultsLength();
|
|
30
|
+
const options = pageSizeOptions?.length ? pageSizeOptions : defaultPageSizeOptions;
|
|
31
|
+
return options.concat(options?.lastItem() > resultsLength ? [] : [resultsLength]);
|
|
32
|
+
});
|
|
33
|
+
this.defaultPageSizeOptions = signal([5, 10, 20, 50, 100, 500, 1000, 5000]);
|
|
34
|
+
this.pageSizeOptions = input();
|
|
35
|
+
this.placeSelectionAtRight = input(false); // support customizing the position of the select checkboxes.
|
|
36
|
+
this.showAdditionalColumns = input(false);
|
|
37
|
+
this.showExport = input(false);
|
|
38
|
+
this.showRowPointer = input(false);
|
|
39
|
+
this.smallerFonts = input(false);
|
|
40
|
+
this.striped = input(true);
|
|
41
|
+
this.tableContainerClass = input();
|
|
42
|
+
this.useSelection = input(false);
|
|
43
|
+
this.formSchemaToColumns = input();
|
|
44
|
+
this.uploadSchemaToColumns = input();
|
|
45
|
+
this.displayedColumns = input();
|
|
46
|
+
this.overrideDisplayedColumns = signal(null);
|
|
47
|
+
this.computedDisplayedColuns = computed(() => {
|
|
48
|
+
const dc = cloneDeep(this.displayedColumns())?.map((c) => {
|
|
49
|
+
if (!c.t) {
|
|
50
|
+
if (c.type == 'button')
|
|
51
|
+
c.t = 'Action';
|
|
52
|
+
else if (c.type == 'btns')
|
|
53
|
+
c.t = 'Actions';
|
|
54
|
+
c.sticky = true;
|
|
55
|
+
}
|
|
56
|
+
return c;
|
|
57
|
+
}) || [], overrideColumns = this.overrideDisplayedColumns(), formSchemaToColumns = this.formSchemaToColumns(), uploadSchemaToColumns = this.uploadSchemaToColumns();
|
|
58
|
+
const columns = (overrideColumns?.length ? overrideColumns : dc)
|
|
59
|
+
.concat(formSchemaToColumns?.map((x) => ({ f: x.field, t: x.label, formatter: x.tableFormatter })) || [])
|
|
60
|
+
.concat(uploadSchemaToColumns?.filter((x) => x.field).map((x) => ({ f: x.field, t: x.label })) || []);
|
|
61
|
+
this.autoSetColumnFormatter(columns);
|
|
62
|
+
return columns;
|
|
63
|
+
});
|
|
64
|
+
this._rowClick = new EventEmitter();
|
|
65
|
+
this.selectionChanged = new EventEmitter();
|
|
66
|
+
this.emitCheckbox = new EventEmitter();
|
|
67
|
+
this.rawColumns = computed(() => {
|
|
68
|
+
return this.tS.getRawFields(this.computedDisplayedColuns(), this.rowOptions()?.length, this.useSelection(), this.placeSelectionAtRight(), this.isExpandable());
|
|
69
|
+
});
|
|
70
|
+
this.expandedElement = signal(null);
|
|
71
|
+
this.selection = new SelectionModel(true, []);
|
|
72
|
+
this.cellFormatterMap = {};
|
|
73
|
+
this.uS = inject(UtilityService);
|
|
74
|
+
this.tS = inject(TableService);
|
|
75
|
+
this.autoSetColumnFormatter = (columns) => {
|
|
76
|
+
if (!columns)
|
|
77
|
+
return;
|
|
78
|
+
const cellsToCheckFor = {};
|
|
79
|
+
// const dateFields = { createdOn: 1, updatedOn: 1 };
|
|
80
|
+
for (let index = 0; index < columns.length; index++) {
|
|
81
|
+
const item = columns[index];
|
|
82
|
+
if (item.noFormat || item.formatter || item.formatterRow) {
|
|
83
|
+
this.cellFormatterMap[item.f] = {
|
|
84
|
+
noFormat: item.noFormat,
|
|
85
|
+
formatter: item.formatter,
|
|
86
|
+
};
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const savedConfig = this.cellFormatterMap[item.f];
|
|
90
|
+
if (savedConfig) {
|
|
91
|
+
item.noFormat = savedConfig.noFormat;
|
|
92
|
+
item.formatter = savedConfig.formatter;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const itemFieldLower = item.f?.toString().toLowerCase();
|
|
97
|
+
if (itemFieldLower == 'id' || itemFieldLower.includes('year') || itemFieldLower.includes('age')) {
|
|
98
|
+
item.noFormat = true;
|
|
99
|
+
this.cellFormatterMap[item.f] = item;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
cellsToCheckFor[item.f] = index;
|
|
104
|
+
}
|
|
105
|
+
if (!this.data())
|
|
106
|
+
return;
|
|
107
|
+
console.log('cellsToCheckFor', JSON.stringify(cellsToCheckFor));
|
|
108
|
+
for (const row of this.data()) {
|
|
109
|
+
if (!Object.keys(cellsToCheckFor).length)
|
|
110
|
+
break;
|
|
111
|
+
for (const key in cellsToCheckFor) {
|
|
112
|
+
const cell = columns[cellsToCheckFor[key]];
|
|
113
|
+
const typeo = typeof row[key];
|
|
114
|
+
if (typeo == 'boolean') {
|
|
115
|
+
cell.formatter = this.uS.yesNoCellFormatter;
|
|
116
|
+
delete cellsToCheckFor[key];
|
|
117
|
+
this.cellFormatterMap[key] = cell;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
else if (typeo == 'number') {
|
|
121
|
+
cell.formatter = this.uS.moneyParser;
|
|
122
|
+
delete cellsToCheckFor[key];
|
|
123
|
+
this.cellFormatterMap[key] = cell;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
else if (this.uS.isDatTimeValue(row[key])) {
|
|
127
|
+
cell.formatter = this.uS.fullDateTime;
|
|
128
|
+
delete cellsToCheckFor[key];
|
|
129
|
+
this.cellFormatterMap[key] = cell;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
else if (this.uS.isDateValue(row[key])) {
|
|
133
|
+
cell.formatter = this.uS.dateFormat;
|
|
134
|
+
delete cellsToCheckFor[key];
|
|
135
|
+
this.cellFormatterMap[key] = cell;
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
for (const key in cellsToCheckFor) {
|
|
141
|
+
this.cellFormatterMap[key] = { noFormat: true };
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
this.allTableColumns = computed(() => {
|
|
145
|
+
const data = this.data(), displayedColumns = this.displayedColumns();
|
|
146
|
+
return (data?.length
|
|
147
|
+
? Object.keys(data[0]).map((k) => {
|
|
148
|
+
const e = displayedColumns?.find((x) => x.f == k);
|
|
149
|
+
return {
|
|
150
|
+
...e,
|
|
151
|
+
f: k,
|
|
152
|
+
t: e?.t || this.uS.formatField(k),
|
|
153
|
+
active: !!e,
|
|
154
|
+
};
|
|
155
|
+
})
|
|
156
|
+
: [])
|
|
157
|
+
.filter((x) => !(x?.f?.toString().toLowerCase().endsWith('id') && x?.f?.toString().length === 2))
|
|
158
|
+
.sort2('t', true);
|
|
159
|
+
});
|
|
160
|
+
this.extractRoute = (cell, row) => {
|
|
161
|
+
const [route, qp] = cell.routeFormatter(row)?.split('?');
|
|
162
|
+
const queryParams = (cell.mqueryParams ? cell.mqueryParams(row) : {}) || {};
|
|
163
|
+
if (qp)
|
|
164
|
+
qp.split('&').forEach((q) => {
|
|
165
|
+
const [field, val] = q.split('=');
|
|
166
|
+
queryParams[field] = val;
|
|
167
|
+
});
|
|
168
|
+
// console.log(route, qp);
|
|
169
|
+
return { route, queryParams };
|
|
170
|
+
};
|
|
171
|
+
this.ngAfterViewInitSignal = signal(null);
|
|
172
|
+
}
|
|
173
|
+
/** The label for the checkbox on the passed row */
|
|
174
|
+
checkboxLabel(row) {
|
|
175
|
+
if (!row) {
|
|
176
|
+
return `${this.isAllSelected() ? 'deselect' : 'select'} all`;
|
|
177
|
+
}
|
|
178
|
+
return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row `;
|
|
179
|
+
}
|
|
180
|
+
fieldsChanged($event) {
|
|
181
|
+
const cols = $event.nFields;
|
|
182
|
+
this.overrideDisplayedColumns.set(cols
|
|
183
|
+
.filter((x) => !(x.type == 'btns' && x.sticky))
|
|
184
|
+
.concat(cols.filter((x) => x.type == 'btns' && x.sticky))
|
|
185
|
+
.map((x) => {
|
|
186
|
+
if (x.type === 'number')
|
|
187
|
+
x.formatter = this.uS.moneyParser;
|
|
188
|
+
return x;
|
|
189
|
+
}));
|
|
190
|
+
}
|
|
191
|
+
getActionStatusCallback(col) {
|
|
192
|
+
return (state) => (col.btn.loading = state);
|
|
193
|
+
}
|
|
194
|
+
outputCheckbox(field, item, value) {
|
|
195
|
+
this.emitCheckbox.emit({ field, item, value });
|
|
196
|
+
}
|
|
197
|
+
rowClick(e) {
|
|
198
|
+
this._rowClick.emit(e);
|
|
199
|
+
}
|
|
200
|
+
get selectedItems() {
|
|
201
|
+
return this.selection.selected;
|
|
202
|
+
}
|
|
203
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TableBaseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
204
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.1.0", type: TableBaseComponent, isStandalone: true, selector: "ng-component", inputs: { rowOptions: { classPropertyName: "rowOptions", publicName: "rowOptions", isSignal: true, isRequired: false, transformFunction: null }, centerCells: { classPropertyName: "centerCells", publicName: "centerCells", isSignal: true, isRequired: false, transformFunction: null }, curvy: { classPropertyName: "curvy", publicName: "curvy", isSignal: true, isRequired: false, transformFunction: null }, distinct: { classPropertyName: "distinct", publicName: "distinct", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, isExpandable: { classPropertyName: "isExpandable", publicName: "isExpandable", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, isDisabledFunc: { classPropertyName: "isDisabledFunc", publicName: "isDisabledFunc", isSignal: true, isRequired: false, transformFunction: null }, noItemTxt: { classPropertyName: "noItemTxt", publicName: "noItemTxt", isSignal: true, isRequired: false, transformFunction: null }, nowrap: { classPropertyName: "nowrap", publicName: "nowrap", isSignal: true, isRequired: false, transformFunction: null }, expandedRowTemplate: { classPropertyName: "expandedRowTemplate", publicName: "expandedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, orderDirection: { classPropertyName: "orderDirection", publicName: "orderDirection", isSignal: true, isRequired: false, transformFunction: null }, orderField: { classPropertyName: "orderField", publicName: "orderField", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, startSectionTemplate: { classPropertyName: "startSectionTemplate", publicName: "startSectionTemplate", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, placeSelectionAtRight: { classPropertyName: "placeSelectionAtRight", publicName: "placeSelectionAtRight", isSignal: true, isRequired: false, transformFunction: null }, showAdditionalColumns: { classPropertyName: "showAdditionalColumns", publicName: "showAdditionalColumns", isSignal: true, isRequired: false, transformFunction: null }, showExport: { classPropertyName: "showExport", publicName: "showExport", isSignal: true, isRequired: false, transformFunction: null }, showRowPointer: { classPropertyName: "showRowPointer", publicName: "showRowPointer", isSignal: true, isRequired: false, transformFunction: null }, smallerFonts: { classPropertyName: "smallerFonts", publicName: "smallerFonts", isSignal: true, isRequired: false, transformFunction: null }, striped: { classPropertyName: "striped", publicName: "striped", isSignal: true, isRequired: false, transformFunction: null }, tableContainerClass: { classPropertyName: "tableContainerClass", publicName: "tableContainerClass", isSignal: true, isRequired: false, transformFunction: null }, useSelection: { classPropertyName: "useSelection", publicName: "useSelection", isSignal: true, isRequired: false, transformFunction: null }, formSchemaToColumns: { classPropertyName: "formSchemaToColumns", publicName: "formSchemaToColumns", isSignal: true, isRequired: false, transformFunction: null }, uploadSchemaToColumns: { classPropertyName: "uploadSchemaToColumns", publicName: "uploadSchemaToColumns", isSignal: true, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { _rowClick: "rowClick", selectionChanged: "selectionChanged", emitCheckbox: "emitCheckbox" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: '', isInline: true }); }
|
|
205
|
+
}
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: TableBaseComponent, decorators: [{
|
|
207
|
+
type: Component,
|
|
208
|
+
args: [{
|
|
209
|
+
template: '',
|
|
210
|
+
standalone: true,
|
|
211
|
+
imports: [],
|
|
212
|
+
}]
|
|
213
|
+
}], propDecorators: { _rowClick: [{
|
|
214
|
+
type: Output,
|
|
215
|
+
args: ['rowClick']
|
|
216
|
+
}], selectionChanged: [{
|
|
217
|
+
type: Output
|
|
218
|
+
}], emitCheckbox: [{
|
|
219
|
+
type: Output
|
|
220
|
+
}], paginator: [{
|
|
221
|
+
type: ViewChild,
|
|
222
|
+
args: [MatPaginator]
|
|
223
|
+
}], sort: [{
|
|
224
|
+
type: ViewChild,
|
|
225
|
+
args: [MatSort]
|
|
226
|
+
}], table: [{
|
|
227
|
+
type: ViewChild,
|
|
228
|
+
args: ['table']
|
|
229
|
+
}] } });
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvdGFibGUtcGxhaW4vdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFBRSxNQUFNLEVBR3BCLFNBQVMsRUFFVCxRQUFRLEVBQUUsTUFBTSxFQUNoQixLQUFLLEVBQ0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLElBQUksWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFPckQsTUFBTSxPQUFnQixrQkFBa0I7SUFMeEM7UUFNRSxlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBQ25DLGdCQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNoQyw2QkFBNkI7UUFDN0IsV0FBTSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3pCLGlCQUFZLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLDZEQUE2RDtRQUM3RCxVQUFLLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxLQUFLLEVBQTJCLENBQUM7UUFDbEQsY0FBUyxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hDLFdBQU0sR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDOUIsd0JBQW1CLEdBQUcsS0FBSyxFQUFvQixDQUFDO1FBQ2hELG1CQUFjLEdBQUcsS0FBSyxDQUFXLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxLQUFLLEVBQWUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLHlCQUFvQixHQUFHLEtBQUssRUFBNEIsQ0FBQztRQUN6RCw0QkFBdUIsR0FBRyxRQUFRLENBQVcsR0FBRyxFQUFFO1lBQ2hELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQzFELGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQ3hDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkMsTUFBTSxPQUFPLEdBQUcsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztZQUNuRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQyxDQUFDLENBQUM7UUFDTSwyQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRixvQkFBZSxHQUFHLEtBQUssRUFBWSxDQUFDO1FBQ3BDLDBCQUFxQixHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLDZEQUE2RDtRQUM1RywwQkFBcUIsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDOUMsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN2QyxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyQyxZQUFPLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQy9CLHdCQUFtQixHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3RDLGlCQUFZLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXJDLHdCQUFtQixHQUFHLEtBQUssRUFBMEMsQ0FBQztRQUN0RSwwQkFBcUIsR0FBRyxLQUFLLEVBQTZDLENBQUM7UUFFM0UscUJBQWdCLEdBQUcsS0FBSyxFQUFxQixDQUFDO1FBQzlDLDZCQUF3QixHQUFHLE1BQU0sQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFDM0QsNEJBQXVCLEdBQUcsUUFBUSxDQUFvQixHQUFHLEVBQUU7WUFDekQsTUFBTSxFQUFFLEdBQ0osU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNSLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxRQUFRO3dCQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO3lCQUNsQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTTt3QkFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDM0MsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7aUJBQ2pCO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUNWLGVBQWUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFDakQsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQ2hELHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQzdELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQW9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUN2SCxNQUFNLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRWlCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO1FBQ2hELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBQzVELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBSXJDLENBQUM7UUFPTCxlQUFVLEdBQUcsUUFBUSxDQUFXLEdBQUcsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUN6QixJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFDOUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUNuQixJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUNwQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxvQkFBZSxHQUFHLE1BQU0sQ0FBUSxJQUFJLENBQUMsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxjQUFjLENBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELHFCQUFnQixHQUtaLEVBQUUsQ0FBQztRQUNBLE9BQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUIsT0FBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQThCakMsMkJBQXNCLEdBQUcsQ0FBQyxPQUEwQixFQUFFLEVBQUU7WUFDdEQsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUNyQixNQUFNLGVBQWUsR0FBb0MsRUFBRSxDQUFDO1lBQzVELHFEQUFxRDtZQUNyRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHO3dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztxQkFDMUIsQ0FBQztvQkFDRixTQUFTO2lCQUNWO2dCQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELElBQUksV0FBVyxFQUFFO29CQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztvQkFDckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO29CQUN2QyxTQUFTO2lCQUNWO3FCQUFNO29CQUNMLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3hELElBQUksY0FBYyxJQUFJLElBQUksSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQy9GLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDckMsU0FBUztxQkFDVjtpQkFDRjtnQkFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNqQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUFFLE9BQU87WUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU07b0JBQUUsTUFBTTtnQkFDaEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUU7b0JBQ2pDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDM0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO3dCQUM1QyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDbEMsU0FBUztxQkFDVjt5QkFBTSxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7d0JBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7d0JBQ3JDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxTQUFTO3FCQUNWO3lCQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUM7d0JBQ3RDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxTQUFTO3FCQUNWO3lCQUFNLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7d0JBQ3BDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUNsQyxTQUFTO3FCQUNWO2lCQUNGO2FBQ0Y7WUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRTtnQkFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pEO1FBQ0gsQ0FBQyxDQUFDO1FBTUYsb0JBQWUsR0FBRyxRQUFRLENBQW9CLEdBQUcsRUFBRTtZQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQ3RCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdDLE9BQU8sQ0FDTCxJQUFJLEVBQUUsTUFBTTtnQkFDVixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDN0IsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxPQUFPO3dCQUNMLEdBQUcsQ0FBQzt3QkFDSixDQUFDLEVBQUUsQ0FBUTt3QkFDWCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDWixDQUFDO2dCQUNKLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsRUFBRSxDQUNQO2lCQUNFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNoRyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBVUgsaUJBQVksR0FBRyxDQUFDLElBQWMsRUFBRSxHQUFVLEVBQXNDLEVBQUU7WUFDaEYsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6RCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1RSxJQUFJLEVBQUU7Z0JBQ0osRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDMUIsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztZQUNMLDBCQUEwQjtZQUMxQixPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVGLDBCQUFxQixHQUFHLE1BQU0sQ0FBUyxJQUFJLENBQUMsQ0FBQztLQUM5QztJQXZJQyxtREFBbUQ7SUFDbkQsYUFBYSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxNQUFNLENBQUM7U0FDOUQ7UUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxPQUFPLENBQUM7SUFDMUUsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFzRDtRQUNsRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQy9CLElBQUk7YUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO2dCQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDM0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLEdBQUc7UUFDekIsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBbUVELGNBQWMsQ0FBQyxLQUFrQixFQUFFLElBQVcsRUFBRSxLQUFVO1FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFzQkQsUUFBUSxDQUFDLENBQVE7UUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDOzhHQXhObUIsa0JBQWtCO2tHQUFsQixrQkFBa0Isa2dJQXFFM0IsWUFBWSx1RUFDWixPQUFPLGlJQTFFUixFQUFFOzsyRkFJUSxrQkFBa0I7a0JBTHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxFQUFFO2lCQUNaOzhCQThEcUIsU0FBUztzQkFBNUIsTUFBTTt1QkFBQyxVQUFVO2dCQUNSLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1rQixTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0gsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUNFLEtBQUs7c0JBQXhCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbkNoYW5nZSwgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsIE91dHB1dCxcbiAgU2lnbmFsLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBXcml0YWJsZVNpZ25hbCxcbiAgY29tcHV0ZWQsIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciBhcyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGUgYXMgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgSU9iamVjdExpdGVyYWwsIElSb3dPcHRpb24sIElTdHJpY3RGb3JtR3JvdXAsIFNvcnRUeXBlLCBUYWJsZUNvbCB9IGZyb20gJy4uLy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuL3RhYmxlLXBsYWluLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXSxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFibGVCYXNlQ29tcG9uZW50PFRJdGVtIGV4dGVuZHMgSU9iamVjdExpdGVyYWw+IHtcbiAgcm93T3B0aW9ucyA9IGlucHV0PElSb3dPcHRpb25bXT4oKTtcbiAgY2VudGVyQ2VsbHMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGN1cnZ5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBkaXN0aW5jdCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICAvKipBcHBlYXJzIGFib3ZlIHRoZSB0YWJsZSAqL1xuICBoZWFkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGlzRXhwYW5kYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIFVzZWQgdG8gbmFtZSBtZXRhZGF0YSBvZiB0aGUgdGFibGUgbGlrZSBleHBvcnRlZCBmaWxlcyAqL1xuICBsYWJlbCA9IGlucHV0PHN0cmluZz4oKTtcbiAgaXNEaXNhYmxlZEZ1bmMgPSBpbnB1dDwocm93OiBUSXRlbSkgPT4gYm9vbGVhbj4oKTtcbiAgbm9JdGVtVHh0ID0gaW5wdXQoJ1RoZXJlIGFyZSBubyBpdGVtcycpO1xuICBub3dyYXAgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgZXhwYW5kZWRSb3dUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4+KCk7XG4gIG9yZGVyRGlyZWN0aW9uID0gaW5wdXQ8U29ydFR5cGU+KCdhc2MnKTtcbiAgb3JkZXJGaWVsZCA9IGlucHV0PGtleW9mIFRJdGVtPigpO1xuICBwYWdlU2l6ZSA9IGlucHV0KDEwKTtcbiAgc3RhcnRTZWN0aW9uVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4+KCk7XG4gIGNvbXB1dGVkUGFnZVNpemVPcHRpb25zID0gY29tcHV0ZWQ8bnVtYmVyW10+KCgpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0UGFnZVNpemVPcHRpb25zID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zKCksXG4gICAgICBwYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2VTaXplT3B0aW9ucygpLFxuICAgICAgcmVzdWx0c0xlbmd0aCA9IHRoaXMucmVzdWx0c0xlbmd0aCgpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYWdlU2l6ZU9wdGlvbnM/Lmxlbmd0aCA/IHBhZ2VTaXplT3B0aW9ucyA6IGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdGlvbnMuY29uY2F0KG9wdGlvbnM/Lmxhc3RJdGVtKCkgPiByZXN1bHRzTGVuZ3RoID8gW10gOiBbcmVzdWx0c0xlbmd0aF0pO1xuICB9KTtcbiAgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IHNpZ25hbChbNSwgMTAsIDIwLCA1MCwgMTAwLCA1MDAsIDEwMDAsIDUwMDBdKTtcbiAgcGFnZVNpemVPcHRpb25zID0gaW5wdXQ8bnVtYmVyW10+KCk7XG4gIHBsYWNlU2VsZWN0aW9uQXRSaWdodCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gc3VwcG9ydCBjdXN0b21pemluZyB0aGUgcG9zaXRpb24gb2YgdGhlIHNlbGVjdCBjaGVja2JveGVzLlxuICBzaG93QWRkaXRpb25hbENvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHNob3dFeHBvcnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHNob3dSb3dQb2ludGVyID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzbWFsbGVyRm9udHMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHN0cmlwZWQgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgdGFibGVDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgdXNlU2VsZWN0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGZvcm1TY2hlbWFUb0NvbHVtbnMgPSBpbnB1dDxJRm9ybVNjaGVtYTxJU3RyaWN0Rm9ybUdyb3VwPFRJdGVtPj5bXT4oKTtcbiAgdXBsb2FkU2NoZW1hVG9Db2x1bW5zID0gaW5wdXQ8eyBmaWVsZD86IGtleW9mIFRJdGVtOyBsYWJlbD86IHN0cmluZyB9W10+KCk7XG5cbiAgZGlzcGxheWVkQ29sdW1ucyA9IGlucHV0PFRhYmxlQ29sPFRJdGVtPltdPigpO1xuICBvdmVycmlkZURpc3BsYXllZENvbHVtbnMgPSBzaWduYWw8VGFibGVDb2w8VEl0ZW0+W10+KG51bGwpO1xuICBjb21wdXRlZERpc3BsYXllZENvbHVucyA9IGNvbXB1dGVkPFRhYmxlQ29sPFRJdGVtPltdPigoKSA9PiB7XG4gICAgY29uc3QgZGMgPVxuICAgICAgICBjbG9uZURlZXAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zKCkpPy5tYXAoKGMpID0+IHtcbiAgICAgICAgICBpZiAoIWMudCkge1xuICAgICAgICAgICAgaWYgKGMudHlwZSA9PSAnYnV0dG9uJykgYy50ID0gJ0FjdGlvbic7XG4gICAgICAgICAgICBlbHNlIGlmIChjLnR5cGUgPT0gJ2J0bnMnKSBjLnQgPSAnQWN0aW9ucyc7XG4gICAgICAgICAgICBjLnN0aWNreSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9KSB8fCBbXSxcbiAgICAgIG92ZXJyaWRlQ29sdW1ucyA9IHRoaXMub3ZlcnJpZGVEaXNwbGF5ZWRDb2x1bW5zKCksXG4gICAgICBmb3JtU2NoZW1hVG9Db2x1bW5zID0gdGhpcy5mb3JtU2NoZW1hVG9Db2x1bW5zKCksXG4gICAgICB1cGxvYWRTY2hlbWFUb0NvbHVtbnMgPSB0aGlzLnVwbG9hZFNjaGVtYVRvQ29sdW1ucygpO1xuICAgIGNvbnN0IGNvbHVtbnMgPSAob3ZlcnJpZGVDb2x1bW5zPy5sZW5ndGggPyBvdmVycmlkZUNvbHVtbnMgOiBkYylcbiAgICAgIC5jb25jYXQoZm9ybVNjaGVtYVRvQ29sdW1ucz8ubWFwKCh4KSA9PiAoeyBmOiB4LmZpZWxkIGFzIGtleW9mIFRJdGVtLCB0OiB4LmxhYmVsLCBmb3JtYXR0ZXI6IHgudGFibGVGb3JtYXR0ZXIgfSkpIHx8IFtdKVxuICAgICAgLmNvbmNhdCh1cGxvYWRTY2hlbWFUb0NvbHVtbnM/LmZpbHRlcigoeCkgPT4geC5maWVsZCkubWFwKCh4KSA9PiAoeyBmOiB4LmZpZWxkLCB0OiB4LmxhYmVsIH0pKSB8fCBbXSk7XG4gICAgdGhpcy5hdXRvU2V0Q29sdW1uRm9ybWF0dGVyKGNvbHVtbnMpO1xuICAgIHJldHVybiBjb2x1bW5zO1xuICB9KTtcblxuICBAT3V0cHV0KCdyb3dDbGljaycpIF9yb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VEl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25DaGFuZ2U8YW55Pj4oKTtcbiAgQE91dHB1dCgpIGVtaXRDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGZpZWxkOiBrZXlvZiBUSXRlbTtcbiAgICBpdGVtOiBUSXRlbTtcbiAgICB2YWx1ZTogYm9vbGVhbjtcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZTogTWF0VGFibGU8YW55PjtcbiAgcmVzdWx0c0xlbmd0aDogU2lnbmFsPG51bWJlcj47XG5cbiAgcmF3Q29sdW1ucyA9IGNvbXB1dGVkPHN0cmluZ1tdPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudFMuZ2V0UmF3RmllbGRzKFxuICAgICAgdGhpcy5jb21wdXRlZERpc3BsYXllZENvbHVucygpLFxuICAgICAgdGhpcy5yb3dPcHRpb25zKCk/Lmxlbmd0aCxcbiAgICAgIHRoaXMudXNlU2VsZWN0aW9uKCksXG4gICAgICB0aGlzLnBsYWNlU2VsZWN0aW9uQXRSaWdodCgpLFxuICAgICAgdGhpcy5pc0V4cGFuZGFibGUoKSxcbiAgICApO1xuICB9KTtcbiAgZXhwYW5kZWRFbGVtZW50ID0gc2lnbmFsPFRJdGVtPihudWxsKTtcbiAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFRJdGVtPih0cnVlLCBbXSk7XG4gIGNlbGxGb3JtYXR0ZXJNYXA6IHtcbiAgICBbayBpbiBrZXlvZiBUSXRlbV0/OiB7XG4gICAgICBub0Zvcm1hdD86IGJvb2xlYW47XG4gICAgICBmb3JtYXR0ZXI/OiBUYWJsZUNvbFsnZm9ybWF0dGVyJ107XG4gICAgfTtcbiAgfSA9IHt9O1xuICBwdWJsaWMgdVMgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgdFMgPSBpbmplY3QoVGFibGVTZXJ2aWNlKTtcblxuICBpc0FsbFNlbGVjdGVkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKiBUaGUgbGFiZWwgZm9yIHRoZSBjaGVja2JveCBvbiB0aGUgcGFzc2VkIHJvdyAqL1xuICBjaGVja2JveExhYmVsKHJvdz86IFRJdGVtKTogc3RyaW5nIHtcbiAgICBpZiAoIXJvdykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuaXNBbGxTZWxlY3RlZCgpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSBhbGxgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSByb3cgYDtcbiAgfVxuXG4gIGZpZWxkc0NoYW5nZWQoJGV2ZW50OiB7IG5GaWVsZHM6IFRhYmxlQ29sW107IGFsbEZpZWxkczogVGFibGVDb2xbXSB9KSB7XG4gICAgY29uc3QgY29scyA9ICRldmVudC5uRmllbGRzO1xuICAgIHRoaXMub3ZlcnJpZGVEaXNwbGF5ZWRDb2x1bW5zLnNldChcbiAgICAgIGNvbHNcbiAgICAgICAgLmZpbHRlcigoeCkgPT4gISh4LnR5cGUgPT0gJ2J0bnMnICYmIHguc3RpY2t5KSlcbiAgICAgICAgLmNvbmNhdChjb2xzLmZpbHRlcigoeCkgPT4geC50eXBlID09ICdidG5zJyAmJiB4LnN0aWNreSkpXG4gICAgICAgIC5tYXAoKHgpID0+IHtcbiAgICAgICAgICBpZiAoeC50eXBlID09PSAnbnVtYmVyJykgeC5mb3JtYXR0ZXIgPSB0aGlzLnVTLm1vbmV5UGFyc2VyO1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0QWN0aW9uU3RhdHVzQ2FsbGJhY2soY29sKSB7XG4gICAgcmV0dXJuIChzdGF0ZTogYm9vbGVhbikgPT4gKGNvbC5idG4ubG9hZGluZyA9IHN0YXRlKTtcbiAgfVxuICBkYXRhOiBXcml0YWJsZVNpZ25hbDxUSXRlbVtdPjtcblxuICBhdXRvU2V0Q29sdW1uRm9ybWF0dGVyID0gKGNvbHVtbnM6IFRhYmxlQ29sPFRJdGVtPltdKSA9PiB7XG4gICAgaWYgKCFjb2x1bW5zKSByZXR1cm47XG4gICAgY29uc3QgY2VsbHNUb0NoZWNrRm9yOiB7IFtrIGluIGtleW9mIFRJdGVtXT86IG51bWJlciB9ID0ge307XG4gICAgLy8gY29uc3QgZGF0ZUZpZWxkcyA9IHsgY3JlYXRlZE9uOiAxLCB1cGRhdGVkT246IDEgfTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY29sdW1ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBjb2x1bW5zW2luZGV4XTtcbiAgICAgIGlmIChpdGVtLm5vRm9ybWF0IHx8IGl0ZW0uZm9ybWF0dGVyIHx8IGl0ZW0uZm9ybWF0dGVyUm93KSB7XG4gICAgICAgIHRoaXMuY2VsbEZvcm1hdHRlck1hcFtpdGVtLmZdID0ge1xuICAgICAgICAgIG5vRm9ybWF0OiBpdGVtLm5vRm9ybWF0LFxuICAgICAgICAgIGZvcm1hdHRlcjogaXRlbS5mb3JtYXR0ZXIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2F2ZWRDb25maWcgPSB0aGlzLmNlbGxGb3JtYXR0ZXJNYXBbaXRlbS5mXTtcbiAgICAgIGlmIChzYXZlZENvbmZpZykge1xuICAgICAgICBpdGVtLm5vRm9ybWF0ID0gc2F2ZWRDb25maWcubm9Gb3JtYXQ7XG4gICAgICAgIGl0ZW0uZm9ybWF0dGVyID0gc2F2ZWRDb25maWcuZm9ybWF0dGVyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZW1GaWVsZExvd2VyID0gaXRlbS5mPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChpdGVtRmllbGRMb3dlciA9PSAnaWQnIHx8IGl0ZW1GaWVsZExvd2VyLmluY2x1ZGVzKCd5ZWFyJykgfHwgaXRlbUZpZWxkTG93ZXIuaW5jbHVkZXMoJ2FnZScpKSB7XG4gICAgICAgICAgaXRlbS5ub0Zvcm1hdCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jZWxsRm9ybWF0dGVyTWFwW2l0ZW0uZl0gPSBpdGVtO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNlbGxzVG9DaGVja0ZvcltpdGVtLmZdID0gaW5kZXg7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRhKCkpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZygnY2VsbHNUb0NoZWNrRm9yJywgSlNPTi5zdHJpbmdpZnkoY2VsbHNUb0NoZWNrRm9yKSk7XG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5kYXRhKCkpIHtcbiAgICAgIGlmICghT2JqZWN0LmtleXMoY2VsbHNUb0NoZWNrRm9yKS5sZW5ndGgpIGJyZWFrO1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gY2VsbHNUb0NoZWNrRm9yKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBjb2x1bW5zW2NlbGxzVG9DaGVja0ZvcltrZXldXTtcbiAgICAgICAgY29uc3QgdHlwZW8gPSB0eXBlb2Ygcm93W2tleV07XG4gICAgICAgIGlmICh0eXBlbyA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBjZWxsLmZvcm1hdHRlciA9IHRoaXMudVMueWVzTm9DZWxsRm9ybWF0dGVyO1xuICAgICAgICAgIGRlbGV0ZSBjZWxsc1RvQ2hlY2tGb3Jba2V5XTtcbiAgICAgICAgICB0aGlzLmNlbGxGb3JtYXR0ZXJNYXBba2V5XSA9IGNlbGw7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW8gPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjZWxsLmZvcm1hdHRlciA9IHRoaXMudVMubW9uZXlQYXJzZXI7XG4gICAgICAgICAgZGVsZXRlIGNlbGxzVG9DaGVja0ZvcltrZXldO1xuICAgICAgICAgIHRoaXMuY2VsbEZvcm1hdHRlck1hcFtrZXldID0gY2VsbDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVTLmlzRGF0VGltZVZhbHVlKHJvd1trZXldKSkge1xuICAgICAgICAgIGNlbGwuZm9ybWF0dGVyID0gdGhpcy51Uy5mdWxsRGF0ZVRpbWU7XG4gICAgICAgICAgZGVsZXRlIGNlbGxzVG9DaGVja0ZvcltrZXldO1xuICAgICAgICAgIHRoaXMuY2VsbEZvcm1hdHRlck1hcFtrZXldID0gY2VsbDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVTLmlzRGF0ZVZhbHVlKHJvd1trZXldKSkge1xuICAgICAgICAgIGNlbGwuZm9ybWF0dGVyID0gdGhpcy51Uy5kYXRlRm9ybWF0O1xuICAgICAgICAgIGRlbGV0ZSBjZWxsc1RvQ2hlY2tGb3Jba2V5XTtcbiAgICAgICAgICB0aGlzLmNlbGxGb3JtYXR0ZXJNYXBba2V5XSA9IGNlbGw7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY2VsbHNUb0NoZWNrRm9yKSB7XG4gICAgICB0aGlzLmNlbGxGb3JtYXR0ZXJNYXBba2V5XSA9IHsgbm9Gb3JtYXQ6IHRydWUgfTtcbiAgICB9XG4gIH07XG5cbiAgb3V0cHV0Q2hlY2tib3goZmllbGQ6IGtleW9mIFRJdGVtLCBpdGVtOiBUSXRlbSwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZW1pdENoZWNrYm94LmVtaXQoeyBmaWVsZCwgaXRlbSwgdmFsdWUgfSk7XG4gIH1cblxuICBhbGxUYWJsZUNvbHVtbnMgPSBjb21wdXRlZDxUYWJsZUNvbDxUSXRlbT5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKSxcbiAgICAgIGRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnMoKTtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0YT8ubGVuZ3RoXG4gICAgICAgID8gT2JqZWN0LmtleXMoZGF0YVswXSkubWFwKChrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlID0gZGlzcGxheWVkQ29sdW1ucz8uZmluZCgoeCkgPT4geC5mID09IGspO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgZjogayBhcyBhbnksXG4gICAgICAgICAgICAgIHQ6IGU/LnQgfHwgdGhpcy51Uy5mb3JtYXRGaWVsZChrKSxcbiAgICAgICAgICAgICAgYWN0aXZlOiAhIWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgIDogW11cbiAgICApXG4gICAgICAuZmlsdGVyKCh4KSA9PiAhKHg/LmY/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnaWQnKSAmJiB4Py5mPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMikpXG4gICAgICAuc29ydDIoJ3QnLCB0cnVlKTtcbiAgfSk7XG5cbiAgcm93Q2xpY2soZTogVEl0ZW0pIHtcbiAgICB0aGlzLl9yb3dDbGljay5lbWl0KGUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkSXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkO1xuICB9XG5cbiAgZXh0cmFjdFJvdXRlID0gKGNlbGw6IFRhYmxlQ29sLCByb3c6IFRJdGVtKTogeyByb3V0ZTogc3RyaW5nOyBxdWVyeVBhcmFtczoge30gfSA9PiB7XG4gICAgY29uc3QgW3JvdXRlLCBxcF0gPSBjZWxsLnJvdXRlRm9ybWF0dGVyKHJvdyk/LnNwbGl0KCc/Jyk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSAoY2VsbC5tcXVlcnlQYXJhbXMgPyBjZWxsLm1xdWVyeVBhcmFtcyhyb3cpIDoge30pIHx8IHt9O1xuICAgIGlmIChxcClcbiAgICAgIHFwLnNwbGl0KCcmJykuZm9yRWFjaCgocSkgPT4ge1xuICAgICAgICBjb25zdCBbZmllbGQsIHZhbF0gPSBxLnNwbGl0KCc9Jyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1zW2ZpZWxkXSA9IHZhbDtcbiAgICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHJvdXRlLCBxcCk7XG4gICAgcmV0dXJuIHsgcm91dGUsIHF1ZXJ5UGFyYW1zIH07XG4gIH07XG5cbiAgbmdBZnRlclZpZXdJbml0U2lnbmFsID0gc2lnbmFsPG51bWJlcj4obnVsbCk7XG59XG4iXX0=
|