@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
145 lines • 16.4 kB
JavaScript
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CoreModule, hookNavigator, hookTab } from '@c8y/ngx-components';
import { BulkOperationFromSingleModule } from '@c8y/ngx-components/operations/bulk-operation-from-single';
import { BulkOperationsListModule } from '@c8y/ngx-components/operations/bulk-operations-list';
import { BulkOperationsServiceModule } from '@c8y/ngx-components/operations/bulk-operations-service';
import { BulkOperationsStepperContainerModule } from '@c8y/ngx-components/operations/bulk-operations-stepper-container';
import { StepperBulkTypeConfigurationModule } from '@c8y/ngx-components/operations/stepper-bulk-type-configuration';
import { StepperBulkTypeDeviceProfileModule } from '@c8y/ngx-components/operations/stepper-bulk-type-device-profile';
import { StepperBulkTypeFirmwareModule } from '@c8y/ngx-components/operations/stepper-bulk-type-firmware';
import { StepperBulkTypeSoftwareModule } from '@c8y/ngx-components/operations/stepper-bulk-type-software';
import { deviceControlOverviewFeatureProvider, deviceControlTabFeatureProvider } from '@c8y/ngx-components/operations/operations-list';
import { OperationsNavigationFactory } from './factories/nav.factory';
import { OperationsTabsFactory } from './factories/tabs.factory';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
export const operationsRoutes = [
{
path: 'devicecontrol',
redirectTo: 'devicecontrol/single',
pathMatch: 'full'
}
];
/**
* This module sets up the 'Device control' view. By importing it in your custom application you will have:
* - a 'Device control' tab in device details view
* - a 'Device control' entry in the 'Overviews' section of navigator
* - 'Bulk operations' tab on the 'Device control' page
* - list view of existing bulk operations with expandable details and options to filter
* - guided stepper dialogs to schedule new bulk operations of supported types
* (Configuration update, Firmware update, Software update, Apply device profile).
*
* Additionaly you can use the modules imported by {@link OperationsModule} separately to achieve
* the results you wish to have in your application, e.g.:
* - import {@link BulkOperationsListModule} and {@link BulkOperationsServiceModule}
* to have an overview of existing bulk operation with expandable details
* - additionaly import {@link BulkOperationsStepperContainerModule} and any of the existing
* `StepperBulkType*Module` modules ({@link StepperBulkTypeConfigurationModule},
* {@link StepperBulkTypeFirmwareModule}, {@link StepperBulkTypeSoftwareModule},
* {@link StepperBulkTypeDeviceProfileModule}) to have the option
* to create new bulk operation in a guided stepper dialog.
*
* ```typescript
* import { BulkOperationsServiceModule } from '@c8y/ngx-components/operations/bulk-operations-service';
* import { BulkOperationsListModule } from '@c8y/ngx-components/operations/bulk-operations-list';
*
* @NgModule({
* imports: [
* [...]
* BulkOperationsServiceModule,
* BulkOperationsListModule
* ],
* [...]
* })
* export class CustomOperationsModule {}```
* respectively
* ```typescript
* import { BulkOperationsStepperContainerModule } from '@c8y/ngx-components/operations/bulk-operations-stepper-container';
* import { BulkOperationsServiceModule } from '@c8y/ngx-components/operations/bulk-operations-service';
* import { BulkOperationsListModule } from '@c8y/ngx-components/operations/bulk-operations-list';
* import { StepperBulkTypeSoftwareModule } from '@c8y/ngx-components/operations/stepper-bulk-type-software';
*
* @NgModule({
* imports: [
* [...]
* BulkOperationsServiceModule,
* BulkOperationsListModule,
* BulkOperationsStepperContainerModule,
* StepperBulkTypeSoftwareModule
* ],
* [...]
* })
* export class CustomOperationsModule {}```
* You can provide your own bulk operation stepper by registering a component via the `hookListBulkType`:
*
* ```typescript
* import {
* hookListBulkType,
* baseUrl
* } from '@c8y/ngx-components/operations/bulk-operations-service';
*
* [...]
*
* providers: [
* hookListBulkType({
* type: 'my-bulk-op-type',
* c8yIcon: 'c8y-tools',
* name: 'My bulk op type',
* path: `${baseUrl}my-type`,
* component: StepperMyBulkTypeComponent,
* fragments: ['c8y_MyType'],
* selected: false
* })
* ]```
*/
export class OperationsModule {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OperationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: OperationsModule, imports: [CoreModule, i1.RouterModule, BulkOperationFromSingleModule,
BulkOperationsListModule,
BulkOperationsServiceModule,
BulkOperationsStepperContainerModule,
StepperBulkTypeConfigurationModule,
StepperBulkTypeFirmwareModule,
StepperBulkTypeSoftwareModule,
StepperBulkTypeDeviceProfileModule] }); }
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OperationsModule, providers: [
hookTab(OperationsTabsFactory),
hookNavigator(OperationsNavigationFactory),
deviceControlOverviewFeatureProvider,
deviceControlTabFeatureProvider
], imports: [CoreModule,
RouterModule.forChild(operationsRoutes),
BulkOperationFromSingleModule,
BulkOperationsListModule,
BulkOperationsServiceModule,
BulkOperationsStepperContainerModule,
StepperBulkTypeConfigurationModule,
StepperBulkTypeFirmwareModule,
StepperBulkTypeSoftwareModule,
StepperBulkTypeDeviceProfileModule] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OperationsModule, decorators: [{
type: NgModule,
args: [{
imports: [
CoreModule,
RouterModule.forChild(operationsRoutes),
BulkOperationFromSingleModule,
BulkOperationsListModule,
BulkOperationsServiceModule,
BulkOperationsStepperContainerModule,
StepperBulkTypeConfigurationModule,
StepperBulkTypeFirmwareModule,
StepperBulkTypeSoftwareModule,
StepperBulkTypeDeviceProfileModule
],
providers: [
hookTab(OperationsTabsFactory),
hookNavigator(OperationsNavigationFactory),
deviceControlOverviewFeatureProvider,
deviceControlTabFeatureProvider
]
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9vcGVyYXRpb25zL29wZXJhdGlvbnMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3BILE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ3JILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBRTFHLE9BQU8sRUFDTCxvQ0FBb0MsRUFDcEMsK0JBQStCLEVBQ2hDLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQUVqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBWTtJQUN2QztRQUNFLElBQUksRUFBRSxlQUFlO1FBQ3JCLFVBQVUsRUFBRSxzQkFBc0I7UUFDbEMsU0FBUyxFQUFFLE1BQU07S0FDbEI7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUVHO0FBcUJILE1BQU0sT0FBTyxnQkFBZ0I7K0dBQWhCLGdCQUFnQjtnSEFBaEIsZ0JBQWdCLFlBbEJ6QixVQUFVLG1CQUVWLDZCQUE2QjtZQUM3Qix3QkFBd0I7WUFDeEIsMkJBQTJCO1lBQzNCLG9DQUFvQztZQUNwQyxrQ0FBa0M7WUFDbEMsNkJBQTZCO1lBQzdCLDZCQUE2QjtZQUM3QixrQ0FBa0M7Z0hBU3pCLGdCQUFnQixhQVBoQjtZQUNULE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUM5QixhQUFhLENBQUMsMkJBQTJCLENBQUM7WUFDMUMsb0NBQW9DO1lBQ3BDLCtCQUErQjtTQUNoQyxZQWhCQyxVQUFVO1lBQ1YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN2Qyw2QkFBNkI7WUFDN0Isd0JBQXdCO1lBQ3hCLDJCQUEyQjtZQUMzQixvQ0FBb0M7WUFDcEMsa0NBQWtDO1lBQ2xDLDZCQUE2QjtZQUM3Qiw2QkFBNkI7WUFDN0Isa0NBQWtDOzs0RkFTekIsZ0JBQWdCO2tCQXBCNUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsVUFBVTt3QkFDVixZQUFZLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO3dCQUN2Qyw2QkFBNkI7d0JBQzdCLHdCQUF3Qjt3QkFDeEIsMkJBQTJCO3dCQUMzQixvQ0FBb0M7d0JBQ3BDLGtDQUFrQzt3QkFDbEMsNkJBQTZCO3dCQUM3Qiw2QkFBNkI7d0JBQzdCLGtDQUFrQztxQkFDbkM7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDOUIsYUFBYSxDQUFDLDJCQUEyQixDQUFDO3dCQUMxQyxvQ0FBb0M7d0JBQ3BDLCtCQUErQjtxQkFDaEM7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQ29yZU1vZHVsZSwgaG9va05hdmlnYXRvciwgaG9va1RhYiwgUm91dGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJ1bGtPcGVyYXRpb25Gcm9tU2luZ2xlTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9uLWZyb20tc2luZ2xlJztcbmltcG9ydCB7IEJ1bGtPcGVyYXRpb25zTGlzdE1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9idWxrLW9wZXJhdGlvbnMtbGlzdCc7XG5pbXBvcnQgeyBCdWxrT3BlcmF0aW9uc1NlcnZpY2VNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLXNlcnZpY2UnO1xuaW1wb3J0IHsgQnVsa09wZXJhdGlvbnNTdGVwcGVyQ29udGFpbmVyTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1zdGVwcGVyLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBTdGVwcGVyQnVsa1R5cGVDb25maWd1cmF0aW9uTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL3N0ZXBwZXItYnVsay10eXBlLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgU3RlcHBlckJ1bGtUeXBlRGV2aWNlUHJvZmlsZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9zdGVwcGVyLWJ1bGstdHlwZS1kZXZpY2UtcHJvZmlsZSc7XG5pbXBvcnQgeyBTdGVwcGVyQnVsa1R5cGVGaXJtd2FyZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9zdGVwcGVyLWJ1bGstdHlwZS1maXJtd2FyZSc7XG5pbXBvcnQgeyBTdGVwcGVyQnVsa1R5cGVTb2Z0d2FyZU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9zdGVwcGVyLWJ1bGstdHlwZS1zb2Z0d2FyZSc7XG5cbmltcG9ydCB7XG4gIGRldmljZUNvbnRyb2xPdmVydmlld0ZlYXR1cmVQcm92aWRlcixcbiAgZGV2aWNlQ29udHJvbFRhYkZlYXR1cmVQcm92aWRlclxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvb3BlcmF0aW9ucy1saXN0JztcbmltcG9ydCB7IE9wZXJhdGlvbnNOYXZpZ2F0aW9uRmFjdG9yeSB9IGZyb20gJy4vZmFjdG9yaWVzL25hdi5mYWN0b3J5JztcbmltcG9ydCB7IE9wZXJhdGlvbnNUYWJzRmFjdG9yeSB9IGZyb20gJy4vZmFjdG9yaWVzL3RhYnMuZmFjdG9yeSc7XG5cbmV4cG9ydCBjb25zdCBvcGVyYXRpb25zUm91dGVzOiBSb3V0ZVtdID0gW1xuICB7XG4gICAgcGF0aDogJ2RldmljZWNvbnRyb2wnLFxuICAgIHJlZGlyZWN0VG86ICdkZXZpY2Vjb250cm9sL3NpbmdsZScsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCdcbiAgfVxuXTtcblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBzZXRzIHVwIHRoZSAnRGV2aWNlIGNvbnRyb2wnIHZpZXcuIEJ5IGltcG9ydGluZyBpdCBpbiB5b3VyIGN1c3RvbSBhcHBsaWNhdGlvbiB5b3Ugd2lsbCBoYXZlOlxuICogLSBhICdEZXZpY2UgY29udHJvbCcgdGFiIGluIGRldmljZSBkZXRhaWxzIHZpZXdcbiAqIC0gYSAnRGV2aWNlIGNvbnRyb2wnIGVudHJ5IGluIHRoZSAnT3ZlcnZpZXdzJyBzZWN0aW9uIG9mIG5hdmlnYXRvclxuICogLSAnQnVsayBvcGVyYXRpb25zJyB0YWIgb24gdGhlICdEZXZpY2UgY29udHJvbCcgcGFnZVxuICogLSBsaXN0IHZpZXcgb2YgZXhpc3RpbmcgYnVsayBvcGVyYXRpb25zIHdpdGggZXhwYW5kYWJsZSBkZXRhaWxzIGFuZCBvcHRpb25zIHRvIGZpbHRlclxuICogLSBndWlkZWQgc3RlcHBlciBkaWFsb2dzIHRvIHNjaGVkdWxlIG5ldyBidWxrIG9wZXJhdGlvbnMgb2Ygc3VwcG9ydGVkIHR5cGVzXG4gKiAoQ29uZmlndXJhdGlvbiB1cGRhdGUsIEZpcm13YXJlIHVwZGF0ZSwgU29mdHdhcmUgdXBkYXRlLCBBcHBseSBkZXZpY2UgcHJvZmlsZSkuXG4gKlxuICogQWRkaXRpb25hbHkgeW91IGNhbiB1c2UgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYnkge0BsaW5rIE9wZXJhdGlvbnNNb2R1bGV9IHNlcGFyYXRlbHkgdG8gYWNoaWV2ZVxuICogdGhlIHJlc3VsdHMgeW91IHdpc2ggdG8gaGF2ZSBpbiB5b3VyIGFwcGxpY2F0aW9uLCBlLmcuOlxuICogLSBpbXBvcnQge0BsaW5rIEJ1bGtPcGVyYXRpb25zTGlzdE1vZHVsZX0gYW5kIHtAbGluayBCdWxrT3BlcmF0aW9uc1NlcnZpY2VNb2R1bGV9XG4gKiB0byBoYXZlIGFuIG92ZXJ2aWV3IG9mIGV4aXN0aW5nIGJ1bGsgb3BlcmF0aW9uIHdpdGggZXhwYW5kYWJsZSBkZXRhaWxzXG4gKiAtIGFkZGl0aW9uYWx5IGltcG9ydCB7QGxpbmsgQnVsa09wZXJhdGlvbnNTdGVwcGVyQ29udGFpbmVyTW9kdWxlfSBhbmQgYW55IG9mIHRoZSBleGlzdGluZ1xuICogYFN0ZXBwZXJCdWxrVHlwZSpNb2R1bGVgIG1vZHVsZXMgKHtAbGluayBTdGVwcGVyQnVsa1R5cGVDb25maWd1cmF0aW9uTW9kdWxlfSxcbiAqIHtAbGluayBTdGVwcGVyQnVsa1R5cGVGaXJtd2FyZU1vZHVsZX0sIHtAbGluayBTdGVwcGVyQnVsa1R5cGVTb2Z0d2FyZU1vZHVsZX0sXG4gKiB7QGxpbmsgU3RlcHBlckJ1bGtUeXBlRGV2aWNlUHJvZmlsZU1vZHVsZX0pIHRvIGhhdmUgdGhlIG9wdGlvblxuICogdG8gY3JlYXRlIG5ldyBidWxrIG9wZXJhdGlvbiBpbiBhIGd1aWRlZCBzdGVwcGVyIGRpYWxvZy5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBCdWxrT3BlcmF0aW9uc1NlcnZpY2VNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLXNlcnZpY2UnO1xuICogaW1wb3J0IHsgQnVsa09wZXJhdGlvbnNMaXN0TW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1saXN0JztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgWy4uLl1cbiAqICAgICBCdWxrT3BlcmF0aW9uc1NlcnZpY2VNb2R1bGUsXG4gKiAgICAgQnVsa09wZXJhdGlvbnNMaXN0TW9kdWxlXG4gKiAgIF0sXG4gKiAgIFsuLi5dXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEN1c3RvbU9wZXJhdGlvbnNNb2R1bGUge31gYGBcbiAqIHJlc3BlY3RpdmVseVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQnVsa09wZXJhdGlvbnNTdGVwcGVyQ29udGFpbmVyTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1zdGVwcGVyLWNvbnRhaW5lcic7XG4gKiBpbXBvcnQgeyBCdWxrT3BlcmF0aW9uc1NlcnZpY2VNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL29wZXJhdGlvbnMvYnVsay1vcGVyYXRpb25zLXNlcnZpY2UnO1xuICogaW1wb3J0IHsgQnVsa09wZXJhdGlvbnNMaXN0TW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL2J1bGstb3BlcmF0aW9ucy1saXN0JztcbiAqIGltcG9ydCB7IFN0ZXBwZXJCdWxrVHlwZVNvZnR3YXJlTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9vcGVyYXRpb25zL3N0ZXBwZXItYnVsay10eXBlLXNvZnR3YXJlJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgWy4uLl1cbiAqICAgICBCdWxrT3BlcmF0aW9uc1NlcnZpY2VNb2R1bGUsXG4gKiAgICAgQnVsa09wZXJhdGlvbnNMaXN0TW9kdWxlLFxuICogICAgIEJ1bGtPcGVyYXRpb25zU3RlcHBlckNvbnRhaW5lck1vZHVsZSxcbiAqICAgICBTdGVwcGVyQnVsa1R5cGVTb2Z0d2FyZU1vZHVsZVxuICogICBdLFxuICogICBbLi4uXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBDdXN0b21PcGVyYXRpb25zTW9kdWxlIHt9YGBgXG4gKiBZb3UgY2FuIHByb3ZpZGUgeW91ciBvd24gYnVsayBvcGVyYXRpb24gc3RlcHBlciBieSByZWdpc3RlcmluZyBhIGNvbXBvbmVudCB2aWEgdGhlIGBob29rTGlzdEJ1bGtUeXBlYDpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQge1xuICogICBob29rTGlzdEJ1bGtUeXBlLFxuICogICBiYXNlVXJsXG4gKiB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvb3BlcmF0aW9ucy9idWxrLW9wZXJhdGlvbnMtc2VydmljZSc7XG4gKlxuICogWy4uLl1cbiAqXG4gKiBwcm92aWRlcnM6IFtcbiAqICAgaG9va0xpc3RCdWxrVHlwZSh7XG4gKiAgICAgdHlwZTogJ215LWJ1bGstb3AtdHlwZScsXG4gKiAgICAgYzh5SWNvbjogJ2M4eS10b29scycsXG4gKiAgICAgbmFtZTogJ015IGJ1bGsgb3AgdHlwZScsXG4gKiAgICAgcGF0aDogYCR7YmFzZVVybH1teS10eXBlYCxcbiAqICAgICBjb21wb25lbnQ6IFN0ZXBwZXJNeUJ1bGtUeXBlQ29tcG9uZW50LFxuICogICAgIGZyYWdtZW50czogWydjOHlfTXlUeXBlJ10sXG4gKiAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gKiAgIH0pXG4gKiBdYGBgXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb3JlTW9kdWxlLFxuICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChvcGVyYXRpb25zUm91dGVzKSxcbiAgICBCdWxrT3BlcmF0aW9uRnJvbVNpbmdsZU1vZHVsZSxcbiAgICBCdWxrT3BlcmF0aW9uc0xpc3RNb2R1bGUsXG4gICAgQnVsa09wZXJhdGlvbnNTZXJ2aWNlTW9kdWxlLFxuICAgIEJ1bGtPcGVyYXRpb25zU3RlcHBlckNvbnRhaW5lck1vZHVsZSxcbiAgICBTdGVwcGVyQnVsa1R5cGVDb25maWd1cmF0aW9uTW9kdWxlLFxuICAgIFN0ZXBwZXJCdWxrVHlwZUZpcm13YXJlTW9kdWxlLFxuICAgIFN0ZXBwZXJCdWxrVHlwZVNvZnR3YXJlTW9kdWxlLFxuICAgIFN0ZXBwZXJCdWxrVHlwZURldmljZVByb2ZpbGVNb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgaG9va1RhYihPcGVyYXRpb25zVGFic0ZhY3RvcnkpLFxuICAgIGhvb2tOYXZpZ2F0b3IoT3BlcmF0aW9uc05hdmlnYXRpb25GYWN0b3J5KSxcbiAgICBkZXZpY2VDb250cm9sT3ZlcnZpZXdGZWF0dXJlUHJvdmlkZXIsXG4gICAgZGV2aWNlQ29udHJvbFRhYkZlYXR1cmVQcm92aWRlclxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbnNNb2R1bGUge31cbiJdfQ==