@cleavelandprice/ngx-lib 4.1.12 → 4.1.16

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.
Files changed (21) hide show
  1. package/active-directory/material/mat-active-directory.api.d.ts +2 -0
  2. package/active-directory/material/model/default-user-chooser-data.d.ts +2 -0
  3. package/active-directory/material/model/default-user-chooser-filter-options.d.ts +2 -0
  4. package/active-directory/material/model/user-chooser-data.d.ts +0 -1
  5. package/active-directory/material/model/user-chooser-filter-options.d.ts +0 -1
  6. package/esm2022/active-directory/material/components/user-chooser/user-chooser.component.mjs +2 -2
  7. package/esm2022/active-directory/material/components/user-form-field/user-form-field.component.mjs +2 -2
  8. package/esm2022/active-directory/material/mat-active-directory.api.mjs +3 -1
  9. package/esm2022/active-directory/material/model/default-user-chooser-data.mjs +14 -0
  10. package/esm2022/active-directory/material/model/default-user-chooser-filter-options.mjs +8 -0
  11. package/esm2022/active-directory/material/model/user-chooser-data.mjs +2 -14
  12. package/esm2022/active-directory/material/model/user-chooser-filter-options.mjs +2 -8
  13. package/esm2022/active-directory/material/model/user-chooser-pre-processing-group.mjs +1 -1
  14. package/esm2022/sharepoint/default-credentials.mjs +6 -0
  15. package/esm2022/sharepoint/services/sharepoint.service.mjs +3 -5
  16. package/fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs +2 -1
  17. package/fesm2022/cleavelandprice-ngx-lib-active-directory-material.mjs.map +1 -1
  18. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs +7 -4
  19. package/fesm2022/cleavelandprice-ngx-lib-sharepoint.mjs.map +1 -1
  20. package/package.json +13 -13
  21. package/sharepoint/default-credentials.d.ts +4 -0
@@ -1,4 +1,6 @@
1
1
  export * from '@cleavelandprice/ngx-lib/active-directory';
2
+ export * from './model/default-user-chooser-data';
3
+ export * from './model/default-user-chooser-filter-options';
2
4
  export * from './model/user-chooser-data';
3
5
  export * from './model/user-chooser-filter-options';
4
6
  export * from './model/user-chooser-mode';
@@ -0,0 +1,2 @@
1
+ import { UserChooserData } from "./user-chooser-data";
2
+ export declare const DefaultUserChooserData: UserChooserData;
@@ -0,0 +1,2 @@
1
+ import { UserChooserFilterOptions } from "./user-chooser-filter-options";
2
+ export declare const DefaultUserChooserFilterOptions: UserChooserFilterOptions;
@@ -22,4 +22,3 @@ export interface UserChooserData {
22
22
  photos?: PhotoItem[];
23
23
  selectableGroupNames?: string[];
24
24
  }
25
- export declare const DefaultUserChooserData: UserChooserData;
@@ -5,4 +5,3 @@ export interface UserChooserFilterOptions {
5
5
  phoneNumber?: boolean;
6
6
  title?: boolean;
7
7
  }
8
- export declare const DefaultUserChooserFilterOptions: UserChooserFilterOptions;
@@ -13,7 +13,7 @@ import { MatInput } from '@angular/material/input';
13
13
  import { MatProgressSpinner } from '@angular/material/progress-spinner';
14
14
  import { MatSlideToggle } from '@angular/material/slide-toggle';
15
15
  import { MatTooltip } from '@angular/material/tooltip';
16
- import { DefaultUserChooserData } from '../../model/user-chooser-data';
16
+ import { DefaultUserChooserData } from '../../model/default-user-chooser-data';
17
17
  import { UserChooserMode } from '../../model/user-chooser-mode';
18
18
  import * as i0 from "@angular/core";
19
19
  import * as i1 from "@angular/forms";
@@ -424,4 +424,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
424
424
  type: ViewChild,
425
425
  args: ['filterInput']
426
426
  }] } });
