@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
54 lines • 18.4 kB
JavaScript
import { Component, forwardRef } from '@angular/core';
import { gettext, PRODUCT_EXPERIENCE_EVENT_SOURCE } from '@c8y/ngx-components';
import { BsModalRef } from 'ngx-bootstrap/modal';
import { PRODUCT_EXPERIENCE_DEVICE_PROFILE } from './device-profile.model';
import { DeviceProfileService } from './device-profile.service';
import * as i0 from "@angular/core";
import * as i1 from "ngx-bootstrap/modal";
import * as i2 from "./device-profile.service";
import * as i3 from "@c8y/ngx-components";
import * as i4 from "@angular/forms";
import * as i5 from "ngx-bootstrap/popover";
export class AddDeviceProfileComponent {
constructor(modal, deviceProfileService) {
this.modal = modal;
this.deviceProfileService = deviceProfileService;
this.DEVICE_TYPE_POPOVER = gettext('The device profile will be available for assignments on devices of the specified type. Otherwise, it will be available for all device types.');
this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_DEVICE_PROFILE;
this.deviceProfile = {
name: '',
type: 'c8y_Profile',
c8y_Filter: {},
c8y_DeviceProfile: {}
};
this.result = new Promise((resolve, reject) => {
this._save = resolve;
this._cancel = reject;
});
}
async create() {
const mo = (await this.deviceProfileService.createDeviceProfile(this.deviceProfile)).data;
this._save(mo.id);
}
close() {
this._cancel();
this.modal.hide();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddDeviceProfileComponent, deps: [{ token: i1.BsModalRef }, { token: i2.DeviceProfileService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddDeviceProfileComponent, selector: "c8y-add-device-profile", providers: [
{
provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
useExisting: forwardRef(() => AddDeviceProfileComponent)
}
], ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-device-profile'\"></i>\n <div\n class=\"modal-title\"\n id=\"addDeviceProfileModalTitle\"\n translate\n >\n Add device profile\n </div>\n </div>\n\n <form\n #createDeviceProfile=\"ngForm\"\n (ngSubmit)=\"createDeviceProfile.form.valid && create()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addDeviceProfileModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"name\"\n translate\n >\n Name\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"deviceProfile.name\"\n data-cy=\"add-device-profile--device-profile-name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label>\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ DEVICE_TYPE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"deviceType\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n data-cy=\"add-device-profile--device-type\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CANCEL }\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Continue' | translate }}\"\n type=\"submit\"\n [disabled]=\"createDeviceProfile.form.invalid\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CREATE }\"\n >\n {{ 'Continue' | translate }}\n </button>\n </div>\n </form>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddDeviceProfileComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-add-device-profile', providers: [
{
provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
useExisting: forwardRef(() => AddDeviceProfileComponent)
}
], template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-device-profile'\"></i>\n <div\n class=\"modal-title\"\n id=\"addDeviceProfileModalTitle\"\n translate\n >\n Add device profile\n </div>\n </div>\n\n <form\n #createDeviceProfile=\"ngForm\"\n (ngSubmit)=\"createDeviceProfile.form.valid && create()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"addDeviceProfileModalDescription\"\n >\n <c8y-form-group>\n <label\n for=\"name\"\n translate\n >\n Name\n </label>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My device profile' | translate }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"deviceProfile.name\"\n data-cy=\"add-device-profile--device-profile-name\"\n />\n </c8y-form-group>\n <c8y-form-group>\n <label>\n {{ 'Device type' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ DEVICE_TYPE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n name=\"deviceType\"\n [(ngModel)]=\"deviceProfile.c8y_Filter.type\"\n data-cy=\"add-device-profile--device-type\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CANCEL }\"\n >\n {{ 'Cancel' | translate }}\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Continue' | translate }}\"\n type=\"submit\"\n [disabled]=\"createDeviceProfile.form.invalid\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.CREATE }\"\n >\n {{ 'Continue' | translate }}\n </button>\n </div>\n </form>\n</div>\n" }]
}], ctorParameters: () => [{ type: i1.BsModalRef }, { type: i2.DeviceProfileService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRldmljZS1wcm9maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldmljZS1wcm9maWxlL2FkZC1kZXZpY2UtcHJvZmlsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9kZXZpY2UtcHJvZmlsZS9hZGQtZGV2aWNlLXByb2ZpbGUtY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUNMLE9BQU8sRUFHUCwrQkFBK0IsRUFDaEMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFpQixpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBWWhFLE1BQU0sT0FBTyx5QkFBeUI7SUFtQnBDLFlBQ1UsS0FBaUIsRUFDakIsb0JBQTBDO1FBRDFDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXBCcEQsd0JBQW1CLEdBQUcsT0FBTyxDQUMzQiw4SUFBOEksQ0FDL0ksQ0FBQztRQUNGLHVCQUFrQixHQUFHLGlDQUFpQyxDQUFDO1FBQ3ZELGtCQUFhLEdBQTJCO1lBQ3RDLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLGFBQWE7WUFDbkIsVUFBVSxFQUFFLEVBQUU7WUFDZCxpQkFBaUIsRUFBRSxFQUFFO1NBQ3RCLENBQUM7UUFDRixXQUFNLEdBQWlCLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBUUEsQ0FBQztJQUVKLEtBQUssQ0FBQyxNQUFNO1FBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7K0dBaENVLHlCQUF5QjttR0FBekIseUJBQXlCLGlEQVB6QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7YUFDekQ7U0FDRiwwQkNuQkgsb3BGQTRGQTs7NEZEdkVhLHlCQUF5QjtrQkFWckMsU0FBUzsrQkFDRSx3QkFBd0IsYUFFdkI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7eUJBQ3pEO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBnZXR0ZXh0LFxuICBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50LFxuICBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50U291cmNlLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0VfRVZFTlRfU09VUkNFXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGV2aWNlUHJvZmlsZSwgUFJPRFVDVF9FWFBFUklFTkNFX0RFVklDRV9QUk9GSUxFIH0gZnJvbSAnLi9kZXZpY2UtcHJvZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBEZXZpY2VQcm9maWxlU2VydmljZSB9IGZyb20gJy4vZGV2aWNlLXByb2ZpbGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtZGV2aWNlLXByb2ZpbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLWRldmljZS1wcm9maWxlLWNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUFJPRFVDVF9FWFBFUklFTkNFX0VWRU5UX1NPVVJDRSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFkZERldmljZVByb2ZpbGVDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFkZERldmljZVByb2ZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBQcm9kdWN0RXhwZXJpZW5jZUV2ZW50U291cmNlIHtcbiAgREVWSUNFX1RZUEVfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ1RoZSBkZXZpY2UgcHJvZmlsZSB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgYXNzaWdubWVudHMgb24gZGV2aWNlcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBhdmFpbGFibGUgZm9yIGFsbCBkZXZpY2UgdHlwZXMuJ1xuICApO1xuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSBQUk9EVUNUX0VYUEVSSUVOQ0VfREVWSUNFX1BST0ZJTEU7XG4gIGRldmljZVByb2ZpbGU6IFBhcnRpYWw8RGV2aWNlUHJvZmlsZT4gPSB7XG4gICAgbmFtZTogJycsXG4gICAgdHlwZTogJ2M4eV9Qcm9maWxlJyxcbiAgICBjOHlfRmlsdGVyOiB7fSxcbiAgICBjOHlfRGV2aWNlUHJvZmlsZToge31cbiAgfTtcbiAgcmVzdWx0OiBQcm9taXNlPGFueT4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fc2F2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fY2FuY2VsID0gcmVqZWN0O1xuICB9KTtcbiAgcHJvZHVjdEV4cGVyaWVuY2VFdmVudDogUHJvZHVjdEV4cGVyaWVuY2VFdmVudDtcbiAgcHJpdmF0ZSBfc2F2ZTtcbiAgcHJpdmF0ZSBfY2FuY2VsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWw6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBkZXZpY2VQcm9maWxlU2VydmljZTogRGV2aWNlUHJvZmlsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIGNyZWF0ZSgpIHtcbiAgICBjb25zdCBtbyA9IChhd2FpdCB0aGlzLmRldmljZVByb2ZpbGVTZXJ2aWNlLmNyZWF0ZURldmljZVByb2ZpbGUodGhpcy5kZXZpY2VQcm9maWxlKSkuZGF0YTtcbiAgICB0aGlzLl9zYXZlKG1vLmlkKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX2NhbmNlbCgpO1xuICAgIHRoaXMubW9kYWwuaGlkZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmlld3BvcnQtbW9kYWxcIj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBkaWFsb2ctaGVhZGVyXCI+XG4gICAgPGkgW2M4eUljb25dPVwiJ2M4eS1kZXZpY2UtcHJvZmlsZSdcIj48L2k+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC10aXRsZVwiXG4gICAgICBpZD1cImFkZERldmljZVByb2ZpbGVNb2RhbFRpdGxlXCJcbiAgICAgIHRyYW5zbGF0ZVxuICAgID5cbiAgICAgIEFkZCBkZXZpY2UgcHJvZmlsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Zm9ybVxuICAgICNjcmVhdGVEZXZpY2VQcm9maWxlPVwibmdGb3JtXCJcbiAgICAobmdTdWJtaXQpPVwiY3JlYXRlRGV2aWNlUHJvZmlsZS5mb3JtLnZhbGlkICYmIGNyZWF0ZSgpXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1pbm5lci1zY3JvbGxcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtb2RhbC1ib2R5XCJcbiAgICAgICAgaWQ9XCJhZGREZXZpY2VQcm9maWxlTW9kYWxEZXNjcmlwdGlvblwiXG4gICAgICA+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIGZvcj1cIm5hbWVcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgTmFtZVxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBpZD1cIm5hbWVcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBNeSBkZXZpY2UgcHJvZmlsZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgbmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRldmljZVByb2ZpbGUubmFtZVwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiYWRkLWRldmljZS1wcm9maWxlLS1kZXZpY2UtcHJvZmlsZS1uYW1lXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAge3sgJ0RldmljZSB0eXBlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7IERFVklDRV9UWVBFX1BPUE9WRVIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJkZXZpY2VUeXBlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4nIHwgdHJhbnNsYXRlIH19IGM4eV9MaW51eFwiXG4gICAgICAgICAgICBuYW1lPVwiZGV2aWNlVHlwZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRldmljZVByb2ZpbGUuYzh5X0ZpbHRlci50eXBlXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJhZGQtZGV2aWNlLXByb2ZpbGUtLWRldmljZS10eXBlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICAgICAgICBpbmhlcml0XG4gICAgICAgIHN1cHByZXNzRGF0YU92ZXJyaWRpbmdcbiAgICAgICAgW2FjdGlvbkRhdGFdPVwieyBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BQ1RJT05TLkNBTkNFTCB9XCJcbiAgICAgID5cbiAgICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnQ29udGludWUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJjcmVhdGVEZXZpY2VQcm9maWxlLmZvcm0uaW52YWxpZFwiXG4gICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgIGluaGVyaXRcbiAgICAgICAgc3VwcHJlc3NEYXRhT3ZlcnJpZGluZ1xuICAgICAgICBbYWN0aW9uRGF0YV09XCJ7IGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFDVElPTlMuQ1JFQVRFIH1cIlxuICAgICAgPlxuICAgICAgICB7eyAnQ29udGludWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG4iXX0=