427
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9jb21wb25lbnRzL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFhLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUs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Z0JBQ1QsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDYixLQUFLLENBQUMsaUJBQWlCLEtBQUssT0FBTyxDQUNwQyxFQUFFLElBQUksQ0FDUjtpQkFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFFLEdBQUcsQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqQixFQUFFLENBQUM7SUFDUCxDQUFDOzhHQXJkVSxvQkFBb0I7a0dBQXBCLG9CQUFvQix1SEFZTCxnQkFBZ0IsNkpDM0Q1QyxteUdBMEZxQiwydENEaEVqQixTQUFTLGlMQUNULGdCQUFnQiw0SEFDaEIsY0FBYyxxTEFDZCxnQkFBZ0IseUdBQ2hCLFlBQVksNExBQ1osT0FBTywySUFDUCxhQUFhLDZGQUNiLFFBQVEsaVVBQ1IsaUJBQWlCLGdFQUNqQixhQUFhLG9NQUNiLGtCQUFrQiwrS0FDbEIsZ0JBQWdCLHVOQUNoQixjQUFjLG1UQUNkLFVBQVUsZ1JBQ1YsbUJBQW1COzsyRkFPVixvQkFBb0I7a0JBekJoQyxTQUFTO2lDQUNJLElBQUksV0FFUDt3QkFDUCxTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osT0FBTzt3QkFDUCxhQUFhO3dCQUNiLFFBQVE7d0JBQ1IsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsbUJBQW1CO3FCQUNwQjs4QkFvQjZCLFdBQVc7c0JBQXhDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5qZWN0LCBPbkluaXQsIFZpZXdDaGlsZCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dBY3Rpb25zLCBNYXREaWFsb2dDbG9zZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdExpc3RJdGVtQXZhdGFyLCBNYXRMaXN0T3B0aW9uLCBNYXRTZWxlY3Rpb25MaXN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEaXJlY3RvcnlTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xuaW1wb3J0IHsgUGhvdG9JdGVtLCBTaGFyZVBvaW50U2VydmljZSB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50JztcblxuaW1wb3J0IHsgTWF0QnV0dG9uLCBNYXRJY29uQnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFNlbGVjdGFibGVHcm91cCB9IGZyb20gJy4uLy4uL21vZGVsL3NlbGVjdGFibGUtZ3JvdXAnO1xuaW1wb3J0IHsgU2VsZWN0YWJsZVVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9zZWxlY3RhYmxlLXVzZXInO1xuaW1wb3J0IHsgRGVmYXVsdFVzZXJDaG9vc2VyRGF0YSwgVXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEnO1xuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSAnLi4vLi4vbW9kZWwvdXNlci1jaG9vc2VyLW1vZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItY2hvb3Nlci5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0RGlhbG9nQWN0aW9ucyxcbiAgICBNYXREaWFsb2dDbG9zZSxcbiAgICBNYXREaWFsb2dDb250ZW50LFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRJY29uLFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgTWF0SW5wdXQsXG4gICAgTWF0TGlzdEl0ZW1BdmF0YXIsXG4gICAgTWF0TGlzdE9wdGlvbixcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXIsXG4gICAgTWF0U2VsZWN0aW9uTGlzdCxcbiAgICBNYXRTbGlkZVRvZ2dsZSxcbiAgICBNYXRUb29sdGlwLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIF0sXG4gIHN0eWxlVXJsczogW1xuICAgICcuL3VzZXItY2hvb3Nlci5jb21wb25lbnQuc2NzcycsXG4gICAgJy4uLy4uLy4uLy4uLy4uL3N0eWxlcy9tYXQtaWNvbi5zY3NzJ1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJDaG9vc2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgI3NlcnZpY2VzID0ge1xuICAgIGRpYWxvZ1JlZjogaW5qZWN0KE1hdERpYWxvZ1JlZjxVc2VyQ2hvb3NlckNvbXBvbmVudD4pLFxuICAgIGFjdGl2ZURpcmVjdG9yeTogaW5qZWN0KEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UpLFxuICAgIHNoYXJlUG9pbnQ6IGluamVjdChTaGFyZVBvaW50U2VydmljZSksXG4gICAgZGF0YTogaW5qZWN0PFVzZXJDaG9vc2VyRGF0YT4oTUFUX0RJQUxPR19EQVRBKVxuICB9O1xuICBfZGF0YSA9IHsuLi5EZWZhdWx0VXNlckNob29zZXJEYXRhLCAuLi50aGlzLiNzZXJ2aWNlcy5kYXRhfTtcbiAgXG4gIC8vI3JlZ2lvbiBGaWVsZHNcbiAgXG4gIC8vQFZpZXdDaGlsZChNYXRTZWxlY3Rpb25MaXN0KSBzZWxlY3Rpb25MaXN0PzogTWF0U2VsZWN0aW9uTGlzdDtcbiAgc2VsZWN0aW9uTGlzdCA9IHZpZXdDaGlsZChNYXRTZWxlY3Rpb25MaXN0KTtcblxuICBAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcpIHNldCBmaWx0ZXJJbnB1dChlbFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pikge1xuICAgIGlmIChlbFJlZikge1xuICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfTtcbiAgLy9maWx0ZXJJbnB1dCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignZmlsdGVySW5wdXQnKTtcblxuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgZmlsdGVyOiBuZXcgRm9ybUNvbnRyb2woKVxuICB9KTtcblxuICBkYXRhU291cmNlPzogTWF0VGFibGVEYXRhU291cmNlPFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwPjtcbiAgcGhvdG9zPzogUGhvdG9JdGVtW107XG4gIGdyb3Vwcz86IFNlbGVjdGFibGVHcm91cFtdOyAvLyBNYXkgb3IgbWF5IG5vdCBnZXQgcG9wdWxhdGVkLCBkZXBlbmRpbmcgb24gY29uZmlnIGRhdGEgc2VudCBpblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gUHJvcGVydGllc1xuICBnZXQgaXNNdWx0aU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLk11bHRpcGxlO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9ucygpOiBNYXRMaXN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkxpc3QoKT8ub3B0aW9ucy5maWx0ZXIobyA9PiBvLnNlbGVjdGVkKSA/PyBbXTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFVzZXJzKCk6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cClbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZT8uZGF0YT8uZmlsdGVyKGQgPT4gZC5zZWxlY3RlZCkgPz8gW107XG4gIH1cblxuICBnZXQgZmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLnZhbHVlLmZpbHRlcjtcbiAgfVxuXG4gIGdldCBhZEdyb3Vwc05lZWRlZCgpOiBib29sZWFuIHtcbiAgICAvLyBJZiBhbnkgYXJlIHRoZXNlIGFyZSB0cnVlLCB0aGVuIHdlIG5lZWQgdG8gcHVsbCBBRCBncm91cHMgZm9yIHVzZSBsYXRlclxuICAgIHJldHVybiAodGhpcy5fZGF0YS5zaG93R3JvdXBNZW1iZXJzaGlwVG9vbHRpcHMgPz8gZmFsc2UpIHx8XG4gICAgICAodGhpcy5fZGF0YS5leGNsdXNpb25zPy5ncm91cHM/Lmxlbmd0aCA/PyAwKSA+IDAgfHxcbiAgICAgICh0aGlzLl9kYXRhLmluY2x1c2lvbnM/Lmdyb3Vwcz8ubGVuZ3RoID8/IDApID4gMCB8fFxuICAgICAgKHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucz8uZ3JvdXBzPy5sZW5ndGggPz8gMCkgPiAwIHx8XG4gICAgICB0aGlzLl9kYXRhLmZpbHRlck9wdGlvbnM/Lmdyb3VwTWVtYmVyc2hpcCB8fFxuICAgICAgKHRoaXMuX2RhdGEuc2VsZWN0YWJsZUdyb3VwTmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDAgfHxcbiAgICAgICh0aGlzLl9kYXRhLmdyb3Vwcz8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI2dldERhdGEoKTtcbiAgICB0aGlzLiNsaXN0ZW5Gb3JGaWx0ZXJDaGFuZ2VzKCk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEV2ZW50c1xuICBsaXN0U2VsZWN0aW9uQ2hhbmdlZChvcHRpb25zOiBNYXRMaXN0T3B0aW9uW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZGF0YS5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuU2luZ2xlICYmXG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggJiZcbiAgICAgIHRoaXMuX2RhdGEuY2xvc2VXaGVuU2VsZWN0aW9uTWFkZVxuICAgICAgKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb246IE1hdExpc3RPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5kYXRhU291cmNlPy5kYXRhXG4gICAgICAuZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gKG9wdGlvbi52YWx1ZSBhcyBTZWxlY3RhYmxlVXNlcikuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgLy8gSWYgd2UgYXJlIGluIHNpbmdsZSB1c2VyIHNlbGVjdGlvbiBtb2RlLCBkZXNlbGVjdCBhbnkgZXhpc3Rpbmcgc2VsZWN0aW9ucyBmaXJzdFxuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlNb2RlICYmIG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2U/LmRhdGFcbiAgICAgICAgICAuZmlsdGVyKHUgPT4gdS5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpICE9PSAob3B0aW9uLnZhbHVlIGFzIFNlbGVjdGFibGVVc2VyKS5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIC5mb3JFYWNoKHUgPT4gdS5zZWxlY3RlZCA9IGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgdXNlci5zZWxlY3RlZCA9IG9wdGlvbi5zZWxlY3RlZDtcbiAgICB9XG4gIH1cblxuICBoaWRlVW5zZWxlY3RlZENoYW5nZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8uc2V0VmFsdWUoc2VsZWN0ZWQgPyAne3NlbGVjdGVkOnRydWV9JyA6IG51bGwpO1xuICB9XG5cbiAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdCgpPy5zZWxlY3RBbGwoKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkxpc3QoKT8ub3B0aW9ucykge1xuICAgICAgdGhpcy5saXN0U2VsZWN0aW9uQ2hhbmdlZCh0aGlzLnNlbGVjdGlvbkxpc3QoKSEub3B0aW9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIGRlc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uTGlzdCgpPy5kZXNlbGVjdEFsbCgpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBVdGlsaXRpZXNcbiAgaXNVc2VyKHVzZXJPckdyb3VwOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAndGl0bGUnIGluIHVzZXJPckdyb3VwO1xuICB9XG4gIGNhc3RVc2VyKHVzZXJPckdyb3VwOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IFNlbGVjdGFibGVVc2VyIHtcbiAgICByZXR1cm4gdXNlck9yR3JvdXAgYXMgU2VsZWN0YWJsZVVzZXI7XG4gIH1cblxuICAjZ2V0RGF0YSgpOiB2b2lkIHtcbiAgICBjb25zdCBvYnNlcnZhYmxlcyQ6IE9ic2VydmFibGU8YW55PltdID0gW1xuICAgICAgdGhpcy5fZGF0YS51c2Vycz8ubGVuZ3RoID9cbiAgICAgICAgLy8gVXNlcnMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fZGF0YS51c2VycykgOlxuICAgICAgICAvLyBVc2VycyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICB0aGlzLiNzZXJ2aWNlcy5hY3RpdmVEaXJlY3RvcnkuZ2V0VXNlcnMoZmFsc2UsIHRoaXMuX2RhdGEuaW5jbHVkZURpc2FibGVkVXNlcnMsIHRoaXMuX2RhdGEucGFyZW50T3UpLFxuXG4gICAgICB0aGlzLl9kYXRhLnBob3Rvcz8ubGVuZ3RoID9cbiAgICAgICAgLy8gUGhvdG9zIHdlcmUgcGFzc2VkIGluXG4gICAgICAgIG9mKHRoaXMuX2RhdGEucGhvdG9zKSA6XG4gICAgICAgIC8vIFBob3RvcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICB0aGlzLiNzZXJ2aWNlcy5zaGFyZVBvaW50LmdldFBob3RvcygpXG4gICAgXTtcblxuICAgIC8vIERvIHdlIG5lZWQgQUQgZ3JvdXBzP1xuICAgIGlmICh0aGlzLmFkR3JvdXBzTmVlZGVkKSB7XG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChcbiAgICAgICAgdGhpcy5fZGF0YS5ncm91cHM/Lmxlbmd0aCA/XG4gICAgICAgICAgLy8gR3JvdXBzIHdlcmUgcGFzc2VkIGluXG4gICAgICAgICAgb2YodGhpcy5fZGF0YS5ncm91cHMpIDpcbiAgICAgICAgICAvLyBHcm91cHMgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgICB0aGlzLiNzZXJ2aWNlcy5hY3RpdmVEaXJlY3RvcnkuZ2V0R3JvdXBzKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMkKVxuICAgICAgLy8uc3Vic2NyaWJlKChbdXNlcnMsIHBob3Rvc10pID0+IHtcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIC8vIE5lZWQgZ3JvdXBzIGluIHBsYWNlIGJlZm9yZSB3ZSBoYW5kbGUgZXhjbHVzaW9ucy9pbmNsdXNpb25zL3ByZS1zZWxlY3Rpb25zXG4gICAgICAgIHRoaXMuZ3JvdXBzID0gdGhpcy5hZEdyb3Vwc05lZWRlZCA/XG4gICAgICAgICAgZGF0YVsyXSA6XG4gICAgICAgICAgbnVsbDtcblxuICAgICAgICBsZXQgdXNlcnMgPSBkYXRhWzBdIGFzIFNlbGVjdGFibGVVc2VyW107XG4gICAgICAgIHVzZXJzLmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZmFsc2UpOyAvLyBJbiBjYXNlIGV4aXN0aW5nIGRhdGEgd2FzIHJlLXVzZWRcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNpbmNsdWRlVXNlcnNCeUFjY291bnROYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNpbmNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy4jaW5jbHVkZVVzZXJzQnlEZXBhcnRtZW50KHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNpbmNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzKTtcblxuICAgICAgICB1c2VycyA9IHRoaXMuI2V4Y2x1ZGVVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI2V4Y2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNleGNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI2V4Y2x1ZGVVc2Vyc0J5VGl0bGUodXNlcnMpO1xuXG4gICAgICAgIHVzZXJzID0gdGhpcy4jcHJlU2VsZWN0VXNlcnNCeUFjY291bnROYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNwcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNwcmVTZWxlY3RVc2Vyc0J5RGVwYXJ0bWVudCh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy4jcHJlU2VsZWN0VXNlcnNCeVRpdGxlKHVzZXJzKTtcblxuICAgICAgICB0aGlzLiNwcmVTZWxlY3RHcm91cHNCeUFjY291bnROYW1lKCk7XG5cbiAgICAgICAgY29uc3QgdXNlcnNBbmRHcm91cHM6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cClbXSA9IFtcbiAgICAgICAgICAuLi51c2Vyc1xuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLl9kYXRhLnNlbGVjdGFibGVHcm91cE5hbWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9kYXRhLnNlbGVjdGFibGVHcm91cE5hbWVzXG4gICAgICAgICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzIS5maW5kKGcgPT4gZy5kaXNwbGF5TmFtZSA9PT0gZ3JvdXBOYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgICB1c2Vyc0FuZEdyb3Vwcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGdyb3VwLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh1c2Vyc0FuZEdyb3Vwcyk7XG4gICAgICBcbiAgICAgICAgdGhpcy5waG90b3MgPSBkYXRhWzFdO1xuXG4gICAgICAgIHRoaXMuI3NldEZpbHRlclByZWRpY2F0ZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBjbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRVc2Vycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNzZXJ2aWNlcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5fZGF0YS5hbGxvd0Nsb3NlV2l0aG91dFNlbGVjdGlvbnMgPyBbXSA6IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3RlZFVzZXJzXG4gICAgICAubWFwKHUgPT4gdGhpcy5fZGF0YS5yZXR1cm5Vc2VyT2JqZWN0cyA/IHUgOiB1LnNBTUFjY291bnROYW1lKTtcblxuICAgIHRoaXMuI3NlcnZpY2VzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLl9kYXRhLm1vZGUgPT09IFVzZXJDaG9vc2VyTW9kZS5NdWx0aXBsZSA/XG4gICAgICB2YWx1ZSA6XG4gICAgICB2YWx1ZVswXVxuICAgICk7XG4gIH1cblxuICBnZXRQaG90byh1c2VyOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmlzVXNlcih1c2VyKSkgeyByZXR1cm47IH1cblxuICAgIHJldHVybiB0aGlzLnBob3Rvcz8uZmluZChwID0+XG4gICAgICAocC5lbXBsb3llZU51bWJlciAmJiBwLmVtcGxveWVlTnVtYmVyLnRvU3RyaW5nKCkgPT09ICh1c2VyIGFzIFNlbGVjdGFibGVVc2VyKS5lbXBsb3llZU51bWJlcikgfHxcbiAgICAgIHAuYWNjb3VudE5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgcC5kaXNwbGF5TmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICBwLnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKClcbiAgICApPy5lbmNvZGVkQWJzVXJsO1xuICB9XG5cbiAgLy8jcmVnaW9uIEV4Y2x1c2lvbnMgLSB3b24ndCBiZSBpbmNsdWRlZCBpbiB0aGUgZGF0YVNvdXJjZSBhdCBhbGxcbiAgI2V4Y2x1ZGVVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLmV4Y2x1c2lvbnM/LmFjY291bnROYW1lc1xuICAgICAgPy5mb3JFYWNoKGFjY291bnROYW1lID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB1c2Vycy5maW5kSW5kZXgodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gICNleGNsdWRlVXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucz8uZ3JvdXBzXG4gICAgICA/LmZvckVhY2goZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XG4gICAgICAgIFxuICAgICAgICBncm91cC5tZW1iZXIuZm9yRWFjaChncm91cE1lbWJlckRuID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICB1c2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgI2V4Y2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucz8uZGVwYXJ0bWVudHNcbiAgICAgID8uZm9yRWFjaChkZXBhcnRtZW50ID0+IHtcbiAgICAgICAgY29uc3QgZXhjbHVkZWRVc2VycyA9IHVzZXJzLmZpbHRlcih1ID0+IHUuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKSA9PT0gZGVwYXJ0bWVudC50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICBleGNsdWRlZFVzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKHVzZXIpO1xuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cblxuICAjZXhjbHVkZVVzZXJzQnlUaXRsZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucz8udGl0bGVzXG4gICAgICA/LmZvckVhY2godGl0bGUgPT4ge1xuICAgICAgICBjb25zdCBleGNsdWRlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHUgPT4gdS50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdGl0bGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIFxuICAgICAgICBleGNsdWRlZFVzZXJzLmZvckVhY2godXNlciA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKHVzZXIpO1xuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEluY2x1c2lvbnMgLSBvbmx5IHRoZXNlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRhdGFTb3VyY2VcbiAgI2luY2x1ZGVVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgICF0aGlzLl9kYXRhLmluY2x1c2lvbnM/LmFjY291bnROYW1lcz8ubGVuZ3RoIHx8IC8vIE5vIGFjY291bnQgaW5jbHVzaW9ucyBzcGVjaWZpZWRcblxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLmFjY291bnROYW1lcy5maW5kKGFjY291bnROYW1lID0+XG4gICAgICAgIGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICAjaW5jbHVkZVVzZXJzQnlEZXBhcnRtZW50KHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgcmV0dXJuIHVzZXJzLmZpbHRlcih1c2VyID0+XG4gICAgICAhdGhpcy5fZGF0YS5pbmNsdXNpb25zPy5kZXBhcnRtZW50cz8ubGVuZ3RoIHx8IC8vIE5vIGRlcGFydG1lbnQgaW5jbHVzaW9ucyBzcGVjaWZpZWRcblxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLmRlcGFydG1lbnRzLmZpbmQoZGVwYXJ0bWVudCA9PlxuICAgICAgICBkZXBhcnRtZW50LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICAjaW5jbHVkZVVzZXJzQnlUaXRsZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHJldHVybiB1c2Vycy5maWx0ZXIodXNlciA9PlxuICAgICAgIXRoaXMuX2RhdGEuaW5jbHVzaW9ucz8udGl0bGVzPy5sZW5ndGggfHwgLy8gTm8gdGl0bGUgaW5jbHVzaW9ucyBzcGVjaWZpZWRcblxuICAgICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLnRpdGxlcy5maW5kKHRpdGxlID0+XG4gICAgICAgIHRpdGxlLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIudGl0bGU/LnRvTG93ZXJDYXNlKClcbiAgICAgICkpO1xuICB9XG5cbiAgI2luY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhLmluY2x1c2lvbnM/Lmdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdXNlcnM7IC8vIE5vIGdyb3VwIGluY2x1c2lvbnMgc3BlY2lmaWVkXG4gICAgfVxuXG4gICAgLy8gQ2hlYXRpbmcgYSBiaXQgYW5kIGxldmVyYWdpbmcgdGhlICdzZWxlY3RlZCcgcHJvcGVydHkgdG8ga2VlcCB0cmFjayBvZiB3aG8gc2hvdWxkIGJlIGluY2x1ZGVkXG4gICAgLy8gU2luY2UgaW5jbHVzaW9ucyBoYXBwZW4gYmVmb3IgcHJlLXNlbGVjdGlvbnMsIHdlIGNhbiBkbyB0aGF0LCBhcyBsb25nIGFzIHdlIHNldCAnc2VsZWN0ZWQnIGJhY2sgdG8gZmFsc2Ugd2hlbiB3ZSdyZSBkb25lXG4gICAgdGhpcy5fZGF0YS5pbmNsdXNpb25zLmdyb3Vwc1xuICAgICAgLmZvckVhY2goZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlcnNcbiAgICAgICAgICAuZmlsdGVyKHVzZXIgPT5cbiAgICAgICAgICAgICAgZ3JvdXAubWVtYmVyLmZpbmQoZ3JvdXBNZW1iZXJEbiA9PiBncm91cE1lbWJlckRuID09PSB1c2VyLmRpc3Rpbmd1aXNoZWROYW1lKVxuICAgICAgICAgIClcbiAgICAgICAgICAuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgYWxsIG9mIHRoZSBhcHByb3ByaWF0ZSB1c2VycyBzaG91bGQgaGF2ZSAnc2VsZWN0ZWQnIHNldCB0byB0cnVlXG4gICAgY29uc3Qgc2VsZWN0ZWRVc2VycyA9IHVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuc2VsZWN0ZWQpOyAvLyBTdWJzZXQgb2YgdGhlIG9yaWdpbmFsIGxpc3RcbiAgICAvLyBSZXNldCAnc2VsZWN0ZWQnIHRvIGZhbHNlLCBhbmQgcmV0dXJuXG4gICAgc2VsZWN0ZWRVc2Vycy5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IGZhbHNlKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRVc2VycztcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gIFByZS1TZWxlY3Rpb25zXG4gICNwcmVTZWxlY3RVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLnByZVNlbGVjdGlvbnM/LmFjY291bnROYW1lc1xuICAgICAgPy5mb3JFYWNoKGFjY291bnROYW1lID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIXVzZXIpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlci5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gICNwcmVTZWxlY3RHcm91cHNCeUFjY291bnROYW1lKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucz8uYWNjb3VudE5hbWVzXG4gICAgICA/LmZvckVhY2goYWNjb3VudE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSBhY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICBncm91cC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB9KTs7XG4gIH1cblxuICAjcHJlU2VsZWN0VXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLnByZVNlbGVjdGlvbnM/LmRlcGFydG1lbnRzXG4gICAgICA/LmZvckVhY2goZGVwYXJ0bWVudCA9PlxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LmRlcGFydG1lbnQ/LnRvTG93ZXJDYXNlKCkgPT09IGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSB0cnVlKVxuICAgICAgKTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gICNwcmVTZWxlY3RVc2Vyc0J5VGl0bGUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICB0aGlzLl9kYXRhLnByZVNlbGVjdGlvbnM/LnRpdGxlc1xuICAgICAgPy5mb3JFYWNoKHRpdGxlID0+XG4gICAgICAgIHVzZXJzXG4gICAgICAgICAgLmZpbHRlcih1ID0+IHUudGl0bGU/LnRvTG93ZXJDYXNlKCkgPT09IHRpdGxlLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgLmZvckVhY2godXNlciA9PiB1c2VyLnNlbGVjdGVkID0gdHJ1ZSlcbiAgICAgICk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cblxuICAjcHJlU2VsZWN0VXNlcnNCeUdyb3VwTmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucz8uZ3JvdXBzXG4gICAgICA/LmZvckVhY2goZ3JvdXBOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3Vwcz8uZmluZChnID0+IGcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghZ3JvdXApIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgZ3JvdXAubWVtYmVyLmZvckVhY2goZ3JvdXBNZW1iZXJEbiA9PiB7XG4gICAgICAgICAgY29uc3QgdXNlciA9IHVzZXJzLmZpbmQodSA9PiB1LmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cE1lbWJlckRuKTtcbiAgICAgICAgICBpZiAoIXVzZXIpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgICB1c2VyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgXG4gICNzZXRGaWx0ZXJQcmVkaWNhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKHVzZXI6IChTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCksIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoZmlsdGVyID09PSAne3NlbGVjdGVkOnRydWV9Jykge1xuICAgICAgICByZXR1cm4gdXNlci5zZWxlY3RlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChmaWx0ZXIsICdpJyk7IC8vIENhc2UtaW5zZW5zaXRpdmVcbiAgICAgICAgbGV0IG1hdGNoID0gZmFsc2U7IC8vIFRoZSBlbmQgcmVzdWx0IC0gd2hldGhlciBvciBub3QgYSBlbXBsb3llZSBtYXRjaGVzIHRoZSBmaWx0ZXJcblxuICAgICAgICBjb25zdCBmaWx0ZXJQcm9wZXJ0aWVzID0gWyAnZGlzcGxheU5hbWUnIF07XG4gICAgICAgIGlmICh0aGlzLl9kYXRhLmZpbHRlck9wdGlvbnM/LmFjY291bnROYW1lKSB7XG4gICAgICAgICAgZmlsdGVyUHJvcGVydGllcy5wdXNoKCdzQU1BY2NvdW50TmFtZScpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucz8udGl0bGUpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RpdGxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucz8uZGVwYXJ0bWVudCkge1xuICAgICAgICAgIGZpbHRlclByb3BlcnRpZXMucHVzaCgnZGVwYXJ0bWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9kYXRhLmZpbHRlck9wdGlvbnM/LnBob25lTnVtYmVyKSB7XG4gICAgICAgICAgZmlsdGVyUHJvcGVydGllcy5wdXNoKCd0ZWxlcGhvbmVOdW1iZXInKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgLy8gTWF0Y2ggb24gdGhlIHByb3BlcnRpZXMgY29uZmlndXJlZCBhYm92ZVxuICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzXG4gICAgICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaWYgKHVzZXJbZmllbGRdICYmIHVzZXJbZmllbGRdLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICAgICAgICBtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gIFxuICAgICAgICAvLyBNYXRjaCBvbiBncm91cCBtZW1iZXJzaGlwIChncm91cCBuYW1lKVxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zPy5ncm91cE1lbWJlcnNoaXApIHtcbiAgICAgICAgICB1c2VyLm1lbWJlck9mLmZvckVhY2goZ3JvdXBEbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGdyb3VwID0+IGdyb3VwLmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cERuICYmIGdyb3VwLm5hbWUubWF0Y2gocmVnZXgpKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgI2xpc3RlbkZvckZpbHRlckNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgyNTApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGF0YVNvdXJjZSEuZmlsdGVyID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlLmZpbHRlcj8udHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgdG9vbHRpcCh1c2VyOiBTZWxlY3RhYmxlVXNlciB8IFNlbGVjdGFibGVHcm91cCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEuc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzID9cbiAgICAgIHVzZXIubWVtYmVyT2ZcbiAgICAgICAgLm1hcChncm91cERuID0+XG4gICAgICAgICAgdGhpcy5ncm91cHNcbiAgICAgICAgICAgID8uZmluZChncm91cCA9PlxuICAgICAgICAgICAgICBncm91cC5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBEblxuICAgICAgICAgICAgKT8ubmFtZVxuICAgICAgICAgIClcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSEgPiBiISA/IDEgOiAtMSlcbiAgICAgICAgICAuam9pbignXFxuJykgOlxuICAgICAgJyc7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59IiwiPGRpdiBpZD1cImRpYWxvZy10aXRsZVwiPlxuICA8aDIgbWF0LWRpYWxvZy10aXRsZT57eyBfZGF0YS50aXRsZSB9fTwvaDI+XG5cbiAgPGRpdiBpZD1cIm51bS1zZWxlY3RlZFwiPlxuICAgIHt7IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggfX0gc2VsZWN0ZWRcbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1kaWFsb2ctY29udGVudD5cbiAgQGlmIChkYXRhU291cmNlICYmIHBob3Rvcykge1xuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxuICAgICAgQGlmIChkYXRhU291cmNlKSB7XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBmb3JtQ29udHJvbE5hbWU9XCJmaWx0ZXJcIiAjZmlsdGVySW5wdXQ+XG4gICAgICAgICAgQGlmIChmaWx0ZXJGb3JtLnZhbHVlLmZpbHRlcikge1xuICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJmaWx0ZXJGb3JtLmdldCgnZmlsdGVyJyk/LnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIH1cbiAgICA8L2Zvcm0+XG4gICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBbbXVsdGlwbGVdPVwiaXNNdWx0aU1vZGVcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJsaXN0U2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQub3B0aW9ucylcIj5cbiAgICAgIEBmb3IgKHVzZXIgb2YgZGF0YVNvdXJjZS5maWx0ZXJlZERhdGE7IHRyYWNrIHVzZXIpIHtcbiAgICAgICAgPG1hdC1saXN0LW9wdGlvbiBbdmFsdWVdPVwidXNlclwiIFtzZWxlY3RlZF09XCJ1c2VyLnNlbGVjdGVkXCJcbiAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib3B0aW9uU2VsZWN0aW9uQ2hhbmdlZChvcHRpb24pXCIgI29wdGlvbj5cbiAgICAgICAgICBAaWYgKGdldFBob3RvKHVzZXIpKSB7XG4gICAgICAgICAgICA8aW1nIG1hdExpc3RJdGVtQXZhdGFyIGFsdD1cIlwiIFtzcmNdPVwiZ2V0UGhvdG8odXNlcilcIj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUF2YXRhciBjbGFzcz1cIm5vLXBob3RvXCJcbiAgICAgICAgICAgICAgW2ZvbnRJY29uXT1cImlzVXNlcih1c2VyKSA/ICdhY2NvdW50X2NpcmNsZScgOiAnZ3JvdXAnXCIvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlclwiPlxuICAgICAgICAgICAgPGRpdiBbbWF0VG9vbHRpcF09XCJ0b29sdGlwKHVzZXIpXCIgY2xhc3M9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICAgICAge3sgdXNlci5kaXNwbGF5TmFtZSB9fVxuICAgICAgICAgICAgICBAaWYgKGlzVXNlcih1c2VyKSAmJiBfZGF0YS5zaG93UGhvbmUgJiYgY2FzdFVzZXIodXNlcikudGVsZXBob25lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgPGRpdj57eyBjYXN0VXNlcih1c2VyKS50ZWxlcGhvbmVOdW1iZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGlzVXNlcih1c2VyKSkge1xuICAgICAgICAgICAgICA8ZGl2Pnt7IGNhc3RVc2VyKHVzZXIpLmRlcGFydG1lbnQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgY2FzdFVzZXIodXNlcikudGl0bGUgfX08L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICB9XG4gICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG4gIH0gQGVsc2Uge1xuICAgIDxkaXY+XG4gICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjUwXCIvPlxuICAgICAgPGgyIGlkPVwic3Bpbm5lci1tZXNzYWdlXCI+R2V0dGluZyB1c2VycyBhbmQgcGhvdG9zLi4uPC9oMj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG5cbjxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gIEBpZiAoZGF0YVNvdXJjZSAmJiBwaG90b3MpIHtcbiAgICBAaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIChjaGFuZ2UpPVwiaGlkZVVuc2VsZWN0ZWRDaGFuZ2VkKCRldmVudC5jaGVja2VkKVwiPlxuICAgICAgICBIaWRlIFVuc2VsZWN0ZWRcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICB9XG4gICAgQGlmIChpc011bHRpTW9kZSkge1xuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2VsZWN0QWxsKClcIlxuICAgICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cInNlbGVjdF9hbGxcIi8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoaXNNdWx0aU1vZGUgJiYgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xlYXJfYWxsXCIvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+Q2xlYXIgQWxsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoaXNNdWx0aU1vZGUgfHwgIV9kYXRhLmNsb3NlV2hlblNlbGVjdGlvbk1hZGUpIHtcbiAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImNsb3NlKClcIiBtYXRUb29sdGlwPVwiQWNjZXB0IHlvdXIgc2VsZWN0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFfZGF0YS5hbGxvd0Nsb3NlV2l0aG91dFNlbGVjdGlvbnMgJiYgIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2hlY2tcIi8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5Pazwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgfVxuXG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJ3YXJuXCIgbWF0LWRpYWxvZy1jbG9zZSBtYXRUb29sdGlwPVwiQ2xvc2UgdGhpcyB3aW5kb3dcIj5cbiAgICA8bWF0LWljb24gZm9udEljb249XCJjbG9zZVwiLz5cbiAgICA8c3BhbiBjbGFzcz1cImhpZGUtbW9iaWxlXCI+Q2FuY2VsPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPiJdfQ==
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9jb21wb25lbnRzL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFhLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUs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QkFDVCxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNiLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLENBQ3BDLEVBQUUsSUFBSSxDQUNSO2lCQUNBLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLEVBQUUsQ0FBQztJQUNQLENBQUM7OEdBcmRVLG9CQUFvQjtrR0FBcEIsb0JBQW9CLHVIQVlMLGdCQUFnQiw2SkM1RDVDLG15R0EwRnFCLDJ0Q0QvRGpCLFNBQVMsaUxBQ1QsZ0JBQWdCLDRIQUNoQixjQUFjLHFMQUNkLGdCQUFnQix5R0FDaEIsWUFBWSw0TEFDWixPQUFPLDJJQUNQLGFBQWEsNkZBQ2IsUUFBUSxpVUFDUixpQkFBaUIsZ0VBQ2pCLGFBQWEsb01BQ2Isa0JBQWtCLCtLQUNsQixnQkFBZ0IsdU5BQ2hCLGNBQWMsbVRBQ2QsVUFBVSxnUkFDVixtQkFBbUI7OzJGQU9WLG9CQUFvQjtrQkF6QmhDLFNBQVM7aUNBQ0ksSUFBSSxXQUVQO3dCQUNQLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsVUFBVTt3QkFDVixtQkFBbUI7cUJBQ3BCOzhCQW9CNkIsV0FBVztzQkFBeEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIE9uSW5pdCwgVmlld0NoaWxkLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0TGlzdEl0ZW1BdmF0YXIsIE1hdExpc3RPcHRpb24sIE1hdFNlbGVjdGlvbkxpc3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeSc7XG5pbXBvcnQgeyBQaG90b0l0ZW0sIFNoYXJlUG9pbnRTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL3NoYXJlcG9pbnQnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24sIE1hdEljb25CdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRGVmYXVsdFVzZXJDaG9vc2VyRGF0YSB9IGZyb20gJy4uLy4uL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWRhdGEnO1xuaW1wb3J0IHsgU2VsZWN0YWJsZUdyb3VwIH0gZnJvbSAnLi4vLi4vbW9kZWwvc2VsZWN0YWJsZS1ncm91cCc7XG5pbXBvcnQgeyBTZWxlY3RhYmxlVXNlciB9IGZyb20gJy4uLy4uL21vZGVsL3NlbGVjdGFibGUtdXNlcic7XG5pbXBvcnQgeyBVc2VyQ2hvb3NlckRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbC91c2VyLWNob29zZXItZGF0YSc7XG5pbXBvcnQgeyBVc2VyQ2hvb3Nlck1vZGUgfSBmcm9tICcuLi8uLi9tb2RlbC91c2VyLWNob29zZXItbW9kZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5odG1sJyxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvbixcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdEljb24sXG4gICAgTWF0SWNvbkJ1dHRvbixcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRMaXN0SXRlbUF2YXRhcixcbiAgICBNYXRMaXN0T3B0aW9uLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lcixcbiAgICBNYXRTZWxlY3Rpb25MaXN0LFxuICAgIE1hdFNsaWRlVG9nZ2xlLFxuICAgIE1hdFRvb2x0aXAsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgXSxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vdXNlci1jaG9vc2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgICAnLi4vLi4vLi4vLi4vLi4vc3R5bGVzL21hdC1pY29uLnNjc3MnXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVXNlckNob29zZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAjc2VydmljZXMgPSB7XG4gICAgZGlhbG9nUmVmOiBpbmplY3QoTWF0RGlhbG9nUmVmPFVzZXJDaG9vc2VyQ29tcG9uZW50PiksXG4gICAgYWN0aXZlRGlyZWN0b3J5OiBpbmplY3QoQWN0aXZlRGlyZWN0b3J5U2VydmljZSksXG4gICAgc2hhcmVQb2ludDogaW5qZWN0KFNoYXJlUG9pbnRTZXJ2aWNlKSxcbiAgICBkYXRhOiBpbmplY3Q8VXNlckNob29zZXJEYXRhPihNQVRfRElBTE9HX0RBVEEpXG4gIH07XG4gIF9kYXRhID0gey4uLkRlZmF1bHRVc2VyQ2hvb3NlckRhdGEsIC4uLnRoaXMuI3NlcnZpY2VzLmRhdGF9O1xuICBcbiAgLy8jcmVnaW9uIEZpZWxkc1xuICBcbiAgLy9AVmlld0NoaWxkKE1hdFNlbGVjdGlvbkxpc3QpIHNlbGVjdGlvbkxpc3Q/OiBNYXRTZWxlY3Rpb25MaXN0O1xuICBzZWxlY3Rpb25MaXN0ID0gdmlld0NoaWxkKE1hdFNlbGVjdGlvbkxpc3QpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcklucHV0Jykgc2V0IGZpbHRlcklucHV0KGVsUmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgaWYgKGVsUmVmKSB7XG4gICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuICAvL2ZpbHRlcklucHV0ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdmaWx0ZXJJbnB1dCcpO1xuXG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBmaWx0ZXI6IG5ldyBGb3JtQ29udHJvbCgpXG4gIH0pO1xuXG4gIGRhdGFTb3VyY2U/OiBNYXRUYWJsZURhdGFTb3VyY2U8U2VsZWN0YWJsZVVzZXIgfCBTZWxlY3RhYmxlR3JvdXA+O1xuICBwaG90b3M/OiBQaG90b0l0ZW1bXTtcbiAgZ3JvdXBzPzogU2VsZWN0YWJsZUdyb3VwW107IC8vIE1heSBvciBtYXkgbm90IGdldCBwb3B1bGF0ZWQsIGRlcGVuZGluZyBvbiBjb25maWcgZGF0YSBzZW50IGluXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXG4gIGdldCBpc011bHRpTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuTXVsdGlwbGU7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCk6IE1hdExpc3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTGlzdCgpPy5vcHRpb25zLmZpbHRlcihvID0+IG8uc2VsZWN0ZWQpID8/IFtdO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVXNlcnMoKTogKFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlPy5kYXRhPy5maWx0ZXIoZCA9PiBkLnNlbGVjdGVkKSA/PyBbXTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0udmFsdWUuZmlsdGVyO1xuICB9XG5cbiAgZ2V0IGFkR3JvdXBzTmVlZGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIElmIGFueSBhcmUgdGhlc2UgYXJlIHRydWUsIHRoZW4gd2UgbmVlZCB0byBwdWxsIEFEIGdyb3VwcyBmb3IgdXNlIGxhdGVyXG4gICAgcmV0dXJuICh0aGlzLl9kYXRhLnNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwcyA/PyBmYWxzZSkgfHxcbiAgICAgICh0aGlzLl9kYXRhLmV4Y2x1c2lvbnM/Lmdyb3Vwcz8ubGVuZ3RoID8/IDApID4gMCB8fFxuICAgICAgKHRoaXMuX2RhdGEuaW5jbHVzaW9ucz8uZ3JvdXBzPy5sZW5ndGggPz8gMCkgPiAwIHx8XG4gICAgICAodGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zPy5ncm91cHM/Lmxlbmd0aCA/PyAwKSA+IDAgfHxcbiAgICAgIHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucz8uZ3JvdXBNZW1iZXJzaGlwIHx8XG4gICAgICAodGhpcy5fZGF0YS5zZWxlY3RhYmxlR3JvdXBOYW1lcz8ubGVuZ3RoID8/IDApID4gMCB8fFxuICAgICAgKHRoaXMuX2RhdGEuZ3JvdXBzPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jZ2V0RGF0YSgpO1xuICAgIHRoaXMuI2xpc3RlbkZvckZpbHRlckNoYW5nZXMoKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRXZlbnRzXG4gIGxpc3RTZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbnM6IE1hdExpc3RPcHRpb25bXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kYXRhLm1vZGUgPT09IFVzZXJDaG9vc2VyTW9kZS5TaW5nbGUgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCAmJlxuICAgICAgdGhpcy5fZGF0YS5jbG9zZVdoZW5TZWxlY3Rpb25NYWRlXG4gICAgICApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBvcHRpb25TZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbjogTWF0TGlzdE9wdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmRhdGFTb3VyY2U/LmRhdGFcbiAgICAgIC5maW5kKHUgPT4gdS5zQU1BY2NvdW50TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAob3B0aW9uLnZhbHVlIGFzIFNlbGVjdGFibGVVc2VyKS5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpKTtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICAvLyBJZiB3ZSBhcmUgaW4gc2luZ2xlIHVzZXIgc2VsZWN0aW9uIG1vZGUsIGRlc2VsZWN0IGFueSBleGlzdGluZyBzZWxlY3Rpb25zIGZpcnN0XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aU1vZGUgJiYgb3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZT8uZGF0YVxuICAgICAgICAgIC5maWx0ZXIodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgIT09IChvcHRpb24udmFsdWUgYXMgU2VsZWN0YWJsZVVzZXIpLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgLmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICB1c2VyLnNlbGVjdGVkID0gb3B0aW9uLnNlbGVjdGVkO1xuICAgIH1cbiAgfVxuXG4gIGhpZGVVbnNlbGVjdGVkQ2hhbmdlZChzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2ZpbHRlcicpPy5zZXRWYWx1ZShzZWxlY3RlZCA/ICd7c2VsZWN0ZWQ6dHJ1ZX0nIDogbnVsbCk7XG4gIH1cblxuICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25MaXN0KCk/LnNlbGVjdEFsbCgpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTGlzdCgpPy5vcHRpb25zKSB7XG4gICAgICB0aGlzLmxpc3RTZWxlY3Rpb25DaGFuZ2VkKHRoaXMuc2VsZWN0aW9uTGlzdCgpIS5vcHRpb25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25MaXN0KCk/LmRlc2VsZWN0QWxsKCk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xuICBpc1VzZXIodXNlck9yR3JvdXA6IFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICd0aXRsZScgaW4gdXNlck9yR3JvdXA7XG4gIH1cbiAgY2FzdFVzZXIodXNlck9yR3JvdXA6IFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKTogU2VsZWN0YWJsZVVzZXIge1xuICAgIHJldHVybiB1c2VyT3JHcm91cCBhcyBTZWxlY3RhYmxlVXNlcjtcbiAgfVxuXG4gICNnZXREYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IG9ic2VydmFibGVzJDogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXG4gICAgICB0aGlzLl9kYXRhLnVzZXJzPy5sZW5ndGggP1xuICAgICAgICAvLyBVc2VycyB3ZXJlIHBhc3NlZCBpblxuICAgICAgICBvZih0aGlzLl9kYXRhLnVzZXJzKSA6XG4gICAgICAgIC8vIFVzZXJzIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuI3NlcnZpY2VzLmFjdGl2ZURpcmVjdG9yeS5nZXRVc2VycyhmYWxzZSwgdGhpcy5fZGF0YS5pbmNsdWRlRGlzYWJsZWRVc2VycywgdGhpcy5fZGF0YS5wYXJlbnRPdSksXG5cbiAgICAgIHRoaXMuX2RhdGEucGhvdG9zPy5sZW5ndGggP1xuICAgICAgICAvLyBQaG90b3Mgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fZGF0YS5waG90b3MpIDpcbiAgICAgICAgLy8gUGhvdG9zIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuI3NlcnZpY2VzLnNoYXJlUG9pbnQuZ2V0UGhvdG9zKClcbiAgICBdO1xuXG4gICAgLy8gRG8gd2UgbmVlZCBBRCBncm91cHM/XG4gICAgaWYgKHRoaXMuYWRHcm91cHNOZWVkZWQpIHtcbiAgICAgIG9ic2VydmFibGVzJC5wdXNoKFxuICAgICAgICB0aGlzLl9kYXRhLmdyb3Vwcz8ubGVuZ3RoID9cbiAgICAgICAgICAvLyBHcm91cHMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgICBvZih0aGlzLl9kYXRhLmdyb3VwcykgOlxuICAgICAgICAgIC8vIEdyb3VwcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICAgIHRoaXMuI3NlcnZpY2VzLmFjdGl2ZURpcmVjdG9yeS5nZXRHcm91cHMoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3JrSm9pbihvYnNlcnZhYmxlcyQpXG4gICAgICAvLy5zdWJzY3JpYmUoKFt1c2VycywgcGhvdG9zXSkgPT4ge1xuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgLy8gTmVlZCBncm91cHMgaW4gcGxhY2UgYmVmb3JlIHdlIGhhbmRsZSBleGNsdXNpb25zL2luY2x1c2lvbnMvcHJlLXNlbGVjdGlvbnNcbiAgICAgICAgdGhpcy5ncm91cHMgPSB0aGlzLmFkR3JvdXBzTmVlZGVkID9cbiAgICAgICAgICBkYXRhWzJdIDpcbiAgICAgICAgICBudWxsO1xuXG4gICAgICAgIGxldCB1c2VycyA9IGRhdGFbMF0gYXMgU2VsZWN0YWJsZVVzZXJbXTtcbiAgICAgICAgdXNlcnMuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7IC8vIEluIGNhc2UgZXhpc3RpbmcgZGF0YSB3YXMgcmUtdXNlZFxuICAgICAgICB1c2VycyA9IHRoaXMuI2luY2x1ZGVVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI2luY2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNpbmNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI2luY2x1ZGVVc2Vyc0J5VGl0bGUodXNlcnMpO1xuXG4gICAgICAgIHVzZXJzID0gdGhpcy4jZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy4jZXhjbHVkZVVzZXJzQnlHcm91cE5hbWUodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI2V4Y2x1ZGVVc2Vyc0J5RGVwYXJ0bWVudCh1c2Vycyk7XG4gICAgICAgIHVzZXJzID0gdGhpcy4jZXhjbHVkZVVzZXJzQnlUaXRsZSh1c2Vycyk7XG5cbiAgICAgICAgdXNlcnMgPSB0aGlzLiNwcmVTZWxlY3RVc2Vyc0J5QWNjb3VudE5hbWUodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI3ByZVNlbGVjdFVzZXJzQnlHcm91cE5hbWUodXNlcnMpO1xuICAgICAgICB1c2VycyA9IHRoaXMuI3ByZVNlbGVjdFVzZXJzQnlEZXBhcnRtZW50KHVzZXJzKTtcbiAgICAgICAgdXNlcnMgPSB0aGlzLiNwcmVTZWxlY3RVc2Vyc0J5VGl0bGUodXNlcnMpO1xuXG4gICAgICAgIHRoaXMuI3ByZVNlbGVjdEdyb3Vwc0J5QWNjb3VudE5hbWUoKTtcblxuICAgICAgICBjb25zdCB1c2Vyc0FuZEdyb3VwczogKFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKVtdID0gW1xuICAgICAgICAgIC4uLnVzZXJzXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuc2VsZWN0YWJsZUdyb3VwTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuX2RhdGEuc2VsZWN0YWJsZUdyb3VwTmFtZXNcbiAgICAgICAgICAgIC5mb3JFYWNoKGdyb3VwTmFtZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHMhLmZpbmQoZyA9PiBnLmRpc3BsYXlOYW1lID09PSBncm91cE5hbWUpO1xuXG4gICAgICAgICAgICAgIGlmIChncm91cCkge1xuICAgICAgICAgICAgICAgIHVzZXJzQW5kR3JvdXBzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZ3JvdXAuc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHVzZXJzQW5kR3JvdXBzKTtcbiAgICAgIFxuICAgICAgICB0aGlzLnBob3RvcyA9IGRhdGFbMV07XG5cbiAgICAgICAgdGhpcy4jc2V0RmlsdGVyUHJlZGljYXRlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFVzZXJzPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuI3NlcnZpY2VzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLl9kYXRhLmFsbG93Q2xvc2VXaXRob3V0U2VsZWN0aW9ucyA/IFtdIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGVkVXNlcnNcbiAgICAgIC5tYXAodSA9PiB0aGlzLl9kYXRhLnJldHVyblVzZXJPYmplY3RzID8gdSA6IHUuc0FNQWNjb3VudE5hbWUpO1xuXG4gICAgdGhpcy4jc2VydmljZXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuX2RhdGEubW9kZSA9PT0gVXNlckNob29zZXJNb2RlLk11bHRpcGxlID9cbiAgICAgIHZhbHVlIDpcbiAgICAgIHZhbHVlWzBdXG4gICAgKTtcbiAgfVxuXG4gIGdldFBob3RvKHVzZXI6IFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuaXNVc2VyKHVzZXIpKSB7IHJldHVybjsgfVxuXG4gICAgcmV0dXJuIHRoaXMucGhvdG9zPy5maW5kKHAgPT5cbiAgICAgIChwLmVtcGxveWVlTnVtYmVyICYmIHAuZW1wbG95ZWVOdW1iZXIudG9TdHJpbmcoKSA9PT0gKHVzZXIgYXMgU2VsZWN0YWJsZVVzZXIpLmVtcGxveWVlTnVtYmVyKSB8fFxuICAgICAgcC5hY2NvdW50TmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICBwLmRpc3BsYXlOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIHAudGl0bGU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk/LmVuY29kZWRBYnNVcmw7XG4gIH1cblxuICAvLyNyZWdpb24gRXhjbHVzaW9ucyAtIHdvbid0IGJlIGluY2x1ZGVkIGluIHRoZSBkYXRhU291cmNlIGF0IGFsbFxuICAjZXhjbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEuZXhjbHVzaW9ucz8uYWNjb3VudE5hbWVzXG4gICAgICA/LmZvckVhY2goYWNjb3VudE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgI2V4Y2x1ZGVVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zPy5ncm91cHNcbiAgICAgID8uZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cbiAgICAgICAgXG4gICAgICAgIGdyb3VwLm1lbWJlci5mb3JFYWNoKGdyb3VwTWVtYmVyRG4gPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuZmluZEluZGV4KHUgPT4gdS5kaXN0aW5ndWlzaGVkTmFtZSA9PT0gZ3JvdXBNZW1iZXJEbik7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgeyByZXR1cm47IH1cblxuICAgICAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gdXNlcnM7XG4gIH1cblxuICAjZXhjbHVkZVVzZXJzQnlEZXBhcnRtZW50KHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zPy5kZXBhcnRtZW50c1xuICAgICAgPy5mb3JFYWNoKGRlcGFydG1lbnQgPT4ge1xuICAgICAgICBjb25zdCBleGNsdWRlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHUgPT4gdS5kZXBhcnRtZW50Py50b0xvd2VyQ2FzZSgpID09PSBkZXBhcnRtZW50LnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgIGV4Y2x1ZGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmluZGV4T2YodXNlcik7XG4gICAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gICNleGNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5leGNsdXNpb25zPy50aXRsZXNcbiAgICAgID8uZm9yRWFjaCh0aXRsZSA9PiB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVXNlcnMgPSB1c2Vycy5maWx0ZXIodSA9PiB1LnRpdGxlPy50b0xvd2VyQ2FzZSgpID09PSB0aXRsZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgXG4gICAgICAgIGV4Y2x1ZGVkVXNlcnMuZm9yRWFjaCh1c2VyID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHVzZXJzLmluZGV4T2YodXNlcik7XG4gICAgICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSW5jbHVzaW9ucyAtIG9ubHkgdGhlc2Ugd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZGF0YVNvdXJjZVxuICAjaW5jbHVkZVVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHJldHVybiB1c2Vycy5maWx0ZXIodXNlciA9PlxuICAgICAgIXRoaXMuX2RhdGEuaW5jbHVzaW9ucz8uYWNjb3VudE5hbWVzPy5sZW5ndGggfHwgLy8gTm8gYWNjb3VudCBpbmNsdXNpb25zIHNwZWNpZmllZFxuXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuYWNjb3VudE5hbWVzLmZpbmQoYWNjb3VudE5hbWUgPT5cbiAgICAgICAgYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdXNlci5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApKTtcbiAgfVxuXG4gICNpbmNsdWRlVXNlcnNCeURlcGFydG1lbnQodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICByZXR1cm4gdXNlcnMuZmlsdGVyKHVzZXIgPT5cbiAgICAgICF0aGlzLl9kYXRhLmluY2x1c2lvbnM/LmRlcGFydG1lbnRzPy5sZW5ndGggfHwgLy8gTm8gZGVwYXJ0bWVudCBpbmNsdXNpb25zIHNwZWNpZmllZFxuXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZGVwYXJ0bWVudHMuZmluZChkZXBhcnRtZW50ID0+XG4gICAgICAgIGRlcGFydG1lbnQudG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kZXBhcnRtZW50Py50b0xvd2VyQ2FzZSgpXG4gICAgICApKTtcbiAgfVxuXG4gICNpbmNsdWRlVXNlcnNCeVRpdGxlKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgcmV0dXJuIHVzZXJzLmZpbHRlcih1c2VyID0+XG4gICAgICAhdGhpcy5fZGF0YS5pbmNsdXNpb25zPy50aXRsZXM/Lmxlbmd0aCB8fCAvLyBObyB0aXRsZSBpbmNsdXNpb25zIHNwZWNpZmllZFxuXG4gICAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMudGl0bGVzLmZpbmQodGl0bGUgPT5cbiAgICAgICAgdGl0bGUudG9Mb3dlckNhc2UoKSA9PT0gdXNlci50aXRsZT8udG9Mb3dlckNhc2UoKVxuICAgICAgKSk7XG4gIH1cblxuICAjaW5jbHVkZVVzZXJzQnlHcm91cE5hbWUodXNlcnM6IFNlbGVjdGFibGVVc2VyW10pOiBTZWxlY3RhYmxlVXNlcltdIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEuaW5jbHVzaW9ucz8uZ3JvdXBzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1c2VyczsgLy8gTm8gZ3JvdXAgaW5jbHVzaW9ucyBzcGVjaWZpZWRcbiAgICB9XG5cbiAgICAvLyBDaGVhdGluZyBhIGJpdCBhbmQgbGV2ZXJhZ2luZyB0aGUgJ3NlbGVjdGVkJyBwcm9wZXJ0eSB0byBrZWVwIHRyYWNrIG9mIHdobyBzaG91bGQgYmUgaW5jbHVkZWRcbiAgICAvLyBTaW5jZSBpbmNsdXNpb25zIGhhcHBlbiBiZWZvciBwcmUtc2VsZWN0aW9ucywgd2UgY2FuIGRvIHRoYXQsIGFzIGxvbmcgYXMgd2Ugc2V0ICdzZWxlY3RlZCcgYmFjayB0byBmYWxzZSB3aGVuIHdlJ3JlIGRvbmVcbiAgICB0aGlzLl9kYXRhLmluY2x1c2lvbnMuZ3JvdXBzXG4gICAgICAuZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICB1c2Vyc1xuICAgICAgICAgIC5maWx0ZXIodXNlciA9PlxuICAgICAgICAgICAgICBncm91cC5tZW1iZXIuZmluZChncm91cE1lbWJlckRuID0+IGdyb3VwTWVtYmVyRG4gPT09IHVzZXIuZGlzdGluZ3Vpc2hlZE5hbWUpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAvLyBBdCB0aGlzIHBvaW50LCBhbGwgb2YgdGhlIGFwcHJvcHJpYXRlIHVzZXJzIHNob3VsZCBoYXZlICdzZWxlY3RlZCcgc2V0IHRvIHRydWVcbiAgICBjb25zdCBzZWxlY3RlZFVzZXJzID0gdXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5zZWxlY3RlZCk7IC8vIFN1YnNldCBvZiB0aGUgb3JpZ2luYWwgbGlzdFxuICAgIC8vIFJlc2V0ICdzZWxlY3RlZCcgdG8gZmFsc2UsIGFuZCByZXR1cm5cbiAgICBzZWxlY3RlZFVzZXJzLmZvckVhY2godXNlciA9PiB1c2VyLnNlbGVjdGVkID0gZmFsc2UpO1xuICAgIHJldHVybiBzZWxlY3RlZFVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAgUHJlLVNlbGVjdGlvbnNcbiAgI3ByZVNlbGVjdFVzZXJzQnlBY2NvdW50TmFtZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucz8uYWNjb3VudE5hbWVzXG4gICAgICA/LmZvckVhY2goYWNjb3VudE5hbWUgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gdXNlcnMuZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gYWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmICghdXNlcikgeyByZXR1cm47IH1cblxuICAgICAgICB1c2VyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgI3ByZVNlbGVjdEdyb3Vwc0J5QWNjb3VudE5hbWUoKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zPy5hY2NvdW50TmFtZXNcbiAgICAgID8uZm9yRWFjaChhY2NvdW50TmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHM/LmZpbmQoZyA9PiBnLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWdyb3VwKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGdyb3VwLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH0pOztcbiAgfVxuXG4gICNwcmVTZWxlY3RVc2Vyc0J5RGVwYXJ0bWVudCh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucz8uZGVwYXJ0bWVudHNcbiAgICAgID8uZm9yRWFjaChkZXBhcnRtZW50ID0+XG4gICAgICAgIHVzZXJzXG4gICAgICAgICAgLmZpbHRlcih1ID0+IHUuZGVwYXJ0bWVudD8udG9Mb3dlckNhc2UoKSA9PT0gZGVwYXJ0bWVudC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgIC5mb3JFYWNoKHVzZXIgPT4gdXNlci5zZWxlY3RlZCA9IHRydWUpXG4gICAgICApO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG5cbiAgI3ByZVNlbGVjdFVzZXJzQnlUaXRsZSh1c2VyczogU2VsZWN0YWJsZVVzZXJbXSk6IFNlbGVjdGFibGVVc2VyW10ge1xuICAgIHRoaXMuX2RhdGEucHJlU2VsZWN0aW9ucz8udGl0bGVzXG4gICAgICA/LmZvckVhY2godGl0bGUgPT5cbiAgICAgICAgdXNlcnNcbiAgICAgICAgICAuZmlsdGVyKHUgPT4gdS50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdGl0bGUudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAuZm9yRWFjaCh1c2VyID0+IHVzZXIuc2VsZWN0ZWQgPSB0cnVlKVxuICAgICAgKTtcblxuICAgIHJldHVybiB1c2VycztcbiAgfVxuXG4gICNwcmVTZWxlY3RVc2Vyc0J5R3JvdXBOYW1lKHVzZXJzOiBTZWxlY3RhYmxlVXNlcltdKTogU2VsZWN0YWJsZVVzZXJbXSB7XG4gICAgdGhpcy5fZGF0YS5wcmVTZWxlY3Rpb25zPy5ncm91cHNcbiAgICAgID8uZm9yRWFjaChncm91cE5hbWUgPT4ge1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKCFncm91cCkgeyByZXR1cm47IH1cblxuICAgICAgICBncm91cC5tZW1iZXIuZm9yRWFjaChncm91cE1lbWJlckRuID0+IHtcbiAgICAgICAgICBjb25zdCB1c2VyID0gdXNlcnMuZmluZCh1ID0+IHUuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwTWVtYmVyRG4pO1xuICAgICAgICAgIGlmICghdXNlcikgeyByZXR1cm47IH1cblxuICAgICAgICAgIHVzZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHVzZXJzO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuICBcbiAgI3NldEZpbHRlclByZWRpY2F0ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAodXNlcjogKFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChmaWx0ZXIgPT09ICd7c2VsZWN0ZWQ6dHJ1ZX0nKSB7XG4gICAgICAgIHJldHVybiB1c2VyLnNlbGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGZpbHRlciwgJ2knKTsgLy8gQ2FzZS1pbnNlbnNpdGl2ZVxuICAgICAgICBsZXQgbWF0Y2ggPSBmYWxzZTsgLy8gVGhlIGVuZCByZXN1bHQgLSB3aGV0aGVyIG9yIG5vdCBhIGVtcGxveWVlIG1hdGNoZXMgdGhlIGZpbHRlclxuXG4gICAgICAgIGNvbnN0IGZpbHRlclByb3BlcnRpZXMgPSBbICdkaXNwbGF5TmFtZScgXTtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucz8uYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3NBTUFjY291bnROYW1lJylcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zPy50aXRsZSkge1xuICAgICAgICAgIGZpbHRlclByb3BlcnRpZXMucHVzaCgndGl0bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGF0YS5maWx0ZXJPcHRpb25zPy5kZXBhcnRtZW50KSB7XG4gICAgICAgICAgZmlsdGVyUHJvcGVydGllcy5wdXNoKCdkZXBhcnRtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RhdGEuZmlsdGVyT3B0aW9ucz8ucGhvbmVOdW1iZXIpIHtcbiAgICAgICAgICBmaWx0ZXJQcm9wZXJ0aWVzLnB1c2goJ3RlbGVwaG9uZU51bWJlcicpO1xuICAgICAgICB9XG4gIFxuICAgICAgICAvLyBNYXRjaCBvbiB0aGUgcHJvcGVydGllcyBjb25maWd1cmVkIGFib3ZlXG4gICAgICAgIGZpbHRlclByb3BlcnRpZXNcbiAgICAgICAgICAuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodXNlcltmaWVsZF0gJiYgdXNlcltmaWVsZF0ubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgXG4gICAgICAgIC8vIE1hdGNoIG9uIGdyb3VwIG1lbWJlcnNoaXAgKGdyb3VwIG5hbWUpXG4gICAgICAgIGlmICh0aGlzLl9kYXRhLmZpbHRlck9wdGlvbnM/Lmdyb3VwTWVtYmVyc2hpcCkge1xuICAgICAgICAgIHVzZXIubWVtYmVyT2YuZm9yRWFjaChncm91cERuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5ncm91cHM/LmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZGlzdGluZ3Vpc2hlZE5hbWUgPT09IGdyb3VwRG4gJiYgZ3JvdXAubmFtZS5tYXRjaChyZWdleCkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAjbGlzdGVuRm9yRmlsdGVyQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDI1MClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRhU291cmNlIS5maWx0ZXIgPSB0aGlzLmZpbHRlckZvcm0udmFsdWUuZmlsdGVyPy50cmltKCkudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICB0b29sdGlwKHVzZXI6IFNlbGVjdGFibGVVc2VyIHwgU2VsZWN0YWJsZUdyb3VwKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5zaG93R3JvdXBNZW1iZXJzaGlwVG9vbHRpcHMgP1xuICAgICAgdXNlci5tZW1iZXJPZlxuICAgICAgICAubWFwKGdyb3VwRG4gPT5cbiAgICAgICAgICB0aGlzLmdyb3Vwc1xuICAgICAgICAgICAgPy5maW5kKGdyb3VwID0+XG4gICAgICAgICAgICAgIGdyb3VwLmRpc3Rpbmd1aXNoZWROYW1lID09PSBncm91cERuXG4gICAgICAgICAgICApPy5uYW1lXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhISA+IGIhID8gMSA6IC0xKVxuICAgICAgICAgIC5qb2luKCdcXG4nKSA6XG4gICAgICAnJztcbiAgfVxuICAvLyNlbmRyZWdpb25cbn0iLCI8ZGl2IGlkPVwiZGlhbG9nLXRpdGxlXCI+XG4gIDxoMiBtYXQtZGlhbG9nLXRpdGxlPnt7IF9kYXRhLnRpdGxlIH19PC9oMj5cblxuICA8ZGl2IGlkPVwibnVtLXNlbGVjdGVkXCI+XG4gICAge3sgc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCB9fSBzZWxlY3RlZFxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bWF0LWRpYWxvZy1jb250ZW50PlxuICBAaWYgKGRhdGFTb3VyY2UgJiYgcGhvdG9zKSB7XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICBAaWYgKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGZvcm1Db250cm9sTmFtZT1cImZpbHRlclwiICNmaWx0ZXJJbnB1dD5cbiAgICAgICAgICBAaWYgKGZpbHRlckZvcm0udmFsdWUuZmlsdGVyKSB7XG4gICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cImZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8uc2V0VmFsdWUoJycpXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCIvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgfVxuICAgIDwvZm9ybT5cbiAgICA8bWF0LXNlbGVjdGlvbi1saXN0IFttdWx0aXBsZV09XCJpc011bHRpTW9kZVwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImxpc3RTZWxlY3Rpb25DaGFuZ2VkKCRldmVudC5vcHRpb25zKVwiPlxuICAgICAgQGZvciAodXNlciBvZiBkYXRhU291cmNlLmZpbHRlcmVkRGF0YTsgdHJhY2sgdXNlcikge1xuICAgICAgICA8bWF0LWxpc3Qtb3B0aW9uIFt2YWx1ZV09XCJ1c2VyXCIgW3NlbGVjdGVkXT1cInVzZXIuc2VsZWN0ZWRcIlxuICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvcHRpb25TZWxlY3Rpb25DaGFuZ2VkKG9wdGlvbilcIiAjb3B0aW9uPlxuICAgICAgICAgIEBpZiAoZ2V0UGhvdG8odXNlcikpIHtcbiAgICAgICAgICAgIDxpbWcgbWF0TGlzdEl0ZW1BdmF0YXIgYWx0PVwiXCIgW3NyY109XCJnZXRQaG90byh1c2VyKVwiPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPG1hdC1pY29uIG1hdExpc3RJdGVtQXZhdGFyIGNsYXNzPVwibm8tcGhvdG9cIlxuICAgICAgICAgICAgICBbZm9udEljb25dPVwiaXNVc2VyKHVzZXIpID8gJ2FjY291bnRfY2lyY2xlJyA6ICdncm91cCdcIi8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyXCI+XG4gICAgICAgICAgICA8ZGl2IFttYXRUb29sdGlwXT1cInRvb2x0aXAodXNlcilcIiBjbGFzcz1cInVzZXItbmFtZVwiPlxuICAgICAgICAgICAgICB7eyB1c2VyLmRpc3BsYXlOYW1lIH19XG4gICAgICAgICAgICAgIEBpZiAoaXNVc2VyKHVzZXIpICYmIF9kYXRhLnNob3dQaG9uZSAmJiBjYXN0VXNlcih1c2VyKS50ZWxlcGhvbmVOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNhc3RVc2VyKHVzZXIpLnRlbGVwaG9uZU51bWJlciB9fTwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoaXNVc2VyKHVzZXIpKSB7XG4gICAgICAgICAgICAgIDxkaXY+e3sgY2FzdFVzZXIodXNlcikuZGVwYXJ0bWVudCB9fTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyBjYXN0VXNlcih1c2VyKS50aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1saXN0LW9wdGlvbj5cbiAgICAgIH1cbiAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdj5cbiAgICAgIDxtYXQtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiNTBcIi8+XG4gICAgICA8aDIgaWQ9XCJzcGlubmVyLW1lc3NhZ2VcIj5HZXR0aW5nIHVzZXJzIGFuZCBwaG90b3MuLi48L2gyPlxuICAgIDwvZGl2PlxuICB9XG48L21hdC1kaWFsb2ctY29udGVudD5cblxuPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgQGlmIChkYXRhU291cmNlICYmIHBob3Rvcykge1xuICAgIEBpZiAoc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgKGNoYW5nZSk9XCJoaWRlVW5zZWxlY3RlZENoYW5nZWQoJGV2ZW50LmNoZWNrZWQpXCI+XG4gICAgICAgIEhpZGUgVW5zZWxlY3RlZFxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIH1cbiAgICBAaWYgKGlzTXVsdGlNb2RlKSB7XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwic2VsZWN0X2FsbFwiLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoaWRlLW1vYmlsZVwiPlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmIChpc011bHRpTW9kZSAmJiBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJkZXNlbGVjdEFsbCgpXCJcbiAgICAgICAgPlxuICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjbGVhcl9hbGxcIi8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5DbGVhciBBbGw8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgQGlmIChpc011bHRpTW9kZSB8fCAhX2RhdGEuY2xvc2VXaGVuU2VsZWN0aW9uTWFkZSkge1xuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiIG1hdFRvb2x0aXA9XCJBY2NlcHQgeW91ciBzZWxlY3Rpb25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIV9kYXRhLmFsbG93Q2xvc2VXaXRob3V0U2VsZWN0aW9ucyAmJiAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aFwiPlxuICAgICAgICA8bWF0LWljb24gZm9udEljb249XCJjaGVja1wiLz5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoaWRlLW1vYmlsZVwiPk9rPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICB9XG5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiBtYXQtZGlhbG9nLWNsb3NlIG1hdFRvb2x0aXA9XCJDbG9zZSB0aGlzIHdpbmRvd1wiPlxuICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCIvPlxuICAgIDxzcGFuIGNsYXNzPVwiaGlkZS1tb2JpbGVcIj5DYW5jZWw8L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+Il19
@@ -3,7 +3,7 @@ import { MatDialog } from '@angular/material/dialog';
3
3
  import { forkJoin, of } from 'rxjs';
4
4
  import { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-directory';
5
5
  import { SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';
6
- import { DefaultUserChooserData } from '../../model/user-chooser-data';
6
+ import { DefaultUserChooserData } from '../../model/default-user-chooser-data';
7
7
  import { NgClass } from '@angular/common';
8
8
  import { MatButton, MatIconButton } from '@angular/material/button';
9
9
  import { MatFormField, MatSuffix } from '@angular/material/form-field';
@@ -156,4 +156,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
156
156
  NgClass
157
157
  ], template: "\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames?.length) {\n <div [ngClass]=\"class\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\n}", styles: [".user{display:grid;grid-template-columns:auto 1fr;grid-gap:.5em;align-items:center}.clickable,.clickable input{cursor:pointer!important}img{width:2em;height:2em;border-radius:100%}@media (min-width: 801px){.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1em}.three{grid-template-columns:repeat(3,1fr)}.four{grid-template-columns:repeat(4,1fr)}.five{grid-template-columns:repeat(5,1fr)}::ng-deep .grid mat-form-field{width:15vw}}input[disabled]{pointer-events:none}\n"] }]
158
158
  }] });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxzQkFBc0IsRUFBbUIsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVB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QUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzNCLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDekUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtZQUNsRSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQy9ELENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FDMUQsRUFBRSxhQUFhLENBQUM7SUFDbkIsQ0FBQzs4R0FwSlUsc0JBQXNCO2tHQUF0QixzQkFBc0IsdWtCQ2xDbkMsd2xFQTRDQyw0aEJEckJHLFlBQVksNExBQ1osT0FBTywySUFDUCxhQUFhLDZGQUNiLFFBQVEsaVVBQ1IsY0FBYyx5S0FDZCxTQUFTLHFIQUNULE9BQU87OzJGQUtFLHNCQUFzQjtrQkFoQmxDLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osT0FBTzt3QkFDUCxhQUFhO3dCQUNiLFFBQVE7d0JBQ1IsY0FBYzt3QkFDZCxTQUFTO3dCQUNULE9BQU87cUJBQ1IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UsIFVzZXIsIFVzZXJPckdyb3VwIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnknO1xuaW1wb3J0IHsgUGhvdG9JdGVtLCBTaGFyZVBvaW50U2VydmljZSB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50JztcblxuaW1wb3J0IHsgRGVmYXVsdFVzZXJDaG9vc2VyRGF0YSwgVXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEnO1xuXG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbiwgTWF0SWNvbkJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdFN1ZmZpeCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBVc2VyQ2hvb3Nlck1vZGUgfSBmcm9tICcuLi8uLi9tYXQtYWN0aXZlLWRpcmVjdG9yeS5hcGknO1xuaW1wb3J0IHsgVXNlckNob29zZXJDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NwLXVzZXItZmllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0QnV0dG9uLFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRJY29uLFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgTWF0SW5wdXQsXG4gICAgTWF0UHJvZ3Jlc3NCYXIsXG4gICAgTWF0U3VmZml4LFxuICAgIE5nQ2xhc3NcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJGb3JtRmllbGRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyNyZWdpb24gRmllbGRzXG4gICNzZXJ2aWNlcyA9IHtcbiAgICBkaWFsb2c6IGluamVjdChNYXREaWFsb2cpLFxuICAgIGFjdGl2ZURpcmVjdG9yeTogaW5qZWN0KEFjdGl2ZURpcmVjdG9yeVNlcnZpY2UpLFxuICAgIHNoYXJlUG9pbnQ6IGluamVjdChTaGFyZVBvaW50U2VydmljZSlcbiAgfTtcbiAgdXNlcnNTZWxlY3RlZCA9IG91dHB1dDxzdHJpbmcgfCBzdHJpbmdbXSB8IFVzZXJPckdyb3VwIHwgVXNlck9yR3JvdXBbXT4oKTsgLy8gc3RyaW5nIGZvciBTaW5nbGUgbW9kZSwgc3RyaW5nW10gZm9yIG11bHRpXG4gIHVzZXJVblNlbGVjdGVkID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcGxhY2Vob2xkZXIgPSBpbnB1dCgnU2VsZWN0IFVzZXIocyknKTtcbiAgY2xpY2thYmxlID0gaW5wdXQodHJ1ZSk7XG4gIHVzZXJDaG9vc2VyRGF0YSA9IGlucHV0LnJlcXVpcmVkPFVzZXJDaG9vc2VyRGF0YT4oKTtcbiAgX3VzZXJDaG9vc2VyRGF0YSE6IFVzZXJDaG9vc2VyRGF0YTtcblxuICBhY2NvdW50TmFtZXM/OiBzdHJpbmdbXTtcblxuICB1c2Vycz86IFVzZXJbXTtcbiAgZ3JvdXBzPzogVXNlck9yR3JvdXBbXTtcbiAgcGhvdG9zPzogUGhvdG9JdGVtW107XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBQcm9wZXJ0aWVzXG4gIC8qZ2V0IGlzRWRnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID4gLTE7XG4gIH0qL1xuICBnZXQgY2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlckNob29zZXJEYXRhPy5tb2RlID09PSBVc2VyQ2hvb3Nlck1vZGUuU2luZ2xlID8gJycgOlxuICAgICAgKHRoaXMuYWNjb3VudE5hbWVzPy5sZW5ndGggPz8gMCkgPiA0ID8gJ2dyaWQgZml2ZScgOlxuICAgICAgKHRoaXMuYWNjb3VudE5hbWVzPy5sZW5ndGggPz8gMCkgPiAzID8gJ2dyaWQgZm91cicgOlxuICAgICAgKHRoaXMuYWNjb3VudE5hbWVzPy5sZW5ndGggPz8gMCkgPiAyID8gJ2dyaWQgdGhyZWUnIDpcbiAgICAgICh0aGlzLmFjY291bnROYW1lcz8ubGVuZ3RoID8/IDApID4gMSA/ICdncmlkIHR3bycgOlxuICAgICAgJyc7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG4gIFxuICAvLyNyZWdpb24gTGlmZWN5Y2xlXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSA9IHtcbiAgICAgIC4uLkRlZmF1bHRVc2VyQ2hvb3NlckRhdGEsXG4gICAgICAuLi50aGlzLnVzZXJDaG9vc2VyRGF0YSgpXG4gICAgfVxuXG4gICAgLy8gSWYgdXNlcnMgaGF2ZSBiZWVuIHByZS1zZWxlY3RlZCBpbiB0aGUgY29uZmlnLCBzdG9yZSB0aG9zZSBpbiBhY2NvdW50TmFtZXMsIHdoaWNoIGRyaXZlcyB0aGUgVUkgb2YgdGhpcyBjb21wb25lbnRcbiAgICB0aGlzLmFjY291bnROYW1lcyA9IHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zPy5hY2NvdW50TmFtZXM7XG5cbiAgICB0aGlzLiNnZXREYXRhKCk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEV2ZW50c1xuICBzZWxlY3RVc2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGlja2FibGUoKSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IGRhdGE6IFVzZXJDaG9vc2VyRGF0YSA9IHtcbiAgICAgIC4uLnRoaXMuX3VzZXJDaG9vc2VyRGF0YSxcblxuICAgICAgdXNlcnM6IHRoaXMudXNlcnMsXG4gICAgICBwaG90b3M6IHRoaXMucGhvdG9zLFxuICAgIH07XG5cbiAgICB0aGlzLiNzZXJ2aWNlcy5kaWFsb2cub3BlbihVc2VyQ2hvb3NlckNvbXBvbmVudCwge1xuICAgICAgZGF0YTogZGF0YVxuICAgIH0pXG4gICAgLmFmdGVyQ2xvc2VkKClcbiAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nIHwgc3RyaW5nW10gfCBVc2VyT3JHcm91cCB8IFVzZXJPckdyb3VwW10pID0+IHtcbiAgICAgIGlmICghc2VsZWN0ZWQpIHsgcmV0dXJuOyB9XG4gICAgICBcbiAgICAgIHRoaXMuYWNjb3VudE5hbWVzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgP1xuICAgICAgICBzZWxlY3RlZC5tYXAocyA9PiB0eXBlb2YocykgPT09ICdzdHJpbmcnID8gcyA6IHMuc0FNQWNjb3VudE5hbWUpIDpcbiAgICAgICAgWyBzZWxlY3RlZCBdLm1hcChzID0+IHR5cGVvZihzKSA9PT0gJ3N0cmluZycgPyBzIDogcy5zQU1BY2NvdW50TmFtZSk7XG5cbiAgICAgIC8vIE92ZXJ3cml0ZSB3aGF0IG1heSBoYXZlIGJlZW4gcGFzc2VkIGluLCBmb3Igc3Vic2VxdWVudCBsYXVuY2hlcyBvZiBVc2VyQ2hvb3NlckNvbXBvbmVudCAtIG90aGVyd2lzZSBpdCBqdXN0IGtlZXBzIGdldHRpbmcgZmVkIHN0YWxlIGRhdGFcbiAgICAgIGlmICh0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucykge1xuICAgICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucy5hY2NvdW50TmFtZXMgPSB0aGlzLmFjY291bnROYW1lcztcbiAgICAgIH1cblxuICAgICAgdGhpcy51c2Vyc1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5TZWxlY3RVc2VyKGFjY291bnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuYWNjb3VudE5hbWVzPy5maW5kSW5kZXgoYSA9PiBhID09PSBhY2NvdW50TmFtZSk7XG4gICAgdGhpcy5hY2NvdW50TmFtZXM/LnNwbGljZShpbmRleCA/PyAtMSwgMSk7XG5cbiAgICBpZiAodGhpcy5fdXNlckNob29zZXJEYXRhLnByZVNlbGVjdGlvbnMpIHtcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zLmFjY291bnROYW1lcyA9IHRoaXMuYWNjb3VudE5hbWVzO1xuICAgIH1cblxuICAgIHRoaXMudXNlclVuU2VsZWN0ZWQuZW1pdChhY2NvdW50TmFtZSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xuICAjZ2V0RGF0YSgpOiB2b2lkIHtcbiAgICBmb3JrSm9pbihbXG4gICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnVzZXJzID9cbiAgICAgICAgLy8gVXNlcnMgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fdXNlckNob29zZXJEYXRhIS51c2VycykgOlxuICAgICAgICAvLyBVc2VycyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICB0aGlzLiNzZXJ2aWNlcy5hY3RpdmVEaXJlY3RvcnkuZ2V0VXNlcnMoZmFsc2UsIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEuaW5jbHVkZURpc2FibGVkVXNlcnMsIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEucGFyZW50T3UpLFxuXG4gICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLmdyb3VwcyA/XG4gICAgICAgIC8vIEdyb3VwcyB3ZXJlIHBhc3NlZCBpblxuICAgICAgICBvZih0aGlzLl91c2VyQ2hvb3NlckRhdGEhLmdyb3VwcykgOlxuICAgICAgICAvLyBHcm91cHMgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgdGhpcy4jc2VydmljZXMuYWN0aXZlRGlyZWN0b3J5LmdldEdyb3Vwcyh0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBhcmVudE91KSxcblxuICAgICAgdGhpcy5fdXNlckNob29zZXJEYXRhIS5waG90b3MgP1xuICAgICAgICAvLyBQaG90b3Mgd2VyZSBwYXNzZWQgaW5cbiAgICAgICAgb2YodGhpcy5fdXNlckNob29zZXJEYXRhIS5waG90b3MpIDpcbiAgICAgICAgLy8gUGhvdG9zIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuI3NlcnZpY2VzLnNoYXJlUG9pbnQuZ2V0UGhvdG9zKClcbiAgICBdKVxuICAgICAgLnN1YnNjcmliZSgoW3VzZXJzLCBncm91cHMsIHBob3Rvc10pID0+IHtcbiAgICAgICAgdGhpcy51c2VycyA9IHVzZXJzO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IGdyb3VwcztcbiAgICAgICAgdGhpcy5waG90b3MgPSBwaG90b3M7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFVzZXIodXNlcjogc3RyaW5nIHwgVXNlciB8IHVuZGVmaW5lZCk6IFVzZXIgfCB1bmRlZmluZWQge1xuICAgIHVzZXIgPSB0eXBlb2YodXNlcikgPT09ICdzdHJpbmcnID9cbiAgICAgIHRoaXMudXNlcnM/LmZpbmQodSA9PiB1LnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IHVzZXI/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkgOlxuICAgICAgdXNlcjtcblxuICAgIHJldHVybiAhdXNlciA/IHVuZGVmaW5lZCA6XG4gICAgICAnZ3JvdXBUeXBlJyBpbiB1c2VyID8gdW5kZWZpbmVkIDogdXNlcjtcbiAgfVxuXG4gIGdldEdyb3VwKGdyb3VwOiBzdHJpbmcgfCBVc2VyT3JHcm91cCB8IHVuZGVmaW5lZCk6IFVzZXJPckdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICBncm91cCA9IHR5cGVvZihncm91cCkgPT09ICdzdHJpbmcnID9cbiAgICAgIHRoaXMuZ3JvdXBzPy5maW5kKGcgPT4gZy5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpID09PSBncm91cD8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSA6XG4gICAgICBncm91cDtcblxuICAgIHJldHVybiAhZ3JvdXAgPyB1bmRlZmluZWQgOlxuICAgICAgJ2dyb3VwVHlwZScgaW4gZ3JvdXAgPyBncm91cCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFBob3RvKGFjY291bnROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXIoYWNjb3VudE5hbWUpO1xuICAgIGlmICghdXNlcikgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgICByZXR1cm4gdGhpcy5waG90b3M/LmZpbmQocCA9PlxuICAgICAgKHAuZW1wbG95ZWVOdW1iZXIgJiYgcC5lbXBsb3llZU51bWJlci50b1N0cmluZygpID09PSB1c2VyLmVtcGxveWVlTnVtYmVyKSB8fFxuICAgICAgcC5hY2NvdW50TmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5zQU1BY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpIHx8XG4gICAgICBwLmRpc3BsYXlOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIHAudGl0bGU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICk/LmVuY29kZWRBYnNVcmw7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59IiwiXG48IS0tIEluIE1pY3Jvc29mdCBFZGdlLCBzZWxlY3RVc2VyKCkgbmV2ZXIgZ2V0cyBjYWxsZWQgaWYgdGhlIGlucHV0IGZpZWxkcyBhcmUgZGlzYWJsZWRcblNvLi4uIEknbSBkeW5hbWljYWxseSBzZXR0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eSBiYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgYnJvd3NlciBpcyBFZGdlLlxuSXQncyBkZWZpbml0ZWx5IGEgYmV0dGVyIGV4cGVyaWVuY2UgaWYgdGhlIGZpZWxkIElTIGRpc2FibGVkLlxuT3RoZXJ3aXNlLCBpdCdzIGNvbmZ1c2luZyAtIGVzcGVjaWFsbHkgYmVjYXVzZSBFZGdlIGlzIFNPIFNMT1cgdG8gZGlzcGxheSB0aGUgcmVzdWx0aW5nIGRpYWxvZyB3aW5kb3cuXG4tLT5cbjwhLS0gVXBkYXRlIDgvMjQvMjAyMzpcblRoZSBhYm92ZSBwcm9ibGVtIGFsc28gZXhpc3RzIGluIENocm9tZSBub3cuXG5TbyBpbnN0ZWFkIG9mIGR5bmFtaWNhbGx5IHNldHRpbmcgW2Rpc2FibGVkXSBiYXNlZCBvbiBicm93c2VyIHR5cGUsXG5JJ20gYXBwbHlpbmcgQ1NTIHRvIHN1cHByZXNzIG1vdXNlIGV2ZW50cyBvbiB0aGUgaW5wdXQgLSB0aHVzIG1ha2luZyBpdCBidWJibGUgdXAgdG8gdGhlIHBhcmVudCBjb250cm9sLCB3aGljaCByZXNwb25kcyB0aGUgd2F5IHdlIHdhbnQvXG4tLT5cblxuQGlmICh1c2VycyAmJiBwaG90b3MpIHtcbiAgPGRpdiAoY2xpY2spPVwic2VsZWN0VXNlcigpXCIgW2NsYXNzLmNsaWNrYWJsZV09XCJjbGlja2FibGUoKVwiPlxuICAgIEBpZiAoYWNjb3VudE5hbWVzPy5sZW5ndGgpIHtcbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwiY2xhc3NcIj5cbiAgICAgICAgQGZvciAoYWNjb3VudE5hbWUgb2YgYWNjb3VudE5hbWVzOyB0cmFjayBhY2NvdW50TmFtZTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlclwiPlxuICAgICAgICAgICAgPCEtLTxpbWcgKm5nSWY9XCJhY2NvdW50TmFtZSAmJiBlbXBVdGlscy5nZXRFbXBsb3llZShhY2NvdW50TmFtZSlcIiBhbHQ9XCJcIiBbc3JjXT1cImVtcFV0aWxzLmdldEVtcGxveWVlKGFjY291bnROYW1lKSB8IGVtcGxveWVlUGhvdG9Vcmw6Y2FjaGVTZXJ2aWNlLnBob3Rvc1wiPi0tPlxuICAgICAgICAgICAgQGlmIChnZXRQaG90byhhY2NvdW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgPGltZyBtYXRMaXN0SXRlbUF2YXRhciBhbHQ9XCJcIiBbc3JjXT1cImdldFBob3RvKGFjY291bnROYW1lKVwiPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChnZXRHcm91cChhY2NvdW50TmFtZSkpIHtcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmdyb3VwPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPCEtLSBbZGlzYWJsZWRdPVwiIWlzRWRnZVwiIC0tPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZGlzYWJsZWQgW3BsYWNlaG9sZGVyXT1cImkgPT09IDAgPyBwbGFjZWhvbGRlcigpIDogJydcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRVc2VyKGFjY291bnROYW1lKT8uZGlzcGxheU5hbWUgPz8gZ2V0R3JvdXAoYWNjb3VudE5hbWUpPy5kaXNwbGF5TmFtZSA/PyBhY2NvdW50TmFtZVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdW5TZWxlY3RVc2VyKGFjY291bnROYW1lKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250SWNvbj1cImNsb3NlXCIvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZGlzYWJsZWQgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyKClcIj4gPCEtLSBbZGlzYWJsZWRdPVwiIWlzRWRnZVwiIC0tPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIvPlxufSJdfQ==
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9jb21wb25lbnRzL3VzZXItZm9ybS1maWVsZC91c2VyLWZvcm0tZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFxQixNQUFNLDJDQUEyQyxDQUFDO0FBQ3RHLE9BQU8sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQWtCOUUsTUFBTSxPQUFPLHNCQUFzQjtJQWhCbkM7UUFpQkUsZ0JBQWdCO1FBQ2hCLGNBQVMsR0FBRztZQUNWLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3pCLGVBQWUsRUFBRSxNQUFNLENBQUMsc0JBQXNCLENBQUM7WUFDL0MsVUFBVSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztTQUN0QyxDQUFDO1FBQ0Ysa0JBQWEsR0FBRyxNQUFNLEVBQW1ELENBQUMsQ0FBQyw2Q0FBNkM7UUFDeEgsbUJBQWMsR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsb0JBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFtQixDQUFDO0tBMklyRDtJQXJKQyxnQkFBZ0I7SUFDaEIsU0FBUyxDQUlQO0lBYUYsWUFBWTtJQUVaLG9CQUFvQjtJQUNwQjs7T0FFRztJQUNILElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDcEQsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUNyRCxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ25ELEVBQUUsQ0FBQztJQUNQLENBQUM7SUFDRCxZQUFZO0lBRVosbUJBQW1CO0lBQ25CLFFBQVE7UUFDTixJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDdEIsR0FBRyxzQkFBc0I7WUFDekIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFO1NBQzFCLENBQUE7UUFFRCxvSEFBb0g7UUFDcEgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztRQUV0RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUNELFlBQVk7SUFFWixnQkFBZ0I7SUFDaEIsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO1FBRWxDLE1BQU0sSUFBSSxHQUFvQjtZQUM1QixHQUFHLElBQUksQ0FBQyxnQkFBZ0I7WUFFeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQy9DLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQzthQUNELFdBQVcsRUFBRTthQUNiLFNBQVMsQ0FBQyxDQUFDLFFBQXlELEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQUMsT0FBTztZQUFDLENBQUM7WUFFMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxDQUFFLFFBQVEsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRXZFLDJJQUEySTtZQUMzSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUN2RSxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLFdBQW1CO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUxQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsWUFBWTtJQUVaLG1CQUFtQjtJQUNuQixRQUFRO1FBQ04sUUFBUSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGdCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1Qix1QkFBdUI7Z0JBQ3ZCLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsNkJBQTZCO2dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZ0JBQWlCLENBQUMsUUFBUSxDQUFDO1lBRTlILElBQUksQ0FBQyxnQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDN0Isd0JBQXdCO2dCQUN4QixFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLDhCQUE4QjtnQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFFM0UsSUFBSSxDQUFDLGdCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM3Qix3QkFBd0I7Z0JBQ3hCLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDbkMsOEJBQThCO2dCQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUU7U0FDeEMsQ0FBQzthQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUErQjtRQUNyQyxJQUFJLEdBQUcsT0FBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFGLElBQUksQ0FBQztRQUVQLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hCLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBdUM7UUFDOUMsS0FBSyxHQUFHLE9BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RixLQUFLLENBQUM7UUFFUixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QixXQUFXLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsUUFBUSxDQUFDLFdBQW1CO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQUMsT0FBTyxTQUFTLENBQUM7UUFBQyxDQUFDO1FBRWhDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDM0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN6RSxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO1lBQ2xFLENBQUMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUMxRCxFQUFFLGFBQWEsQ0FBQztJQUNuQixDQUFDOzhHQXBKVSxzQkFBc0I7a0dBQXRCLHNCQUFzQix1a0JDbkNuQyx3bEVBNENDLDRoQkRwQkcsWUFBWSw0TEFDWixPQUFPLDJJQUNQLGFBQWEsNkZBQ2IsUUFBUSxpVUFDUixjQUFjLHlLQUNkLFNBQVMscUhBQ1QsT0FBTzs7MkZBS0Usc0JBQXNCO2tCQWhCbEMsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFNBQVM7d0JBQ1QsWUFBWTt3QkFDWixPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsUUFBUTt3QkFDUixjQUFjO3dCQUNkLFNBQVM7d0JBQ1QsT0FBTztxQkFDUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWN0aXZlRGlyZWN0b3J5U2VydmljZSwgVXNlciwgVXNlck9yR3JvdXAgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeSc7XG5pbXBvcnQgeyBQaG90b0l0ZW0sIFNoYXJlUG9pbnRTZXJ2aWNlIH0gZnJvbSAnQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL3NoYXJlcG9pbnQnO1xuXG5pbXBvcnQgeyBEZWZhdWx0VXNlckNob29zZXJEYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGVmYXVsdC11c2VyLWNob29zZXItZGF0YSc7XG5pbXBvcnQgeyBVc2VyQ2hvb3NlckRhdGEgfSBmcm9tICcuLi8uLi9tb2RlbC91c2VyLWNob29zZXItZGF0YSc7XG5cbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uLCBNYXRJY29uQnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0U3VmZml4IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IFVzZXJDaG9vc2VyTW9kZSB9IGZyb20gJy4uLy4uL21hdC1hY3RpdmUtZGlyZWN0b3J5LmFwaSc7XG5pbXBvcnQgeyBVc2VyQ2hvb3NlckNvbXBvbmVudCB9IGZyb20gJy4uL3VzZXItY2hvb3Nlci91c2VyLWNob29zZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3AtdXNlci1maWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0Rm9ybUZpZWxkLFxuICAgIE1hdEljb24sXG4gICAgTWF0SWNvbkJ1dHRvbixcbiAgICBNYXRJbnB1dCxcbiAgICBNYXRQcm9ncmVzc0JhcixcbiAgICBNYXRTdWZmaXgsXG4gICAgTmdDbGFzc1xuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgVXNlckZvcm1GaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vI3JlZ2lvbiBGaWVsZHNcbiAgI3NlcnZpY2VzID0ge1xuICAgIGRpYWxvZzogaW5qZWN0KE1hdERpYWxvZyksXG4gICAgYWN0aXZlRGlyZWN0b3J5OiBpbmplY3QoQWN0aXZlRGlyZWN0b3J5U2VydmljZSksXG4gICAgc2hhcmVQb2ludDogaW5qZWN0KFNoYXJlUG9pbnRTZXJ2aWNlKVxuICB9O1xuICB1c2Vyc1NlbGVjdGVkID0gb3V0cHV0PHN0cmluZyB8IHN0cmluZ1tdIHwgVXNlck9yR3JvdXAgfCBVc2VyT3JHcm91cFtdPigpOyAvLyBzdHJpbmcgZm9yIFNpbmdsZSBtb2RlLCBzdHJpbmdbXSBmb3IgbXVsdGlcbiAgdXNlclVuU2VsZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICBwbGFjZWhvbGRlciA9IGlucHV0KCdTZWxlY3QgVXNlcihzKScpO1xuICBjbGlja2FibGUgPSBpbnB1dCh0cnVlKTtcbiAgdXNlckNob29zZXJEYXRhID0gaW5wdXQucmVxdWlyZWQ8VXNlckNob29zZXJEYXRhPigpO1xuICBfdXNlckNob29zZXJEYXRhITogVXNlckNob29zZXJEYXRhO1xuXG4gIGFjY291bnROYW1lcz86IHN0cmluZ1tdO1xuXG4gIHVzZXJzPzogVXNlcltdO1xuICBncm91cHM/OiBVc2VyT3JHcm91cFtdO1xuICBwaG90b3M/OiBQaG90b0l0ZW1bXTtcbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFByb3BlcnRpZXNcbiAgLypnZXQgaXNFZGdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPiAtMTtcbiAgfSovXG4gIGdldCBjbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91c2VyQ2hvb3NlckRhdGE/Lm1vZGUgPT09IFVzZXJDaG9vc2VyTW9kZS5TaW5nbGUgPyAnJyA6XG4gICAgICAodGhpcy5hY2NvdW50TmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDQgPyAnZ3JpZCBmaXZlJyA6XG4gICAgICAodGhpcy5hY2NvdW50TmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDMgPyAnZ3JpZCBmb3VyJyA6XG4gICAgICAodGhpcy5hY2NvdW50TmFtZXM/Lmxlbmd0aCA/PyAwKSA+IDIgPyAnZ3JpZCB0aHJlZScgOlxuICAgICAgKHRoaXMuYWNjb3VudE5hbWVzPy5sZW5ndGggPz8gMCkgPiAxID8gJ2dyaWQgdHdvJyA6XG4gICAgICAnJztcbiAgfVxuICAvLyNlbmRyZWdpb25cbiAgXG4gIC8vI3JlZ2lvbiBMaWZlY3ljbGVcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdXNlckNob29zZXJEYXRhID0ge1xuICAgICAgLi4uRGVmYXVsdFVzZXJDaG9vc2VyRGF0YSxcbiAgICAgIC4uLnRoaXMudXNlckNob29zZXJEYXRhKClcbiAgICB9XG5cbiAgICAvLyBJZiB1c2VycyBoYXZlIGJlZW4gcHJlLXNlbGVjdGVkIGluIHRoZSBjb25maWcsIHN0b3JlIHRob3NlIGluIGFjY291bnROYW1lcywgd2hpY2ggZHJpdmVzIHRoZSBVSSBvZiB0aGlzIGNvbXBvbmVudFxuICAgIHRoaXMuYWNjb3VudE5hbWVzID0gdGhpcy5fdXNlckNob29zZXJEYXRhLnByZVNlbGVjdGlvbnM/LmFjY291bnROYW1lcztcblxuICAgIHRoaXMuI2dldERhdGEoKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gRXZlbnRzXG4gIHNlbGVjdFVzZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNsaWNrYWJsZSgpKSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgZGF0YTogVXNlckNob29zZXJEYXRhID0ge1xuICAgICAgLi4udGhpcy5fdXNlckNob29zZXJEYXRhLFxuXG4gICAgICB1c2VyczogdGhpcy51c2VycyxcbiAgICAgIHBob3RvczogdGhpcy5waG90b3MsXG4gICAgfTtcblxuICAgIHRoaXMuI3NlcnZpY2VzLmRpYWxvZy5vcGVuKFVzZXJDaG9vc2VyQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSlcbiAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFVzZXJPckdyb3VwIHwgVXNlck9yR3JvdXBbXSkgPT4ge1xuICAgICAgaWYgKCFzZWxlY3RlZCkgeyByZXR1cm47IH1cbiAgICAgIFxuICAgICAgdGhpcy5hY2NvdW50TmFtZXMgPSBBcnJheS5pc0FycmF5KHNlbGVjdGVkKSA/XG4gICAgICAgIHNlbGVjdGVkLm1hcChzID0+IHR5cGVvZihzKSA9PT0gJ3N0cmluZycgPyBzIDogcy5zQU1BY2NvdW50TmFtZSkgOlxuICAgICAgICBbIHNlbGVjdGVkIF0ubWFwKHMgPT4gdHlwZW9mKHMpID09PSAnc3RyaW5nJyA/IHMgOiBzLnNBTUFjY291bnROYW1lKTtcblxuICAgICAgLy8gT3ZlcndyaXRlIHdoYXQgbWF5IGhhdmUgYmVlbiBwYXNzZWQgaW4sIGZvciBzdWJzZXF1ZW50IGxhdW5jaGVzIG9mIFVzZXJDaG9vc2VyQ29tcG9uZW50IC0gb3RoZXJ3aXNlIGl0IGp1c3Qga2VlcHMgZ2V0dGluZyBmZWQgc3RhbGUgZGF0YVxuICAgICAgaWYgKHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zKSB7XG4gICAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YS5wcmVTZWxlY3Rpb25zLmFjY291bnROYW1lcyA9IHRoaXMuYWNjb3VudE5hbWVzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVzZXJzU2VsZWN0ZWQuZW1pdChzZWxlY3RlZCk7XG4gICAgfSk7XG4gIH1cblxuICB1blNlbGVjdFVzZXIoYWNjb3VudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hY2NvdW50TmFtZXM/LmZpbmRJbmRleChhID0+IGEgPT09IGFjY291bnROYW1lKTtcbiAgICB0aGlzLmFjY291bnROYW1lcz8uc3BsaWNlKGluZGV4ID8/IC0xLCAxKTtcblxuICAgIGlmICh0aGlzLl91c2VyQ2hvb3NlckRhdGEucHJlU2VsZWN0aW9ucykge1xuICAgICAgdGhpcy5fdXNlckNob29zZXJEYXRhLnByZVNlbGVjdGlvbnMuYWNjb3VudE5hbWVzID0gdGhpcy5hY2NvdW50TmFtZXM7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyVW5TZWxlY3RlZC5lbWl0KGFjY291bnROYW1lKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gVXRpbGl0aWVzXG4gICNnZXREYXRhKCk6IHZvaWQge1xuICAgIGZvcmtKb2luKFtcbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEudXNlcnMgP1xuICAgICAgICAvLyBVc2VycyB3ZXJlIHBhc3NlZCBpblxuICAgICAgICBvZih0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnVzZXJzKSA6XG4gICAgICAgIC8vIFVzZXJzIG5lZWQgdG8gYmUgcmV0cmlldmVkXG4gICAgICAgIHRoaXMuI3NlcnZpY2VzLmFjdGl2ZURpcmVjdG9yeS5nZXRVc2VycyhmYWxzZSwgdGhpcy5fdXNlckNob29zZXJEYXRhIS5pbmNsdWRlRGlzYWJsZWRVc2VycywgdGhpcy5fdXNlckNob29zZXJEYXRhIS5wYXJlbnRPdSksXG5cbiAgICAgIHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEuZ3JvdXBzID9cbiAgICAgICAgLy8gR3JvdXBzIHdlcmUgcGFzc2VkIGluXG4gICAgICAgIG9mKHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEuZ3JvdXBzKSA6XG4gICAgICAgIC8vIEdyb3VwcyBuZWVkIHRvIGJlIHJldHJpZXZlZFxuICAgICAgICB0aGlzLiNzZXJ2aWNlcy5hY3RpdmVEaXJlY3RvcnkuZ2V0R3JvdXBzKHRoaXMuX3VzZXJDaG9vc2VyRGF0YSEucGFyZW50T3UpLFxuXG4gICAgICB0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBob3RvcyA/XG4gICAgICAgIC8vIFBob3RvcyB3ZXJlIHBhc3NlZCBpblxuICAgICAgICBvZih0aGlzLl91c2VyQ2hvb3NlckRhdGEhLnBob3RvcykgOlxuICAgICAgICAvLyBQaG90b3MgbmVlZCB0byBiZSByZXRyaWV2ZWRcbiAgICAgICAgdGhpcy4jc2VydmljZXMuc2hhcmVQb2ludC5nZXRQaG90b3MoKVxuICAgIF0pXG4gICAgICAuc3Vic2NyaWJlKChbdXNlcnMsIGdyb3VwcywgcGhvdG9zXSkgPT4ge1xuICAgICAgICB0aGlzLnVzZXJzID0gdXNlcnM7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gZ3JvdXBzO1xuICAgICAgICB0aGlzLnBob3RvcyA9IHBob3RvcztcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0VXNlcih1c2VyOiBzdHJpbmcgfCBVc2VyIHwgdW5kZWZpbmVkKTogVXNlciB8IHVuZGVmaW5lZCB7XG4gICAgdXNlciA9IHR5cGVvZih1c2VyKSA9PT0gJ3N0cmluZycgP1xuICAgICAgdGhpcy51c2Vycz8uZmluZCh1ID0+IHUuc0FNQWNjb3VudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdXNlcj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSA6XG4gICAgICB1c2VyO1xuXG4gICAgcmV0dXJuICF1c2VyID8gdW5kZWZpbmVkIDpcbiAgICAgICdncm91cFR5cGUnIGluIHVzZXIgPyB1bmRlZmluZWQgOiB1c2VyO1xuICB9XG5cbiAgZ2V0R3JvdXAoZ3JvdXA6IHN0cmluZyB8IFVzZXJPckdyb3VwIHwgdW5kZWZpbmVkKTogVXNlck9yR3JvdXAgfCB1bmRlZmluZWQge1xuICAgIGdyb3VwID0gdHlwZW9mKGdyb3VwKSA9PT0gJ3N0cmluZycgP1xuICAgICAgdGhpcy5ncm91cHM/LmZpbmQoZyA9PiBnLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgPT09IGdyb3VwPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpIDpcbiAgICAgIGdyb3VwO1xuXG4gICAgcmV0dXJuICFncm91cCA/IHVuZGVmaW5lZCA6XG4gICAgICAnZ3JvdXBUeXBlJyBpbiBncm91cCA/IGdyb3VwIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UGhvdG8oYWNjb3VudE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0VXNlcihhY2NvdW50TmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cblxuICAgIHJldHVybiB0aGlzLnBob3Rvcz8uZmluZChwID0+XG4gICAgICAocC5lbXBsb3llZU51bWJlciAmJiBwLmVtcGxveWVlTnVtYmVyLnRvU3RyaW5nKCkgPT09IHVzZXIuZW1wbG95ZWVOdW1iZXIpIHx8XG4gICAgICBwLmFjY291bnROYW1lPy50b0xvd2VyQ2FzZSgpID09PSB1c2VyLnNBTUFjY291bnROYW1lLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgIHAuZGlzcGxheU5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSB8fFxuICAgICAgcC50aXRsZT8udG9Mb3dlckNhc2UoKSA9PT0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgKT8uZW5jb2RlZEFic1VybDtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn0iLCJcbjwhLS0gSW4gTWljcm9zb2Z0IEVkZ2UsIHNlbGVjdFVzZXIoKSBuZXZlciBnZXRzIGNhbGxlZCBpZiB0aGUgaW5wdXQgZmllbGRzIGFyZSBkaXNhYmxlZFxuU28uLi4gSSdtIGR5bmFtaWNhbGx5IHNldHRpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5IGJhc2VkIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBicm93c2VyIGlzIEVkZ2UuXG5JdCdzIGRlZmluaXRlbHkgYSBiZXR0ZXIgZXhwZXJpZW5jZSBpZiB0aGUgZmllbGQgSVMgZGlzYWJsZWQuXG5PdGhlcndpc2UsIGl0J3MgY29uZnVzaW5nIC0gZXNwZWNpYWxseSBiZWNhdXNlIEVkZ2UgaXMgU08gU0xPVyB0byBkaXNwbGF5IHRoZSByZXN1bHRpbmcgZGlhbG9nIHdpbmRvdy5cbi0tPlxuPCEtLSBVcGRhdGUgOC8yNC8yMDIzOlxuVGhlIGFib3ZlIHByb2JsZW0gYWxzbyBleGlzdHMgaW4gQ2hyb21lIG5vdy5cblNvIGluc3RlYWQgb2YgZHluYW1pY2FsbHkgc2V0dGluZyBbZGlzYWJsZWRdIGJhc2VkIG9uIGJyb3dzZXIgdHlwZSxcbkknbSBhcHBseWluZyBDU1MgdG8gc3VwcHJlc3MgbW91c2UgZXZlbnRzIG9uIHRoZSBpbnB1dCAtIHRodXMgbWFraW5nIGl0IGJ1YmJsZSB1cCB0byB0aGUgcGFyZW50IGNvbnRyb2wsIHdoaWNoIHJlc3BvbmRzIHRoZSB3YXkgd2Ugd2FudC9cbi0tPlxuXG5AaWYgKHVzZXJzICYmIHBob3Rvcykge1xuICA8ZGl2IChjbGljayk9XCJzZWxlY3RVc2VyKClcIiBbY2xhc3MuY2xpY2thYmxlXT1cImNsaWNrYWJsZSgpXCI+XG4gICAgQGlmIChhY2NvdW50TmFtZXM/Lmxlbmd0aCkge1xuICAgICAgPGRpdiBbbmdDbGFzc109XCJjbGFzc1wiPlxuICAgICAgICBAZm9yIChhY2NvdW50TmFtZSBvZiBhY2NvdW50TmFtZXM7IHRyYWNrIGFjY291bnROYW1lOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyXCI+XG4gICAgICAgICAgICA8IS0tPGltZyAqbmdJZj1cImFjY291bnROYW1lICYmIGVtcFV0aWxzLmdldEVtcGxveWVlKGFjY291bnROYW1lKVwiIGFsdD1cIlwiIFtzcmNdPVwiZW1wVXRpbHMuZ2V0RW1wbG95ZWUoYWNjb3VudE5hbWUpIHwgZW1wbG95ZWVQaG90b1VybDpjYWNoZVNlcnZpY2UucGhvdG9zXCI+LS0+XG4gICAgICAgICAgICBAaWYgKGdldFBob3RvKGFjY291bnROYW1lKSkge1xuICAgICAgICAgICAgICA8aW1nIG1hdExpc3RJdGVtQXZhdGFyIGFsdD1cIlwiIFtzcmNdPVwiZ2V0UGhvdG8oYWNjb3VudE5hbWUpXCI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKGdldEdyb3VwKGFjY291bnROYW1lKSkge1xuICAgICAgICAgICAgICA8bWF0LWljb24+Z3JvdXA8L21hdC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8IS0tIFtkaXNhYmxlZF09XCIhaXNFZGdlXCIgLS0+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBkaXNhYmxlZCBbcGxhY2Vob2xkZXJdPVwiaSA9PT0gMCA/IHBsYWNlaG9sZGVyKCkgOiAnJ1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFVzZXIoYWNjb3VudE5hbWUpPy5kaXNwbGF5TmFtZSA/PyBnZXRHcm91cChhY2NvdW50TmFtZSk/LmRpc3BsYXlOYW1lID8/IGFjY291bnROYW1lXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB1blNlbGVjdFVzZXIoYWNjb3VudE5hbWUpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRJY29uPVwiY2xvc2VcIi8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBkaXNhYmxlZCBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiPiA8IS0tIFtkaXNhYmxlZF09XCIhaXNFZGdlXCIgLS0+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIH1cbiAgPC9kaXY+XG59IEBlbHNlIHtcbiAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIi8+XG59Il19
@@ -1,4 +1,6 @@
1
1
  export * from '@cleavelandprice/ngx-lib/active-directory';
2
+ export * from './model/default-user-chooser-data';
3
+ export * from './model/default-user-chooser-filter-options';
2
4
  export * from './model/user-chooser-data';
3
5
  export * from './model/user-chooser-filter-options';
4
6
  export * from './model/user-chooser-mode';
@@ -6,4 +8,4 @@ export * from './model/user-chooser-pre-processing-group';
6
8
  export * from './components/user-chooser/user-chooser.component';
7
9
  export * from './components/user-form-field/user-form-field.component';
8
10
  export * from './mat-active-directory.module';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWFjdGl2ZS1kaXJlY3RvcnkuYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbWF0LWFjdGl2ZS1kaXJlY3RvcnkuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFFMUQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQ0FBMkMsQ0FBQztBQUUxRCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsd0RBQXdELENBQUM7QUFFdkUsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvdXNlci1jaG9vc2VyLWRhdGEnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL3VzZXItY2hvb3Nlci1maWx0ZXItb3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvdXNlci1jaG9vc2VyLW1vZGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL3VzZXItY2hvb3Nlci1wcmUtcHJvY2Vzc2luZy1ncm91cCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdXNlci1jaG9vc2VyL3VzZXItY2hvb3Nlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdXNlci1mb3JtLWZpZWxkL3VzZXItZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9tYXQtYWN0aXZlLWRpcmVjdG9yeS5tb2R1bGUnO1xyXG5cclxuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LWFjdGl2ZS1kaXJlY3RvcnkuYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbWF0LWFjdGl2ZS1kaXJlY3RvcnkuYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkNBQTJDLENBQUM7QUFFMUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkNBQTJDLENBQUM7QUFFMUQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHdEQUF3RCxDQUFDO0FBRXZFLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWRhdGEnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC91c2VyLWNob29zZXItZGF0YSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC91c2VyLWNob29zZXItbW9kZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvdXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy91c2VyLWNob29zZXIvdXNlci1jaG9vc2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy91c2VyLWZvcm0tZmllbGQvdXNlci1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL21hdC1hY3RpdmUtZGlyZWN0b3J5Lm1vZHVsZSc7XHJcblxyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { DefaultUserChooserFilterOptions } from "./default-user-chooser-filter-options";
2
+ import { UserChooserMode } from "./user-chooser-mode";
3
+ export const DefaultUserChooserData = {
4
+ closeWhenSelectionMade: false,
5
+ allowCloseWithoutSelections: false,
6
+ includeDisabledUsers: false,
7
+ returnUserObjects: false,
8
+ showGroupMembershipTooltips: false,
9
+ showPhone: true,
10
+ title: 'Select User(s)',
11
+ mode: UserChooserMode.Single,
12
+ filterOptions: DefaultUserChooserFilterOptions
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC11c2VyLWNob29zZXItZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnkvbWF0ZXJpYWwvc3JjL21vZGVsL2RlZmF1bHQtdXNlci1jaG9vc2VyLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNuRCxzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLDJCQUEyQixFQUFFLEtBQUs7SUFDbEMsb0JBQW9CLEVBQUUsS0FBSztJQUMzQixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLDJCQUEyQixFQUFFLEtBQUs7SUFDbEMsU0FBUyxFQUFFLElBQUk7SUFDZixLQUFLLEVBQUUsZ0JBQWdCO0lBQ3ZCLElBQUksRUFBRSxlQUFlLENBQUMsTUFBTTtJQUM1QixhQUFhLEVBQUUsK0JBQStCO0NBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0VXNlckNob29zZXJGaWx0ZXJPcHRpb25zIH0gZnJvbSBcIi4vZGVmYXVsdC11c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJEYXRhIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLWRhdGFcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLW1vZGVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0VXNlckNob29zZXJEYXRhOiBVc2VyQ2hvb3NlckRhdGEgPSB7XHJcbiAgICBjbG9zZVdoZW5TZWxlY3Rpb25NYWRlOiBmYWxzZSxcclxuICAgIGFsbG93Q2xvc2VXaXRob3V0U2VsZWN0aW9uczogZmFsc2UsXHJcbiAgICBpbmNsdWRlRGlzYWJsZWRVc2VyczogZmFsc2UsXHJcbiAgICByZXR1cm5Vc2VyT2JqZWN0czogZmFsc2UsXHJcbiAgICBzaG93R3JvdXBNZW1iZXJzaGlwVG9vbHRpcHM6IGZhbHNlLFxyXG4gICAgc2hvd1Bob25lOiB0cnVlLFxyXG4gICAgdGl0bGU6ICdTZWxlY3QgVXNlcihzKScsXHJcbiAgICBtb2RlOiBVc2VyQ2hvb3Nlck1vZGUuU2luZ2xlLFxyXG4gICAgZmlsdGVyT3B0aW9uczogRGVmYXVsdFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9uc1xyXG59OyJdfQ==
@@ -0,0 +1,8 @@
1
+ export const DefaultUserChooserFilterOptions = {
2
+ accountName: true,
3
+ department: true,
4
+ groupMembership: false,
5
+ phoneNumber: true,
6
+ title: true
7
+ };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC11c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9tb2RlbC9kZWZhdWx0LXVzZXItY2hvb3Nlci1maWx0ZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBNkI7SUFDckUsV0FBVyxFQUFFLElBQUk7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsV0FBVyxFQUFFLElBQUk7SUFDakIsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckNob29zZXJGaWx0ZXJPcHRpb25zIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9uczogVXNlckNob29zZXJGaWx0ZXJPcHRpb25zID0ge1xyXG4gICAgYWNjb3VudE5hbWU6IHRydWUsXHJcbiAgICBkZXBhcnRtZW50OiB0cnVlLFxyXG4gICAgZ3JvdXBNZW1iZXJzaGlwOiBmYWxzZSxcclxuICAgIHBob25lTnVtYmVyOiB0cnVlLFxyXG4gICAgdGl0bGU6IHRydWVcclxufTsiXX0=
@@ -1,14 +1,2 @@
1
- import { DefaultUserChooserFilterOptions } from "./user-chooser-filter-options";
2
- import { UserChooserMode } from "./user-chooser-mode";
3
- export const DefaultUserChooserData = {
4
- closeWhenSelectionMade: false,
5
- allowCloseWithoutSelections: false,
6
- includeDisabledUsers: false,
7
- returnUserObjects: false,
8
- showGroupMembershipTooltips: false,
9
- showPhone: true,
10
- title: 'Select User(s)',
11
- mode: UserChooserMode.Single,
12
- filterOptions: DefaultUserChooserFilterOptions
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9tb2RlbC91c2VyLWNob29zZXItZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsK0JBQStCLEVBQTRCLE1BQU0sK0JBQStCLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBcUd0RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBb0I7SUFDbkQsc0JBQXNCLEVBQUUsS0FBSztJQUM3QiwyQkFBMkIsRUFBRSxLQUFLO0lBQ2xDLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IsaUJBQWlCLEVBQUUsS0FBSztJQUN4QiwyQkFBMkIsRUFBRSxLQUFLO0lBQ2xDLFNBQVMsRUFBRSxJQUFJO0lBQ2YsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07SUFDNUIsYUFBYSxFQUFFLCtCQUErQjtDQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JvdXAsIFVzZXIgfSBmcm9tIFwiQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnlcIjtcclxuaW1wb3J0IHsgUGhvdG9JdGVtIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50XCI7XHJcblxyXG5pbXBvcnQgeyBEZWZhdWx0VXNlckNob29zZXJGaWx0ZXJPcHRpb25zLCBVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnMgfSBmcm9tIFwiLi91c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLW1vZGVcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAgfSBmcm9tIFwiLi91c2VyLWNob29zZXItcHJlLXByb2Nlc3NpbmctZ3JvdXBcIjtcclxuXHJcbi8qZXhwb3J0IGNsYXNzIFVzZXJDaG9vc2VyRGF0YSB7XHJcbiAgICAvLyBTaG91bGQgdGhlIGRpYWxvZyBjbG9zZSBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhbiBpdGVtP1xyXG4gICAgLy8gQXBwbGllcyB0byBzaW5nbGUtdXNlciBtb2RlIG9ubHlcclxuICAgIGNsb3NlV2hlblNlbGVjdGlvbk1hZGUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIHRhc2tlZCB3aXRoIHB1bGxpbmcgQWN0aXZlIERpcmVjdG9yeSB1c2VycyAoZGVmYXVsdCBzZXR0aW5nKSxcclxuICAgIC8vICAgc2hvdWxkIHRoYXQgaW5jbHVkZSBkaXNhYmxlZCB1c2Vycz9cclxuICAgIGluY2x1ZGVEaXNhYmxlZFVzZXJzID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbXBvbmVudCBpcyB0YXNrZWQgd2l0aCBwdWxsaW5nIEFjdGl2ZSBEaXJlY3RvcnkgdXNlcnMgKGRlZmF1bHQgc2V0dGluZyksXHJcbiAgICAvLyAgIHNob3VsZCB0aGF0IHNlYXJjaCBiZWdpbiBhdCBhIHBhcnRpY3VsYXIgT3JnYW5pemF0aW9uIFVuaXQ/XHJcbiAgICBwYXJlbnRPdT86IHN0cmluZztcclxuXHJcbiAgICAvLyBJZiB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIEFjdGl2ZSBEaXJlY3RvcnkgVXNlciBvYmplY3RzLlxyXG4gICAgLy8gSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgY29tcG9uZW50IHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHVzZXIgYWNjb3VudCBuYW1lcy5cclxuICAgIHJldHVyblVzZXJPYmplY3RzID0gZmFsc2U7XHJcblxyXG4gICAgLy8gU2hvdWxkIHRoZSBkaWFsb2cgaW5jbHVkZSBob3ZlciB0b29wdGlwcyBmb3IgZWFjaCB1c2VyIHRoYXQgZGlzcGxheXMgdGhlaXIgZ3JvdXAgbWVtYmVyc2hpcFxyXG4gICAgLy8gWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcywgd2hpY2ggaXMgd2h5IHRoZSBkZWZhdWx0IGlzIGZhbHNlXHJcbiAgICBzaG93R3JvdXBNZW1iZXJzaGlwVG9vbHRpcHMgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBTaG91bGQgdGhlIHVzZXIgcGhvbmUgbnVtYmVyIGJlIGRpc3BsYXllZCBuZXh0IHRvIHRoZWlyIG5hbWUgaW4gdGhlIGRpYWxvZ1xyXG4gICAgc2hvd1Bob25lID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBUaXRsZSBkaXNwbGF5ZWQgaW4gdGhlIGRpYWxvZ1xyXG4gICAgdGl0bGUgPSAnU2VsZWN0IFVzZXIocyknO1xyXG5cclxuICAgIC8vIFNpbmdsZSBvciBNdWx0aSBtb2RlXHJcbiAgICBtb2RlID0gVXNlckNob29zZXJNb2RlLlNpbmdsZTtcclxuICAgIFxyXG4gICAgLy8gQXMgdGhlIHVzZXIgdHlwZXMgaW50byB0aGUgZmlsdGVyIGZpZWxkLCB0aGUgbGlzdCBvZiB1c2VycyBpcyBmaWx0ZXJlZC5cclxuICAgIC8vIFRoZSBmaWx0ZXJPcHRpb25zIGRldGVybWluZSB3aGljaCB1c2VyIHByb3BlcnRpZXMgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhhdCBmaWx0ZXIuXHJcbiAgICAvLyBOb3RlLCBkaXNwbGF5TmFtZSBpcyBhbHdheXMgaW5jbHVkZWQgKGhhcmQtY29kZWQpLCBhbmQgaXMgdGhlcmVmb3JlIG5vdCBhIGZpbHRlciBvcHRpb24uXHJcbiAgICBmaWx0ZXJPcHRpb25zID0gbmV3IFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9ucygpO1xyXG5cclxuICAgIGV4Y2x1c2lvbnMgPSBuZXcgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAoKTtcclxuICAgIGluY2x1c2lvbnMgPSBuZXcgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAoKTtcclxuICAgIHByZVNlbGVjdGlvbnMgPSBuZXcgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAoKTtcclxuXHJcbiAgICAvLyBCeSBkZWZhdWx0LCB0aGUgY29tcG9uZW50IHdpbGwgcHVsbCBhIGZyZXNoIGxpc3Qgb2YgQWN0aXZlIERpcmVjdG9yeSB1c2Vycy9ncm91cHMgYW5kIFNoYXJlUG9pbnQgcGhvdG9zLlxyXG4gICAgLy8gQnV0IGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGFscmVhZHkgaGFzIHRoZW0sIHlvdSBjYW4gcGFzcyB0aGVtIGluIHZpYSB0aGVzZSBwcm9wZXJ0aWVzLlxyXG4gICAgdXNlcnM/OiBVc2VyW107XHJcbiAgICBncm91cHM/OiBHcm91cFtdO1xyXG4gICAgcGhvdG9zPzogUGhvdG9JdGVtW107XHJcblxyXG4gICAgc2VsZWN0YWJsZUdyb3VwTmFtZXM/OiBzdHJpbmdbXTtcclxufSovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyRGF0YSB7XHJcbiAgICAvLyBTaG91bGQgdGhlIGRpYWxvZyBjbG9zZSBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHVzZXIgY2hvb3NlcyBhbiBpdGVtP1xyXG4gICAgLy8gQXBwbGllcyB0byBzaW5nbGUtdXNlciBtb2RlIG9ubHlcclxuICAgIGNsb3NlV2hlblNlbGVjdGlvbk1hZGU/OiBib29sZWFuO1xyXG5cclxuICAgIGFsbG93Q2xvc2VXaXRob3V0U2VsZWN0aW9ucz86IGJvb2xlYW47XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbXBvbmVudCBpcyB0YXNrZWQgd2l0aCBwdWxsaW5nIEFjdGl2ZSBEaXJlY3RvcnkgdXNlcnMgKGRlZmF1bHQgc2V0dGluZyksXHJcbiAgICAvLyAgIHNob3VsZCB0aGF0IGluY2x1ZGUgZGlzYWJsZWQgdXNlcnM/XHJcbiAgICBpbmNsdWRlRGlzYWJsZWRVc2Vycz86IGJvb2xlYW47XHJcblxyXG4gICAgLy8gSWYgdGhlIGNvbXBvbmVudCBpcyB0YXNrZWQgd2l0aCBwdWxsaW5nIEFjdGl2ZSBEaXJlY3RvcnkgdXNlcnMgKGRlZmF1bHQgc2V0dGluZyksXHJcbiAgICAvLyAgIHNob3VsZCB0aGF0IHNlYXJjaCBiZWdpbiBhdCBhIHBhcnRpY3VsYXIgT3JnYW5pemF0aW9uIFVuaXQ/XHJcbiAgICBwYXJlbnRPdT86IHN0cmluZztcclxuXHJcbiAgICAvLyBJZiB0cnVlLCB0aGUgY29tcG9uZW50IHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIEFjdGl2ZSBEaXJlY3RvcnkgVXNlciBvYmplY3RzLlxyXG4gICAgLy8gSWYgZmFsc2UgKGRlZmF1bHQpLCB0aGUgY29tcG9uZW50IHdpbGwgcmV0dXJuIGFuIGFycmF5IG9mIHVzZXIgYWNjb3VudCBuYW1lcy5cclxuICAgIHJldHVyblVzZXJPYmplY3RzPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBTaG91bGQgdGhlIGRpYWxvZyBpbmNsdWRlIGhvdmVyIHRvb3B0aXBzIGZvciBlYWNoIHVzZXIgdGhhdCBkaXNwbGF5cyB0aGVpciBncm91cCBtZW1iZXJzaGlwXHJcbiAgICAvLyBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzLCB3aGljaCBpcyB3aHkgdGhlIGRlZmF1bHQgaXMgZmFsc2VcclxuICAgIHNob3dHcm91cE1lbWJlcnNoaXBUb29sdGlwcz86IGJvb2xlYW47XHJcblxyXG4gICAgLy8gU2hvdWxkIHRoZSB1c2VyIHBob25lIG51bWJlciBiZSBkaXNwbGF5ZWQgbmV4dCB0byB0aGVpciBuYW1lIGluIHRoZSBkaWFsb2dcclxuICAgIHNob3dQaG9uZT86IGJvb2xlYW47XHJcblxyXG4gICAgLy8gVGl0bGUgZGlzcGxheWVkIGluIHRoZSBkaWFsb2dcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG5cclxuICAgIC8vIFNpbmdsZSBvciBNdWx0aSBtb2RlXHJcbiAgICBtb2RlPzogVXNlckNob29zZXJNb2RlO1xyXG4gICAgXHJcbiAgICAvLyBBcyB0aGUgdXNlciB0eXBlcyBpbnRvIHRoZSBmaWx0ZXIgZmllbGQsIHRoZSBsaXN0IG9mIHVzZXJzIGlzIGZpbHRlcmVkLlxyXG4gICAgLy8gVGhlIGZpbHRlck9wdGlvbnMgZGV0ZXJtaW5lIHdoaWNoIHVzZXIgcHJvcGVydGllcyBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGF0IGZpbHRlci5cclxuICAgIC8vIE5vdGUsIGRpc3BsYXlOYW1lIGlzIGFsd2F5cyBpbmNsdWRlZCAoaGFyZC1jb2RlZCksIGFuZCBpcyB0aGVyZWZvcmUgbm90IGEgZmlsdGVyIG9wdGlvbi5cclxuICAgIGZpbHRlck9wdGlvbnM/OiBVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnM7XHJcblxyXG4gICAgZXhjbHVzaW9ucz86IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG4gICAgaW5jbHVzaW9ucz86IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG4gICAgcHJlU2VsZWN0aW9ucz86IFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwO1xyXG5cclxuICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBjb21wb25lbnQgd2lsbCBwdWxsIGEgZnJlc2ggbGlzdCBvZiBBY3RpdmUgRGlyZWN0b3J5IHVzZXJzL2dyb3VwcyBhbmQgU2hhcmVQb2ludCBwaG90b3MuXHJcbiAgICAvLyBCdXQgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgYWxyZWFkeSBoYXMgdGhlbSwgeW91IGNhbiBwYXNzIHRoZW0gaW4gdmlhIHRoZXNlIHByb3BlcnRpZXMuXHJcbiAgICB1c2Vycz86IFVzZXJbXTtcclxuICAgIGdyb3Vwcz86IEdyb3VwW107XHJcbiAgICBwaG90b3M/OiBQaG90b0l0ZW1bXTtcclxuXHJcbiAgICBzZWxlY3RhYmxlR3JvdXBOYW1lcz86IHN0cmluZ1tdO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdFVzZXJDaG9vc2VyRGF0YTogVXNlckNob29zZXJEYXRhID0ge1xyXG4gICAgY2xvc2VXaGVuU2VsZWN0aW9uTWFkZTogZmFsc2UsXHJcbiAgICBhbGxvd0Nsb3NlV2l0aG91dFNlbGVjdGlvbnM6IGZhbHNlLFxyXG4gICAgaW5jbHVkZURpc2FibGVkVXNlcnM6IGZhbHNlLFxyXG4gICAgcmV0dXJuVXNlck9iamVjdHM6IGZhbHNlLFxyXG4gICAgc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzOiBmYWxzZSxcclxuICAgIHNob3dQaG9uZTogdHJ1ZSxcclxuICAgIHRpdGxlOiAnU2VsZWN0IFVzZXIocyknLFxyXG4gICAgbW9kZTogVXNlckNob29zZXJNb2RlLlNpbmdsZSxcclxuICAgIGZpbHRlck9wdGlvbnM6IERlZmF1bHRVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnNcclxufTsiXX0=
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9hY3RpdmUtZGlyZWN0b3J5L21hdGVyaWFsL3NyYy9tb2RlbC91c2VyLWNob29zZXItZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JvdXAsIFVzZXIgfSBmcm9tIFwiQGNsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL2FjdGl2ZS1kaXJlY3RvcnlcIjtcclxuaW1wb3J0IHsgUGhvdG9JdGVtIH0gZnJvbSBcIkBjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYi9zaGFyZXBvaW50XCI7XHJcblxyXG5pbXBvcnQgeyBVc2VyQ2hvb3NlckZpbHRlck9wdGlvbnMgfSBmcm9tIFwiLi91c2VyLWNob29zZXItZmlsdGVyLW9wdGlvbnNcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJNb2RlIH0gZnJvbSBcIi4vdXNlci1jaG9vc2VyLW1vZGVcIjtcclxuaW1wb3J0IHsgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAgfSBmcm9tIFwiLi91c2VyLWNob29zZXItcHJlLXByb2Nlc3NpbmctZ3JvdXBcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNob29zZXJEYXRhIHtcclxuICAgIC8vIFNob3VsZCB0aGUgZGlhbG9nIGNsb3NlIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdXNlciBjaG9vc2VzIGFuIGl0ZW0/XHJcbiAgICAvLyBBcHBsaWVzIHRvIHNpbmdsZS11c2VyIG1vZGUgb25seVxyXG4gICAgY2xvc2VXaGVuU2VsZWN0aW9uTWFkZT86IGJvb2xlYW47XHJcblxyXG4gICAgYWxsb3dDbG9zZVdpdGhvdXRTZWxlY3Rpb25zPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIHRhc2tlZCB3aXRoIHB1bGxpbmcgQWN0aXZlIERpcmVjdG9yeSB1c2VycyAoZGVmYXVsdCBzZXR0aW5nKSxcclxuICAgIC8vICAgc2hvdWxkIHRoYXQgaW5jbHVkZSBkaXNhYmxlZCB1c2Vycz9cclxuICAgIGluY2x1ZGVEaXNhYmxlZFVzZXJzPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBJZiB0aGUgY29tcG9uZW50IGlzIHRhc2tlZCB3aXRoIHB1bGxpbmcgQWN0aXZlIERpcmVjdG9yeSB1c2VycyAoZGVmYXVsdCBzZXR0aW5nKSxcclxuICAgIC8vICAgc2hvdWxkIHRoYXQgc2VhcmNoIGJlZ2luIGF0IGEgcGFydGljdWxhciBPcmdhbml6YXRpb24gVW5pdD9cclxuICAgIHBhcmVudE91Pzogc3RyaW5nO1xyXG5cclxuICAgIC8vIElmIHRydWUsIHRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgQWN0aXZlIERpcmVjdG9yeSBVc2VyIG9iamVjdHMuXHJcbiAgICAvLyBJZiBmYWxzZSAoZGVmYXVsdCksIHRoZSBjb21wb25lbnQgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgdXNlciBhY2NvdW50IG5hbWVzLlxyXG4gICAgcmV0dXJuVXNlck9iamVjdHM/OiBib29sZWFuO1xyXG5cclxuICAgIC8vIFNob3VsZCB0aGUgZGlhbG9nIGluY2x1ZGUgaG92ZXIgdG9vcHRpcHMgZm9yIGVhY2ggdXNlciB0aGF0IGRpc3BsYXlzIHRoZWlyIGdyb3VwIG1lbWJlcnNoaXBcclxuICAgIC8vIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMsIHdoaWNoIGlzIHdoeSB0aGUgZGVmYXVsdCBpcyBmYWxzZVxyXG4gICAgc2hvd0dyb3VwTWVtYmVyc2hpcFRvb2x0aXBzPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBTaG91bGQgdGhlIHVzZXIgcGhvbmUgbnVtYmVyIGJlIGRpc3BsYXllZCBuZXh0IHRvIHRoZWlyIG5hbWUgaW4gdGhlIGRpYWxvZ1xyXG4gICAgc2hvd1Bob25lPzogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBUaXRsZSBkaXNwbGF5ZWQgaW4gdGhlIGRpYWxvZ1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLy8gU2luZ2xlIG9yIE11bHRpIG1vZGVcclxuICAgIG1vZGU/OiBVc2VyQ2hvb3Nlck1vZGU7XHJcbiAgICBcclxuICAgIC8vIEFzIHRoZSB1c2VyIHR5cGVzIGludG8gdGhlIGZpbHRlciBmaWVsZCwgdGhlIGxpc3Qgb2YgdXNlcnMgaXMgZmlsdGVyZWQuXHJcbiAgICAvLyBUaGUgZmlsdGVyT3B0aW9ucyBkZXRlcm1pbmUgd2hpY2ggdXNlciBwcm9wZXJ0aWVzIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoYXQgZmlsdGVyLlxyXG4gICAgLy8gTm90ZSwgZGlzcGxheU5hbWUgaXMgYWx3YXlzIGluY2x1ZGVkIChoYXJkLWNvZGVkKSwgYW5kIGlzIHRoZXJlZm9yZSBub3QgYSBmaWx0ZXIgb3B0aW9uLlxyXG4gICAgZmlsdGVyT3B0aW9ucz86IFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9ucztcclxuXHJcbiAgICBleGNsdXNpb25zPzogVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXA7XHJcbiAgICBpbmNsdXNpb25zPzogVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXA7XHJcbiAgICBwcmVTZWxlY3Rpb25zPzogVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXA7XHJcblxyXG4gICAgLy8gQnkgZGVmYXVsdCwgdGhlIGNvbXBvbmVudCB3aWxsIHB1bGwgYSBmcmVzaCBsaXN0IG9mIEFjdGl2ZSBEaXJlY3RvcnkgdXNlcnMvZ3JvdXBzIGFuZCBTaGFyZVBvaW50IHBob3Rvcy5cclxuICAgIC8vIEJ1dCBpZiB0aGUgcGFyZW50IGNvbXBvbmVudCBhbHJlYWR5IGhhcyB0aGVtLCB5b3UgY2FuIHBhc3MgdGhlbSBpbiB2aWEgdGhlc2UgcHJvcGVydGllcy5cclxuICAgIHVzZXJzPzogVXNlcltdO1xyXG4gICAgZ3JvdXBzPzogR3JvdXBbXTtcclxuICAgIHBob3Rvcz86IFBob3RvSXRlbVtdO1xyXG5cclxuICAgIHNlbGVjdGFibGVHcm91cE5hbWVzPzogc3RyaW5nW107XHJcbn0iXX0=
@@ -1,9 +1,3 @@
1
1
  ;
2
- export const DefaultUserChooserFilterOptions = {
3
- accountName: true,
4
- department: true,
5
- groupMembership: false,
6
- phoneNumber: true,
7
- title: true
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBNkI7SUFDckUsV0FBVyxFQUFFLElBQUk7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsV0FBVyxFQUFFLElBQUk7SUFDakIsS0FBSyxFQUFFLElBQUk7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypleHBvcnQgY2xhc3MgVXNlckNob29zZXJGaWx0ZXJPcHRpb25zIHtcclxuICAgIGFjY291bnROYW1lID0gdHJ1ZTtcclxuICAgIGRlcGFydG1lbnQgPSB0cnVlO1xyXG4gICAgZ3JvdXBNZW1iZXJzaGlwID0gZmFsc2U7XHJcbiAgICBwaG9uZU51bWJlciA9IHRydWU7XHJcbiAgICB0aXRsZSA9IHRydWU7XHJcbn0qL1xyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9ucyB7XHJcbiAgICBhY2NvdW50TmFtZT86IGJvb2xlYW47XHJcbiAgICBkZXBhcnRtZW50PzogYm9vbGVhbjtcclxuICAgIGdyb3VwTWVtYmVyc2hpcD86IGJvb2xlYW47XHJcbiAgICBwaG9uZU51bWJlcj86IGJvb2xlYW47XHJcbiAgICB0aXRsZT86IGJvb2xlYW47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgRGVmYXVsdFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9uczogVXNlckNob29zZXJGaWx0ZXJPcHRpb25zID0ge1xyXG4gICAgYWNjb3VudE5hbWU6IHRydWUsXHJcbiAgICBkZXBhcnRtZW50OiB0cnVlLFxyXG4gICAgZ3JvdXBNZW1iZXJzaGlwOiBmYWxzZSxcclxuICAgIHBob25lTnVtYmVyOiB0cnVlLFxyXG4gICAgdGl0bGU6IHRydWVcclxufTsiXX0=
2
+ export {};
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLWZpbHRlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyRmlsdGVyT3B0aW9ucyB7XHJcbiAgICBhY2NvdW50TmFtZT86IGJvb2xlYW47XHJcbiAgICBkZXBhcnRtZW50PzogYm9vbGVhbjtcclxuICAgIGdyb3VwTWVtYmVyc2hpcD86IGJvb2xlYW47XHJcbiAgICBwaG9uZU51bWJlcj86IGJvb2xlYW47XHJcbiAgICB0aXRsZT86IGJvb2xlYW47XHJcbn07Il19
@@ -1,3 +1,3 @@
1
1
  ;
2
2
  export {};
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKmV4cG9ydCBjbGFzcyBVc2VyQ2hvb3NlclByZVByb2Nlc3NpbmdHcm91cCB7XHJcbiAgICBhY2NvdW50TmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBkZXBhcnRtZW50czogc3RyaW5nW10gPSBbXTtcclxuICAgIGdyb3Vwczogc3RyaW5nW10gPSBbXTtcclxuICAgIHRpdGxlczogc3RyaW5nW10gPSBbXTtcclxufSovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNob29zZXJQcmVQcm9jZXNzaW5nR3JvdXAge1xyXG4gICAgYWNjb3VudE5hbWVzPzogc3RyaW5nW107XHJcbiAgICBkZXBhcnRtZW50cz86IHN0cmluZ1tdO1xyXG4gICAgZ3JvdXBzPzogc3RyaW5nW107XHJcbiAgICB0aXRsZXM/OiBzdHJpbmdbXTtcclxufTsiXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvYWN0aXZlLWRpcmVjdG9yeS9tYXRlcmlhbC9zcmMvbW9kZWwvdXNlci1jaG9vc2VyLXByZS1wcm9jZXNzaW5nLWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFVzZXJDaG9vc2VyUHJlUHJvY2Vzc2luZ0dyb3VwIHtcclxuICAgIGFjY291bnROYW1lcz86IHN0cmluZ1tdO1xyXG4gICAgZGVwYXJ0bWVudHM/OiBzdHJpbmdbXTtcclxuICAgIGdyb3Vwcz86IHN0cmluZ1tdO1xyXG4gICAgdGl0bGVzPzogc3RyaW5nW107XHJcbn07Il19
@@ -0,0 +1,6 @@
1
+ // DO NOT EXPORT THIS FILE!
2
+ export const DefaultCredentials = {
3
+ username: 'itprocess',
4
+ password: 'itproce$$'
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jcmVkZW50aWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsZWF2ZWxhbmRwcmljZS9uZ3gtbGliL3NoYXJlcG9pbnQvc3JjL2RlZmF1bHQtY3JlZGVudGlhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBRTNCLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFFBQVEsRUFBRSxXQUFXO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBETyBOT1QgRVhQT1JUIFRISVMgRklMRSFcclxuXHJcbmV4cG9ydCBjb25zdCBEZWZhdWx0Q3JlZGVudGlhbHMgPSB7XHJcbiAgICB1c2VybmFtZTogJ2l0cHJvY2VzcycsXHJcbiAgICBwYXNzd29yZDogJ2l0cHJvY2UkJCdcclxufTsiXX0=
@@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http';
2
2
  import { Inject, inject, Injectable, Optional } from '@angular/core';
3
3
  import { DateTime } from 'luxon';
4
4
  import { of } from 'rxjs';
5
+ import { DefaultCredentials } from '../default-credentials';
5
6
  import { NgxLibServiceBase } from '@cleavelandprice/ngx-lib';
6
7
  import { SharePointServiceOptionsToken } from '../model/sharepoint-service-options';
7
8
  import * as i0 from "@angular/core";
@@ -27,10 +28,7 @@ export class SharePointService extends NgxLibServiceBase {
27
28
  this.options = options;
28
29
  this.options = {
29
30
  ...options,
30
- credentials: options?.credentials ?? {
31
- username: 'viewer',
32
- password: 'viewer'
33
- },
31
+ credentials: options?.credentials ?? DefaultCredentials,
34
32
  caching: options?.caching ?? {
35
33
  enabled: false,
36
34
  lifeMinutes: this.#defaultCacheLifeMinutes
@@ -154,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
154
152
  type: Inject,
155
153
  args: [SharePointServiceOptionsToken]
156
154
  }] }] });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVwb2ludC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludC9zcmMvc2VydmljZXMvc2hhcmVwb2ludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUs3RCxPQUFPLEVBQTRCLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBTzlHLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxpQkFBaUI7SUFDdEQsU0FBUyxHQUFHO1FBQ1YsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUM7S0FDekIsQ0FBQztJQUVGLE1BQU0sR0FHRixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBRTVDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztJQUUvQixtQkFBbUI7SUFDbkIsYUFBYSxDQUFJLEtBQXFCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDeEYsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMs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QUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQzs4R0F0S1UsaUJBQWlCLGtCQTBCSSw2QkFBNkI7a0hBMUJsRCxpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBMkJjLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTmd4TGliU2VydmljZUJhc2UgfSBmcm9tICdAY2xlYXZlbGFuZHByaWNlL25neC1saWInO1xyXG5pbXBvcnQgeyBDYWNoZU9iamVjdCB9IGZyb20gJy4uL21vZGVsL2NhY2hlLW9iamVjdCc7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vbW9kZWwvbGlzdC1pdGVtJztcclxuaW1wb3J0IHsgTGlzdEl0ZW1zUmVxdWVzdCB9IGZyb20gJy4uL21vZGVsL2xpc3QtaXRlbXMtcmVxdWVzdCc7XHJcbmltcG9ydCB7IFBob3RvSXRlbSB9IGZyb20gJy4uL21vZGVsL3Bob3RvLWl0ZW0nO1xyXG5pbXBvcnQgeyBTaGFyZVBvaW50U2VydmljZU9wdGlvbnMsIFNoYXJlUG9pbnRTZXJ2aWNlT3B0aW9uc1Rva2VuIH0gZnJvbSAnLi4vbW9kZWwvc2hhcmVwb2ludC1zZXJ2aWNlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vbW9kZWwvdXNlcic7XHJcbmltcG9ydCB7IFVzZXJSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvdXNlci1yZXF1ZXN0JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNoYXJlUG9pbnRTZXJ2aWNlIGV4dGVuZHMgTmd4TGliU2VydmljZUJhc2Uge1xyXG4gICNzZXJ2aWNlcyA9IHtcclxuICAgIGh0dHA6IGluamVjdChIdHRwQ2xpZW50KVxyXG4gIH07XHJcblxyXG4gICNjYWNoZToge1xyXG4gICAgdXNlcnM/OiBDYWNoZU9iamVjdDxVc2VyPixcclxuICAgIHBob3Rvcz86IENhY2hlT2JqZWN0PFBob3RvSXRlbT5cclxuICB9ID0geyB1c2VyczogdW5kZWZpbmVkLCBwaG90b3M6IHVuZGVmaW5lZCB9O1xyXG5cclxuICAjZGVmYXVsdENhY2hlTGlmZU1pbnV0ZXMgPSA3MjA7XHJcblxyXG4gIC8vI3JlZ2lvbiBVdGlsaXRpZXNcclxuICAjY2FjaGVFeHBpcmVkPFQ+KGNhY2hlOiBDYWNoZU9iamVjdDxUPik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjYWNoZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaWZlTWludXRlcyA9IHRoaXMub3B0aW9ucz8uY2FjaGluZz8ubGlmZU1pbnV0ZXMgPz8gdGhpcy4jZGVmYXVsdENhY2hlTGlmZU1pbnV0ZXM7XHJcbiAgICBjb25zdCBleHBpcmF0aW9uID0gY2FjaGUubGFzdFVwZGF0ZS5wbHVzKHsgbWludXRlczogbGlmZU1pbnV0ZXN9KTtcclxuXHJcbiAgICByZXR1cm4gRGF0ZVRpbWUubm93KCkgPiBleHBpcmF0aW9uO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIEluaXRpYWxpemF0aW9uXHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChTaGFyZVBvaW50U2VydmljZU9wdGlvbnNUb2tlbikgcHJpdmF0ZSBvcHRpb25zOiBTaGFyZVBvaW50U2VydmljZU9wdGlvbnMpIHtcclxuXHJcbiAgICBzdXBlcihvcHRpb25zKTtcclxuXHJcbiAgICB0aGlzLm9wdGlvbnMgPSB7XHJcbiAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgIFxyXG4gICAgICBjcmVkZW50aWFsczogb3B0aW9ucz8uY3JlZGVudGlhbHMgPz8ge1xyXG4gICAgICAgIHVzZXJuYW1lOiAndmlld2VyJyxcclxuICAgICAgICBwYXNzd29yZDogJ3ZpZXdlcidcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGNhY2hpbmc6IG9wdGlvbnM/LmNhY2hpbmcgPz8ge1xyXG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICBsaWZlTWludXRlczogdGhpcy4jZGVmYXVsdENhY2hlTGlmZU1pbnV0ZXNcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGVuZHBvaW50czogb3B0aW9ucz8uZW5kcG9pbnRzID8/IHtcclxuICAgICAgICAgIHVzZXJzOiBgL3NoYXJlcG9pbnQvdXNlcnNgLFxyXG4gICAgICAgICAgbGlzdEl0ZW1zOiBgL3NoYXJlcG9pbnQvbGlzdGl0ZW1zYFxyXG4gICAgICB9LFxyXG4gIFxyXG4gICAgICBwaG90b3M6IG9wdGlvbnM/LnBob3RvcyA/PyB7XHJcbiAgICAgICAgICBzaXRlOiAnaHR0cHM6Ly9zaGFyZXBvaW50LmNsZWF2ZWxhbmRwcmljZS5jb20vZGlnaXRhbGRpc3BsYXknLFxyXG4gICAgICAgICAgbGlzdDogJ0VtcGxveWVlIFRodW1ibmFpbCBQaG90b3MnLFxyXG4gICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXNUb1JldHJpZXZlOiBbICdFbmNvZGVkQWJzVXJsJyBdXHJcbiAgICAgIH0sXHJcbiAgXHJcbiAgICAgIGxvZ2dpbmc6IG9wdGlvbnM/LmxvZ2dpbmcgPz8ge1xyXG4gICAgICAgICAgZGF0YUNhY2hlZDogZmFsc2UsXHJcbiAgICAgICAgICBjYWNoZWREYXRhUmV0dXJuZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgZnJlc2hEYXRhUmV0dXJuZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2FjaGVDbGVhcmVkOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgZ2V0TGlzdEl0ZW1zKHJlcXVlc3Q6IExpc3RJdGVtc1JlcXVlc3QpOiBPYnNlcnZhYmxlPExpc3RJdGVtW10+IHtcclxuICAgIC8vY29uc3QgYXBpVXJsID0gdGhpcy5vcHRpb25zPy5hcGlVcmw7XHJcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMub3B0aW9ucz8uZW5kcG9pbnRzPy5saXN0SXRlbXM7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuI3NlcnZpY2VzLmh0dHAucG9zdDxMaXN0SXRlbVtdPihgJHt0aGlzLmFwaVVybH0ke2VuZHBvaW50fWAsIHJlcXVlc3QpO1xyXG4gICAgLy9yZXR1cm4gdGhpcy4jc2VydmljZXMuaHR0cC5wb3N0PExpc3RJdGVtW10+KHRoaXMuY29uZmlnIS5lbmRwb2ludHMhLmxpc3RJdGVtcyEsIHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGhvdG9zKCk6IE9ic2VydmFibGU8UGhvdG9JdGVtW10+IHtcclxuICAgIGNvbnN0IHJlcXVlc3Q6IExpc3RJdGVtc1JlcXVlc3QgPSB7XHJcbiAgICAgIHVzZXJuYW1lOiB0aGlzLm9wdGlvbnM/LmNyZWRlbnRpYWxzPy51c2VybmFtZSxcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMub3B0aW9ucz8uY3JlZGVudGlhbHM/LnBhc3N3b3JkLFxyXG4gICAgICBzaXRlOiB0aGlzLm9wdGlvbnM/LnBob3Rvcz8uc2l0ZSxcclxuICAgICAgbGlzdDogdGhpcy5vcHRpb25zPy5waG90b3M/Lmxpc3QsXHJcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzVG9SZXRyaWV2ZTogdGhpcy5vcHRpb25zPy5waG90b3M/LmFkZGl0aW9uYWxQcm9wZXJ0aWVzVG9SZXRyaWV2ZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuZ2V0TGlzdEl0ZW1zKHJlcXVlc3QpIGFzIE9ic2VydmFibGU8UGhvdG9JdGVtW10+O1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmNhY2hpbmc/LmVuYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuI2NhY2hlRXhwaXJlZDxQaG90b0l0ZW0+KHRoaXMuI2NhY2hlPy5waG90b3MhKSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YSBhbmQgY2FjaGUgaXRcclxuICAgICAgICBvYnNlcnZhYmxlJC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZSEucGhvdG9zID0ge1xyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBsYXN0VXBkYXRlOiBEYXRlVGltZS5ub3coKVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5sb2dnaW5nPy5kYXRhQ2FjaGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpZmVNaW51dGVzID0gdGhpcy5vcHRpb25zLmNhY2hpbmc/LmxpZmVNaW51dGVzID8/IHRoaXMuI2RlZmF1bHRDYWNoZUxpZmVNaW51dGVzO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGhvdG9zIGNhY2hlZCBmb3IgJHtsaWZlTWludXRlc30gbWludXRlc2ApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENhY2hlIGV4aXN0cyBhbmQgaGFzbid0IGV4cGlyZWQgeWV0XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2dnaW5nPy5jYWNoZWREYXRhUmV0dXJuZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZXR1cm5pbmcgY2FjaGVkIHBob3RvcycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuI2NhY2hlIS5waG90b3MhLmRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2FjaGUgaXMgZWl0aGVyIGRpc2FibGVkIG9yIGV4cGlyZWQsIHJldHVybiBkYXRhIGZyb20gQVBJXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sb2dnaW5nPy5mcmVzaERhdGFSZXR1cm5lZCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnUmV0dXJuaW5nIGZyZXNoIHBob3RvcycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYnNlcnZhYmxlJDtcclxuICB9XHJcblxyXG4gIGdldFVzZXJzKHJlcXVlc3Q6IFVzZXJSZXF1ZXN0LCBpZD86IG51bWJlcik6IE9ic2VydmFibGU8VXNlciB8IFVzZXJbXT4ge1xyXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLm9wdGlvbnM/LmVuZHBvaW50cz8udXNlcnM7XHJcbiAgICBcclxuICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy4jc2VydmljZXMuaHR0cC5wb3N0PFVzZXIgfCBVc2VyW10+KGAke3RoaXMuYXBpVXJsfSR7ZW5kcG9pbnR9LyR7aWQgPz8gJyd9YCwgcmVxdWVzdCk7XHJcblxyXG4gICAgLy8jcmVnaW9uIFNpbmdsZSB1c2VyXHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgcmV0dXJuIG9ic2VydmFibGUkO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIE11bHRpcGxlIHVzZXJzXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jYWNoaW5nPy5lbmFibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLiNjYWNoZUV4cGlyZWQ8VXNlcj4odGhpcy4jY2FjaGUhLnVzZXJzISkpIHtcclxuICAgICAgICAvLyBHZXQgdGhlIGRhdGEgYW5kIGNhY2hlIGl0XHJcbiAgICAgICAgb2JzZXJ2YWJsZSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jY2FjaGUhLnVzZXJzID0ge1xyXG4gICAgICAgICAgICBkYXRhOiBkYXRhIGFzIFVzZXJbXSxcclxuICAgICAgICAgICAgbGFzdFVwZGF0ZTogRGF0ZVRpbWUubm93KClcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubG9nZ2luZz8uZGF0YUNhY2hlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsaWZlTWludXRlcyA9IHRoaXMub3B0aW9ucy5jYWNoaW5nPy5saWZlTWludXRlcyA/PyB0aGlzLiNkZWZhdWx0Q2FjaGVMaWZlTWludXRlcztcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFVzZXJzIGNhY2hlZCBmb3IgJHtsaWZlTWludXRlc30gbWludXRlc2ApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENhY2hlIGV4aXN0cyBhbmQgaGFzbid0IGV4cGlyZWQgeWV0XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2dnaW5nPy5jYWNoZWREYXRhUmV0dXJuZWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSZXR1cm5pbmcgY2FjaGVkIHVzZXJzJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YodGhpcy4jY2FjaGUhLnVzZXJzIS5kYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENhY2hlIGlzIGVpdGhlciBkaXNhYmxlZCBvciBleHBpcmVkLCByZXR1cm4gZGF0YSBmcm9tIEFQSVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubG9nZ2luZz8uZnJlc2hEYXRhUmV0dXJuZWQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1JldHVybmluZyBmcmVzaCB1c2VycycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYnNlcnZhYmxlJDtcclxuICAgIC8vI2VuZHJlZ2lvblxyXG4gIH1cclxuXHJcbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuI2NhY2hlID0geyB1c2VyczogdW5kZWZpbmVkLCBwaG90b3M6IHVuZGVmaW5lZCB9O1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmxvZ2dpbmc/LmNhY2hlQ2xlYXJlZCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ2FjaGUgY2xlYXJlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ==
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVwb2ludC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xlYXZlbGFuZHByaWNlL25neC1saWIvc2hhcmVwb2ludC9zcmMvc2VydmljZXMvc2hhcmVwb2ludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUs3RCxPQUFPLEVBQTRCLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBTzlHLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxpQkFBaUI7SUFDdEQsU0FBUyxHQUFHO1FBQ1YsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUM7S0FDekIsQ0FBQztJQUVGLE1BQU0sR0FHRixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBRTVDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztJQUUvQixtQkFBbUI7SUFDbkIsYUFBYSxDQUFJLEtBQXFCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDeEYs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LElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQzs4R0FuS1UsaUJBQWlCLGtCQTBCSSw2QkFBNkI7a0hBMUJsRCxpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBMkJjLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgRGVmYXVsdENyZWRlbnRpYWxzIH0gZnJvbSAnLi4vZGVmYXVsdC1jcmVkZW50aWFscyc7XHJcblxyXG5pbXBvcnQgeyBOZ3hMaWJTZXJ2aWNlQmFzZSB9IGZyb20gJ0BjbGVhdmVsYW5kcHJpY2Uvbmd4LWxpYic7XHJcbmltcG9ydCB7IENhY2hlT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWwvY2FjaGUtb2JqZWN0JztcclxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi9tb2RlbC9saXN0LWl0ZW0nO1xyXG5pbXBvcnQgeyBMaXN0SXRlbXNSZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWwvbGlzdC1pdGVtcy1yZXF1ZXN0JztcclxuaW1wb3J0IHsgUGhvdG9JdGVtIH0gZnJvbSAnLi4vbW9kZWwvcGhvdG8taXRlbSc7XHJcbmltcG9ydCB7IFNoYXJlUG9pbnRTZXJ2aWNlT3B0aW9ucywgU2hhcmVQb2ludFNlcnZpY2VPcHRpb25zVG9rZW4gfSBmcm9tICcuLi9tb2RlbC9zaGFyZXBvaW50LXNlcnZpY2Utb3B0aW9ucyc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9tb2RlbC91c2VyJztcclxuaW1wb3J0IHsgVXNlclJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC91c2VyLXJlcXVlc3QnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hhcmVQb2ludFNlcnZpY2UgZXh0ZW5kcyBOZ3hMaWJTZXJ2aWNlQmFzZSB7XHJcbiAgI3NlcnZpY2VzID0ge1xyXG4gICAgaHR0cDogaW5qZWN0KEh0dHBDbGllbnQpXHJcbiAgfTtcclxuXHJcbiAgI2NhY2hlOiB7XHJcbiAgICB1c2Vycz86IENhY2hlT2JqZWN0PFVzZXI+LFxyXG4gICAgcGhvdG9zPzogQ2FjaGVPYmplY3Q8UGhvdG9JdGVtPlxyXG4gIH0gPSB7IHVzZXJzOiB1bmRlZmluZWQsIHBob3RvczogdW5kZWZpbmVkIH07XHJcblxyXG4gICNkZWZhdWx0Q2FjaGVMaWZlTWludXRlcyA9IDcyMDtcclxuXHJcbiAgLy8jcmVnaW9uIFV0aWxpdGllc1xyXG4gICNjYWNoZUV4cGlyZWQ8VD4oY2FjaGU6IENhY2hlT2JqZWN0PFQ+KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWNhY2hlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxpZmVNaW51dGVzID0gdGhpcy5vcHRpb25zPy5jYWNoaW5nPy5saWZlTWludXRlcyA/PyB0aGlzLiNkZWZhdWx0Q2FjaGVMaWZlTWludXRlcztcclxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSBjYWNoZS5sYXN0VXBkYXRlLnBsdXMoeyBtaW51dGVzOiBsaWZlTWludXRlc30pO1xyXG5cclxuICAgIHJldHVybiBEYXRlVGltZS5ub3coKSA+IGV4cGlyYXRpb247XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5pdGlhbGl6YXRpb25cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFNoYXJlUG9pbnRTZXJ2aWNlT3B0aW9uc1Rva2VuKSBwcml2YXRlIG9wdGlvbnM6IFNoYXJlUG9pbnRTZXJ2aWNlT3B0aW9ucykge1xyXG5cclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucyA9IHtcclxuICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgXHJcbiAgICAgIGNyZWRlbnRpYWxzOiBvcHRpb25zPy5jcmVkZW50aWFscyA/PyBEZWZhdWx0Q3JlZGVudGlhbHMsXHJcblxyXG4gICAgICBjYWNoaW5nOiBvcHRpb25zPy5jYWNoaW5nID8/IHtcclxuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgbGlmZU1pbnV0ZXM6IHRoaXMuI2RlZmF1bHRDYWNoZUxpZmVNaW51dGVzXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBlbmRwb2ludHM6IG9wdGlvbnM/LmVuZHBvaW50cyA/PyB7XHJcbiAgICAgICAgICB1c2VyczogYC9zaGFyZXBvaW50L3VzZXJzYCxcclxuICAgICAgICAgIGxpc3RJdGVtczogYC9zaGFyZXBvaW50L2xpc3RpdGVtc2BcclxuICAgICAgfSxcclxuICBcclxuICAgICAgcGhvdG9zOiBvcHRpb25zPy5waG90b3MgPz8ge1xyXG4gICAgICAgICAgc2l0ZTogJ2h0dHBzOi8vc2hhcmVwb2ludC5jbGVhdmVsYW5kcHJpY2UuY29tL2RpZ2l0YWxkaXNwbGF5JyxcclxuICAgICAgICAgIGxpc3Q6ICdFbXBsb3llZSBUaHVtYm5haWwgUGhvdG9zJyxcclxuICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzVG9SZXRyaWV2ZTogWyAnRW5jb2RlZEFic1VybCcgXVxyXG4gICAgICB9LFxyXG4gIFxyXG4gICAgICBsb2dnaW5nOiBvcHRpb25zPy5sb2dnaW5nID8/IHtcclxuICAgICAgICAgIGRhdGFDYWNoZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgY2FjaGVkRGF0YVJldHVybmVkOiBmYWxzZSxcclxuICAgICAgICAgIGZyZXNoRGF0YVJldHVybmVkOiBmYWxzZSxcclxuICAgICAgICAgIGNhY2hlQ2xlYXJlZDogZmFsc2VcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGdldExpc3RJdGVtcyhyZXF1ZXN0OiBMaXN0SXRlbXNSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMaXN0SXRlbVtdPiB7XHJcbiAgICAvL2NvbnN0IGFwaVVybCA9IHRoaXMub3B0aW9ucz8uYXBpVXJsO1xyXG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLm9wdGlvbnM/LmVuZHBvaW50cz8ubGlzdEl0ZW1zO1xyXG5cclxuICAgIHJldHVybiB0aGlzLiNzZXJ2aWNlcy5odHRwLnBvc3Q8TGlzdEl0ZW1bXT4oYCR7dGhpcy5hcGlVcmx9JHtlbmRwb2ludH1gLCByZXF1ZXN0KTtcclxuICAgIC8vcmV0dXJuIHRoaXMuI3NlcnZpY2VzLmh0dHAucG9zdDxMaXN0SXRlbVtdPih0aGlzLmNvbmZpZyEuZW5kcG9pbnRzIS5saXN0SXRlbXMhLCByZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIGdldFBob3RvcygpOiBPYnNlcnZhYmxlPFBob3RvSXRlbVtdPiB7XHJcbiAgICBjb25zdCByZXF1ZXN0OiBMaXN0SXRlbXNSZXF1ZXN0ID0ge1xyXG4gICAgICB1c2VybmFtZTogdGhpcy5vcHRpb25zPy5jcmVkZW50aWFscz8udXNlcm5hbWUsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLm9wdGlvbnM/LmNyZWRlbnRpYWxzPy5wYXNzd29yZCxcclxuICAgICAgc2l0ZTogdGhpcy5vcHRpb25zPy5waG90b3M/LnNpdGUsXHJcbiAgICAgIGxpc3Q6IHRoaXMub3B0aW9ucz8ucGhvdG9zPy5saXN0LFxyXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllc1RvUmV0cmlldmU6IHRoaXMub3B0aW9ucz8ucGhvdG9zPy5hZGRpdGlvbmFsUHJvcGVydGllc1RvUmV0cmlldmVcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLmdldExpc3RJdGVtcyhyZXF1ZXN0KSBhcyBPYnNlcnZhYmxlPFBob3RvSXRlbVtdPjtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jYWNoaW5nPy5lbmFibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLiNjYWNoZUV4cGlyZWQ8UGhvdG9JdGVtPih0aGlzLiNjYWNoZT8ucGhvdG9zISkpIHtcclxuICAgICAgICAvLyBHZXQgdGhlIGRhdGEgYW5kIGNhY2hlIGl0XHJcbiAgICAgICAgb2JzZXJ2YWJsZSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jY2FjaGUhLnBob3RvcyA9IHtcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgbGFzdFVwZGF0ZTogRGF0ZVRpbWUubm93KClcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubG9nZ2luZz8uZGF0YUNhY2hlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBsaWZlTWludXRlcyA9IHRoaXMub3B0aW9ucy5jYWNoaW5nPy5saWZlTWludXRlcyA/PyB0aGlzLiNkZWZhdWx0Q2FjaGVMaWZlTWludXRlcztcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFBob3RvcyBjYWNoZWQgZm9yICR7bGlmZU1pbnV0ZXN9IG1pbnV0ZXNgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDYWNoZSBleGlzdHMgYW5kIGhhc24ndCBleHBpcmVkIHlldFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZz8uY2FjaGVkRGF0YVJldHVybmVkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmV0dXJuaW5nIGNhY2hlZCBwaG90b3MnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvZih0aGlzLiNjYWNoZSEucGhvdG9zIS5kYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENhY2hlIGlzIGVpdGhlciBkaXNhYmxlZCBvciBleHBpcmVkLCByZXR1cm4gZGF0YSBmcm9tIEFQSVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubG9nZ2luZz8uZnJlc2hEYXRhUmV0dXJuZWQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1JldHVybmluZyBmcmVzaCBwaG90b3MnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZSQ7XHJcbiAgfVxyXG5cclxuICBnZXRVc2VycyhyZXF1ZXN0OiBVc2VyUmVxdWVzdCwgaWQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFVzZXIgfCBVc2VyW10+IHtcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5vcHRpb25zPy5lbmRwb2ludHM/LnVzZXJzO1xyXG4gICAgXHJcbiAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuI3NlcnZpY2VzLmh0dHAucG9zdDxVc2VyIHwgVXNlcltdPihgJHt0aGlzLmFwaVVybH0ke2VuZHBvaW50fS8ke2lkID8/ICcnfWAsIHJlcXVlc3QpO1xyXG5cclxuICAgIC8vI3JlZ2lvbiBTaW5nbGUgdXNlclxyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlJDtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBNdWx0aXBsZSB1c2Vyc1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY2FjaGluZz8uZW5hYmxlZCkge1xyXG4gICAgICBpZiAodGhpcy4jY2FjaGVFeHBpcmVkPFVzZXI+KHRoaXMuI2NhY2hlIS51c2VycyEpKSB7XHJcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhIGFuZCBjYWNoZSBpdFxyXG4gICAgICAgIG9ic2VydmFibGUkLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgIHRoaXMuI2NhY2hlIS51c2VycyA9IHtcclxuICAgICAgICAgICAgZGF0YTogZGF0YSBhcyBVc2VyW10sXHJcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IERhdGVUaW1lLm5vdygpXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmxvZ2dpbmc/LmRhdGFDYWNoZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgbGlmZU1pbnV0ZXMgPSB0aGlzLm9wdGlvbnMuY2FjaGluZz8ubGlmZU1pbnV0ZXMgPz8gdGhpcy4jZGVmYXVsdENhY2hlTGlmZU1pbnV0ZXM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVc2VycyBjYWNoZWQgZm9yICR7bGlmZU1pbnV0ZXN9IG1pbnV0ZXNgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDYWNoZSBleGlzdHMgYW5kIGhhc24ndCBleHBpcmVkIHlldFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZz8uY2FjaGVkRGF0YVJldHVybmVkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmV0dXJuaW5nIGNhY2hlZCB1c2VycycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuI2NhY2hlIS51c2VycyEuZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDYWNoZSBpcyBlaXRoZXIgZGlzYWJsZWQgb3IgZXhwaXJlZCwgcmV0dXJuIGRhdGEgZnJvbSBBUElcclxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmxvZ2dpbmc/LmZyZXNoRGF0YVJldHVybmVkKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdSZXR1cm5pbmcgZnJlc2ggdXNlcnMnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JzZXJ2YWJsZSQ7XHJcbiAgICAvLyNlbmRyZWdpb25cclxuICB9XHJcblxyXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLiNjYWNoZSA9IHsgdXNlcnM6IHVuZGVmaW5lZCwgcGhvdG9zOiB1bmRlZmluZWQgfTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5sb2dnaW5nPy5jYWNoZUNsZWFyZWQpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NhY2hlIGNsZWFyZWQnKTtcclxuICAgIH1cclxuICB9XHJcbn0iXX0=
@@ -19,7 +19,6 @@ import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
19
19
  import { NgClass, CommonModule } from '@angular/common';
20
20
  import { MatProgressBar, MatProgressBarModule } from '@angular/material/progress-bar';
21
21
 
22
- ;
23
22
  const DefaultUserChooserFilterOptions = {
24
23
  accountName: true,
25
24
  department: true,
@@ -48,6 +47,8 @@ const DefaultUserChooserData = {
48
47
 
49
48
  ;
50
49
 
50
+ ;
51
+
51
52
  class UserChooserComponent {
52
53
  constructor() {
53
54
  this.#services = {
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-material.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-data.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-pre-processing-group.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/mat-active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/cleavelandprice-ngx-lib-active-directory-material.ts"],"sourcesContent":["/*export class UserChooserFilterOptions {\r\n accountName = true;\r\n department = true;\r\n groupMembership = false;\r\n phoneNumber = true;\r\n title = true;\r\n}*/\r\nexport interface UserChooserFilterOptions {\r\n accountName?: boolean;\r\n department?: boolean;\r\n groupMembership?: boolean;\r\n phoneNumber?: boolean;\r\n title?: boolean;\r\n};\r\n\r\nexport const DefaultUserChooserFilterOptions: UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n};","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { Group, User } from \"@cleavelandprice/ngx-lib/active-directory\";\r\nimport { PhotoItem } from \"@cleavelandprice/ngx-lib/sharepoint\";\r\n\r\nimport { DefaultUserChooserFilterOptions, UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\nimport { UserChooserPreProcessingGroup } from \"./user-chooser-pre-processing-group\";\r\n\r\n/*export class UserChooserData {\r\n // Should the dialog close automatically when the user chooses an item?\r\n // Applies to single-user mode only\r\n closeWhenSelectionMade = false;\r\n\r\n // If the component is tasked with pulling Active Directory users (default setting),\r\n // should that include disabled users?\r\n includeDisabledUsers = false;\r\n\r\n // If the component is tasked with pulling Active Directory users (default setting),\r\n // should that search begin at a particular Organization Unit?\r\n parentOu?: string;\r\n\r\n // If true, the component will return an array of Active Directory User objects.\r\n // If false (default), the component will return an array of user account names.\r\n returnUserObjects = false;\r\n\r\n // Should the dialog include hover tooptips for each user that displays their group membership\r\n // You probably don't want this, which is why the default is false\r\n showGroupMembershipTooltips = false;\r\n\r\n // Should the user phone number be displayed next to their name in the dialog\r\n showPhone = true;\r\n\r\n // Title displayed in the dialog\r\n title = 'Select User(s)';\r\n\r\n // Single or Multi mode\r\n mode = UserChooserMode.Single;\r\n \r\n // As the user types into the filter field, the list of users is filtered.\r\n // The filterOptions determine which user properties are taken into consideration for that filter.\r\n // Note, displayName is always included (hard-coded), and is therefore not a filter option.\r\n filterOptions = new UserChooserFilterOptions();\r\n\r\n exclusions = new UserChooserPreProcessingGroup();\r\n inclusions = new UserChooserPreProcessingGroup();\r\n preSelections = new UserChooserPreProcessingGroup();\r\n\r\n // By default, the component will pull a fresh list of Active Directory users/groups and SharePoint photos.\r\n // But if the parent component already has them, you can pass them in via these properties.\r\n users?: User[];\r\n groups?: Group[];\r\n photos?: PhotoItem[];\r\n\r\n selectableGroupNames?: string[];\r\n}*/\r\n\r\nexport interface UserChooserData {\r\n // Should the dialog close automatically when the user chooses an item?\r\n // Applies to single-user mode only\r\n closeWhenSelectionMade?: boolean;\r\n\r\n allowCloseWithoutSelections?: boolean;\r\n\r\n // If the component is tasked with pulling Active Directory users (default setting),\r\n // should that include disabled users?\r\n includeDisabledUsers?: boolean;\r\n\r\n // If the component is tasked with pulling Active Directory users (default setting),\r\n // should that search begin at a particular Organization Unit?\r\n parentOu?: string;\r\n\r\n // If true, the component will return an array of Active Directory User objects.\r\n // If false (default), the component will return an array of user account names.\r\n returnUserObjects?: boolean;\r\n\r\n // Should the dialog include hover tooptips for each user that displays their group membership\r\n // You probably don't want this, which is why the default is false\r\n showGroupMembershipTooltips?: boolean;\r\n\r\n // Should the user phone number be displayed next to their name in the dialog\r\n showPhone?: boolean;\r\n\r\n // Title displayed in the dialog\r\n title?: string;\r\n\r\n // Single or Multi mode\r\n mode?: UserChooserMode;\r\n \r\n // As the user types into the filter field, the list of users is filtered.\r\n // The filterOptions determine which user properties are taken into consideration for that filter.\r\n // Note, displayName is always included (hard-coded), and is therefore not a filter option.\r\n filterOptions?: UserChooserFilterOptions;\r\n\r\n exclusions?: UserChooserPreProcessingGroup;\r\n inclusions?: UserChooserPreProcessingGroup;\r\n preSelections?: UserChooserPreProcessingGroup;\r\n\r\n // By default, the component will pull a fresh list of Active Directory users/groups and SharePoint photos.\r\n // But if the parent component already has them, you can pass them in via these properties.\r\n users?: User[];\r\n groups?: Group[];\r\n photos?: PhotoItem[];\r\n\r\n selectableGroupNames?: string[];\r\n}\r\n\r\nexport const DefaultUserChooserData: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n allowCloseWithoutSelections: false,\r\n includeDisabledUsers: false,\r\n returnUserObjects: false,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n mode: UserChooserMode.Single,\r\n filterOptions: DefaultUserChooserFilterOptions\r\n};","/*export class UserChooserPreProcessingGroup {\r\n accountNames: string[] = [];\r\n departments: string[] = [];\r\n groups: string[] = [];\r\n titles: string[] = [];\r\n}*/\r\nexport interface UserChooserPreProcessingGroup {\r\n accountNames?: string[];\r\n departments?: string[];\r\n groups?: string[];\r\n titles?: string[];\r\n};","import { Component, ElementRef, inject, OnInit, ViewChild, viewChild } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\nimport { MatListItemAvatar, MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { SelectableGroup } from '../../model/selectable-group';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { DefaultUserChooserData, UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../model/user-chooser-mode';\n\n@Component({\n standalone: true,\n templateUrl: './user-chooser.component.html',\n imports: [\n MatButton,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatFormField,\n MatIcon,\n MatIconButton,\n MatInput,\n MatListItemAvatar,\n MatListOption,\n MatProgressSpinner,\n MatSelectionList,\n MatSlideToggle,\n MatTooltip,\n ReactiveFormsModule,\n ],\n styleUrls: [\n './user-chooser.component.scss',\n '../../../../../styles/mat-icon.scss'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n #services = {\n dialogRef: inject(MatDialogRef<UserChooserComponent>),\n activeDirectory: inject(ActiveDirectoryService),\n sharePoint: inject(SharePointService),\n data: inject<UserChooserData>(MAT_DIALOG_DATA)\n };\n _data = {...DefaultUserChooserData, ...this.#services.data};\n \n //#region Fields\n \n //@ViewChild(MatSelectionList) selectionList?: MatSelectionList;\n selectionList = viewChild(MatSelectionList);\n\n @ViewChild('filterInput') set filterInput(elRef: ElementRef<HTMLInputElement>) {\n if (elRef) {\n elRef.nativeElement.focus();\n }\n };\n //filterInput = viewChild<ElementRef>('filterInput');\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource?: MatTableDataSource<SelectableUser | SelectableGroup>;\n photos?: PhotoItem[];\n groups?: SelectableGroup[]; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this._data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList()?.options.filter(o => o.selected) ?? [];\n }\n\n get selectedUsers(): (SelectableUser | SelectableGroup)[] {\n return this.dataSource?.data?.filter(d => d.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return (this._data.showGroupMembershipTooltips ?? false) ||\n (this._data.exclusions?.groups?.length ?? 0) > 0 ||\n (this._data.inclusions?.groups?.length ?? 0) > 0 ||\n (this._data.preSelections?.groups?.length ?? 0) > 0 ||\n this._data.filterOptions?.groupMembership ||\n (this._data.selectableGroupNames?.length ?? 0) > 0 ||\n (this._data.groups?.length ?? 0) > 0;\n }\n //#endregion\n\n //#region Lifecycle\n ngOnInit(): void {\n this.#getData();\n this.#listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this._data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this._data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n // If we are in single user selection mode, deselect any existing selections first\n if (!this.isMultiMode && option.selected) {\n this.dataSource?.data\n .filter(u => u.sAMAccountName.toLowerCase() !== (option.value as SelectableUser).sAMAccountName.toLowerCase())\n .forEach(u => u.selected = false);\n }\n\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList()?.selectAll();\n\n if (this.selectionList()?.options) {\n this.listSelectionChanged(this.selectionList()!.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList()?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n isUser(userOrGroup: SelectableUser | SelectableGroup): boolean {\n return 'title' in userOrGroup;\n }\n castUser(userOrGroup: SelectableUser | SelectableGroup): SelectableUser {\n return userOrGroup as SelectableUser;\n }\n\n #getData(): void {\n const observables$: Observable<any>[] = [\n this._data.users?.length ?\n // Users were passed in\n of(this._data.users) :\n // Users need to be retrieved\n this.#services.activeDirectory.getUsers(false, this._data.includeDisabledUsers, this._data.parentOu),\n\n this._data.photos?.length ?\n // Photos were passed in\n of(this._data.photos) :\n // Photos need to be retrieved\n this.#services.sharePoint.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n observables$.push(\n this._data.groups?.length ?\n // Groups were passed in\n of(this._data.groups) :\n // Groups need to be retrieved\n this.#services.activeDirectory.getGroups()\n );\n }\n\n forkJoin(observables$)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ?\n data[2] :\n null;\n\n let users = data[0] as SelectableUser[];\n users.forEach(u => u.selected = false); // In case existing data was re-used\n users = this.#includeUsersByAccountName(users);\n users = this.#includeUsersByGroupName(users);\n users = this.#includeUsersByDepartment(users);\n users = this.#includeUsersByTitle(users);\n\n users = this.#excludeUsersByAccountName(users);\n users = this.#excludeUsersByGroupName(users);\n users = this.#excludeUsersByDepartment(users);\n users = this.#excludeUsersByTitle(users);\n\n users = this.#preSelectUsersByAccountName(users);\n users = this.#preSelectUsersByGroupName(users);\n users = this.#preSelectUsersByDepartment(users);\n users = this.#preSelectUsersByTitle(users);\n\n this.#preSelectGroupsByAccountName();\n\n const usersAndGroups: (SelectableUser | SelectableGroup)[] = [\n ...users\n ];\n\n if (this._data.selectableGroupNames?.length) {\n this._data.selectableGroupNames\n .forEach(groupName => {\n const group = this.groups!.find(g => g.displayName === groupName);\n\n if (group) {\n usersAndGroups.push({\n ...group,\n selected: group.selected\n });\n }\n });\n }\n\n this.dataSource = new MatTableDataSource(usersAndGroups);\n \n this.photos = data[1];\n\n this.#setFilterPredicate();\n });\n }\n\n close(): void {\n if (!this.selectedUsers?.length) {\n this.#services.dialogRef.close(this._data.allowCloseWithoutSelections ? [] : undefined);\n return;\n }\n const value = this.selectedUsers\n .map(u => this._data.returnUserObjects ? u : u.sAMAccountName);\n\n this.#services.dialogRef.close(this._data.mode === UserChooserMode.Multiple ?\n value :\n value[0]\n );\n }\n\n getPhoto(user: SelectableUser | SelectableGroup): string | undefined {\n if (!this.isUser(user)) { return; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === (user as SelectableUser).employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n #excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.accountNames\n ?.forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n #excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.groups\n ?.forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n #excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.departments\n ?.forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n #excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.titles\n ?.forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n #includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.accountNames?.length || // No account inclusions specified\n\n this._data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n #includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.departments?.length || // No department inclusions specified\n\n this._data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n #includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.titles?.length || // No title inclusions specified\n\n this._data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n #includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this._data.inclusions?.groups?.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this._data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n #preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.accountNames\n ?.forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n #preSelectGroupsByAccountName(): void {\n this._data.preSelections?.accountNames\n ?.forEach(accountName => {\n const group = this.groups?.find(g => g.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!group) { return; }\n\n group.selected = true;\n });;\n }\n\n #preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.departments\n ?.forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n #preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.titles\n ?.forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n #preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.groups\n ?.forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n #setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: (SelectableUser | SelectableGroup), filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this._data.filterOptions?.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this._data.filterOptions?.title) {\n filterProperties.push('title');\n }\n if (this._data.filterOptions?.department) {\n filterProperties.push('department');\n }\n if (this._data.filterOptions?.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this._data.filterOptions?.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n #listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(250)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser | SelectableGroup): string {\n return this._data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, inject, input, OnInit, output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User, UserOrGroup } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { DefaultUserChooserData, UserChooserData } from '../../model/user-chooser-data';\n\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatFormField, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { UserChooserMode } from '../../mat-active-directory.api';\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'cp-user-field',\n standalone: true,\n imports: [\n MatButton,\n MatFormField,\n MatIcon,\n MatIconButton,\n MatInput,\n MatProgressBar,\n MatSuffix,\n NgClass\n ],\n templateUrl: './user-form-field.component.html',\n styleUrl: './user-form-field.component.scss'\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n #services = {\n dialog: inject(MatDialog),\n activeDirectory: inject(ActiveDirectoryService),\n sharePoint: inject(SharePointService)\n };\n usersSelected = output<string | string[] | UserOrGroup | UserOrGroup[]>(); // string for Single mode, string[] for multi\n userUnSelected = output<string>();\n placeholder = input('Select User(s)');\n clickable = input(true);\n userChooserData = input.required<UserChooserData>();\n _userChooserData!: UserChooserData;\n\n accountNames?: string[];\n\n users?: User[];\n groups?: UserOrGroup[];\n photos?: PhotoItem[];\n //#endregion\n\n //#region Properties\n /*get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }*/\n get class(): string {\n return this._userChooserData?.mode === UserChooserMode.Single ? '' :\n (this.accountNames?.length ?? 0) > 4 ? 'grid five' :\n (this.accountNames?.length ?? 0) > 3 ? 'grid four' :\n (this.accountNames?.length ?? 0) > 2 ? 'grid three' :\n (this.accountNames?.length ?? 0) > 1 ? 'grid two' :\n '';\n }\n //#endregion\n \n //#region Lifecycle\n ngOnInit(): void {\n this._userChooserData = {\n ...DefaultUserChooserData,\n ...this.userChooserData()\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this._userChooserData.preSelections?.accountNames;\n\n this.#getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable()) { return; }\n\n const data: UserChooserData = {\n ...this._userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.#services.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe((selected: string | string[] | UserOrGroup | UserOrGroup[]) => {\n if (!selected) { return; }\n \n this.accountNames = Array.isArray(selected) ?\n selected.map(s => typeof(s) === 'string' ? s : s.sAMAccountName) :\n [ selected ].map(s => typeof(s) === 'string' ? s : s.sAMAccountName);\n\n // Overwrite what may have been passed in, for subsequent launches of UserChooserComponent - otherwise it just keeps getting fed stale data\n if (this._userChooserData.preSelections) {\n this._userChooserData.preSelections.accountNames = this.accountNames;\n }\n\n this.usersSelected.emit(selected);\n });\n }\n\n unSelectUser(accountName: string): void {\n const index = this.accountNames?.findIndex(a => a === accountName);\n this.accountNames?.splice(index ?? -1, 1);\n\n if (this._userChooserData.preSelections) {\n this._userChooserData.preSelections.accountNames = this.accountNames;\n }\n\n this.userUnSelected.emit(accountName);\n }\n //#endregion\n\n //#region Utilities\n #getData(): void {\n forkJoin([\n this._userChooserData!.users ?\n // Users were passed in\n of(this._userChooserData!.users) :\n // Users need to be retrieved\n this.#services.activeDirectory.getUsers(false, this._userChooserData!.includeDisabledUsers, this._userChooserData!.parentOu),\n\n this._userChooserData!.groups ?\n // Groups were passed in\n of(this._userChooserData!.groups) :\n // Groups need to be retrieved\n this.#services.activeDirectory.getGroups(this._userChooserData!.parentOu),\n\n this._userChooserData!.photos ?\n // Photos were passed in\n of(this._userChooserData!.photos) :\n // Photos need to be retrieved\n this.#services.sharePoint.getPhotos()\n ])\n .subscribe(([users, groups, photos]) => {\n this.users = users;\n this.groups = groups;\n this.photos = photos;\n });\n }\n\n getUser(user: string | User | undefined): User | undefined {\n user = typeof(user) === 'string' ?\n this.users?.find(u => u.sAMAccountName.toLowerCase() === user?.toString().toLowerCase()) :\n user;\n\n return !user ? undefined :\n 'groupType' in user ? undefined : user;\n }\n\n getGroup(group: string | UserOrGroup | undefined): UserOrGroup | undefined {\n group = typeof(group) === 'string' ?\n this.groups?.find(g => g.sAMAccountName.toLowerCase() === group?.toString().toLowerCase()) :\n group;\n\n return !group ? undefined :\n 'groupType' in group ? group : undefined;\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}","\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames?.length) {\n <div [ngClass]=\"class\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\n}","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ActiveDirectoryServiceOptions, ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule,\n\n UserChooserComponent,\n UserFormFieldComponent\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class MatActiveDirectoryModule {\n static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<MatActiveDirectoryModule> {\n return {\n ngModule: MatActiveDirectoryModule,\n providers: [\n {\n provide: ActiveDirectoryServiceOptionsToken,\n useValue: config\n }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: MatActiveDirectoryModule) {\n if (parentModule) {\n throw new Error(\n 'MatActiveDirectoryModule is already loaded. Import it in the AppModule only');\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './mat-active-directory.api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-active-directory-material.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/default-user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-mode.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/default-user-chooser-data.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-filter-options.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/model/user-chooser-pre-processing-group.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-chooser/user-chooser.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/components/user-form-field/user-form-field.component.html","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/mat-active-directory.module.ts","../../../../projects/cleavelandprice/ngx-lib/active-directory/material/src/cleavelandprice-ngx-lib-active-directory-material.ts"],"sourcesContent":["import { UserChooserFilterOptions } from \"./user-chooser-filter-options\";\r\n\r\nexport const DefaultUserChooserFilterOptions: UserChooserFilterOptions = {\r\n accountName: true,\r\n department: true,\r\n groupMembership: false,\r\n phoneNumber: true,\r\n title: true\r\n};","export enum UserChooserMode {\r\n Single,\r\n Multiple\r\n}","import { DefaultUserChooserFilterOptions } from \"./default-user-chooser-filter-options\";\r\nimport { UserChooserData } from \"./user-chooser-data\";\r\nimport { UserChooserMode } from \"./user-chooser-mode\";\r\n\r\nexport const DefaultUserChooserData: UserChooserData = {\r\n closeWhenSelectionMade: false,\r\n allowCloseWithoutSelections: false,\r\n includeDisabledUsers: false,\r\n returnUserObjects: false,\r\n showGroupMembershipTooltips: false,\r\n showPhone: true,\r\n title: 'Select User(s)',\r\n mode: UserChooserMode.Single,\r\n filterOptions: DefaultUserChooserFilterOptions\r\n};","export interface UserChooserFilterOptions {\r\n accountName?: boolean;\r\n department?: boolean;\r\n groupMembership?: boolean;\r\n phoneNumber?: boolean;\r\n title?: boolean;\r\n};","export interface UserChooserPreProcessingGroup {\r\n accountNames?: string[];\r\n departments?: string[];\r\n groups?: string[];\r\n titles?: string[];\r\n};","import { Component, ElementRef, inject, OnInit, ViewChild, viewChild } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef } from '@angular/material/dialog';\nimport { MatListItemAvatar, MatListOption, MatSelectionList } from '@angular/material/list';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { debounceTime, forkJoin, Observable, of } from 'rxjs';\n\nimport { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { DefaultUserChooserData } from '../../model/default-user-chooser-data';\nimport { SelectableGroup } from '../../model/selectable-group';\nimport { SelectableUser } from '../../model/selectable-user';\nimport { UserChooserData } from '../../model/user-chooser-data';\nimport { UserChooserMode } from '../../model/user-chooser-mode';\n\n@Component({\n standalone: true,\n templateUrl: './user-chooser.component.html',\n imports: [\n MatButton,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatFormField,\n MatIcon,\n MatIconButton,\n MatInput,\n MatListItemAvatar,\n MatListOption,\n MatProgressSpinner,\n MatSelectionList,\n MatSlideToggle,\n MatTooltip,\n ReactiveFormsModule,\n ],\n styleUrls: [\n './user-chooser.component.scss',\n '../../../../../styles/mat-icon.scss'\n ]\n})\nexport class UserChooserComponent implements OnInit {\n #services = {\n dialogRef: inject(MatDialogRef<UserChooserComponent>),\n activeDirectory: inject(ActiveDirectoryService),\n sharePoint: inject(SharePointService),\n data: inject<UserChooserData>(MAT_DIALOG_DATA)\n };\n _data = {...DefaultUserChooserData, ...this.#services.data};\n \n //#region Fields\n \n //@ViewChild(MatSelectionList) selectionList?: MatSelectionList;\n selectionList = viewChild(MatSelectionList);\n\n @ViewChild('filterInput') set filterInput(elRef: ElementRef<HTMLInputElement>) {\n if (elRef) {\n elRef.nativeElement.focus();\n }\n };\n //filterInput = viewChild<ElementRef>('filterInput');\n\n filterForm = new FormGroup({\n filter: new FormControl()\n });\n\n dataSource?: MatTableDataSource<SelectableUser | SelectableGroup>;\n photos?: PhotoItem[];\n groups?: SelectableGroup[]; // May or may not get populated, depending on config data sent in\n //#endregion\n\n //#region Properties\n get isMultiMode(): boolean {\n return this._data.mode === UserChooserMode.Multiple;\n }\n\n get selectedOptions(): MatListOption[] {\n return this.selectionList()?.options.filter(o => o.selected) ?? [];\n }\n\n get selectedUsers(): (SelectableUser | SelectableGroup)[] {\n return this.dataSource?.data?.filter(d => d.selected) ?? [];\n }\n\n get filterValue(): string {\n return this.filterForm.value.filter;\n }\n\n get adGroupsNeeded(): boolean {\n // If any are these are true, then we need to pull AD groups for use later\n return (this._data.showGroupMembershipTooltips ?? false) ||\n (this._data.exclusions?.groups?.length ?? 0) > 0 ||\n (this._data.inclusions?.groups?.length ?? 0) > 0 ||\n (this._data.preSelections?.groups?.length ?? 0) > 0 ||\n this._data.filterOptions?.groupMembership ||\n (this._data.selectableGroupNames?.length ?? 0) > 0 ||\n (this._data.groups?.length ?? 0) > 0;\n }\n //#endregion\n\n //#region Lifecycle\n ngOnInit(): void {\n this.#getData();\n this.#listenForFilterChanges();\n }\n //#endregion\n\n //#region Events\n listSelectionChanged(options: MatListOption[]): void {\n if (this._data.mode === UserChooserMode.Single &&\n this.selectedOptions.length &&\n this._data.closeWhenSelectionMade\n ) {\n this.close();\n }\n }\n\n optionSelectionChanged(option: MatListOption): void {\n const user = this.dataSource?.data\n .find(u => u.sAMAccountName.toLocaleLowerCase() === (option.value as SelectableUser).sAMAccountName.toLowerCase());\n\n if (user) {\n // If we are in single user selection mode, deselect any existing selections first\n if (!this.isMultiMode && option.selected) {\n this.dataSource?.data\n .filter(u => u.sAMAccountName.toLowerCase() !== (option.value as SelectableUser).sAMAccountName.toLowerCase())\n .forEach(u => u.selected = false);\n }\n\n user.selected = option.selected;\n }\n }\n\n hideUnselectedChanged(selected: boolean): void {\n this.filterForm.get('filter')?.setValue(selected ? '{selected:true}' : null);\n }\n\n selectAll(): void {\n this.selectionList()?.selectAll();\n\n if (this.selectionList()?.options) {\n this.listSelectionChanged(this.selectionList()!.options.toArray());\n }\n }\n\n deselectAll(): void {\n this.selectionList()?.deselectAll();\n }\n //#endregion\n\n //#region Utilities\n isUser(userOrGroup: SelectableUser | SelectableGroup): boolean {\n return 'title' in userOrGroup;\n }\n castUser(userOrGroup: SelectableUser | SelectableGroup): SelectableUser {\n return userOrGroup as SelectableUser;\n }\n\n #getData(): void {\n const observables$: Observable<any>[] = [\n this._data.users?.length ?\n // Users were passed in\n of(this._data.users) :\n // Users need to be retrieved\n this.#services.activeDirectory.getUsers(false, this._data.includeDisabledUsers, this._data.parentOu),\n\n this._data.photos?.length ?\n // Photos were passed in\n of(this._data.photos) :\n // Photos need to be retrieved\n this.#services.sharePoint.getPhotos()\n ];\n\n // Do we need AD groups?\n if (this.adGroupsNeeded) {\n observables$.push(\n this._data.groups?.length ?\n // Groups were passed in\n of(this._data.groups) :\n // Groups need to be retrieved\n this.#services.activeDirectory.getGroups()\n );\n }\n\n forkJoin(observables$)\n //.subscribe(([users, photos]) => {\n .subscribe(data => {\n // Need groups in place before we handle exclusions/inclusions/pre-selections\n this.groups = this.adGroupsNeeded ?\n data[2] :\n null;\n\n let users = data[0] as SelectableUser[];\n users.forEach(u => u.selected = false); // In case existing data was re-used\n users = this.#includeUsersByAccountName(users);\n users = this.#includeUsersByGroupName(users);\n users = this.#includeUsersByDepartment(users);\n users = this.#includeUsersByTitle(users);\n\n users = this.#excludeUsersByAccountName(users);\n users = this.#excludeUsersByGroupName(users);\n users = this.#excludeUsersByDepartment(users);\n users = this.#excludeUsersByTitle(users);\n\n users = this.#preSelectUsersByAccountName(users);\n users = this.#preSelectUsersByGroupName(users);\n users = this.#preSelectUsersByDepartment(users);\n users = this.#preSelectUsersByTitle(users);\n\n this.#preSelectGroupsByAccountName();\n\n const usersAndGroups: (SelectableUser | SelectableGroup)[] = [\n ...users\n ];\n\n if (this._data.selectableGroupNames?.length) {\n this._data.selectableGroupNames\n .forEach(groupName => {\n const group = this.groups!.find(g => g.displayName === groupName);\n\n if (group) {\n usersAndGroups.push({\n ...group,\n selected: group.selected\n });\n }\n });\n }\n\n this.dataSource = new MatTableDataSource(usersAndGroups);\n \n this.photos = data[1];\n\n this.#setFilterPredicate();\n });\n }\n\n close(): void {\n if (!this.selectedUsers?.length) {\n this.#services.dialogRef.close(this._data.allowCloseWithoutSelections ? [] : undefined);\n return;\n }\n const value = this.selectedUsers\n .map(u => this._data.returnUserObjects ? u : u.sAMAccountName);\n\n this.#services.dialogRef.close(this._data.mode === UserChooserMode.Multiple ?\n value :\n value[0]\n );\n }\n\n getPhoto(user: SelectableUser | SelectableGroup): string | undefined {\n if (!this.isUser(user)) { return; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === (user as SelectableUser).employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n\n //#region Exclusions - won't be included in the dataSource at all\n #excludeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.accountNames\n ?.forEach(accountName => {\n const index = users.findIndex(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n\n return users;\n }\n\n #excludeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.groups\n ?.forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n \n group.member.forEach(groupMemberDn => {\n const index = users.findIndex(u => u.distinguishedName === groupMemberDn);\n if (index === -1) { return; }\n\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n #excludeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.departments\n ?.forEach(department => {\n const excludedUsers = users.filter(u => u.department?.toLowerCase() === department.toLowerCase());\n\n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n\n #excludeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this._data.exclusions?.titles\n ?.forEach(title => {\n const excludedUsers = users.filter(u => u.title?.toLowerCase() === title.toLowerCase());\n \n excludedUsers.forEach(user => {\n const index = users.indexOf(user);\n users.splice(index, 1);\n });\n });\n\n return users;\n }\n //#endregion\n\n //#region Inclusions - only these will be included in the dataSource\n #includeUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.accountNames?.length || // No account inclusions specified\n\n this._data.inclusions.accountNames.find(accountName =>\n accountName.toLowerCase() === user.sAMAccountName.toLowerCase()\n ));\n }\n\n #includeUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.departments?.length || // No department inclusions specified\n\n this._data.inclusions.departments.find(department =>\n department.toLowerCase() === user.department?.toLowerCase()\n ));\n }\n\n #includeUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n return users.filter(user =>\n !this._data.inclusions?.titles?.length || // No title inclusions specified\n\n this._data.inclusions.titles.find(title =>\n title.toLowerCase() === user.title?.toLowerCase()\n ));\n }\n\n #includeUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n if (!this._data.inclusions?.groups?.length) {\n return users; // No group inclusions specified\n }\n\n // Cheating a bit and leveraging the 'selected' property to keep track of who should be included\n // Since inclusions happen befor pre-selections, we can do that, as long as we set 'selected' back to false when we're done\n this._data.inclusions.groups\n .forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n users\n .filter(user =>\n group.member.find(groupMemberDn => groupMemberDn === user.distinguishedName)\n )\n .forEach(user => user.selected = true);\n });\n \n // At this point, all of the appropriate users should have 'selected' set to true\n const selectedUsers = users.filter(user => user.selected); // Subset of the original list\n // Reset 'selected' to false, and return\n selectedUsers.forEach(user => user.selected = false);\n return selectedUsers;\n }\n //#endregion\n\n //#region Pre-Selections\n #preSelectUsersByAccountName(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.accountNames\n ?.forEach(accountName => {\n const user = users.find(u => u.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!user) { return; }\n\n user.selected = true;\n });\n\n return users;\n }\n\n #preSelectGroupsByAccountName(): void {\n this._data.preSelections?.accountNames\n ?.forEach(accountName => {\n const group = this.groups?.find(g => g.sAMAccountName.toLowerCase() === accountName.toLowerCase());\n if (!group) { return; }\n\n group.selected = true;\n });;\n }\n\n #preSelectUsersByDepartment(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.departments\n ?.forEach(department =>\n users\n .filter(u => u.department?.toLowerCase() === department.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n #preSelectUsersByTitle(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.titles\n ?.forEach(title =>\n users\n .filter(u => u.title?.toLowerCase() === title.toLowerCase())\n .forEach(user => user.selected = true)\n );\n\n return users;\n }\n\n #preSelectUsersByGroupName(users: SelectableUser[]): SelectableUser[] {\n this._data.preSelections?.groups\n ?.forEach(groupName => {\n const group = this.groups?.find(g => g.name.toLowerCase() === groupName.toLowerCase());\n if (!group) { return; }\n\n group.member.forEach(groupMemberDn => {\n const user = users.find(u => u.distinguishedName === groupMemberDn);\n if (!user) { return; }\n\n user.selected = true;\n });\n });\n\n return users;\n }\n //#endregion\n \n #setFilterPredicate(): void {\n if (!this.dataSource) {\n return;\n }\n\n this.dataSource.filterPredicate = (user: (SelectableUser | SelectableGroup), filter: string) => {\n if (filter === '{selected:true}') {\n return user.selected;\n } else {\n const regex = new RegExp(filter, 'i'); // Case-insensitive\n let match = false; // The end result - whether or not a employee matches the filter\n\n const filterProperties = [ 'displayName' ];\n if (this._data.filterOptions?.accountName) {\n filterProperties.push('sAMAccountName')\n }\n if (this._data.filterOptions?.title) {\n filterProperties.push('title');\n }\n if (this._data.filterOptions?.department) {\n filterProperties.push('department');\n }\n if (this._data.filterOptions?.phoneNumber) {\n filterProperties.push('telephoneNumber');\n }\n \n // Match on the properties configured above\n filterProperties\n .forEach(field => {\n // @ts-ignore\n if (user[field] && user[field].match(regex)) {\n match = true;\n }\n });\n \n // Match on group membership (group name)\n if (this._data.filterOptions?.groupMembership) {\n user.memberOf.forEach(groupDn => {\n const group = this.groups?.find(group => group.distinguishedName === groupDn && group.name.match(regex));\n \n if (group) {\n match = true;\n }\n });\n }\n\n return match;\n }\n };\n }\n\n #listenForFilterChanges(): void {\n this.filterForm.get('filter')?.valueChanges\n .pipe(\n debounceTime(250)\n )\n .subscribe(() => this.dataSource!.filter = this.filterForm.value.filter?.trim().toLowerCase());\n }\n\n tooltip(user: SelectableUser | SelectableGroup): string {\n return this._data.showGroupMembershipTooltips ?\n user.memberOf\n .map(groupDn =>\n this.groups\n ?.find(group =>\n group.distinguishedName === groupDn\n )?.name\n )\n .sort((a, b) => a! > b! ? 1 : -1)\n .join('\\n') :\n '';\n }\n //#endregion\n}","<div id=\"dialog-title\">\n <h2 mat-dialog-title>{{ _data.title }}</h2>\n\n <div id=\"num-selected\">\n {{ selectedOptions.length }} selected\n </div>\n</div>\n\n<mat-dialog-content>\n @if (dataSource && photos) {\n <form [formGroup]=\"filterForm\">\n @if (dataSource) {\n <mat-form-field>\n <input matInput placeholder=\"Search\" formControlName=\"filter\" #filterInput>\n @if (filterForm.value.filter) {\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"filterForm.get('filter')?.setValue('')\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n }\n </mat-form-field>\n }\n </form>\n <mat-selection-list [multiple]=\"isMultiMode\"\n (selectionChange)=\"listSelectionChanged($event.options)\">\n @for (user of dataSource.filteredData; track user) {\n <mat-list-option [value]=\"user\" [selected]=\"user.selected\"\n (selectedChange)=\"optionSelectionChanged(option)\" #option>\n @if (getPhoto(user)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(user)\">\n } @else {\n <mat-icon matListItemAvatar class=\"no-photo\"\n [fontIcon]=\"isUser(user) ? 'account_circle' : 'group'\"/>\n }\n <div class=\"user\">\n <div [matTooltip]=\"tooltip(user)\" class=\"user-name\">\n {{ user.displayName }}\n @if (isUser(user) && _data.showPhone && castUser(user).telephoneNumber) {\n <div>{{ castUser(user).telephoneNumber }}</div>\n }\n </div>\n @if (isUser(user)) {\n <div>{{ castUser(user).department }}</div>\n <div class=\"title\">{{ castUser(user).title }}</div>\n }\n </div>\n </mat-list-option>\n }\n </mat-selection-list>\n } @else {\n <div>\n <mat-spinner [diameter]=\"50\"/>\n <h2 id=\"spinner-message\">Getting users and photos...</h2>\n </div>\n }\n</mat-dialog-content>\n\n<mat-dialog-actions>\n @if (dataSource && photos) {\n @if (selectedOptions.length) {\n <mat-slide-toggle (change)=\"hideUnselectedChanged($event.checked)\">\n Hide Unselected\n </mat-slide-toggle>\n }\n @if (isMultiMode) {\n <button mat-raised-button color=\"primary\" (click)=\"selectAll()\"\n >\n <mat-icon fontIcon=\"select_all\"/>\n <span class=\"hide-mobile\">Select All</span>\n </button>\n }\n @if (isMultiMode && selectedOptions.length) {\n <button mat-raised-button color=\"primary\" (click)=\"deselectAll()\"\n >\n <mat-icon fontIcon=\"clear_all\"/>\n <span class=\"hide-mobile\">Clear All</span>\n </button>\n }\n @if (isMultiMode || !_data.closeWhenSelectionMade) {\n <button mat-raised-button color=\"primary\" (click)=\"close()\" matTooltip=\"Accept your selection\"\n [disabled]=\"!_data.allowCloseWithoutSelections && !selectedOptions.length\">\n <mat-icon fontIcon=\"check\"/>\n <span class=\"hide-mobile\">Ok</span>\n </button>\n }\n }\n\n <button mat-raised-button color=\"warn\" mat-dialog-close matTooltip=\"Close this window\">\n <mat-icon fontIcon=\"close\"/>\n <span class=\"hide-mobile\">Cancel</span>\n </button>\n</mat-dialog-actions>","import { Component, inject, input, OnInit, output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { forkJoin, of } from 'rxjs';\n\nimport { ActiveDirectoryService, User, UserOrGroup } from '@cleavelandprice/ngx-lib/active-directory';\nimport { PhotoItem, SharePointService } from '@cleavelandprice/ngx-lib/sharepoint';\n\nimport { DefaultUserChooserData } from '../../model/default-user-chooser-data';\nimport { UserChooserData } from '../../model/user-chooser-data';\n\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatFormField, MatSuffix } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatInput } from '@angular/material/input';\nimport { MatProgressBar } from '@angular/material/progress-bar';\nimport { UserChooserMode } from '../../mat-active-directory.api';\nimport { UserChooserComponent } from '../user-chooser/user-chooser.component';\n\n@Component({\n selector: 'cp-user-field',\n standalone: true,\n imports: [\n MatButton,\n MatFormField,\n MatIcon,\n MatIconButton,\n MatInput,\n MatProgressBar,\n MatSuffix,\n NgClass\n ],\n templateUrl: './user-form-field.component.html',\n styleUrl: './user-form-field.component.scss'\n})\nexport class UserFormFieldComponent implements OnInit {\n //#region Fields\n #services = {\n dialog: inject(MatDialog),\n activeDirectory: inject(ActiveDirectoryService),\n sharePoint: inject(SharePointService)\n };\n usersSelected = output<string | string[] | UserOrGroup | UserOrGroup[]>(); // string for Single mode, string[] for multi\n userUnSelected = output<string>();\n placeholder = input('Select User(s)');\n clickable = input(true);\n userChooserData = input.required<UserChooserData>();\n _userChooserData!: UserChooserData;\n\n accountNames?: string[];\n\n users?: User[];\n groups?: UserOrGroup[];\n photos?: PhotoItem[];\n //#endregion\n\n //#region Properties\n /*get isEdge(): boolean {\n return window.navigator.userAgent.indexOf('Edge') > -1;\n }*/\n get class(): string {\n return this._userChooserData?.mode === UserChooserMode.Single ? '' :\n (this.accountNames?.length ?? 0) > 4 ? 'grid five' :\n (this.accountNames?.length ?? 0) > 3 ? 'grid four' :\n (this.accountNames?.length ?? 0) > 2 ? 'grid three' :\n (this.accountNames?.length ?? 0) > 1 ? 'grid two' :\n '';\n }\n //#endregion\n \n //#region Lifecycle\n ngOnInit(): void {\n this._userChooserData = {\n ...DefaultUserChooserData,\n ...this.userChooserData()\n }\n\n // If users have been pre-selected in the config, store those in accountNames, which drives the UI of this component\n this.accountNames = this._userChooserData.preSelections?.accountNames;\n\n this.#getData();\n }\n //#endregion\n\n //#region Events\n selectUser(): void {\n if (!this.clickable()) { return; }\n\n const data: UserChooserData = {\n ...this._userChooserData,\n\n users: this.users,\n photos: this.photos,\n };\n\n this.#services.dialog.open(UserChooserComponent, {\n data: data\n })\n .afterClosed()\n .subscribe((selected: string | string[] | UserOrGroup | UserOrGroup[]) => {\n if (!selected) { return; }\n \n this.accountNames = Array.isArray(selected) ?\n selected.map(s => typeof(s) === 'string' ? s : s.sAMAccountName) :\n [ selected ].map(s => typeof(s) === 'string' ? s : s.sAMAccountName);\n\n // Overwrite what may have been passed in, for subsequent launches of UserChooserComponent - otherwise it just keeps getting fed stale data\n if (this._userChooserData.preSelections) {\n this._userChooserData.preSelections.accountNames = this.accountNames;\n }\n\n this.usersSelected.emit(selected);\n });\n }\n\n unSelectUser(accountName: string): void {\n const index = this.accountNames?.findIndex(a => a === accountName);\n this.accountNames?.splice(index ?? -1, 1);\n\n if (this._userChooserData.preSelections) {\n this._userChooserData.preSelections.accountNames = this.accountNames;\n }\n\n this.userUnSelected.emit(accountName);\n }\n //#endregion\n\n //#region Utilities\n #getData(): void {\n forkJoin([\n this._userChooserData!.users ?\n // Users were passed in\n of(this._userChooserData!.users) :\n // Users need to be retrieved\n this.#services.activeDirectory.getUsers(false, this._userChooserData!.includeDisabledUsers, this._userChooserData!.parentOu),\n\n this._userChooserData!.groups ?\n // Groups were passed in\n of(this._userChooserData!.groups) :\n // Groups need to be retrieved\n this.#services.activeDirectory.getGroups(this._userChooserData!.parentOu),\n\n this._userChooserData!.photos ?\n // Photos were passed in\n of(this._userChooserData!.photos) :\n // Photos need to be retrieved\n this.#services.sharePoint.getPhotos()\n ])\n .subscribe(([users, groups, photos]) => {\n this.users = users;\n this.groups = groups;\n this.photos = photos;\n });\n }\n\n getUser(user: string | User | undefined): User | undefined {\n user = typeof(user) === 'string' ?\n this.users?.find(u => u.sAMAccountName.toLowerCase() === user?.toString().toLowerCase()) :\n user;\n\n return !user ? undefined :\n 'groupType' in user ? undefined : user;\n }\n\n getGroup(group: string | UserOrGroup | undefined): UserOrGroup | undefined {\n group = typeof(group) === 'string' ?\n this.groups?.find(g => g.sAMAccountName.toLowerCase() === group?.toString().toLowerCase()) :\n group;\n\n return !group ? undefined :\n 'groupType' in group ? group : undefined;\n }\n\n getPhoto(accountName: string): string | undefined {\n const user = this.getUser(accountName);\n if (!user) { return undefined; }\n\n return this.photos?.find(p =>\n (p.employeeNumber && p.employeeNumber.toString() === user.employeeNumber) ||\n p.accountName?.toLowerCase() === user.sAMAccountName.toLowerCase() ||\n p.displayName?.toLowerCase() === user.displayName.toLowerCase() ||\n p.title?.toLowerCase() === user.displayName.toLowerCase()\n )?.encodedAbsUrl;\n }\n //#endregion\n}","\n<!-- In Microsoft Edge, selectUser() never gets called if the input fields are disabled\nSo... I'm dynamically setting the disabled property based on whether or not the browser is Edge.\nIt's definitely a better experience if the field IS disabled.\nOtherwise, it's confusing - especially because Edge is SO SLOW to display the resulting dialog window.\n-->\n<!-- Update 8/24/2023:\nThe above problem also exists in Chrome now.\nSo instead of dynamically setting [disabled] based on browser type,\nI'm applying CSS to suppress mouse events on the input - thus making it bubble up to the parent control, which responds the way we want/\n-->\n\n@if (users && photos) {\n <div (click)=\"selectUser()\" [class.clickable]=\"clickable()\">\n @if (accountNames?.length) {\n <div [ngClass]=\"class\">\n @for (accountName of accountNames; track accountName; let i = $index) {\n <div class=\"user\">\n <!--<img *ngIf=\"accountName && empUtils.getEmployee(accountName)\" alt=\"\" [src]=\"empUtils.getEmployee(accountName) | employeePhotoUrl:cacheService.photos\">-->\n @if (getPhoto(accountName)) {\n <img matListItemAvatar alt=\"\" [src]=\"getPhoto(accountName)\">\n }\n @if (getGroup(accountName)) {\n <mat-icon>group</mat-icon>\n }\n <mat-form-field>\n <!-- [disabled]=\"!isEdge\" -->\n <input matInput disabled [placeholder]=\"i === 0 ? placeholder() : ''\"\n [value]=\"getUser(accountName)?.displayName ?? getGroup(accountName)?.displayName ?? accountName\">\n <button matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"$event.stopPropagation(); unSelectUser(accountName)\">\n <mat-icon fontIcon=\"close\"/>\n </button>\n </mat-form-field>\n </div>\n }\n </div>\n } @else {\n <mat-form-field>\n <input matInput disabled [placeholder]=\"placeholder()\"> <!-- [disabled]=\"!isEdge\" -->\n </mat-form-field>\n }\n </div>\n} @else {\n <mat-progress-bar mode=\"indeterminate\"/>\n}","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { ActiveDirectoryServiceOptions, ActiveDirectoryServiceOptionsToken } from '@cleavelandprice/ngx-lib/active-directory';\n\nimport { UserChooserComponent } from './components/user-chooser/user-chooser.component';\nimport { UserFormFieldComponent } from './components/user-form-field/user-form-field.component';\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n ReactiveFormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n MatListModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatTableModule,\n MatTooltipModule,\n\n UserChooserComponent,\n UserFormFieldComponent\n ],\n exports: [\n UserChooserComponent,\n UserFormFieldComponent\n ]\n})\nexport class MatActiveDirectoryModule {\n static forRoot(config: ActiveDirectoryServiceOptions): ModuleWithProviders<MatActiveDirectoryModule> {\n return {\n ngModule: MatActiveDirectoryModule,\n providers: [\n {\n provide: ActiveDirectoryServiceOptionsToken,\n useValue: config\n }\n ]\n };\n }\n\n constructor(@Optional() @SkipSelf() parentModule: MatActiveDirectoryModule) {\n if (parentModule) {\n throw new Error(\n 'MatActiveDirectoryModule is already loaded. Import it in the AppModule only');\n }\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './mat-active-directory.api';\n"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ import { ActiveDirectoryService } from '@cleavelandprice/ngx-lib/active-director
9
9
 
10
10
  const SharePointServiceOptionsToken = new InjectionToken('');
11
11
 
12
+ // DO NOT EXPORT THIS FILE!
13
+ const DefaultCredentials = {
14
+ username: 'itprocess',
15
+ password: 'itproce$$'
16
+ };
17
+
12
18
  class SharePointService extends NgxLibServiceBase {
13
19
  #services = {
14
20
  http: inject(HttpClient)
@@ -31,10 +37,7 @@ class SharePointService extends NgxLibServiceBase {
31
37
  this.options = options;
32
38
  this.options = {
33
39
  ...options,
34
- credentials: options?.credentials ?? {
35
- username: 'viewer',
36
- password: 'viewer'
37
- },
40
+ credentials: options?.credentials ?? DefaultCredentials,
38
41
  caching: options?.caching ?? {
39
42
  enabled: false,
40
43
  lifeMinutes: this.#defaultCacheLifeMinutes
@@ -1 +1 @@
1
- {"version":3,"file":"cleavelandprice-ngx-lib-sharepoint.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/model/sharepoint-service-options.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/services/sharepoint.service.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/pipes/user-photo-url.pipe.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/components/user-photo/user-photo.component.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/components/user-photo/user-photo.component.html","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/sharepoint.module.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/cleavelandprice-ngx-lib-sharepoint.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\nimport { CachingConfig, Credentials, LoggingConfig, NgxLibServiceOptions } from \"@cleavelandprice/ngx-lib\";\r\n\r\nexport interface SharePointEndpoints {\r\n users?: string;\r\n listItems?: string;\r\n}\r\n\r\nexport interface SharePointPhotos {\r\n site?: string;\r\n list?: string;\r\n additionalPropertiesToRetrieve?: string[]\r\n}\r\n\r\nexport interface SharePointServiceOptions extends NgxLibServiceOptions {\r\n credentials?: Credentials;\r\n caching?: CachingConfig;\r\n endpoints?: SharePointEndpoints;\r\n photos?: SharePointPhotos;\r\n logging?: LoggingConfig;\r\n}\r\nexport const SharePointServiceOptionsToken = new InjectionToken<SharePointServiceOptions>('');","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, inject, Injectable, Optional } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { NgxLibServiceBase } from '@cleavelandprice/ngx-lib';\r\nimport { CacheObject } from '../model/cache-object';\r\nimport { ListItem } from '../model/list-item';\r\nimport { ListItemsRequest } from '../model/list-items-request';\r\nimport { PhotoItem } from '../model/photo-item';\r\nimport { SharePointServiceOptions, SharePointServiceOptionsToken } from '../model/sharepoint-service-options';\r\nimport { User } from '../model/user';\r\nimport { UserRequest } from '../model/user-request';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharePointService extends NgxLibServiceBase {\r\n #services = {\r\n http: inject(HttpClient)\r\n };\r\n\r\n #cache: {\r\n users?: CacheObject<User>,\r\n photos?: CacheObject<PhotoItem>\r\n } = { users: undefined, photos: undefined };\r\n\r\n #defaultCacheLifeMinutes = 720;\r\n\r\n //#region Utilities\r\n #cacheExpired<T>(cache: CacheObject<T>): boolean {\r\n if (!cache) {\r\n return true;\r\n }\r\n\r\n const lifeMinutes = this.options?.caching?.lifeMinutes ?? this.#defaultCacheLifeMinutes;\r\n const expiration = cache.lastUpdate.plus({ minutes: lifeMinutes});\r\n\r\n return DateTime.now() > expiration;\r\n }\r\n //#endregion\r\n\r\n //#region Initialization\r\n constructor(@Optional() @Inject(SharePointServiceOptionsToken) private options: SharePointServiceOptions) {\r\n\r\n super(options);\r\n\r\n this.options = {\r\n ...options,\r\n \r\n credentials: options?.credentials ?? {\r\n username: 'viewer',\r\n password: 'viewer'\r\n },\r\n\r\n caching: options?.caching ?? {\r\n enabled: false,\r\n lifeMinutes: this.#defaultCacheLifeMinutes\r\n },\r\n\r\n endpoints: options?.endpoints ?? {\r\n users: `/sharepoint/users`,\r\n listItems: `/sharepoint/listitems`\r\n },\r\n \r\n photos: options?.photos ?? {\r\n site: 'https://sharepoint.cleavelandprice.com/digitaldisplay',\r\n list: 'Employee Thumbnail Photos',\r\n additionalPropertiesToRetrieve: [ 'EncodedAbsUrl' ]\r\n },\r\n \r\n logging: options?.logging ?? {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n }\r\n };\r\n }\r\n //#endregion\r\n\r\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\r\n //const apiUrl = this.options?.apiUrl;\r\n const endpoint = this.options?.endpoints?.listItems;\r\n\r\n return this.#services.http.post<ListItem[]>(`${this.apiUrl}${endpoint}`, request);\r\n //return this.#services.http.post<ListItem[]>(this.config!.endpoints!.listItems!, request);\r\n }\r\n\r\n getPhotos(): Observable<PhotoItem[]> {\r\n const request: ListItemsRequest = {\r\n username: this.options?.credentials?.username,\r\n password: this.options?.credentials?.password,\r\n site: this.options?.photos?.site,\r\n list: this.options?.photos?.list,\r\n additionalPropertiesToRetrieve: this.options?.photos?.additionalPropertiesToRetrieve\r\n };\r\n\r\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\r\n\r\n if (this.options?.caching?.enabled) {\r\n if (this.#cacheExpired<PhotoItem>(this.#cache?.photos!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.#cache!.photos = {\r\n data,\r\n lastUpdate: DateTime.now()\r\n };\r\n\r\n if (this.options?.logging?.dataCached) {\r\n const lifeMinutes = this.options.caching?.lifeMinutes ?? this.#defaultCacheLifeMinutes;\r\n console.log(`Photos cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.options.logging?.cachedDataReturned) {\r\n console.log('Returning cached photos');\r\n }\r\n\r\n return of(this.#cache!.photos!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.options?.logging?.freshDataReturned) {\r\n console.log('Returning fresh photos');\r\n }\r\n\r\n return observable$;\r\n }\r\n\r\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\r\n const endpoint = this.options?.endpoints?.users;\r\n \r\n const observable$ = this.#services.http.post<User | User[]>(`${this.apiUrl}${endpoint}/${id ?? ''}`, request);\r\n\r\n //#region Single user\r\n if (id) {\r\n return observable$;\r\n }\r\n //#endregion\r\n\r\n //#region Multiple users\r\n if (this.options?.caching?.enabled) {\r\n if (this.#cacheExpired<User>(this.#cache!.users!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.#cache!.users = {\r\n data: data as User[],\r\n lastUpdate: DateTime.now()\r\n };\r\n\r\n if (this.options?.logging?.dataCached) {\r\n const lifeMinutes = this.options.caching?.lifeMinutes ?? this.#defaultCacheLifeMinutes;\r\n console.log(`Users cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.options.logging?.cachedDataReturned) {\r\n console.log('Returning cached users');\r\n }\r\n\r\n return of(this.#cache!.users!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.options?.logging?.freshDataReturned) {\r\n console.log('Returning fresh users');\r\n }\r\n\r\n return observable$;\r\n //#endregion\r\n }\r\n\r\n clearCache(): void {\r\n this.#cache = { users: undefined, photos: undefined };\r\n\r\n if (this.options?.logging?.cacheCleared) {\r\n console.log('Cache cleared');\r\n }\r\n }\r\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\nimport { map, of } from 'rxjs';\nimport { PhotoItem } from '../model/photo-item';\nimport { SharePointService } from '../services/sharepoint.service';\n\n@Pipe({\n name: 'userPhotoUrl',\n standalone: true\n})\nexport class UserPhotoUrlPipe implements PipeTransform {\n #sharePointService = inject(SharePointService);\n\n transform(user: CleavelandPriceUser, userPhotos?: PhotoItem[]): any {\n const observable$ = userPhotos ? of(userPhotos) : this.#sharePointService.getPhotos();\n\n return observable$\n .pipe(\n map(photos =>\n photos.find(pic =>\n // Try to match by employeeNumber, accountName, or title\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase())\n )?.encodedAbsUrl\n )\n );\n\n /*const photo = photos\n .find(pic =>\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${user.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;*/\n }\n}","import { AsyncPipe } from '@angular/common';\r\nimport { Component, inject, input, OnInit } from '@angular/core';\r\nimport { ActiveDirectoryService, CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem } from '../../model/photo-item';\r\nimport { UserPhotoUrlPipe } from '../../pipes/user-photo-url.pipe';\r\n\r\n@Component({\r\n selector: 'user-photo',\r\n templateUrl: './user-photo.component.html',\r\n imports: [\r\n AsyncPipe,\r\n UserPhotoUrlPipe\r\n ],\r\n standalone: true,\r\n styleUrl: './user-photo.component.scss'\r\n})\r\nexport class UserPhotoComponent implements OnInit {\r\n #activeDirectoryService = inject(ActiveDirectoryService);\r\n\r\n user = input.required<CleavelandPriceUser | string>();\r\n protected _user!: CleavelandPriceUser;\r\n\r\n //employee = input<CleavelandPriceUser | undefined>();\r\n // Or...\r\n //accountName = input<string | undefined>();\r\n\r\n userPhotos = input<PhotoItem[] | undefined>();\r\n size = input(\"2em\");\r\n notRound = input(false);\r\n\r\n ngOnInit(): void {;\r\n if (typeof this.user() === 'string') {\r\n // Developer passed in an account name instead of a user object\r\n // We need to do the work of getting the user object ourselves\r\n this.#activeDirectoryService.getUser(this.user() as string)\r\n .subscribe(user => this._user = user);\r\n } else {\r\n this._user = this.user() as CleavelandPriceUser;\r\n }\r\n }\r\n}\r\n","@if (_user) {\r\n @if ((_user | userPhotoUrl:userPhotos() | async)) {\r\n <img\r\n [src]=\"_user | userPhotoUrl:userPhotos() | async\"\r\n [style.width]=\"size()\"\r\n [style.height]=\"size()\"\r\n [style.border-radius]=\"notRound() ? 'initial' : '100%'\">\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\n\r\nimport { UserPhotoComponent } from './components/user-photo/user-photo.component';\r\nimport { SharePointServiceOptions, SharePointServiceOptionsToken } from './model/sharepoint-service-options';\r\nimport { UserPhotoUrlPipe } from './pipes/user-photo-url.pipe';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n UserPhotoUrlPipe,\r\n UserPhotoComponent\r\n ],\r\n exports: [\r\n UserPhotoUrlPipe,\r\n UserPhotoComponent\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(options: SharePointServiceOptions): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n {\r\n provide: SharePointServiceOptionsToken,\r\n useValue: options\r\n }\r\n ]\r\n }\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './sharepoint.api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cleavelandprice-ngx-lib-sharepoint.mjs","sources":["../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/model/sharepoint-service-options.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/default-credentials.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/services/sharepoint.service.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/pipes/user-photo-url.pipe.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/components/user-photo/user-photo.component.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/components/user-photo/user-photo.component.html","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/sharepoint.module.ts","../../../../projects/cleavelandprice/ngx-lib/sharepoint/src/cleavelandprice-ngx-lib-sharepoint.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\nimport { CachingConfig, Credentials, LoggingConfig, NgxLibServiceOptions } from \"@cleavelandprice/ngx-lib\";\r\n\r\nexport interface SharePointEndpoints {\r\n users?: string;\r\n listItems?: string;\r\n}\r\n\r\nexport interface SharePointPhotos {\r\n site?: string;\r\n list?: string;\r\n additionalPropertiesToRetrieve?: string[]\r\n}\r\n\r\nexport interface SharePointServiceOptions extends NgxLibServiceOptions {\r\n credentials?: Credentials;\r\n caching?: CachingConfig;\r\n endpoints?: SharePointEndpoints;\r\n photos?: SharePointPhotos;\r\n logging?: LoggingConfig;\r\n}\r\nexport const SharePointServiceOptionsToken = new InjectionToken<SharePointServiceOptions>('');","// DO NOT EXPORT THIS FILE!\r\n\r\nexport const DefaultCredentials = {\r\n username: 'itprocess',\r\n password: 'itproce$$'\r\n};","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, inject, Injectable, Optional } from '@angular/core';\r\nimport { DateTime } from 'luxon';\r\nimport { Observable, of } from 'rxjs';\r\n\r\nimport { DefaultCredentials } from '../default-credentials';\r\n\r\nimport { NgxLibServiceBase } from '@cleavelandprice/ngx-lib';\r\nimport { CacheObject } from '../model/cache-object';\r\nimport { ListItem } from '../model/list-item';\r\nimport { ListItemsRequest } from '../model/list-items-request';\r\nimport { PhotoItem } from '../model/photo-item';\r\nimport { SharePointServiceOptions, SharePointServiceOptionsToken } from '../model/sharepoint-service-options';\r\nimport { User } from '../model/user';\r\nimport { UserRequest } from '../model/user-request';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SharePointService extends NgxLibServiceBase {\r\n #services = {\r\n http: inject(HttpClient)\r\n };\r\n\r\n #cache: {\r\n users?: CacheObject<User>,\r\n photos?: CacheObject<PhotoItem>\r\n } = { users: undefined, photos: undefined };\r\n\r\n #defaultCacheLifeMinutes = 720;\r\n\r\n //#region Utilities\r\n #cacheExpired<T>(cache: CacheObject<T>): boolean {\r\n if (!cache) {\r\n return true;\r\n }\r\n\r\n const lifeMinutes = this.options?.caching?.lifeMinutes ?? this.#defaultCacheLifeMinutes;\r\n const expiration = cache.lastUpdate.plus({ minutes: lifeMinutes});\r\n\r\n return DateTime.now() > expiration;\r\n }\r\n //#endregion\r\n\r\n //#region Initialization\r\n constructor(@Optional() @Inject(SharePointServiceOptionsToken) private options: SharePointServiceOptions) {\r\n\r\n super(options);\r\n\r\n this.options = {\r\n ...options,\r\n \r\n credentials: options?.credentials ?? DefaultCredentials,\r\n\r\n caching: options?.caching ?? {\r\n enabled: false,\r\n lifeMinutes: this.#defaultCacheLifeMinutes\r\n },\r\n\r\n endpoints: options?.endpoints ?? {\r\n users: `/sharepoint/users`,\r\n listItems: `/sharepoint/listitems`\r\n },\r\n \r\n photos: options?.photos ?? {\r\n site: 'https://sharepoint.cleavelandprice.com/digitaldisplay',\r\n list: 'Employee Thumbnail Photos',\r\n additionalPropertiesToRetrieve: [ 'EncodedAbsUrl' ]\r\n },\r\n \r\n logging: options?.logging ?? {\r\n dataCached: false,\r\n cachedDataReturned: false,\r\n freshDataReturned: false,\r\n cacheCleared: false\r\n }\r\n };\r\n }\r\n //#endregion\r\n\r\n getListItems(request: ListItemsRequest): Observable<ListItem[]> {\r\n //const apiUrl = this.options?.apiUrl;\r\n const endpoint = this.options?.endpoints?.listItems;\r\n\r\n return this.#services.http.post<ListItem[]>(`${this.apiUrl}${endpoint}`, request);\r\n //return this.#services.http.post<ListItem[]>(this.config!.endpoints!.listItems!, request);\r\n }\r\n\r\n getPhotos(): Observable<PhotoItem[]> {\r\n const request: ListItemsRequest = {\r\n username: this.options?.credentials?.username,\r\n password: this.options?.credentials?.password,\r\n site: this.options?.photos?.site,\r\n list: this.options?.photos?.list,\r\n additionalPropertiesToRetrieve: this.options?.photos?.additionalPropertiesToRetrieve\r\n };\r\n\r\n const observable$ = this.getListItems(request) as Observable<PhotoItem[]>;\r\n\r\n if (this.options?.caching?.enabled) {\r\n if (this.#cacheExpired<PhotoItem>(this.#cache?.photos!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.#cache!.photos = {\r\n data,\r\n lastUpdate: DateTime.now()\r\n };\r\n\r\n if (this.options?.logging?.dataCached) {\r\n const lifeMinutes = this.options.caching?.lifeMinutes ?? this.#defaultCacheLifeMinutes;\r\n console.log(`Photos cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.options.logging?.cachedDataReturned) {\r\n console.log('Returning cached photos');\r\n }\r\n\r\n return of(this.#cache!.photos!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.options?.logging?.freshDataReturned) {\r\n console.log('Returning fresh photos');\r\n }\r\n\r\n return observable$;\r\n }\r\n\r\n getUsers(request: UserRequest, id?: number): Observable<User | User[]> {\r\n const endpoint = this.options?.endpoints?.users;\r\n \r\n const observable$ = this.#services.http.post<User | User[]>(`${this.apiUrl}${endpoint}/${id ?? ''}`, request);\r\n\r\n //#region Single user\r\n if (id) {\r\n return observable$;\r\n }\r\n //#endregion\r\n\r\n //#region Multiple users\r\n if (this.options?.caching?.enabled) {\r\n if (this.#cacheExpired<User>(this.#cache!.users!)) {\r\n // Get the data and cache it\r\n observable$.subscribe(data => {\r\n this.#cache!.users = {\r\n data: data as User[],\r\n lastUpdate: DateTime.now()\r\n };\r\n\r\n if (this.options?.logging?.dataCached) {\r\n const lifeMinutes = this.options.caching?.lifeMinutes ?? this.#defaultCacheLifeMinutes;\r\n console.log(`Users cached for ${lifeMinutes} minutes`);\r\n }\r\n });\r\n } else {\r\n // Cache exists and hasn't expired yet\r\n if (this.options.logging?.cachedDataReturned) {\r\n console.log('Returning cached users');\r\n }\r\n\r\n return of(this.#cache!.users!.data);\r\n }\r\n }\r\n\r\n // Cache is either disabled or expired, return data from API\r\n if (this.options?.logging?.freshDataReturned) {\r\n console.log('Returning fresh users');\r\n }\r\n\r\n return observable$;\r\n //#endregion\r\n }\r\n\r\n clearCache(): void {\r\n this.#cache = { users: undefined, photos: undefined };\r\n\r\n if (this.options?.logging?.cacheCleared) {\r\n console.log('Cache cleared');\r\n }\r\n }\r\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\nimport { map, of } from 'rxjs';\nimport { PhotoItem } from '../model/photo-item';\nimport { SharePointService } from '../services/sharepoint.service';\n\n@Pipe({\n name: 'userPhotoUrl',\n standalone: true\n})\nexport class UserPhotoUrlPipe implements PipeTransform {\n #sharePointService = inject(SharePointService);\n\n transform(user: CleavelandPriceUser, userPhotos?: PhotoItem[]): any {\n const observable$ = userPhotos ? of(userPhotos) : this.#sharePointService.getPhotos();\n\n return observable$\n .pipe(\n map(photos =>\n photos.find(pic =>\n // Try to match by employeeNumber, accountName, or title\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase())\n )?.encodedAbsUrl\n )\n );\n\n /*const photo = photos\n .find(pic =>\n (pic.employeeNumber && user.employeeNumber && +pic.employeeNumber === +user.employeeNumber) ||\n (pic.accountName && pic.accountName.toLowerCase() === user.sAMAccountName.toLowerCase()) ||\n (pic.title && pic.title.toLowerCase() === user.displayName.toLowerCase()));\n\n if (!photo) {\n console.log(`No photo match for ${user.displayName}`);\n }\n\n return photo ? photo.encodedAbsUrl : null;*/\n }\n}","import { AsyncPipe } from '@angular/common';\r\nimport { Component, inject, input, OnInit } from '@angular/core';\r\nimport { ActiveDirectoryService, CleavelandPriceUser } from '@cleavelandprice/ngx-lib/active-directory';\r\nimport { PhotoItem } from '../../model/photo-item';\r\nimport { UserPhotoUrlPipe } from '../../pipes/user-photo-url.pipe';\r\n\r\n@Component({\r\n selector: 'user-photo',\r\n templateUrl: './user-photo.component.html',\r\n imports: [\r\n AsyncPipe,\r\n UserPhotoUrlPipe\r\n ],\r\n standalone: true,\r\n styleUrl: './user-photo.component.scss'\r\n})\r\nexport class UserPhotoComponent implements OnInit {\r\n #activeDirectoryService = inject(ActiveDirectoryService);\r\n\r\n user = input.required<CleavelandPriceUser | string>();\r\n protected _user!: CleavelandPriceUser;\r\n\r\n //employee = input<CleavelandPriceUser | undefined>();\r\n // Or...\r\n //accountName = input<string | undefined>();\r\n\r\n userPhotos = input<PhotoItem[] | undefined>();\r\n size = input(\"2em\");\r\n notRound = input(false);\r\n\r\n ngOnInit(): void {;\r\n if (typeof this.user() === 'string') {\r\n // Developer passed in an account name instead of a user object\r\n // We need to do the work of getting the user object ourselves\r\n this.#activeDirectoryService.getUser(this.user() as string)\r\n .subscribe(user => this._user = user);\r\n } else {\r\n this._user = this.user() as CleavelandPriceUser;\r\n }\r\n }\r\n}\r\n","@if (_user) {\r\n @if ((_user | userPhotoUrl:userPhotos() | async)) {\r\n <img\r\n [src]=\"_user | userPhotoUrl:userPhotos() | async\"\r\n [style.width]=\"size()\"\r\n [style.height]=\"size()\"\r\n [style.border-radius]=\"notRound() ? 'initial' : '100%'\">\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\r\n\r\nimport { UserPhotoComponent } from './components/user-photo/user-photo.component';\r\nimport { SharePointServiceOptions, SharePointServiceOptionsToken } from './model/sharepoint-service-options';\r\nimport { UserPhotoUrlPipe } from './pipes/user-photo-url.pipe';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n UserPhotoUrlPipe,\r\n UserPhotoComponent\r\n ],\r\n exports: [\r\n UserPhotoUrlPipe,\r\n UserPhotoComponent\r\n ]\r\n})\r\nexport class SharePointModule {\r\n static forRoot(options: SharePointServiceOptions): ModuleWithProviders<SharePointModule> {\r\n return {\r\n ngModule: SharePointModule,\r\n providers: [\r\n {\r\n provide: SharePointServiceOptionsToken,\r\n useValue: options\r\n }\r\n ]\r\n }\r\n }\r\n\r\n constructor(@Optional() @SkipSelf() parentModule: SharePointModule) {\r\n if (parentModule) {\r\n throw new Error(\r\n 'SharePointModule is already loaded. Import it in the AppModule only');\r\n }\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './sharepoint.api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "comment": "NGX-LIB primary entry point package.json",
3
3
  "name": "@cleavelandprice/ngx-lib",
4
- "version": "4.1.12",
4
+ "version": "4.1.16",
5
5
  "description": "Angular library providing foundational functionality to Cleaveland-Price applications",
6
6
  "peerDependencies": {
7
7
  "@angular/common": "^17.3.5",
@@ -41,6 +41,12 @@
41
41
  "esm": "./esm2022/active-directory/cleavelandprice-ngx-lib-active-directory.mjs",
42
42
  "default": "./fesm2022/cleavelandprice-ngx-lib-active-directory.mjs"
43
43
  },
44
+ "./dialog": {
45
+ "types": "./dialog/index.d.ts",
46
+ "esm2022": "./esm2022/dialog/cleavelandprice-ngx-lib-dialog.mjs",
47
+ "esm": "./esm2022/dialog/cleavelandprice-ngx-lib-dialog.mjs",
48
+ "default": "./fesm2022/cleavelandprice-ngx-lib-dialog.mjs"
49
+ },
44
50
  "./authentication": {
45
51
  "types": "./authentication/index.d.ts",
46
52
  "esm2022": "./esm2022/authentication/cleavelandprice-ngx-lib-authentication.mjs",
@@ -53,12 +59,6 @@
53
59
  "esm": "./esm2022/msgraph/cleavelandprice-ngx-lib-msgraph.mjs",
54
60
  "default": "./fesm2022/cleavelandprice-ngx-lib-msgraph.mjs"
55
61
  },
56
- "./dialog": {
57
- "types": "./dialog/index.d.ts",
58
- "esm2022": "./esm2022/dialog/cleavelandprice-ngx-lib-dialog.mjs",
59
- "esm": "./esm2022/dialog/cleavelandprice-ngx-lib-dialog.mjs",
60
- "default": "./fesm2022/cleavelandprice-ngx-lib-dialog.mjs"
61
- },
62
62
  "./quill": {
63
63
  "types": "./quill/index.d.ts",
64
64
  "esm2022": "./esm2022/quill/cleavelandprice-ngx-lib-quill.mjs",
@@ -107,17 +107,17 @@
107
107
  "esm": "./esm2022/authentication/object/cleavelandprice-ngx-lib-authentication-object.mjs",
108
108
  "default": "./fesm2022/cleavelandprice-ngx-lib-authentication-object.mjs"
109
109
  },
110
- "./authentication/token": {
111
- "types": "./authentication/token/index.d.ts",
112
- "esm2022": "./esm2022/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs",
113
- "esm": "./esm2022/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs",
114
- "default": "./fesm2022/cleavelandprice-ngx-lib-authentication-token.mjs"
115
- },
116
110
  "./quill/mention": {
117
111
  "types": "./quill/mention/index.d.ts",
118
112
  "esm2022": "./esm2022/quill/mention/cleavelandprice-ngx-lib-quill-mention.mjs",
119
113
  "esm": "./esm2022/quill/mention/cleavelandprice-ngx-lib-quill-mention.mjs",
120
114
  "default": "./fesm2022/cleavelandprice-ngx-lib-quill-mention.mjs"
115
+ },
116
+ "./authentication/token": {
117
+ "types": "./authentication/token/index.d.ts",
118
+ "esm2022": "./esm2022/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs",
119
+ "esm": "./esm2022/authentication/token/cleavelandprice-ngx-lib-authentication-token.mjs",
120
+ "default": "./fesm2022/cleavelandprice-ngx-lib-authentication-token.mjs"
121
121
  }
122
122
  }
123
123
  }
@@ -0,0 +1,4 @@
1
+ export declare const DefaultCredentials: {
2
+ username: string;
3
+ password: string;
4
+ };