@en-solutions/tgm-client-sdk 1.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/README.md +788 -0
- package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
- package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
- package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
- package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
- package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
- package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
- package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
- package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
- package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
- package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
- package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
- package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
- package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
- package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
- package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
- package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
- package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
- package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
- package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
- package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
- package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
- package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
- package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
- package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
- package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
- package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
- package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
- package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
- package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
- package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
- package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
- package/esm2022/lib/core/auth-interceptor.mjs +33 -0
- package/esm2022/lib/core/client-interceptor.mjs +34 -0
- package/esm2022/lib/core/error-handler.mjs +32 -0
- package/esm2022/lib/core/http-client.service.mjs +254 -0
- package/esm2022/lib/core/websocket.service.mjs +185 -0
- package/esm2022/lib/models/admin/audit.models.mjs +2 -0
- package/esm2022/lib/models/admin/backup.models.mjs +2 -0
- package/esm2022/lib/models/admin/client.models.mjs +2 -0
- package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
- package/esm2022/lib/models/admin/erp.models.mjs +2 -0
- package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
- package/esm2022/lib/models/admin/index.mjs +14 -0
- package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
- package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
- package/esm2022/lib/models/admin/queue.models.mjs +2 -0
- package/esm2022/lib/models/admin/role.models.mjs +2 -0
- package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
- package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
- package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
- package/esm2022/lib/models/api/ai.models.mjs +2 -0
- package/esm2022/lib/models/api/aip.models.mjs +2 -0
- package/esm2022/lib/models/api/cat.models.mjs +2 -0
- package/esm2022/lib/models/api/company.models.mjs +2 -0
- package/esm2022/lib/models/api/compliance.models.mjs +2 -0
- package/esm2022/lib/models/api/component.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
- package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
- package/esm2022/lib/models/api/deferral.models.mjs +2 -0
- package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
- package/esm2022/lib/models/api/document.models.mjs +2 -0
- package/esm2022/lib/models/api/energy.models.mjs +2 -0
- package/esm2022/lib/models/api/failure.models.mjs +2 -0
- package/esm2022/lib/models/api/fleet.models.mjs +2 -0
- package/esm2022/lib/models/api/inspection.models.mjs +2 -0
- package/esm2022/lib/models/api/intervention.models.mjs +2 -0
- package/esm2022/lib/models/api/iot.models.mjs +2 -0
- package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
- package/esm2022/lib/models/api/loto.models.mjs +2 -0
- package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
- package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
- package/esm2022/lib/models/api/material.models.mjs +2 -0
- package/esm2022/lib/models/api/media.models.mjs +2 -0
- package/esm2022/lib/models/api/misc.models.mjs +2 -0
- package/esm2022/lib/models/api/project.models.mjs +2 -0
- package/esm2022/lib/models/api/quality.models.mjs +2 -0
- package/esm2022/lib/models/api/reporting.models.mjs +3 -0
- package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
- package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
- package/esm2022/lib/models/api/search.models.mjs +2 -0
- package/esm2022/lib/models/api/sensor.models.mjs +2 -0
- package/esm2022/lib/models/api/unit.models.mjs +2 -0
- package/esm2022/lib/models/api/user.models.mjs +2 -0
- package/esm2022/lib/models/api/warranty.models.mjs +2 -0
- package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
- package/esm2022/lib/models/api/workflow.models.mjs +2 -0
- package/esm2022/lib/models/auth/index.mjs +4 -0
- package/esm2022/lib/models/auth/login.models.mjs +2 -0
- package/esm2022/lib/models/auth/sso.models.mjs +2 -0
- package/esm2022/lib/models/auth/totp.models.mjs +2 -0
- package/esm2022/lib/models/base.models.mjs +99 -0
- package/esm2022/lib/models/chat/chat.models.mjs +2 -0
- package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
- package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
- package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
- package/esm2022/lib/models/enums/index.mjs +15 -0
- package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
- package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
- package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
- package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
- package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
- package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
- package/esm2022/lib/models/enums/status.enums.mjs +41 -0
- package/esm2022/lib/models/enums/time.enums.mjs +5 -0
- package/esm2022/lib/models/enums/type.enums.mjs +45 -0
- package/esm2022/lib/models/enums/user.enums.mjs +6 -0
- package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
- package/esm2022/lib/models/index.mjs +42 -0
- package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
- package/esm2022/lib/models/video/video-call.models.mjs +2 -0
- package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
- package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
- package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
- package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
- package/esm2022/lib/services/admin/backup.service.mjs +28 -0
- package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
- package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
- package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
- package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
- package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
- package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
- package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
- package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
- package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
- package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
- package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
- package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
- package/esm2022/lib/services/admin/index.mjs +31 -0
- package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
- package/esm2022/lib/services/admin/notification.service.mjs +31 -0
- package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
- package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
- package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
- package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
- package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
- package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
- package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
- package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
- package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
- package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
- package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
- package/esm2022/lib/services/api/agent.service.mjs +29 -0
- package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
- package/esm2022/lib/services/api/ai.service.mjs +66 -0
- package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
- package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
- package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
- package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
- package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
- package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
- package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
- package/esm2022/lib/services/api/aip.service.mjs +158 -0
- package/esm2022/lib/services/api/alert.service.mjs +26 -0
- package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
- package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
- package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
- package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
- package/esm2022/lib/services/api/bid.service.mjs +17 -0
- package/esm2022/lib/services/api/budget.service.mjs +17 -0
- package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
- package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
- package/esm2022/lib/services/api/cat.service.mjs +77 -0
- package/esm2022/lib/services/api/client-article.service.mjs +23 -0
- package/esm2022/lib/services/api/community.service.mjs +41 -0
- package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
- package/esm2022/lib/services/api/company-material.service.mjs +17 -0
- package/esm2022/lib/services/api/company.service.mjs +30 -0
- package/esm2022/lib/services/api/compliance.service.mjs +74 -0
- package/esm2022/lib/services/api/component-info.service.mjs +17 -0
- package/esm2022/lib/services/api/component-location.service.mjs +17 -0
- package/esm2022/lib/services/api/component.service.mjs +53 -0
- package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
- package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
- package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
- package/esm2022/lib/services/api/cortex.service.mjs +29 -0
- package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
- package/esm2022/lib/services/api/custom.service.mjs +43 -0
- package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
- package/esm2022/lib/services/api/deferral.service.mjs +54 -0
- package/esm2022/lib/services/api/department.service.mjs +17 -0
- package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
- package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
- package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
- package/esm2022/lib/services/api/document.service.mjs +53 -0
- package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
- package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
- package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
- package/esm2022/lib/services/api/energy.service.mjs +91 -0
- package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
- package/esm2022/lib/services/api/event.service.mjs +17 -0
- package/esm2022/lib/services/api/export.service.mjs +216 -0
- package/esm2022/lib/services/api/extension.service.mjs +56 -0
- package/esm2022/lib/services/api/failure.service.mjs +53 -0
- package/esm2022/lib/services/api/fleet.service.mjs +140 -0
- package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
- package/esm2022/lib/services/api/index.mjs +101 -0
- package/esm2022/lib/services/api/inspection.service.mjs +29 -0
- package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
- package/esm2022/lib/services/api/intervention.service.mjs +17 -0
- package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
- package/esm2022/lib/services/api/license.service.mjs +25 -0
- package/esm2022/lib/services/api/location.service.mjs +17 -0
- package/esm2022/lib/services/api/log.service.mjs +17 -0
- package/esm2022/lib/services/api/login-history.service.mjs +17 -0
- package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
- package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
- package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
- package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
- package/esm2022/lib/services/api/material-item.service.mjs +53 -0
- package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
- package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
- package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
- package/esm2022/lib/services/api/note.service.mjs +37 -0
- package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
- package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
- package/esm2022/lib/services/api/procurement.service.mjs +53 -0
- package/esm2022/lib/services/api/project.service.mjs +17 -0
- package/esm2022/lib/services/api/property-template.service.mjs +17 -0
- package/esm2022/lib/services/api/quality.service.mjs +29 -0
- package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
- package/esm2022/lib/services/api/reporting.service.mjs +117 -0
- package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
- package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
- package/esm2022/lib/services/api/room.service.mjs +17 -0
- package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
- package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
- package/esm2022/lib/services/api/search.service.mjs +77 -0
- package/esm2022/lib/services/api/sensor.service.mjs +36 -0
- package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
- package/esm2022/lib/services/api/sla.service.mjs +17 -0
- package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
- package/esm2022/lib/services/api/ticket.service.mjs +73 -0
- package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
- package/esm2022/lib/services/api/todo.service.mjs +17 -0
- package/esm2022/lib/services/api/unit.service.mjs +17 -0
- package/esm2022/lib/services/api/upload.service.mjs +84 -0
- package/esm2022/lib/services/api/user.service.mjs +107 -0
- package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
- package/esm2022/lib/services/api/warranty.service.mjs +29 -0
- package/esm2022/lib/services/api/work-order.service.mjs +28 -0
- package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
- package/esm2022/lib/services/api/workflow.service.mjs +86 -0
- package/esm2022/lib/services/auth/auth.service.mjs +97 -0
- package/esm2022/lib/services/auth/index.mjs +5 -0
- package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
- package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
- package/esm2022/lib/services/auth/totp.service.mjs +34 -0
- package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
- package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
- package/esm2022/lib/services/chat/index.mjs +3 -0
- package/esm2022/lib/services/index.mjs +8 -0
- package/esm2022/lib/services/realtime/index.mjs +2 -0
- package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
- package/esm2022/lib/services/reservoir/index.mjs +2 -0
- package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
- package/esm2022/lib/services/video/index.mjs +3 -0
- package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
- package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
- package/esm2022/lib/tgm-sdk.config.mjs +32 -0
- package/esm2022/lib/tgm-sdk.module.mjs +38 -0
- package/esm2022/public-api.mjs +52 -0
- package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
- package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
- package/lib/components/database-manager/database-manager.module.d.ts +15 -0
- package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
- package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
- package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
- package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
- package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
- package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
- package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
- package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
- package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
- package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
- package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
- package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
- package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
- package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
- package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
- package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
- package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
- package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
- package/lib/components/reporting/reporting.module.d.ts +14 -0
- package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
- package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
- package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
- package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
- package/lib/components/video-call/types/video-call.types.d.ts +49 -0
- package/lib/components/video-call/video-call.module.d.ts +11 -0
- package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
- package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
- package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
- package/lib/core/auth-interceptor.d.ts +13 -0
- package/lib/core/client-interceptor.d.ts +14 -0
- package/lib/core/error-handler.d.ts +13 -0
- package/lib/core/http-client.service.d.ts +61 -0
- package/lib/core/websocket.service.d.ts +37 -0
- package/lib/models/admin/audit.models.d.ts +73 -0
- package/lib/models/admin/backup.models.d.ts +101 -0
- package/lib/models/admin/client.models.d.ts +99 -0
- package/lib/models/admin/email-provider.models.d.ts +56 -0
- package/lib/models/admin/erp.models.d.ts +188 -0
- package/lib/models/admin/identity-provider.models.d.ts +1 -0
- package/lib/models/admin/index.d.ts +13 -0
- package/lib/models/admin/messaging-provider.models.d.ts +49 -0
- package/lib/models/admin/platform-admin.models.d.ts +33 -0
- package/lib/models/admin/queue.models.d.ts +54 -0
- package/lib/models/admin/role.models.d.ts +50 -0
- package/lib/models/admin/sandbox.models.d.ts +54 -0
- package/lib/models/admin/ticket.models.d.ts +48 -0
- package/lib/models/admin/webhook.models.d.ts +65 -0
- package/lib/models/api/ai.models.d.ts +75 -0
- package/lib/models/api/aip.models.d.ts +545 -0
- package/lib/models/api/cat.models.d.ts +260 -0
- package/lib/models/api/company.models.d.ts +125 -0
- package/lib/models/api/compliance.models.d.ts +74 -0
- package/lib/models/api/component.models.d.ts +294 -0
- package/lib/models/api/cortex-edge.models.d.ts +14 -0
- package/lib/models/api/cortex-event.models.d.ts +12 -0
- package/lib/models/api/cortex-insight.models.d.ts +25 -0
- package/lib/models/api/cortex-node.models.d.ts +10 -0
- package/lib/models/api/custom-field.models.d.ts +37 -0
- package/lib/models/api/deferral.models.d.ts +81 -0
- package/lib/models/api/diagnostic-report.models.d.ts +29 -0
- package/lib/models/api/document.models.d.ts +95 -0
- package/lib/models/api/energy.models.d.ts +210 -0
- package/lib/models/api/failure.models.d.ts +171 -0
- package/lib/models/api/fleet.models.d.ts +193 -0
- package/lib/models/api/inspection.models.d.ts +110 -0
- package/lib/models/api/intervention.models.d.ts +254 -0
- package/lib/models/api/iot.models.d.ts +15 -0
- package/lib/models/api/knowledge.models.d.ts +340 -0
- package/lib/models/api/loto.models.d.ts +51 -0
- package/lib/models/api/maintenance-record.models.d.ts +100 -0
- package/lib/models/api/maintenance.models.d.ts +188 -0
- package/lib/models/api/material.models.d.ts +261 -0
- package/lib/models/api/media.models.d.ts +106 -0
- package/lib/models/api/misc.models.d.ts +929 -0
- package/lib/models/api/project.models.d.ts +118 -0
- package/lib/models/api/quality.models.d.ts +153 -0
- package/lib/models/api/reporting.models.d.ts +76 -0
- package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
- package/lib/models/api/reservoir.models.d.ts +274 -0
- package/lib/models/api/search.models.d.ts +30 -0
- package/lib/models/api/sensor.models.d.ts +117 -0
- package/lib/models/api/unit.models.d.ts +82 -0
- package/lib/models/api/user.models.d.ts +253 -0
- package/lib/models/api/warranty.models.d.ts +51 -0
- package/lib/models/api/work-permit.models.d.ts +70 -0
- package/lib/models/api/workflow.models.d.ts +52 -0
- package/lib/models/auth/index.d.ts +3 -0
- package/lib/models/auth/login.models.d.ts +134 -0
- package/lib/models/auth/sso.models.d.ts +136 -0
- package/lib/models/auth/totp.models.d.ts +19 -0
- package/lib/models/base.models.d.ts +90 -0
- package/lib/models/chat/chat.models.d.ts +171 -0
- package/lib/models/enums/cat.enums.d.ts +114 -0
- package/lib/models/enums/energy.enums.d.ts +50 -0
- package/lib/models/enums/erp.enums.d.ts +49 -0
- package/lib/models/enums/index.d.ts +14 -0
- package/lib/models/enums/inspection.enums.d.ts +61 -0
- package/lib/models/enums/loto.enums.d.ts +41 -0
- package/lib/models/enums/misc.enums.d.ts +151 -0
- package/lib/models/enums/quality.enums.d.ts +25 -0
- package/lib/models/enums/reservoir.enums.d.ts +80 -0
- package/lib/models/enums/sso.enums.d.ts +15 -0
- package/lib/models/enums/status.enums.d.ts +296 -0
- package/lib/models/enums/time.enums.d.ts +51 -0
- package/lib/models/enums/type.enums.d.ts +324 -0
- package/lib/models/enums/user.enums.d.ts +31 -0
- package/lib/models/enums/work-permit.enums.d.ts +56 -0
- package/lib/models/index.d.ts +41 -0
- package/lib/models/realtime/realtime-event.models.d.ts +95 -0
- package/lib/models/video/video-call.models.d.ts +65 -0
- package/lib/services/admin/activity-log.service.d.ts +13 -0
- package/lib/services/admin/announcement.service.d.ts +17 -0
- package/lib/services/admin/article-admin.service.d.ts +17 -0
- package/lib/services/admin/audit-log.service.d.ts +22 -0
- package/lib/services/admin/backup.service.d.ts +15 -0
- package/lib/services/admin/cache-admin.service.d.ts +26 -0
- package/lib/services/admin/client-admin.service.d.ts +38 -0
- package/lib/services/admin/client-api-key.service.d.ts +15 -0
- package/lib/services/admin/client-ocr.service.d.ts +14 -0
- package/lib/services/admin/client-usage.service.d.ts +15 -0
- package/lib/services/admin/data-export.service.d.ts +10 -0
- package/lib/services/admin/document-admin.service.d.ts +18 -0
- package/lib/services/admin/email-admin.service.d.ts +14 -0
- package/lib/services/admin/email-provider.service.d.ts +25 -0
- package/lib/services/admin/erp-admin.service.d.ts +41 -0
- package/lib/services/admin/identity-provider.service.d.ts +21 -0
- package/lib/services/admin/impersonation.service.d.ts +11 -0
- package/lib/services/admin/index.d.ts +30 -0
- package/lib/services/admin/messaging-provider.service.d.ts +24 -0
- package/lib/services/admin/notification.service.d.ts +15 -0
- package/lib/services/admin/platform-admin.service.d.ts +17 -0
- package/lib/services/admin/platform-webhook.service.d.ts +16 -0
- package/lib/services/admin/queue-admin.service.d.ts +24 -0
- package/lib/services/admin/role-admin.service.d.ts +37 -0
- package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
- package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
- package/lib/services/admin/subscription.service.d.ts +15 -0
- package/lib/services/admin/system-health.service.d.ts +11 -0
- package/lib/services/admin/user-admin.service.d.ts +27 -0
- package/lib/services/admin/user-permission.service.d.ts +18 -0
- package/lib/services/admin/webhook-admin.service.d.ts +26 -0
- package/lib/services/api/agent.service.d.ts +16 -0
- package/lib/services/api/ai-feedback.service.d.ts +9 -0
- package/lib/services/api/ai.service.d.ts +36 -0
- package/lib/services/api/aip-analysis.service.d.ts +13 -0
- package/lib/services/api/aip-financial.service.d.ts +16 -0
- package/lib/services/api/aip-geographic.service.d.ts +16 -0
- package/lib/services/api/aip-network.service.d.ts +16 -0
- package/lib/services/api/aip-performance.service.d.ts +16 -0
- package/lib/services/api/aip-resource.service.d.ts +14 -0
- package/lib/services/api/aip-workflow.service.d.ts +24 -0
- package/lib/services/api/aip.service.d.ts +73 -0
- package/lib/services/api/alert.service.d.ts +15 -0
- package/lib/services/api/anomaly-detection.service.d.ts +26 -0
- package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
- package/lib/services/api/audit-entry.service.d.ts +13 -0
- package/lib/services/api/base-crud.service.d.ts +18 -0
- package/lib/services/api/bid.service.d.ts +10 -0
- package/lib/services/api/budget.service.d.ts +10 -0
- package/lib/services/api/bulk-operation.service.d.ts +26 -0
- package/lib/services/api/capex-project.service.d.ts +10 -0
- package/lib/services/api/cat.service.d.ts +40 -0
- package/lib/services/api/client-article.service.d.ts +14 -0
- package/lib/services/api/community.service.d.ts +21 -0
- package/lib/services/api/company-material-type.service.d.ts +10 -0
- package/lib/services/api/company-material.service.d.ts +9 -0
- package/lib/services/api/company.service.d.ts +15 -0
- package/lib/services/api/compliance.service.d.ts +35 -0
- package/lib/services/api/component-info.service.d.ts +10 -0
- package/lib/services/api/component-location.service.d.ts +10 -0
- package/lib/services/api/component.service.d.ts +32 -0
- package/lib/services/api/cortex-event.service.d.ts +10 -0
- package/lib/services/api/cortex-insight.service.d.ts +14 -0
- package/lib/services/api/cortex-node.service.d.ts +10 -0
- package/lib/services/api/cortex.service.d.ts +15 -0
- package/lib/services/api/custom-field.service.d.ts +33 -0
- package/lib/services/api/custom.service.d.ts +23 -0
- package/lib/services/api/dashboard.service.d.ts +18 -0
- package/lib/services/api/deferral.service.d.ts +29 -0
- package/lib/services/api/department.service.d.ts +9 -0
- package/lib/services/api/device-gateway.service.d.ts +16 -0
- package/lib/services/api/diagnostic-report.service.d.ts +14 -0
- package/lib/services/api/digital-twin.service.d.ts +29 -0
- package/lib/services/api/document.service.d.ts +28 -0
- package/lib/services/api/dynamic-crud.service.d.ts +41 -0
- package/lib/services/api/energy-analytics.service.d.ts +16 -0
- package/lib/services/api/energy-production.service.d.ts +10 -0
- package/lib/services/api/energy.service.d.ts +46 -0
- package/lib/services/api/entity-comment.service.d.ts +16 -0
- package/lib/services/api/event.service.d.ts +10 -0
- package/lib/services/api/export.service.d.ts +48 -0
- package/lib/services/api/extension.service.d.ts +24 -0
- package/lib/services/api/failure.service.d.ts +28 -0
- package/lib/services/api/fleet.service.d.ts +71 -0
- package/lib/services/api/inactive-component.service.d.ts +10 -0
- package/lib/services/api/index.d.ts +101 -0
- package/lib/services/api/inspection.service.d.ts +16 -0
- package/lib/services/api/intervention-request.service.d.ts +10 -0
- package/lib/services/api/intervention.service.d.ts +10 -0
- package/lib/services/api/knowledge.service.d.ts +106 -0
- package/lib/services/api/license.service.d.ts +14 -0
- package/lib/services/api/location.service.d.ts +9 -0
- package/lib/services/api/log.service.d.ts +9 -0
- package/lib/services/api/login-history.service.d.ts +10 -0
- package/lib/services/api/maintenance-plan.service.d.ts +10 -0
- package/lib/services/api/maintenance-record.service.d.ts +10 -0
- package/lib/services/api/material-consumable.service.d.ts +22 -0
- package/lib/services/api/material-instrument.service.d.ts +16 -0
- package/lib/services/api/material-item.service.d.ts +28 -0
- package/lib/services/api/material-tooling.service.d.ts +22 -0
- package/lib/services/api/measurement-unit.service.d.ts +10 -0
- package/lib/services/api/misc-crud.service.d.ts +167 -0
- package/lib/services/api/note.service.d.ts +14 -0
- package/lib/services/api/outage-resource.service.d.ts +15 -0
- package/lib/services/api/plant-data.service.d.ts +14 -0
- package/lib/services/api/procurement.service.d.ts +27 -0
- package/lib/services/api/project.service.d.ts +10 -0
- package/lib/services/api/property-template.service.d.ts +10 -0
- package/lib/services/api/quality.service.d.ts +16 -0
- package/lib/services/api/recurring-event.service.d.ts +10 -0
- package/lib/services/api/reporting.service.d.ts +38 -0
- package/lib/services/api/reservoir-data.service.d.ts +10 -0
- package/lib/services/api/reservoir.service.d.ts +109 -0
- package/lib/services/api/room.service.d.ts +10 -0
- package/lib/services/api/sandbox.service.d.ts +26 -0
- package/lib/services/api/scheduled-report.service.d.ts +10 -0
- package/lib/services/api/search.service.d.ts +54 -0
- package/lib/services/api/sensor.service.d.ts +17 -0
- package/lib/services/api/sla-policy.service.d.ts +10 -0
- package/lib/services/api/sla.service.d.ts +10 -0
- package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
- package/lib/services/api/ticket.service.d.ts +60 -0
- package/lib/services/api/time-entry.service.d.ts +10 -0
- package/lib/services/api/todo.service.d.ts +10 -0
- package/lib/services/api/unit.service.d.ts +10 -0
- package/lib/services/api/upload.service.d.ts +50 -0
- package/lib/services/api/user.service.d.ts +59 -0
- package/lib/services/api/warehouse.service.d.ts +15 -0
- package/lib/services/api/warranty.service.d.ts +16 -0
- package/lib/services/api/work-order.service.d.ts +17 -0
- package/lib/services/api/work-permit.service.d.ts +10 -0
- package/lib/services/api/workflow.service.d.ts +33 -0
- package/lib/services/auth/auth.service.d.ts +33 -0
- package/lib/services/auth/index.d.ts +4 -0
- package/lib/services/auth/platform-auth.service.d.ts +16 -0
- package/lib/services/auth/sso-auth.service.d.ts +21 -0
- package/lib/services/auth/totp.service.d.ts +18 -0
- package/lib/services/chat/chat-rest.service.d.ts +40 -0
- package/lib/services/chat/chat-websocket.service.d.ts +34 -0
- package/lib/services/chat/index.d.ts +2 -0
- package/lib/services/index.d.ts +7 -0
- package/lib/services/realtime/index.d.ts +1 -0
- package/lib/services/realtime/realtime-event.service.d.ts +137 -0
- package/lib/services/reservoir/index.d.ts +1 -0
- package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
- package/lib/services/video/index.d.ts +2 -0
- package/lib/services/video/video-call-rest.service.d.ts +19 -0
- package/lib/services/video/video-call-websocket.service.d.ts +31 -0
- package/lib/tgm-sdk.config.d.ts +36 -0
- package/lib/tgm-sdk.module.d.ts +13 -0
- package/package.json +40 -0
- package/public-api.d.ts +42 -0
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base fields present on every entity (BaseEntity).
|
|
3
|
+
*/
|
|
4
|
+
const BASE_FIELDS = [
|
|
5
|
+
{ name: 'id', label: 'ID', type: 'number', editable: false, sortable: true, filterable: true },
|
|
6
|
+
{ name: 'createdAt', label: 'Created At', type: 'date', editable: false, sortable: true, filterable: true },
|
|
7
|
+
{ name: 'updatedAt', label: 'Updated At', type: 'date', editable: false, sortable: true, filterable: true },
|
|
8
|
+
];
|
|
9
|
+
function fields(...extra) {
|
|
10
|
+
return [...BASE_FIELDS, ...extra];
|
|
11
|
+
}
|
|
12
|
+
function str(name, label, opts = {}) {
|
|
13
|
+
return { name, label, type: 'string', ...opts };
|
|
14
|
+
}
|
|
15
|
+
function num(name, label, opts = {}) {
|
|
16
|
+
return { name, label, type: 'number', ...opts };
|
|
17
|
+
}
|
|
18
|
+
function bool(name, label, opts = {}) {
|
|
19
|
+
return { name, label, type: 'boolean', ...opts };
|
|
20
|
+
}
|
|
21
|
+
function date(name, label, opts = {}) {
|
|
22
|
+
return { name, label, type: 'date', ...opts };
|
|
23
|
+
}
|
|
24
|
+
function enm(name, label, values, opts = {}) {
|
|
25
|
+
return { name, label, type: 'enum', enumValues: values, ...opts };
|
|
26
|
+
}
|
|
27
|
+
function json(name, label, opts = {}) {
|
|
28
|
+
return { name, label, type: 'json', sortable: false, ...opts };
|
|
29
|
+
}
|
|
30
|
+
function arr(name, label, opts = {}) {
|
|
31
|
+
return { name, label, type: 'array', sortable: false, ...opts };
|
|
32
|
+
}
|
|
33
|
+
// ─── Enum value constants (mirroring SDK enums) ─────────────────────
|
|
34
|
+
const UNIT_STATUSES = ['SHUTDOWN', 'IN_OPERATION', 'UNDER_CONSTRUCTION', 'PROJECT_STAGE'];
|
|
35
|
+
const PLANT_STATUSES = ['IN_OPERATION', 'UNDER_CONSTRUCTION', 'PROJECT_STAGE', 'OUT_OF_SERVICE'];
|
|
36
|
+
const PREMISE_TYPES = ['PLANT', 'OFFICE', 'WAREHOUSE', 'DAM', 'HYBRID_PLANT', 'OTHER'];
|
|
37
|
+
const PLANT_SIZES = ['SMALL', 'MEDIUM', 'LARGE'];
|
|
38
|
+
const COMPONENT_TYPES = ['STANDALONE', 'REGULAR', 'HYBRID_PLANT'];
|
|
39
|
+
const COMPONENT_CATEGORIES = ['ASSET', 'PIPING', 'PROTECTION_CONTROL', 'HYBRID_PLANT', 'INSTRUMENTATION'];
|
|
40
|
+
const COMPONENT_STATUSES = ['ACTIVE', 'INACTIVE'];
|
|
41
|
+
const WO_STATUSES = ['COMPLETED', 'IN_PROGRESS', 'PENDING', 'CANCELLED', 'PLANNED_NOT_SCHEDULED', 'DRAFT', 'PLANNED_SCHEDULED', 'CLOSED'];
|
|
42
|
+
const MAINTENANCE_TYPES = ['PREVENTIVE', 'PREDICTIVE', 'DETECTIVE', 'REACTIVE', 'CORRECTIVE'];
|
|
43
|
+
const PRIORITIES = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
44
|
+
const COST_ALLOCATIONS = ['PREVENTIVE', 'CORRECTIVE', 'SPECIAL_MAINTENANCE', 'EMERGENCY', 'CONTINGENCIES', 'PROJECT'];
|
|
45
|
+
const INSPECTION_TYPES = ['V', 'M', 'F', 'A', 'E', 'ALL'];
|
|
46
|
+
const INSPECTION_LEVELS = ['BASIC', 'ADVANCED', 'COMPLETE'];
|
|
47
|
+
const INSPECTION_NATURES = ['PERIODIC', 'NON_PERIODIC'];
|
|
48
|
+
const REASONS_INSPECTION = ['DUE_TO_EVENT', 'MAINTENANCE', 'DUE_TO_MAINTENANCE', 'CONDITION_ASSESSMENT', 'DUE_TO_INSPECTION', 'DUE_TO_INTERVENTION_REQUEST', 'SAFETY_PROGRAM_INSPECTIONS', 'WORK_REQUIRE_MANAGEMENT', 'PREV_AND_PRED_MAINTENANCE', 'AUDITS', 'OTHERS'];
|
|
49
|
+
const REASONS_INTERVENTION = ['DUE_TO_MAINTENANCE', 'DUE_TO_EVENT', 'DUE_TO_INTERVENTION_REQUEST', 'OPERATOR_OBS_AND_EMPLOYEE_CONCERNS', 'PREV_AND_PRED_MAINTENANCE', 'POINTS_RAISED', 'SAFETY_PROGRAM_INSPECTIONS', 'WORK_REQUIRE_MANAGEMENT', 'REGULATORY_REQUIREMENTS', 'EQUIPMENT_IMPROVEMENTS', 'AUDITS', 'INCIDENTS_DAMAGES', 'OTHERS'];
|
|
50
|
+
const EVENT_NATURES = ['INCIDENT', 'FAILURE', 'PERTURBATION'];
|
|
51
|
+
const VEHICLE_STATUSES = ['AVAILABLE', 'IN_USE', 'MAINTENANCE'];
|
|
52
|
+
const VEHICLE_TYPES = ['TRUCK', 'VAN', 'CAR', 'SUV', 'EQUIPMENT', 'TRAILER'];
|
|
53
|
+
const FUEL_TYPES = ['GASOLINE', 'DIESEL', 'ELECTRIC', 'HYBRID', 'PROPANE', 'NATURAL_GAS'];
|
|
54
|
+
const DRIVER_STATUSES = ['ACTIVE', 'INACTIVE', 'SUSPENDED'];
|
|
55
|
+
const TRIP_STATUSES = ['IN_PROGRESS', 'COMPLETED'];
|
|
56
|
+
const GEOFENCE_TYPES = ['CIRCLE', 'POLYGON'];
|
|
57
|
+
const SENSOR_TYPES = ['TEMPERATURE', 'PRESSURE', 'VIBRATION', 'FLOW_RATE', 'LEVEL', 'HUMIDITY', 'VOLTAGE', 'CURRENT', 'POWER', 'SPEED', 'PH', 'CONDUCTIVITY', 'TURBIDITY', 'DISSOLVED_OXYGEN', 'OTHER'];
|
|
58
|
+
const ALERT_SEVERITIES = ['INFO', 'WARNING', 'CRITICAL', 'EMERGENCY'];
|
|
59
|
+
const ALERT_STATUSES = ['ACTIVE', 'ACKNOWLEDGED', 'RESOLVED', 'ESCALATED'];
|
|
60
|
+
const OBLIGATION_TYPES = ['REPORTING', 'MONITORING', 'INSPECTION', 'TESTING', 'FILING'];
|
|
61
|
+
const OBLIGATION_STATUSES = ['ACTIVE', 'COMPLETED', 'OVERDUE', 'WAIVED'];
|
|
62
|
+
const SUBMISSION_STATUSES = ['DRAFT', 'SUBMITTED', 'UNDER_REVIEW', 'APPROVED', 'REJECTED', 'REVISION_REQUIRED'];
|
|
63
|
+
const PERMIT_TYPES = ['AIR', 'WATER', 'WASTE', 'NOISE', 'LAND_USE', 'ENVIRONMENTAL_IMPACT'];
|
|
64
|
+
const PERMIT_STATUSES = ['ACTIVE', 'EXPIRED', 'SUSPENDED', 'REVOKED', 'PENDING_RENEWAL'];
|
|
65
|
+
const ANCILLARY_TYPES = ['FREQUENCY_REGULATION', 'SPINNING_RESERVE', 'NON_SPINNING_RESERVE', 'VOLTAGE_SUPPORT', 'BLACK_START', 'REACTIVE_POWER'];
|
|
66
|
+
const ANCILLARY_STATUSES = ['ACTIVE', 'EXPIRED', 'SUSPENDED', 'PENDING'];
|
|
67
|
+
const GRID_STATUSES = ['ACTIVE', 'INACTIVE', 'UNDER_MAINTENANCE', 'DISCONNECTED'];
|
|
68
|
+
const CURTAILMENT_TYPES = ['ECONOMIC', 'RELIABILITY', 'ENVIRONMENTAL', 'TRANSMISSION_CONSTRAINT', 'VOLUNTARY'];
|
|
69
|
+
const CURTAILMENT_STATUSES = ['ACTIVE', 'COMPLETED', 'CANCELLED'];
|
|
70
|
+
const WARRANTY_STATUSES = ['ACTIVE', 'EXPIRED', 'CANCELLED', 'PENDING'];
|
|
71
|
+
const WARRANTY_TYPES = ['MANUFACTURER', 'EXTENDED', 'COMPONENT', 'SERVICE'];
|
|
72
|
+
const WARRANTY_CLAIM_STATUSES = ['DRAFT', 'SUBMITTED', 'UNDER_REVIEW', 'APPROVED', 'REJECTED', 'PAID', 'CLOSED'];
|
|
73
|
+
const RCA_STATUSES = ['DRAFT', 'IN_PROGRESS', 'PENDING_REVIEW', 'UNDER_REVIEW', 'APPROVED', 'REJECTED', 'CLOSED', 'ARCHIVED'];
|
|
74
|
+
const RCA_METHODOLOGIES = ['FIVE_WHYS', 'FISHBONE', 'FAULT_TREE', 'PARETO', 'FMEA', 'COMBINED'];
|
|
75
|
+
const GATE_TYPES = ['INTAKE', 'SPILLWAY', 'OUTLET', 'EMERGENCY'];
|
|
76
|
+
const READING_TYPES = ['WATER_LEVEL', 'FLOW', 'GATE_POSITION', 'PRESSURE', 'TEMPERATURE'];
|
|
77
|
+
const SAMPLE_TYPES = ['WATER_QUALITY', 'SEDIMENT', 'BIOLOGICAL'];
|
|
78
|
+
const OBSERVATION_CATEGORIES = ['WEATHER', 'EQUIPMENT_BEHAVIOR', 'WATER_QUALITY', 'WILDLIFE', 'SAFETY', 'OTHER'];
|
|
79
|
+
const OBSERVATION_SEVERITIES = ['INFORMATIONAL', 'ATTENTION_REQUIRED', 'URGENT'];
|
|
80
|
+
const SURVEY_METHODS = ['MULTIBEAM_SONAR', 'SINGLE_BEAM', 'LIDAR', 'GPS'];
|
|
81
|
+
const AI_SCENARIO_TYPES = ['GRID_REQUEST', 'WATER_PRESERVATION', 'OEM_RECOMMENDATIONS'];
|
|
82
|
+
// ─── The Registry ───────────────────────────────────────────────────
|
|
83
|
+
export const ENTITY_REGISTRY = [
|
|
84
|
+
// ━━━ CORE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
85
|
+
{
|
|
86
|
+
key: 'companies', name: 'Companies', module: 'CORE',
|
|
87
|
+
description: 'Client organizations / companies',
|
|
88
|
+
fields: fields(str('name', 'Name', { required: true }), str('description', 'Description'), str('address', 'Address'), str('phone', 'Phone'), str('email', 'Email'), str('website', 'Website'), str('logo', 'Logo URL'), str('timezone', 'Timezone'), str('currency', 'Currency'), str('language', 'Language')),
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
key: 'units', name: 'Units', module: 'CORE',
|
|
92
|
+
description: 'Production / generation units',
|
|
93
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), enm('status', 'Status', UNIT_STATUSES), enm('plantStatus', 'Plant Status', PLANT_STATUSES), enm('premiseType', 'Premise Type', PREMISE_TYPES), enm('plantSize', 'Plant Size', PLANT_SIZES), num('companyId', 'Company ID'), num('locationId', 'Location ID'), num('latitude', 'Latitude'), num('longitude', 'Longitude'), num('capacity', 'Capacity'), date('commissioningDate', 'Commissioning Date')),
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
key: 'components', name: 'Components', module: 'CORE',
|
|
97
|
+
description: 'Equipment components attached to units',
|
|
98
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), enm('type', 'Type', COMPONENT_TYPES), enm('category', 'Category', COMPONENT_CATEGORIES), enm('status', 'Status', COMPONENT_STATUSES), num('unitId', 'Unit ID'), num('parentComponentId', 'Parent Component ID'), str('manufacturer', 'Manufacturer'), str('model', 'Model'), str('serialNumber', 'Serial Number'), date('installDate', 'Install Date'), date('warrantyEndDate', 'Warranty End Date')),
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: 'component-groups', name: 'Component Groups', module: 'CORE',
|
|
102
|
+
description: 'Logical groupings of components',
|
|
103
|
+
fields: fields(str('name', 'Name', { required: true }), str('description', 'Description'), num('unitId', 'Unit ID')),
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
key: 'sub-assemblies', name: 'Sub-Assemblies', module: 'CORE',
|
|
107
|
+
description: 'Sub-assemblies within components',
|
|
108
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), num('componentId', 'Component ID')),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
key: 'locations', name: 'Locations', module: 'CORE',
|
|
112
|
+
description: 'Physical locations / sites',
|
|
113
|
+
fields: fields(str('name', 'Name', { required: true }), str('address', 'Address'), str('city', 'City'), str('state', 'State / Province'), str('country', 'Country'), str('postalCode', 'Postal Code'), num('latitude', 'Latitude'), num('longitude', 'Longitude'), num('companyId', 'Company ID'), bool('isHeadQuarters', 'Is Headquarters'), str('region', 'Region'), str('timezone', 'Timezone')),
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
key: 'departments', name: 'Departments', module: 'CORE',
|
|
117
|
+
description: 'Organizational departments',
|
|
118
|
+
fields: fields(str('name', 'Name', { required: true }), str('description', 'Description'), num('companyId', 'Company ID'), num('managerId', 'Manager ID')),
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
key: 'users', name: 'Users', module: 'CORE',
|
|
122
|
+
description: 'System users / employees',
|
|
123
|
+
fields: fields(str('username', 'Username', { required: true }), str('email', 'Email', { required: true }), str('firstName', 'First Name'), str('lastName', 'Last Name'), str('fullName', 'Full Name', { editable: false }), str('phone', 'Phone'), str('position', 'Position'), bool('confirmed', 'Confirmed'), bool('blocked', 'Blocked'), bool('isActive', 'Active')),
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
key: 'suppliers', name: 'Suppliers', module: 'CORE',
|
|
127
|
+
description: 'External suppliers / vendors',
|
|
128
|
+
fields: fields(str('name', 'Name', { required: true }), str('contactName', 'Contact Name'), str('email', 'Email'), str('phone', 'Phone'), str('address', 'Address'), str('website', 'Website')),
|
|
129
|
+
},
|
|
130
|
+
// ━━━ MAINTENANCE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
+
{
|
|
132
|
+
key: 'interventions', name: 'Interventions', module: 'MAINTENANCE',
|
|
133
|
+
description: 'Maintenance interventions',
|
|
134
|
+
fields: fields(str('number', 'Number'), str('title', 'Title'), str('description', 'Description'), enm('reason', 'Reason', REASONS_INTERVENTION), num('unitId', 'Unit ID'), num('componentId', 'Component ID'), date('startDate', 'Start Date'), date('endDate', 'End Date'), num('duration', 'Duration (hrs)'), str('notes', 'Notes')),
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
key: 'intervention-requests', name: 'Intervention Requests', module: 'MAINTENANCE',
|
|
138
|
+
description: 'Requests for maintenance intervention',
|
|
139
|
+
fields: fields(str('number', 'Number'), str('title', 'Title'), str('description', 'Description'), num('unitId', 'Unit ID'), num('componentId', 'Component ID'), num('requestedById', 'Requested By ID'), str('priority', 'Priority'), str('status', 'Status')),
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
key: 'failures', name: 'Failures', module: 'MAINTENANCE',
|
|
143
|
+
description: 'Equipment failures and incidents',
|
|
144
|
+
fields: fields(str('number', 'Number'), str('title', 'Title'), str('description', 'Description'), enm('nature', 'Nature', EVENT_NATURES), num('unitId', 'Unit ID'), num('componentId', 'Component ID'), date('failureDate', 'Failure Date'), date('resolutionDate', 'Resolution Date'), str('impact', 'Impact'), str('rootCause', 'Root Cause')),
|
|
145
|
+
},
|
|
146
|
+
// ━━━ INSPECTIONS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
147
|
+
{
|
|
148
|
+
key: 'inspections', name: 'Inspections', module: 'INSPECTIONS',
|
|
149
|
+
description: 'Equipment and site inspections',
|
|
150
|
+
fields: fields(str('number', 'Number'), str('title', 'Title'), str('description', 'Description'), enm('type', 'Type', INSPECTION_TYPES), enm('level', 'Level', INSPECTION_LEVELS), enm('nature', 'Nature', INSPECTION_NATURES), enm('reason', 'Reason', REASONS_INSPECTION), num('unitId', 'Unit ID'), num('componentId', 'Component ID'), num('inspectorId', 'Inspector ID'), num('locationId', 'Location ID'), date('inspectionDate', 'Inspection Date'), date('nextInspectionDate', 'Next Inspection Date'), str('result', 'Result'), str('recommendations', 'Recommendations')),
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
key: 'maintenance-records', name: 'Maintenance Records', module: 'MAINTENANCE',
|
|
154
|
+
description: 'Unified maintenance records (inspections + interventions)',
|
|
155
|
+
fields: fields(enm('recordType', 'Record Type', ['INSPECTION', 'INTERVENTION']), str('reportNumber', 'Report Number'), str('title', 'Title'), enm('status', 'Status', WO_STATUSES), enm('priority', 'Priority', PRIORITIES), str('maintenanceType', 'Maintenance Type'), date('plannedDate', 'Planned Date'), date('startDate', 'Start Date'), date('scheduleDate', 'Schedule Date'), str('costAllocation', 'Cost Allocation'), str('actionPlan', 'Action Plan'), str('comments', 'Comments'), str('recommendations', 'Recommendations'), str('inspectionType', 'Inspection Type'), str('inspectionNature', 'Inspection Nature'), str('inspectionLevel', 'Inspection Level'), str('reasonForInspection', 'Reason for Inspection'), str('reasonForIntervention', 'Reason for Intervention'), str('eventNature', 'Event Nature'), bool('immediate', 'Immediate'), json('customFields', 'Custom Fields')),
|
|
156
|
+
},
|
|
157
|
+
// ━━━ MATERIALS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
158
|
+
{
|
|
159
|
+
key: 'material-items', name: 'Material Items', module: 'MATERIALS',
|
|
160
|
+
description: 'Inventory items for maintenance',
|
|
161
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), num('categoryId', 'Category ID'), num('quantity', 'Quantity'), num('minimumQuantity', 'Min Quantity'), num('reorderPoint', 'Reorder Point'), num('maxQuantity', 'Max Quantity'), num('unitCost', 'Unit Cost'), str('location', 'Location'), num('supplierId', 'Supplier ID')),
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
key: 'material-consumables', name: 'Consumables', module: 'MATERIALS',
|
|
165
|
+
description: 'Consumable materials',
|
|
166
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), num('categoryId', 'Category ID'), num('quantity', 'Quantity'), num('unitCost', 'Unit Cost'), num('supplierId', 'Supplier ID')),
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
key: 'material-instruments', name: 'Instruments', module: 'MATERIALS',
|
|
170
|
+
description: 'Measuring instruments',
|
|
171
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), str('serialNumber', 'Serial Number'), date('calibrationDate', 'Calibration Date'), date('nextCalibrationDate', 'Next Calibration')),
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
key: 'material-tooling', name: 'Tooling', module: 'MATERIALS',
|
|
175
|
+
description: 'Maintenance tools and tooling',
|
|
176
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), str('condition', 'Condition'), str('location', 'Location')),
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
key: 'spare-parts', name: 'Spare Parts', module: 'MATERIALS',
|
|
180
|
+
description: 'Spare parts linked to components',
|
|
181
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), num('componentId', 'Component ID'), num('materialItemId', 'Material Item ID'), num('quantity', 'Quantity')),
|
|
182
|
+
},
|
|
183
|
+
// ━━━ FLEET ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
184
|
+
{
|
|
185
|
+
key: 'vehicles', name: 'Vehicles', module: 'FLEET',
|
|
186
|
+
description: 'Fleet vehicles',
|
|
187
|
+
fields: fields(str('name', 'Name', { required: true }), str('plateNumber', 'Plate Number'), str('vin', 'VIN'), enm('type', 'Type', VEHICLE_TYPES), enm('status', 'Status', VEHICLE_STATUSES), str('make', 'Make'), str('model', 'Model'), num('year', 'Year'), enm('fuelType', 'Fuel Type', FUEL_TYPES), num('currentMileage', 'Mileage'), num('companyId', 'Company ID')),
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
key: 'drivers', name: 'Drivers', module: 'FLEET',
|
|
191
|
+
description: 'Fleet drivers',
|
|
192
|
+
fields: fields(num('userId', 'User ID'), str('licenseNumber', 'License Number'), date('licenseExpiry', 'License Expiry'), enm('status', 'Status', DRIVER_STATUSES)),
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
key: 'vehicle-trips', name: 'Vehicle Trips', module: 'FLEET',
|
|
196
|
+
description: 'Vehicle trip records',
|
|
197
|
+
fields: fields(num('vehicleId', 'Vehicle ID'), num('driverId', 'Driver ID'), enm('status', 'Status', TRIP_STATUSES), str('startLocation', 'Start Location'), str('endLocation', 'End Location'), num('startMileage', 'Start Mileage'), num('endMileage', 'End Mileage'), date('startTime', 'Start Time'), date('endTime', 'End Time')),
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
key: 'fuel-records', name: 'Fuel Records', module: 'FLEET',
|
|
201
|
+
description: 'Fuel consumption records',
|
|
202
|
+
fields: fields(num('vehicleId', 'Vehicle ID'), enm('fuelType', 'Fuel Type', FUEL_TYPES), num('quantity', 'Quantity'), num('cost', 'Cost'), num('mileage', 'Mileage'), date('fuelDate', 'Fuel Date')),
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
key: 'geofences', name: 'Geofences', module: 'FLEET',
|
|
206
|
+
description: 'Geographic boundary definitions',
|
|
207
|
+
fields: fields(str('name', 'Name', { required: true }), num('companyId', 'Company ID'), enm('geofenceType', 'Geofence Type', GEOFENCE_TYPES), num('centerLatitude', 'Center Lat'), num('centerLongitude', 'Center Lng'), num('radius', 'Radius'), bool('alertOnEnter', 'Alert on Enter'), bool('alertOnExit', 'Alert on Exit'), bool('isActive', 'Active')),
|
|
208
|
+
},
|
|
209
|
+
// ━━━ PROJECTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
210
|
+
{
|
|
211
|
+
key: 'projects', name: 'Projects', module: 'PROJECTS',
|
|
212
|
+
description: 'Project management',
|
|
213
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), str('status', 'Status'), date('startDate', 'Start Date'), date('endDate', 'End Date'), num('budget', 'Budget'), num('managerId', 'Manager ID'), num('companyId', 'Company ID')),
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
key: 'capex-projects', name: 'CAPEX Projects', module: 'PROJECTS',
|
|
217
|
+
description: 'Capital expenditure projects',
|
|
218
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), str('status', 'Status'), num('budget', 'Budget'), num('actualCost', 'Actual Cost'), date('startDate', 'Start Date'), date('endDate', 'End Date'), num('companyId', 'Company ID')),
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
key: 'budgets', name: 'Budgets', module: 'PROJECTS',
|
|
222
|
+
description: 'Budget allocations',
|
|
223
|
+
fields: fields(str('name', 'Name', { required: true }), num('year', 'Year'), num('amount', 'Amount'), num('spent', 'Spent'), num('remaining', 'Remaining'), num('departmentId', 'Department ID'), num('categoryId', 'Category ID')),
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
key: 'bids', name: 'Bids', module: 'PROJECTS',
|
|
227
|
+
description: 'Vendor bids for projects',
|
|
228
|
+
fields: fields(str('title', 'Title'), str('description', 'Description'), str('vendorName', 'Vendor'), num('amount', 'Amount'), str('status', 'Status'), date('submittedDate', 'Submitted Date'), num('projectId', 'Project ID')),
|
|
229
|
+
},
|
|
230
|
+
// ━━━ DOCUMENTS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
231
|
+
{
|
|
232
|
+
key: 'files', name: 'Files', module: 'DOCUMENTS',
|
|
233
|
+
description: 'Uploaded files',
|
|
234
|
+
fields: fields(str('name', 'Name', { required: true }), str('description', 'Description'), num('folderId', 'Folder ID'), num('size', 'Size (bytes)'), str('mimeType', 'MIME Type'), str('url', 'URL')),
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
key: 'folders', name: 'Folders', module: 'DOCUMENTS',
|
|
238
|
+
description: 'File system folders',
|
|
239
|
+
fields: fields(str('name', 'Name', { required: true }), str('description', 'Description'), num('parentId', 'Parent Folder ID')),
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
key: 'drawings', name: 'Drawings', module: 'DOCUMENTS',
|
|
243
|
+
description: 'Engineering drawings',
|
|
244
|
+
fields: fields(str('name', 'Name', { required: true }), str('number', 'Number'), str('description', 'Description'), num('categoryId', 'Category ID'), num('unitId', 'Unit ID'), num('componentId', 'Component ID'), str('revision', 'Revision')),
|
|
245
|
+
},
|
|
246
|
+
// ━━━ COMPLIANCE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
247
|
+
{
|
|
248
|
+
key: 'compliance-obligations', name: 'Compliance Obligations', module: 'COMPLIANCE',
|
|
249
|
+
description: 'Regulatory obligations and requirements',
|
|
250
|
+
fields: fields(str('title', 'Title', { required: true }), str('description', 'Description'), enm('obligationType', 'Obligation Type', OBLIGATION_TYPES), enm('status', 'Status', OBLIGATION_STATUSES), num('permitId', 'Permit ID'), num('responsibleUserId', 'Responsible User ID'), str('requirements', 'Requirements'), date('nextDueDate', 'Next Due Date'), date('lastCompletedDate', 'Last Completed')),
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
key: 'compliance-submissions', name: 'Compliance Submissions', module: 'COMPLIANCE',
|
|
254
|
+
description: 'Regulatory compliance submissions',
|
|
255
|
+
fields: fields(str('submissionReference', 'Reference'), str('title', 'Title', { required: true }), str('description', 'Description'), num('obligationId', 'Obligation ID'), enm('status', 'Status', SUBMISSION_STATUSES), date('periodStart', 'Period Start'), date('periodEnd', 'Period End'), date('submittedDate', 'Submitted Date')),
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
key: 'environmental-permits', name: 'Environmental Permits', module: 'COMPLIANCE',
|
|
259
|
+
description: 'Environmental permits and licenses',
|
|
260
|
+
fields: fields(str('permitNumber', 'Permit Number', { required: true }), str('title', 'Title', { required: true }), str('description', 'Description'), enm('permitType', 'Permit Type', PERMIT_TYPES), enm('status', 'Status', PERMIT_STATUSES), str('issuingAuthority', 'Issuing Authority'), num('unitId', 'Unit ID'), num('locationId', 'Location ID'), date('issueDate', 'Issue Date'), date('expiryDate', 'Expiry Date'), date('renewalDate', 'Renewal Date'), num('permitFee', 'Permit Fee'), num('annualFee', 'Annual Fee')),
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
key: 'certifications', name: 'Certifications', module: 'COMPLIANCE',
|
|
264
|
+
description: 'Industry certifications',
|
|
265
|
+
fields: fields(str('name', 'Name', { required: true }), str('description', 'Description'), str('certificationBody', 'Certification Body'), date('certificationDate', 'Certification Date'), date('expiryDate', 'Expiry Date'), str('status', 'Status')),
|
|
266
|
+
},
|
|
267
|
+
// ━━━ ENERGY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
268
|
+
{
|
|
269
|
+
key: 'ancillary-services', name: 'Ancillary Services', module: 'ENERGY',
|
|
270
|
+
description: 'Grid ancillary services contracts',
|
|
271
|
+
fields: fields(str('serviceName', 'Service Name', { required: true }), str('description', 'Description'), enm('serviceType', 'Service Type', ANCILLARY_TYPES), enm('status', 'Status', ANCILLARY_STATUSES), str('contractNumber', 'Contract Number'), str('gridOperator', 'Grid Operator'), num('unitId', 'Unit ID'), date('startDate', 'Start Date'), date('endDate', 'End Date'), num('committedCapacityMw', 'Committed MW'), num('ratePerMw', 'Rate / MW'), num('monthlyRevenue', 'Monthly Revenue')),
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
key: 'grid-connections', name: 'Grid Connections', module: 'ENERGY',
|
|
275
|
+
description: 'Electrical grid interconnections',
|
|
276
|
+
fields: fields(str('connectionName', 'Name', { required: true }), str('description', 'Description'), enm('status', 'Status', GRID_STATUSES), str('gridOperator', 'Grid Operator'), num('unitId', 'Unit ID'), num('voltageLevelKv', 'Voltage (kV)'), num('maxExportCapacityMw', 'Max Export MW'), num('maxImportCapacityMw', 'Max Import MW'), date('connectionDate', 'Connection Date')),
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
key: 'curtailment-events', name: 'Curtailment Events', module: 'ENERGY',
|
|
280
|
+
description: 'Power generation curtailment events',
|
|
281
|
+
fields: fields(str('eventNumber', 'Event Number'), str('title', 'Title', { required: true }), str('description', 'Description'), enm('curtailmentType', 'Type', CURTAILMENT_TYPES), enm('status', 'Status', CURTAILMENT_STATUSES), num('unitId', 'Unit ID'), date('startTime', 'Start Time'), date('endTime', 'End Time'), num('curtailedCapacityMw', 'Curtailed MW'), num('lostRevenue', 'Lost Revenue')),
|
|
282
|
+
},
|
|
283
|
+
// ━━━ WARRANTY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
284
|
+
{
|
|
285
|
+
key: 'warranty-contracts', name: 'Warranty Contracts', module: 'WARRANTY',
|
|
286
|
+
description: 'Equipment warranty contracts',
|
|
287
|
+
fields: fields(str('contractNumber', 'Contract Number', { required: true }), str('title', 'Title', { required: true }), str('description', 'Description'), enm('warrantyType', 'Type', WARRANTY_TYPES), enm('status', 'Status', WARRANTY_STATUSES), str('providerName', 'Provider'), str('providerEmail', 'Provider Email'), date('startDate', 'Start Date'), date('endDate', 'End Date'), num('maxClaimAmount', 'Max Claim'), num('contractCost', 'Contract Cost')),
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
key: 'warranty-claims', name: 'Warranty Claims', module: 'WARRANTY',
|
|
291
|
+
description: 'Claims against warranty contracts',
|
|
292
|
+
fields: fields(str('claimNumber', 'Claim Number', { required: true }), str('title', 'Title', { required: true }), str('description', 'Description'), enm('status', 'Status', WARRANTY_CLAIM_STATUSES), num('warrantyContractId', 'Contract ID'), num('unitId', 'Unit ID'), num('claimedAmount', 'Claimed'), num('approvedAmount', 'Approved'), num('paidAmount', 'Paid'), date('incidentDate', 'Incident Date'), date('submittedDate', 'Submitted Date')),
|
|
293
|
+
},
|
|
294
|
+
// ━━━ RESERVOIR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
295
|
+
{
|
|
296
|
+
key: 'gate-systems', name: 'Gate Systems', module: 'RESERVOIR',
|
|
297
|
+
description: 'Dam gate control systems',
|
|
298
|
+
fields: fields(str('gateId', 'Gate ID'), enm('gateType', 'Gate Type', GATE_TYPES), str('name', 'Name'), str('description', 'Description'), str('status', 'Status'), json('physicalCharacteristics', 'Physical Specs'), json('controlSystem', 'Control System'), num('locationId', 'Location ID')),
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
key: 'alert-definitions', name: 'Alert Definitions', module: 'RESERVOIR',
|
|
302
|
+
description: 'Reservoir alert configurations',
|
|
303
|
+
fields: fields(str('name', 'Name'), str('description', 'Description'), str('alertCategory', 'Category'), str('severityLevel', 'Severity'), bool('enabled', 'Enabled'), json('triggerConditions', 'Trigger Conditions'), json('notificationSettings', 'Notifications'), num('locationId', 'Location ID')),
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
key: 'manual-readings', name: 'Manual Readings', module: 'RESERVOIR',
|
|
307
|
+
description: 'Manually recorded sensor readings',
|
|
308
|
+
fields: fields(date('readingDate', 'Reading Date'), enm('readingType', 'Reading Type', READING_TYPES), str('location', 'Location'), str('gaugeId', 'Gauge ID'), num('value', 'Value'), str('unit', 'Unit'), num('operatorId', 'Operator ID'), num('locationId', 'Location ID')),
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
key: 'laboratory-results', name: 'Laboratory Results', module: 'RESERVOIR',
|
|
312
|
+
description: 'Water quality lab results',
|
|
313
|
+
fields: fields(enm('sampleType', 'Sample Type', SAMPLE_TYPES), date('sampleDate', 'Sample Date'), str('sampleLocation', 'Sample Location'), str('labName', 'Lab Name'), str('labReportId', 'Report ID'), json('parameters', 'Parameters'), num('locationId', 'Location ID')),
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
key: 'fish-monitoring', name: 'Fish Monitoring', module: 'RESERVOIR',
|
|
317
|
+
description: 'Fish passage and population monitoring',
|
|
318
|
+
fields: fields(date('monitoringDate', 'Monitoring Date'), str('monitoringLocation', 'Location'), json('speciesCounts', 'Species Counts'), json('environmentalConditions', 'Environmental Conditions'), str('notes', 'Notes'), num('locationId', 'Location ID')),
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
key: 'bathymetric-surveys', name: 'Bathymetric Surveys', module: 'RESERVOIR',
|
|
322
|
+
description: 'Reservoir bed surveys',
|
|
323
|
+
fields: fields(date('surveyDate', 'Survey Date'), enm('surveyMethod', 'Method', SURVEY_METHODS), num('coveragePercentage', 'Coverage %'), num('totalCapacity', 'Total Capacity'), num('sedimentVolume', 'Sediment Volume'), str('reportUrl', 'Report URL'), num('locationId', 'Location ID')),
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
key: 'operational-observations', name: 'Operational Observations', module: 'RESERVOIR',
|
|
327
|
+
description: 'Operator field observations',
|
|
328
|
+
fields: fields(str('title', 'Title'), enm('category', 'Category', OBSERVATION_CATEGORIES), str('description', 'Description'), enm('severity', 'Severity', OBSERVATION_SEVERITIES), bool('followUpRequired', 'Follow-Up Required'), str('status', 'Status'), num('operatorId', 'Operator ID'), num('locationId', 'Location ID')),
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
key: 'regulatory-updates', name: 'Regulatory Updates', module: 'RESERVOIR',
|
|
332
|
+
description: 'Regulatory changes and updates',
|
|
333
|
+
fields: fields(str('title', 'Title'), str('updateType', 'Update Type'), str('issuingAgency', 'Issuing Agency'), str('description', 'Description'), str('actionRequired', 'Action Required'), date('dueDate', 'Due Date'), str('status', 'Status'), num('locationId', 'Location ID')),
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
key: 'ai-scenarios', name: 'AI Scenarios', module: 'RESERVOIR',
|
|
337
|
+
description: 'AI-generated operational scenarios',
|
|
338
|
+
fields: fields(str('name', 'Name'), enm('type', 'Type', AI_SCENARIO_TYPES), str('description', 'Description'), num('confidence', 'Confidence'), bool('selected', 'Selected'), bool('implemented', 'Implemented'), json('simulationInputs', 'Simulation Inputs'), json('metrics', 'Metrics'), num('locationId', 'Location ID')),
|
|
339
|
+
},
|
|
340
|
+
// ━━━ QUALITY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
341
|
+
{
|
|
342
|
+
key: 'root-cause-analyses', name: 'Root Cause Analyses', module: 'QUALITY',
|
|
343
|
+
description: 'RCA investigations',
|
|
344
|
+
fields: fields(str('title', 'Title'), str('description', 'Description'), enm('status', 'Status', RCA_STATUSES), enm('methodology', 'Methodology', RCA_METHODOLOGIES), num('failureId', 'Failure ID'), num('eventId', 'Event ID'), str('findings', 'Findings'), str('recommendations', 'Recommendations')),
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
key: 'systemic-risk-assessments', name: 'Systemic Risk Assessments', module: 'QUALITY',
|
|
348
|
+
description: 'Cross-system risk evaluations',
|
|
349
|
+
fields: fields(str('title', 'Title'), str('description', 'Description'), str('riskLevel', 'Risk Level'), num('unitId', 'Unit ID'), str('findings', 'Findings'), str('recommendations', 'Recommendations')),
|
|
350
|
+
},
|
|
351
|
+
// ━━━ KNOWLEDGE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
352
|
+
{
|
|
353
|
+
key: 'articles', name: 'Articles', module: 'KNOWLEDGE',
|
|
354
|
+
description: 'Knowledge base articles',
|
|
355
|
+
fields: fields(str('title', 'Title', { required: true }), str('content', 'Content'), num('categoryId', 'Category ID'), str('author', 'Author'), date('publishedAt', 'Published At'), str('status', 'Status')),
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
key: 'best-practices', name: 'Best Practices', module: 'KNOWLEDGE',
|
|
359
|
+
description: 'Industry best practices',
|
|
360
|
+
fields: fields(str('title', 'Title', { required: true }), str('content', 'Content'), num('categoryId', 'Category ID')),
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
key: 'faqs', name: 'FAQs', module: 'KNOWLEDGE',
|
|
364
|
+
description: 'Frequently asked questions',
|
|
365
|
+
fields: fields(str('question', 'Question', { required: true }), str('answer', 'Answer'), num('categoryId', 'Category ID')),
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
key: 'lessons-learned', name: 'Lessons Learned', module: 'KNOWLEDGE',
|
|
369
|
+
description: 'Post-event lessons learned',
|
|
370
|
+
fields: fields(str('title', 'Title', { required: true }), str('description', 'Description'), str('lesson', 'Lesson')),
|
|
371
|
+
},
|
|
372
|
+
// ━━━ SENSORS ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
373
|
+
{
|
|
374
|
+
key: 'sensors', name: 'Sensors', module: 'SENSORS',
|
|
375
|
+
description: 'IoT sensors attached to equipment',
|
|
376
|
+
fields: fields(str('name', 'Name', { required: true }), str('code', 'Code'), str('description', 'Description'), enm('type', 'Type', SENSOR_TYPES), num('unitId', 'Unit ID'), num('componentId', 'Component ID'), str('unit', 'Measurement Unit'), num('minValue', 'Min Value'), num('maxValue', 'Max Value'), bool('isActive', 'Active')),
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
key: 'sensor-alerts', name: 'Sensor Alerts', module: 'SENSORS',
|
|
380
|
+
description: 'Alerts triggered by sensor thresholds',
|
|
381
|
+
fields: fields(num('sensorId', 'Sensor ID'), enm('severity', 'Severity', ALERT_SEVERITIES), enm('status', 'Status', ALERT_STATUSES), str('message', 'Message'), num('value', 'Value'), num('threshold', 'Threshold'), date('acknowledgedAt', 'Acknowledged At'), date('resolvedAt', 'Resolved At')),
|
|
382
|
+
},
|
|
383
|
+
// ━━━ MISC ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
384
|
+
{
|
|
385
|
+
key: 'todos', name: 'Todos', module: 'MISC',
|
|
386
|
+
description: 'Personal to-do items',
|
|
387
|
+
fields: fields(str('title', 'Title', { required: true }), str('description', 'Description'), bool('completed', 'Completed'), date('dueDate', 'Due Date'), num('assignedToId', 'Assigned To ID')),
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
key: 'notes', name: 'Notes', module: 'MISC',
|
|
391
|
+
description: 'Notes attached to any entity',
|
|
392
|
+
fields: fields(str('title', 'Title'), str('content', 'Content'), str('entityType', 'Entity Type'), num('entityId', 'Entity ID'), num('authorId', 'Author ID')),
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
key: 'incidents', name: 'Incidents', module: 'MISC',
|
|
396
|
+
description: 'Safety and operational incidents',
|
|
397
|
+
fields: fields(str('title', 'Title'), str('description', 'Description'), str('type', 'Type'), str('severity', 'Severity'), num('unitId', 'Unit ID'), date('reportedDate', 'Reported Date')),
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
key: 'events', name: 'Events', module: 'MISC',
|
|
401
|
+
description: 'Calendar / scheduled events',
|
|
402
|
+
fields: fields(str('title', 'Title', { required: true }), str('description', 'Description'), date('startDate', 'Start Date'), date('endDate', 'End Date'), num('locationId', 'Location ID')),
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
key: 'messages', name: 'Messages', module: 'MISC',
|
|
406
|
+
description: 'Internal messaging',
|
|
407
|
+
fields: fields(str('content', 'Content'), num('senderId', 'Sender ID'), num('recipientId', 'Recipient ID'), bool('read', 'Read')),
|
|
408
|
+
},
|
|
409
|
+
];
|
|
410
|
+
/**
|
|
411
|
+
* Entity keys that are excluded from the browser by default.
|
|
412
|
+
* Consumers can override via `DatabaseManagerConfig.excludedEntities`.
|
|
413
|
+
*/
|
|
414
|
+
export const DEFAULT_EXCLUDED_ENTITIES = [
|
|
415
|
+
'login-requests',
|
|
416
|
+
'login-history',
|
|
417
|
+
'jsa-items',
|
|
418
|
+
'jsa-steps',
|
|
419
|
+
'component-checklists',
|
|
420
|
+
'properties',
|
|
421
|
+
'fonts',
|
|
422
|
+
'terms-of-use',
|
|
423
|
+
];
|
|
424
|
+
/**
|
|
425
|
+
* Human-readable labels for each module code.
|
|
426
|
+
*/
|
|
427
|
+
export const MODULE_LABELS = {
|
|
428
|
+
CORE: 'Core',
|
|
429
|
+
MAINTENANCE: 'Maintenance',
|
|
430
|
+
INSPECTIONS: 'Inspections',
|
|
431
|
+
MATERIALS: 'Materials',
|
|
432
|
+
FLEET: 'Fleet Management',
|
|
433
|
+
PROJECTS: 'Projects',
|
|
434
|
+
DOCUMENTS: 'Documents',
|
|
435
|
+
COMPLIANCE: 'Compliance',
|
|
436
|
+
ENERGY: 'Energy',
|
|
437
|
+
WARRANTY: 'Warranty',
|
|
438
|
+
RESERVOIR: 'Reservoir',
|
|
439
|
+
QUALITY: 'Quality',
|
|
440
|
+
KNOWLEDGE: 'Knowledge Base',
|
|
441
|
+
SENSORS: 'Sensors & IoT',
|
|
442
|
+
MISC: 'Miscellaneous',
|
|
443
|
+
};
|
|
444
|
+
/**
|
|
445
|
+
* Map of entity key → service class name (as exported from the SDK).
|
|
446
|
+
* Used by QueryExecutorService to resolve the correct service at runtime.
|
|
447
|
+
*/
|
|
448
|
+
export const ENTITY_SERVICE_MAP = {
|
|
449
|
+
'companies': 'CompanyService',
|
|
450
|
+
'units': 'UnitService',
|
|
451
|
+
'components': 'ComponentService',
|
|
452
|
+
'component-groups': 'ComponentGroupService',
|
|
453
|
+
'sub-assemblies': 'SubAssemblyService',
|
|
454
|
+
'locations': 'LocationService',
|
|
455
|
+
'departments': 'DepartmentService',
|
|
456
|
+
'users': 'UserService',
|
|
457
|
+
'suppliers': 'SupplierService',
|
|
458
|
+
'interventions': 'InterventionService',
|
|
459
|
+
'intervention-requests': 'InterventionRequestService',
|
|
460
|
+
'failures': 'FailureService',
|
|
461
|
+
'inspections': 'InspectionService',
|
|
462
|
+
'maintenance-records': 'MaintenanceRecordService',
|
|
463
|
+
'material-items': 'MaterialItemService',
|
|
464
|
+
'material-consumables': 'MaterialConsumableService',
|
|
465
|
+
'material-instruments': 'MaterialInstrumentService',
|
|
466
|
+
'material-tooling': 'MaterialToolingService',
|
|
467
|
+
'spare-parts': 'SparePartService',
|
|
468
|
+
'vehicles': 'VehicleService',
|
|
469
|
+
'drivers': 'DriverService',
|
|
470
|
+
'vehicle-trips': 'VehicleTripService',
|
|
471
|
+
'fuel-records': 'FuelRecordService',
|
|
472
|
+
'geofences': 'GeofenceService',
|
|
473
|
+
'projects': 'ProjectService',
|
|
474
|
+
'capex-projects': 'CapexProjectService',
|
|
475
|
+
'budgets': 'BudgetService',
|
|
476
|
+
'bids': 'BidService',
|
|
477
|
+
'files': 'TgFileService',
|
|
478
|
+
'folders': 'TgFolderService',
|
|
479
|
+
'drawings': 'DrawingService',
|
|
480
|
+
'compliance-obligations': 'ComplianceObligationService',
|
|
481
|
+
'compliance-submissions': 'ComplianceSubmissionService',
|
|
482
|
+
'environmental-permits': 'EnvironmentalPermitService',
|
|
483
|
+
'certifications': 'CertificationService',
|
|
484
|
+
'ancillary-services': 'AncillaryServiceCrudService',
|
|
485
|
+
'grid-connections': 'GridConnectionService',
|
|
486
|
+
'curtailment-events': 'CurtailmentEventService',
|
|
487
|
+
'warranty-contracts': 'WarrantyContractService',
|
|
488
|
+
'warranty-claims': 'WarrantyClaimService',
|
|
489
|
+
'gate-systems': 'GateSystemService',
|
|
490
|
+
'alert-definitions': 'AlertDefinitionService',
|
|
491
|
+
'manual-readings': 'ManualReadingService',
|
|
492
|
+
'laboratory-results': 'LaboratoryResultService',
|
|
493
|
+
'fish-monitoring': 'FishMonitoringService',
|
|
494
|
+
'bathymetric-surveys': 'BathymetricSurveyService',
|
|
495
|
+
'operational-observations': 'OperationalObservationService',
|
|
496
|
+
'regulatory-updates': 'RegulatoryUpdateService',
|
|
497
|
+
'ai-scenarios': 'AIScenarioService',
|
|
498
|
+
'root-cause-analyses': 'RootCauseAnalysisService',
|
|
499
|
+
'systemic-risk-assessments': 'SystemicRiskAssessmentService',
|
|
500
|
+
'articles': 'ArticleService',
|
|
501
|
+
'best-practices': 'BestPracticeService',
|
|
502
|
+
'faqs': 'FaqService',
|
|
503
|
+
'lessons-learned': 'LessonLearnedService',
|
|
504
|
+
'sensors': 'SensorService',
|
|
505
|
+
'sensor-alerts': 'AlertService',
|
|
506
|
+
'todos': 'TodoService',
|
|
507
|
+
'notes': 'NoteService',
|
|
508
|
+
'incidents': 'IncidentService',
|
|
509
|
+
'events': 'EventService',
|
|
510
|
+
'messages': 'MessageService',
|
|
511
|
+
};
|
|
512
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvcmVnaXN0cnkvZW50aXR5LXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQXNCO0lBQ3JDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDOUYsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUMzRyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0NBQzVHLENBQUM7QUFFRixTQUFTLE1BQU0sQ0FBQyxHQUFHLEtBQXdCO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLE9BQWlDLEVBQUU7SUFDM0UsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLE9BQWlDLEVBQUU7SUFDM0Us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QWM7SUFDL0IsT0FBTyxFQUFFLGFBQWE7SUFDdEIsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLGlCQUFpQjtJQUM5QixRQUFRLEVBQUUsY0FBYztJQUN4QixVQUFVLEVBQUUsZ0JBQWdCO0NBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlGaWVsZE1ldGEsIEVudGl0eVJlZ2lzdHJ5RW50cnkgfSBmcm9tICcuLi90eXBlcy9kYXRhYmFzZS1tYW5hZ2VyLnR5cGVzJztcblxuLyoqXG4gKiBTaGFyZWQgYmFzZSBmaWVsZHMgcHJlc2VudCBvbiBldmVyeSBlbnRpdHkgKEJhc2VFbnRpdHkpLlxuICovXG5jb25zdCBCQVNFX0ZJRUxEUzogRW50aXR5RmllbGRNZXRhW10gPSBbXG4gIHsgbmFtZTogJ2lkJywgbGFiZWw6ICdJRCcsIHR5cGU6ICdudW1iZXInLCBlZGl0YWJsZTogZmFsc2UsIHNvcnRhYmxlOiB0cnVlLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gIHsgbmFtZTogJ2NyZWF0ZWRBdCcsIGxhYmVsOiAnQ3JlYXRlZCBBdCcsIHR5cGU6ICdkYXRlJywgZWRpdGFibGU6IGZhbHNlLCBzb3J0YWJsZTogdHJ1ZSwgZmlsdGVyYWJsZTogdHJ1ZSB9LFxuICB7IG5hbWU6ICd1cGRhdGVkQXQnLCBsYWJlbDogJ1VwZGF0ZWQgQXQnLCB0eXBlOiAnZGF0ZScsIGVkaXRhYmxlOiBmYWxzZSwgc29ydGFibGU6IHRydWUsIGZpbHRlcmFibGU6IHRydWUgfSxcbl07XG5cbmZ1bmN0aW9uIGZpZWxkcyguLi5leHRyYTogRW50aXR5RmllbGRNZXRhW10pOiBFbnRpdHlGaWVsZE1ldGFbXSB7XG4gIHJldHVybiBbLi4uQkFTRV9GSUVMRFMsIC4uLmV4dHJhXTtcbn1cblxuZnVuY3Rpb24gc3RyKG5hbWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgb3B0czogUGFydGlhbDxFbnRpdHlGaWVsZE1ldGE+ID0ge30pOiBFbnRpdHlGaWVsZE1ldGEge1xuICByZXR1cm4geyBuYW1lLCBsYWJlbCwgdHlwZTogJ3N0cmluZycsIC4uLm9wdHMgfTtcbn1cblxuZnVuY3Rpb24gbnVtKG5hbWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgb3B0czogUGFydGlhbDxFbnRpdHlGaWVsZE1ldGE+ID0ge30pOiBFbnRpdHlGaWVsZE1ldGEge1xuICByZXR1cm4geyBuYW1lLCBsYWJlbCwgdHlwZTogJ251bWJlcicsIC4uLm9wdHMgfTtcbn1cblxuZnVuY3Rpb24gYm9vbChuYW1lOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcsIG9wdHM6IFBhcnRpYWw8RW50aXR5RmllbGRNZXRhPiA9IHt9KTogRW50aXR5RmllbGRNZXRhIHtcbiAgcmV0dXJuIHsgbmFtZSwgbGFiZWwsIHR5cGU6ICdib29sZWFuJywgLi4ub3B0cyB9O1xufVxuXG5mdW5jdGlvbiBkYXRlKG5hbWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgb3B0czogUGFydGlhbDxFbnRpdHlGaWVsZE1ldGE+ID0ge30pOiBFbnRpdHlGaWVsZE1ldGEge1xuICByZXR1cm4geyBuYW1lLCBsYWJlbCwgdHlwZTogJ2RhdGUnLCAuLi5vcHRzIH07XG59XG5cbmZ1bmN0aW9uIGVubShuYW1lOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10sIG9wdHM6IFBhcnRpYWw8RW50aXR5RmllbGRNZXRhPiA9IHt9KTogRW50aXR5RmllbGRNZXRhIHtcbiAgcmV0dXJuIHsgbmFtZSwgbGFiZWwsIHR5cGU6ICdlbnVtJywgZW51bVZhbHVlczogdmFsdWVzLCAuLi5vcHRzIH07XG59XG5cbmZ1bmN0aW9uIGpzb24obmFtZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBvcHRzOiBQYXJ0aWFsPEVudGl0eUZpZWxkTWV0YT4gPSB7fSk6IEVudGl0eUZpZWxkTWV0YSB7XG4gIHJldHVybiB7IG5hbWUsIGxhYmVsLCB0eXBlOiAnanNvbicsIHNvcnRhYmxlOiBmYWxzZSwgLi4ub3B0cyB9O1xufVxuXG5mdW5jdGlvbiBhcnIobmFtZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBvcHRzOiBQYXJ0aWFsPEVudGl0eUZpZWxkTWV0YT4gPSB7fSk6IEVudGl0eUZpZWxkTWV0YSB7XG4gIHJldHVybiB7IG5hbWUsIGxhYmVsLCB0eXBlOiAnYXJyYXknLCBzb3J0YWJsZTogZmFsc2UsIC4uLm9wdHMgfTtcbn1cblxuLy8g4pSA4pSA4pSAIEVudW0gdmFsdWUgY29uc3RhbnRzIChtaXJyb3JpbmcgU0RLIGVudW1zKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgVU5JVF9TVEFUVVNFUyA9IFsnU0hVVERPV04nLCAnSU5fT1BFUkFUSU9OJywgJ1VOREVSX0NPTlNUUlVDVElPTicsICdQUk9KRUNUX1NUQUdFJ107XG5jb25zdCBQTEFOVF9TVEFUVVNFUyA9IFsnSU5fT1BFUkFUSU9OJywgJ1VOREVSX0NPTlNUUlVDVElPTicsICdQUk9KRUNUX1NUQUdFJywgJ09VVF9PRl9TRVJWSUNFJ107XG5jb25zdCBQUkVNSVNFX1RZUEVTID0gWydQTEFOVCcsICdPRkZJQ0UnLCAnV0FSRUhPVVNFJywgJ0RBTScsICdIWUJSSURfUExBTlQnLCAnT1RIRVInXTtcbmNvbnN0IFBMQU5UX1NJWkVTID0gWydTTUFMTCcsICdNRURJVU0nLCAnTEFSR0UnXTtcbmNvbnN0IENPTVBPTkVOVF9UWVBFUyA9IFsnU1RBTkRBTE9ORScsICdSRUdVTEFSJywgJ0hZQlJJRF9QTEFOVCddO1xuY29uc3QgQ09NUE9ORU5UX0NBVEVHT1JJRVMgPSBbJ0FTU0VUJywgJ1BJUElORycsICdQUk9URUNUSU9OX0NPTlRST0wnLCAnSFlCUklEX1BMQU5UJywgJ0lOU1RSVU1FTlRBVElPTiddO1xuY29uc3QgQ09NUE9ORU5UX1NUQVRVU0VTID0gWydBQ1RJVkUnLCAnSU5BQ1RJVkUnXTtcbmNvbnN0IFdPX1NUQVRVU0VTID0gWydDT01QTEVURUQnLCAnSU5fUFJPR1JFU1MnLCAnUEVORElORycsICdDQU5DRUxMRUQnLCAnUExBTk5FRF9OT1RfU0NIRURVTEVEJywgJ0RSQUZUJywgJ1BMQU5ORURfU0NIRURVTEVEJywgJ0NMT1NFRCddO1xuY29uc3QgTUFJTlRFTkFOQ0VfVFlQRVMgPSBbJ1BSRVZFTlRJVkUnLCAnUFJFRElDVElWRScsICdERVRFQ1RJVkUnLCAnUkVBQ1RJVkUnLCAnQ09SUkVDVElWRSddO1xuY29uc3QgUFJJT1JJVElFUyA9IFsnTE9XJywgJ01FRElVTScsICdISUdIJywgJ0NSSVRJQ0FMJ107XG5jb25zdCBDT1NUX0FMTE9DQVRJT05TID0gWydQUkVWRU5USVZFJywgJ0NPUlJFQ1RJVkUnLCAnU1BFQ0lBTF9NQUlOVEVOQU5DRScsICdFTUVSR0VOQ1knLCAnQ09OVElOR0VOQ0lFUycsICdQUk9KRUNUJ107XG5jb25zdCBJTlNQRUNUSU9OX1RZUEVTID0gWydWJywgJ00nLCAnRicsICdBJywgJ0UnLCAnQUxMJ107XG5jb25zdCBJTlNQRUNUSU9OX0xFVkVMUyA9IFsnQkFTSUMnLCAnQURWQU5DRUQnLCAnQ09NUExFVEUnXTtcbmNvbnN0IElOU1BFQ1RJT05fTkFUVVJFUyA9IFsnUEVSSU9ESUMnLCAnTk9OX1BFUklPRElDJ107XG5jb25zdCBSRUFTT05TX0lOU1BFQ1RJT04gPSBbJ0RVRV9UT19FVkVOVCcsICdNQUlOVEVOQU5DRScsICdEVUVfVE9fTUFJTlRFTkFOQ0UnLCAnQ09ORElUSU9OX0FTU0VTU01FTlQnLCAnRFVFX1RPX0lOU1BFQ1RJT04nLCAnRFVFX1RPX0lOVEVSVkVOVElPTl9SRVFVRVNUJywgJ1NBRkVUWV9QUk9HUkFNX0lOU1BFQ1RJT05TJywgJ1dPUktfUkVRVUlSRV9NQU5BR0VNRU5UJywgJ1BSRVZfQU5EX1BSRURfTUFJTlRFTkFOQ0UnLCAnQVVESVRTJywgJ09USEVSUyddO1xuY29uc3QgUkVBU09OU19JTlRFUlZFTlRJT04gPSBbJ0RVRV9UT19NQUlOVEVOQU5DRScsICdEVUVfVE9fRVZFTlQnLCAnRFVFX1RPX0lOVEVSVkVOVElPTl9SRVFVRVNUJywgJ09QRVJBVE9SX09CU19BTkRfRU1QTE9ZRUVfQ09OQ0VSTlMnLCAnUFJFVl9BTkRfUFJFRF9NQUlOVEVOQU5DRScsICdQT0lOVFNfUkFJU0VEJywgJ1NBRkVUWV9QUk9HUkFNX0lOU1BFQ1RJT05TJywgJ1dPUktfUkVRVUlSRV9NQU5BR0VNRU5UJywgJ1JFR1VMQVRPUllfUkVRVUlSRU1FTlRTJywgJ0VRVUlQTUVOVF9JTVBST1ZFTUVOVFMnLCAnQVVESVRTJywgJ0lOQ0lERU5UU19EQU1BR0VTJywgJ09USEVSUyddO1xuY29uc3QgRVZFTlRfTkFUVVJFUyA9IFsnSU5DSURFTlQnLCAnRkFJTFVSRScsICdQRVJUVVJCQVRJT04nXTtcbmNvbnN0IFZFSElDTEVfU1RBVFVTRVMgPSBbJ0FWQUlMQUJMRScsICdJTl9VU0UnLCAnTUFJTlRFTkFOQ0UnXTtcbmNvbnN0IFZFSElDTEVfVFlQRVMgPSBbJ1RSVUNLJywgJ1ZBTicsICdDQVInLCAnU1VWJywgJ0VRVUlQTUVOVCcsICdUUkFJTEVSJ107XG5jb25zdCBGVUVMX1RZUEVTID0gWydHQVNPTElORScsICdESUVTRUwnLCAnRUxFQ1RSSUMnLCAnSFlCUklEJywgJ1BST1BBTkUnLCAnTkFUVVJBTF9HQVMnXTtcbmNvbnN0IERSSVZFUl9TVEFUVVNFUyA9IFsnQUNUSVZFJywgJ0lOQUNUSVZFJywgJ1NVU1BFTkRFRCddO1xuY29uc3QgVFJJUF9TVEFUVVNFUyA9IFsnSU5fUFJPR1JFU1MnLCAnQ09NUExFVEVEJ107XG5jb25zdCBHRU9GRU5DRV9UWVBFUyA9IFsnQ0lSQ0xFJywgJ1BPTFlHT04nXTtcbmNvbnN0IFNFTlNPUl9UWVBFUyA9IFsnVEVNUEVSQVRVUkUnLCAnUFJFU1NVUkUnLCAnVklCUkFUSU9OJywgJ0ZMT1dfUkFURScsICdMRVZFTCcsICdIVU1JRElUWScsICdWT0xUQUdFJywgJ0NVUlJFTlQnLCAnUE9XRVInLCAnU1BFRUQnLCAnUEgnLCAnQ09ORFVDVElWSVRZJywgJ1RVUkJJRElUWScsICdESVNTT0xWRURfT1hZR0VOJywgJ09USEVSJ107XG5jb25zdCBBTEVSVF9TRVZFUklUSUVTID0gWydJTkZPJywgJ1dBUk5JTkcnLCAnQ1JJVElDQUwnLCAnRU1FUkdFTkNZJ107XG5jb25zdCBBTEVSVF9TVEFUVVNFUyA9IFsnQUNUSVZFJywgJ0FDS05PV0xFREdFRCcsICdSRVNPTFZFRCcsICdFU0NBTEFURUQnXTtcbmNvbnN0IE9CTElHQVRJT05fVFlQRVMgPSBbJ1JFUE9SVElORycsICdNT05JVE9SSU5HJywgJ0lOU1BFQ1RJT04nLCAnVEVTVElORycsICdGSUxJTkcnXTtcbmNvbnN0IE9CTElHQVRJT05fU1RBVFVTRVMgPSBbJ0FDVElWRScsICdDT01QTEVURUQnLCAnT1ZFUkRVRScsICdXQUlWRUQnXTtcbmNvbnN0IFNVQk1JU1NJT05fU1RBVFVTRVMgPSBbJ0RSQUZUJywgJ1NVQk1JVFRFRCcsICdVTkRFUl9SRVZJRVcnLCAnQVBQUk9WRUQnLCAnUkVKRUNURUQnLCAnUkVWSVNJT05fUkVRVUlSRUQnXTtcbmNvbnN0IFBFUk1JVF9UWVBFUyA9IFsnQUlSJywgJ1dBVEVSJywgJ1dBU1RFJywgJ05PSVNFJywgJ0xBTkRfVVNFJywgJ0VOVklST05NRU5UQUxfSU1QQUNUJ107XG5jb25zdCBQRVJNSVRfU1RBVFVTRVMgPSBbJ0FDVElWRScsICdFWFBJUkVEJywgJ1NVU1BFTkRFRCcsICdSRVZPS0VEJywgJ1BFTkRJTkdfUkVORVdBTCddO1xuY29uc3QgQU5DSUxMQVJZX1RZUEVTID0gWydGUkVRVUVOQ1lfUkVHVUxBVElPTicsICdTUElOTklOR19SRVNFUlZFJywgJ05PTl9TUElOTklOR19SRVNFUlZFJywgJ1ZPTFRBR0VfU1VQUE9SVCcsICdCTEFDS19TVEFSVCcsICdSRUFDVElWRV9QT1dFUiddO1xuY29uc3QgQU5DSUxMQVJZX1NUQVRVU0VTID0gWydBQ1RJVkUnLCAnRVhQSVJFRCcsICdTVVNQRU5ERUQnLCAnUEVORElORyddO1xuY29uc3QgR1JJRF9TVEFUVVNFUyA9IFsnQUNUSVZFJywgJ0lOQUNUSVZFJywgJ1VOREVSX01BSU5URU5BTkNFJywgJ0RJU0NPTk5FQ1RFRCddO1xuY29uc3QgQ1VSVEFJTE1FTlRfVFlQRVMgPSBbJ0VDT05PTUlDJywgJ1JFTElBQklMSVRZJywgJ0VOVklST05NRU5UQUwnLCAnVFJBTlNNSVNTSU9OX0NPTlNUUkFJTlQnLCAnVk9MVU5UQVJZJ107XG5jb25zdCBDVVJUQUlMTUVOVF9TVEFUVVNFUyA9IFsnQUNUSVZFJywgJ0NPTVBMRVRFRCcsICdDQU5DRUxMRUQnXTtcbmNvbnN0IFdBUlJBTlRZX1NUQVRVU0VTID0gWydBQ1RJVkUnLCAnRVhQSVJFRCcsICdDQU5DRUxMRUQnLCAnUEVORElORyddO1xuY29uc3QgV0FSUkFOVFlfVFlQRVMgPSBbJ01BTlVGQUNUVVJFUicsICdFWFRFTkRFRCcsICdDT01QT05FTlQnLCAnU0VSVklDRSddO1xuY29uc3QgV0FSUkFOVFlfQ0xBSU1fU1RBVFVTRVMgPSBbJ0RSQUZUJywgJ1NVQk1JVFRFRCcsICdVTkRFUl9SRVZJRVcnLCAnQVBQUk9WRUQnLCAnUkVKRUNURUQnLCAnUEFJRCcsICdDTE9TRUQnXTtcbmNvbnN0IFJDQV9TVEFUVVNFUyA9IFsnRFJBRlQnLCAnSU5fUFJPR1JFU1MnLCAnUEVORElOR19SRVZJRVcnLCAnVU5ERVJfUkVWSUVXJywgJ0FQUFJPVkVEJywgJ1JFSkVDVEVEJywgJ0NMT1NFRCcsICdBUkNISVZFRCddO1xuY29uc3QgUkNBX01FVEhPRE9MT0dJRVMgPSBbJ0ZJVkVfV0hZUycsICdGSVNIQk9ORScsICdGQVVMVF9UUkVFJywgJ1BBUkVUTycsICdGTUVBJywgJ0NPTUJJTkVEJ107XG5jb25zdCBHQVRFX1RZUEVTID0gWydJTlRBS0UnLCAnU1BJTExXQVknLCAnT1VUTEVUJywgJ0VNRVJHRU5DWSddO1xuY29uc3QgUkVBRElOR19UWVBFUyA9IFsnV0FURVJfTEVWRUwnLCAnRkxPVycsICdHQVRFX1BPU0lUSU9OJywgJ1BSRVNTVVJFJywgJ1RFTVBFUkFUVVJFJ107XG5jb25zdCBTQU1QTEVfVFlQRVMgPSBbJ1dBVEVSX1FVQUxJVFknLCAnU0VESU1FTlQnLCAnQklPTE9HSUNBTCddO1xuY29uc3QgT0JTRVJWQVRJT05fQ0FURUdPUklFUyA9IFsnV0VBVEhFUicsICdFUVVJUE1FTlRfQkVIQVZJT1InLCAnV0FURVJfUVVBTElUWScsICdXSUxETElGRScsICdTQUZFVFknLCAnT1RIRVInXTtcbmNvbnN0IE9CU0VSVkFUSU9OX1NFVkVSSVRJRVMgPSBbJ0lORk9STUFUSU9OQUwnLCAnQVRURU5USU9OX1JFUVVJUkVEJywgJ1VSR0VOVCddO1xuY29uc3QgU1VSVkVZX01FVEhPRFMgPSBbJ01VTFRJQkVBTV9TT05BUicsICdTSU5HTEVfQkVBTScsICdMSURBUicsICdHUFMnXTtcbmNvbnN0IEFJX1NDRU5BUklPX1RZUEVTID0gWydHUklEX1JFUVVFU1QnLCAnV0FURVJfUFJFU0VSVkFUSU9OJywgJ09FTV9SRUNPTU1FTkRBVElPTlMnXTtcblxuLy8g4pSA4pSA4pSAIFRoZSBSZWdpc3RyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVOVElUWV9SRUdJU1RSWTogRW50aXR5UmVnaXN0cnlFbnRyeVtdID0gW1xuXG4gIC8vIOKUgeKUgeKUgSBDT1JFIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICdjb21wYW5pZXMnLCBuYW1lOiAnQ29tcGFuaWVzJywgbW9kdWxlOiAnQ09SRScsXG4gICAgZGVzY3JpcHRpb246ICdDbGllbnQgb3JnYW5pemF0aW9ucyAvIGNvbXBhbmllcycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBzdHIoJ2FkZHJlc3MnLCAnQWRkcmVzcycpLFxuICAgICAgc3RyKCdwaG9uZScsICdQaG9uZScpLFxuICAgICAgc3RyKCdlbWFpbCcsICdFbWFpbCcpLFxuICAgICAgc3RyKCd3ZWJzaXRlJywgJ1dlYnNpdGUnKSxcbiAgICAgIHN0cignbG9nbycsICdMb2dvIFVSTCcpLFxuICAgICAgc3RyKCd0aW1lem9uZScsICdUaW1lem9uZScpLFxuICAgICAgc3RyKCdjdXJyZW5jeScsICdDdXJyZW5jeScpLFxuICAgICAgc3RyKCdsYW5ndWFnZScsICdMYW5ndWFnZScpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ3VuaXRzJywgbmFtZTogJ1VuaXRzJywgbW9kdWxlOiAnQ09SRScsXG4gICAgZGVzY3JpcHRpb246ICdQcm9kdWN0aW9uIC8gZ2VuZXJhdGlvbiB1bml0cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2NvZGUnLCAnQ29kZScpLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgZW5tKCdzdGF0dXMnLCAnU3RhdHVzJywgVU5JVF9TVEFUVVNFUyksXG4gICAgICBlbm0oJ3BsYW50U3RhdHVzJywgJ1BsYW50IFN0YXR1cycsIFBMQU5UX1NUQVRVU0VTKSxcbiAgICAgIGVubSgncHJlbWlzZVR5cGUnLCAnUHJlbWlzZSBUeXBlJywgUFJFTUlTRV9UWVBFUyksXG4gICAgICBlbm0oJ3BsYW50U2l6ZScsICdQbGFudCBTaXplJywgUExBTlRfU0laRVMpLFxuICAgICAgbnVtKCdjb21wYW55SWQnLCAnQ29tcGFueSBJRCcpLFxuICAgICAgbnVtKCdsb2NhdGlvbklkJywgJ0xvY2F0aW9uIElEJyksXG4gICAgICBudW0oJ2xhdGl0dWRlJywgJ0xhdGl0dWRlJyksXG4gICAgICBudW0oJ2xvbmdpdHVkZScsICdMb25naXR1ZGUnKSxcbiAgICAgIG51bSgnY2FwYWNpdHknLCAnQ2FwYWNpdHknKSxcbiAgICAgIGRhdGUoJ2NvbW1pc3Npb25pbmdEYXRlJywgJ0NvbW1pc3Npb25pbmcgRGF0ZScpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2NvbXBvbmVudHMnLCBuYW1lOiAnQ29tcG9uZW50cycsIG1vZHVsZTogJ0NPUkUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRXF1aXBtZW50IGNvbXBvbmVudHMgYXR0YWNoZWQgdG8gdW5pdHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb2RlJywgJ0NvZGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIGVubSgndHlwZScsICdUeXBlJywgQ09NUE9ORU5UX1RZUEVTKSxcbiAgICAgIGVubSgnY2F0ZWdvcnknLCAnQ2F0ZWdvcnknLCBDT01QT05FTlRfQ0FURUdPUklFUyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBDT01QT05FTlRfU1RBVFVTRVMpLFxuICAgICAgbnVtKCd1bml0SWQnLCAnVW5pdCBJRCcpLFxuICAgICAgbnVtKCdwYXJlbnRDb21wb25lbnRJZCcsICdQYXJlbnQgQ29tcG9uZW50IElEJyksXG4gICAgICBzdHIoJ21hbnVmYWN0dXJlcicsICdNYW51ZmFjdHVyZXInKSxcbiAgICAgIHN0cignbW9kZWwnLCAnTW9kZWwnKSxcbiAgICAgIHN0cignc2VyaWFsTnVtYmVyJywgJ1NlcmlhbCBOdW1iZXInKSxcbiAgICAgIGRhdGUoJ2luc3RhbGxEYXRlJywgJ0luc3RhbGwgRGF0ZScpLFxuICAgICAgZGF0ZSgnd2FycmFudHlFbmREYXRlJywgJ1dhcnJhbnR5IEVuZCBEYXRlJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnY29tcG9uZW50LWdyb3VwcycsIG5hbWU6ICdDb21wb25lbnQgR3JvdXBzJywgbW9kdWxlOiAnQ09SRScsXG4gICAgZGVzY3JpcHRpb246ICdMb2dpY2FsIGdyb3VwaW5ncyBvZiBjb21wb25lbnRzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdzdWItYXNzZW1ibGllcycsIG5hbWU6ICdTdWItQXNzZW1ibGllcycsIG1vZHVsZTogJ0NPUkUnLFxuICAgIGRlc2NyaXB0aW9uOiAnU3ViLWFzc2VtYmxpZXMgd2l0aGluIGNvbXBvbmVudHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb2RlJywgJ0NvZGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIG51bSgnY29tcG9uZW50SWQnLCAnQ29tcG9uZW50IElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnbG9jYXRpb25zJywgbmFtZTogJ0xvY2F0aW9ucycsIG1vZHVsZTogJ0NPUkUnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGh5c2ljYWwgbG9jYXRpb25zIC8gc2l0ZXMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdhZGRyZXNzJywgJ0FkZHJlc3MnKSxcbiAgICAgIHN0cignY2l0eScsICdDaXR5JyksXG4gICAgICBzdHIoJ3N0YXRlJywgJ1N0YXRlIC8gUHJvdmluY2UnKSxcbiAgICAgIHN0cignY291bnRyeScsICdDb3VudHJ5JyksXG4gICAgICBzdHIoJ3Bvc3RhbENvZGUnLCAnUG9zdGFsIENvZGUnKSxcbiAgICAgIG51bSgnbGF0aXR1ZGUnLCAnTGF0aXR1ZGUnKSxcbiAgICAgIG51bSgnbG9uZ2l0dWRlJywgJ0xvbmdpdHVkZScpLFxuICAgICAgbnVtKCdjb21wYW55SWQnLCAnQ29tcGFueSBJRCcpLFxuICAgICAgYm9vbCgnaXNIZWFkUXVhcnRlcnMnLCAnSXMgSGVhZHF1YXJ0ZXJzJyksXG4gICAgICBzdHIoJ3JlZ2lvbicsICdSZWdpb24nKSxcbiAgICAgIHN0cigndGltZXpvbmUnLCAnVGltZXpvbmUnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdkZXBhcnRtZW50cycsIG5hbWU6ICdEZXBhcnRtZW50cycsIG1vZHVsZTogJ0NPUkUnLFxuICAgIGRlc2NyaXB0aW9uOiAnT3JnYW5pemF0aW9uYWwgZGVwYXJ0bWVudHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgbnVtKCdjb21wYW55SWQnLCAnQ29tcGFueSBJRCcpLFxuICAgICAgbnVtKCdtYW5hZ2VySWQnLCAnTWFuYWdlciBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ3VzZXJzJywgbmFtZTogJ1VzZXJzJywgbW9kdWxlOiAnQ09SRScsXG4gICAgZGVzY3JpcHRpb246ICdTeXN0ZW0gdXNlcnMgLyBlbXBsb3llZXMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCd1c2VybmFtZScsICdVc2VybmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2VtYWlsJywgJ0VtYWlsJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZmlyc3ROYW1lJywgJ0ZpcnN0IE5hbWUnKSxcbiAgICAgIHN0cignbGFzdE5hbWUnLCAnTGFzdCBOYW1lJyksXG4gICAgICBzdHIoJ2Z1bGxOYW1lJywgJ0Z1bGwgTmFtZScsIHsgZWRpdGFibGU6IGZhbHNlIH0pLFxuICAgICAgc3RyKCdwaG9uZScsICdQaG9uZScpLFxuICAgICAgc3RyKCdwb3NpdGlvbicsICdQb3NpdGlvbicpLFxuICAgICAgYm9vbCgnY29uZmlybWVkJywgJ0NvbmZpcm1lZCcpLFxuICAgICAgYm9vbCgnYmxvY2tlZCcsICdCbG9ja2VkJyksXG4gICAgICBib29sKCdpc0FjdGl2ZScsICdBY3RpdmUnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdzdXBwbGllcnMnLCBuYW1lOiAnU3VwcGxpZXJzJywgbW9kdWxlOiAnQ09SRScsXG4gICAgZGVzY3JpcHRpb246ICdFeHRlcm5hbCBzdXBwbGllcnMgLyB2ZW5kb3JzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignY29udGFjdE5hbWUnLCAnQ29udGFjdCBOYW1lJyksXG4gICAgICBzdHIoJ2VtYWlsJywgJ0VtYWlsJyksXG4gICAgICBzdHIoJ3Bob25lJywgJ1Bob25lJyksXG4gICAgICBzdHIoJ2FkZHJlc3MnLCAnQWRkcmVzcycpLFxuICAgICAgc3RyKCd3ZWJzaXRlJywgJ1dlYnNpdGUnKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBNQUlOVEVOQU5DRSDilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcblxuICB7XG4gICAga2V5OiAnaW50ZXJ2ZW50aW9ucycsIG5hbWU6ICdJbnRlcnZlbnRpb25zJywgbW9kdWxlOiAnTUFJTlRFTkFOQ0UnLFxuICAgIGRlc2NyaXB0aW9uOiAnTWFpbnRlbmFuY2UgaW50ZXJ2ZW50aW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ251bWJlcicsICdOdW1iZXInKSxcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIGVubSgncmVhc29uJywgJ1JlYXNvbicsIFJFQVNPTlNfSU5URVJWRU5USU9OKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIG51bSgnY29tcG9uZW50SWQnLCAnQ29tcG9uZW50IElEJyksXG4gICAgICBkYXRlKCdzdGFydERhdGUnLCAnU3RhcnQgRGF0ZScpLFxuICAgICAgZGF0ZSgnZW5kRGF0ZScsICdFbmQgRGF0ZScpLFxuICAgICAgbnVtKCdkdXJhdGlvbicsICdEdXJhdGlvbiAoaHJzKScpLFxuICAgICAgc3RyKCdub3RlcycsICdOb3RlcycpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2ludGVydmVudGlvbi1yZXF1ZXN0cycsIG5hbWU6ICdJbnRlcnZlbnRpb24gUmVxdWVzdHMnLCBtb2R1bGU6ICdNQUlOVEVOQU5DRScsXG4gICAgZGVzY3JpcHRpb246ICdSZXF1ZXN0cyBmb3IgbWFpbnRlbmFuY2UgaW50ZXJ2ZW50aW9uJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbnVtYmVyJywgJ051bWJlcicpLFxuICAgICAgc3RyKCd0aXRsZScsICdUaXRsZScpLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgbnVtKCd1bml0SWQnLCAnVW5pdCBJRCcpLFxuICAgICAgbnVtKCdjb21wb25lbnRJZCcsICdDb21wb25lbnQgSUQnKSxcbiAgICAgIG51bSgncmVxdWVzdGVkQnlJZCcsICdSZXF1ZXN0ZWQgQnkgSUQnKSxcbiAgICAgIHN0cigncHJpb3JpdHknLCAnUHJpb3JpdHknKSxcbiAgICAgIHN0cignc3RhdHVzJywgJ1N0YXR1cycpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2ZhaWx1cmVzJywgbmFtZTogJ0ZhaWx1cmVzJywgbW9kdWxlOiAnTUFJTlRFTkFOQ0UnLFxuICAgIGRlc2NyaXB0aW9uOiAnRXF1aXBtZW50IGZhaWx1cmVzIGFuZCBpbmNpZGVudHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCdudW1iZXInLCAnTnVtYmVyJyksXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBlbm0oJ25hdHVyZScsICdOYXR1cmUnLCBFVkVOVF9OQVRVUkVTKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIG51bSgnY29tcG9uZW50SWQnLCAnQ29tcG9uZW50IElEJyksXG4gICAgICBkYXRlKCdmYWlsdXJlRGF0ZScsICdGYWlsdXJlIERhdGUnKSxcbiAgICAgIGRhdGUoJ3Jlc29sdXRpb25EYXRlJywgJ1Jlc29sdXRpb24gRGF0ZScpLFxuICAgICAgc3RyKCdpbXBhY3QnLCAnSW1wYWN0JyksXG4gICAgICBzdHIoJ3Jvb3RDYXVzZScsICdSb290IENhdXNlJyksXG4gICAgKSxcbiAgfSxcblxuICAvLyDilIHilIHilIEgSU5TUEVDVElPTlMg4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5cbiAge1xuICAgIGtleTogJ2luc3BlY3Rpb25zJywgbmFtZTogJ0luc3BlY3Rpb25zJywgbW9kdWxlOiAnSU5TUEVDVElPTlMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRXF1aXBtZW50IGFuZCBzaXRlIGluc3BlY3Rpb25zJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbnVtYmVyJywgJ051bWJlcicpLFxuICAgICAgc3RyKCd0aXRsZScsICdUaXRsZScpLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgZW5tKCd0eXBlJywgJ1R5cGUnLCBJTlNQRUNUSU9OX1RZUEVTKSxcbiAgICAgIGVubSgnbGV2ZWwnLCAnTGV2ZWwnLCBJTlNQRUNUSU9OX0xFVkVMUyksXG4gICAgICBlbm0oJ25hdHVyZScsICdOYXR1cmUnLCBJTlNQRUNUSU9OX05BVFVSRVMpLFxuICAgICAgZW5tKCdyZWFzb24nLCAnUmVhc29uJywgUkVBU09OU19JTlNQRUNUSU9OKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIG51bSgnY29tcG9uZW50SWQnLCAnQ29tcG9uZW50IElEJyksXG4gICAgICBudW0oJ2luc3BlY3RvcklkJywgJ0luc3BlY3RvciBJRCcpLFxuICAgICAgbnVtKCdsb2NhdGlvbklkJywgJ0xvY2F0aW9uIElEJyksXG4gICAgICBkYXRlKCdpbnNwZWN0aW9uRGF0ZScsICdJbnNwZWN0aW9uIERhdGUnKSxcbiAgICAgIGRhdGUoJ25leHRJbnNwZWN0aW9uRGF0ZScsICdOZXh0IEluc3BlY3Rpb24gRGF0ZScpLFxuICAgICAgc3RyKCdyZXN1bHQnLCAnUmVzdWx0JyksXG4gICAgICBzdHIoJ3JlY29tbWVuZGF0aW9ucycsICdSZWNvbW1lbmRhdGlvbnMnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdtYWludGVuYW5jZS1yZWNvcmRzJywgbmFtZTogJ01haW50ZW5hbmNlIFJlY29yZHMnLCBtb2R1bGU6ICdNQUlOVEVOQU5DRScsXG4gICAgZGVzY3JpcHRpb246ICdVbmlmaWVkIG1haW50ZW5hbmNlIHJlY29yZHMgKGluc3BlY3Rpb25zICsgaW50ZXJ2ZW50aW9ucyknLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgZW5tKCdyZWNvcmRUeXBlJywgJ1JlY29yZCBUeXBlJywgWydJTlNQRUNUSU9OJywgJ0lOVEVSVkVOVElPTiddKSxcbiAgICAgIHN0cigncmVwb3J0TnVtYmVyJywgJ1JlcG9ydCBOdW1iZXInKSxcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnKSxcbiAgICAgIGVubSgnc3RhdHVzJywgJ1N0YXR1cycsIFdPX1NUQVRVU0VTKSxcbiAgICAgIGVubSgncHJpb3JpdHknLCAnUHJpb3JpdHknLCBQUklPUklUSUVTKSxcbiAgICAgIHN0cignbWFpbnRlbmFuY2VUeXBlJywgJ01haW50ZW5hbmNlIFR5cGUnKSxcbiAgICAgIGRhdGUoJ3BsYW5uZWREYXRlJywgJ1BsYW5uZWQgRGF0ZScpLFxuICAgICAgZGF0ZSgnc3RhcnREYXRlJywgJ1N0YXJ0IERhdGUnKSxcbiAgICAgIGRhdGUoJ3NjaGVkdWxlRGF0ZScsICdTY2hlZHVsZSBEYXRlJyksXG4gICAgICBzdHIoJ2Nvc3RBbGxvY2F0aW9uJywgJ0Nvc3QgQWxsb2NhdGlvbicpLFxuICAgICAgc3RyKCdhY3Rpb25QbGFuJywgJ0FjdGlvbiBQbGFuJyksXG4gICAgICBzdHIoJ2NvbW1lbnRzJywgJ0NvbW1lbnRzJyksXG4gICAgICBzdHIoJ3JlY29tbWVuZGF0aW9ucycsICdSZWNvbW1lbmRhdGlvbnMnKSxcbiAgICAgIHN0cignaW5zcGVjdGlvblR5cGUnLCAnSW5zcGVjdGlvbiBUeXBlJyksXG4gICAgICBzdHIoJ2luc3BlY3Rpb25OYXR1cmUnLCAnSW5zcGVjdGlvbiBOYXR1cmUnKSxcbiAgICAgIHN0cignaW5zcGVjdGlvbkxldmVsJywgJ0luc3BlY3Rpb24gTGV2ZWwnKSxcbiAgICAgIHN0cigncmVhc29uRm9ySW5zcGVjdGlvbicsICdSZWFzb24gZm9yIEluc3BlY3Rpb24nKSxcbiAgICAgIHN0cigncmVhc29uRm9ySW50ZXJ2ZW50aW9uJywgJ1JlYXNvbiBmb3IgSW50ZXJ2ZW50aW9uJyksXG4gICAgICBzdHIoJ2V2ZW50TmF0dXJlJywgJ0V2ZW50IE5hdHVyZScpLFxuICAgICAgYm9vbCgnaW1tZWRpYXRlJywgJ0ltbWVkaWF0ZScpLFxuICAgICAganNvbignY3VzdG9tRmllbGRzJywgJ0N1c3RvbSBGaWVsZHMnKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBNQVRFUklBTFMg4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5cbiAge1xuICAgIGtleTogJ21hdGVyaWFsLWl0ZW1zJywgbmFtZTogJ01hdGVyaWFsIEl0ZW1zJywgbW9kdWxlOiAnTUFURVJJQUxTJyxcbiAgICBkZXNjcmlwdGlvbjogJ0ludmVudG9yeSBpdGVtcyBmb3IgbWFpbnRlbmFuY2UnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb2RlJywgJ0NvZGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIG51bSgnY2F0ZWdvcnlJZCcsICdDYXRlZ29yeSBJRCcpLFxuICAgICAgbnVtKCdxdWFudGl0eScsICdRdWFudGl0eScpLFxuICAgICAgbnVtKCdtaW5pbXVtUXVhbnRpdHknLCAnTWluIFF1YW50aXR5JyksXG4gICAgICBudW0oJ3Jlb3JkZXJQb2ludCcsICdSZW9yZGVyIFBvaW50JyksXG4gICAgICBudW0oJ21heFF1YW50aXR5JywgJ01heCBRdWFudGl0eScpLFxuICAgICAgbnVtKCd1bml0Q29zdCcsICdVbml0IENvc3QnKSxcbiAgICAgIHN0cignbG9jYXRpb24nLCAnTG9jYXRpb24nKSxcbiAgICAgIG51bSgnc3VwcGxpZXJJZCcsICdTdXBwbGllciBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ21hdGVyaWFsLWNvbnN1bWFibGVzJywgbmFtZTogJ0NvbnN1bWFibGVzJywgbW9kdWxlOiAnTUFURVJJQUxTJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbnN1bWFibGUgbWF0ZXJpYWxzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignY29kZScsICdDb2RlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBudW0oJ2NhdGVnb3J5SWQnLCAnQ2F0ZWdvcnkgSUQnKSxcbiAgICAgIG51bSgncXVhbnRpdHknLCAnUXVhbnRpdHknKSxcbiAgICAgIG51bSgndW5pdENvc3QnLCAnVW5pdCBDb3N0JyksXG4gICAgICBudW0oJ3N1cHBsaWVySWQnLCAnU3VwcGxpZXIgSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdtYXRlcmlhbC1pbnN0cnVtZW50cycsIG5hbWU6ICdJbnN0cnVtZW50cycsIG1vZHVsZTogJ01BVEVSSUFMUycsXG4gICAgZGVzY3JpcHRpb246ICdNZWFzdXJpbmcgaW5zdHJ1bWVudHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb2RlJywgJ0NvZGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIHN0cignc2VyaWFsTnVtYmVyJywgJ1NlcmlhbCBOdW1iZXInKSxcbiAgICAgIGRhdGUoJ2NhbGlicmF0aW9uRGF0ZScsICdDYWxpYnJhdGlvbiBEYXRlJyksXG4gICAgICBkYXRlKCduZXh0Q2FsaWJyYXRpb25EYXRlJywgJ05leHQgQ2FsaWJyYXRpb24nKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdtYXRlcmlhbC10b29saW5nJywgbmFtZTogJ1Rvb2xpbmcnLCBtb2R1bGU6ICdNQVRFUklBTFMnLFxuICAgIGRlc2NyaXB0aW9uOiAnTWFpbnRlbmFuY2UgdG9vbHMgYW5kIHRvb2xpbmcnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb2RlJywgJ0NvZGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIHN0cignY29uZGl0aW9uJywgJ0NvbmRpdGlvbicpLFxuICAgICAgc3RyKCdsb2NhdGlvbicsICdMb2NhdGlvbicpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ3NwYXJlLXBhcnRzJywgbmFtZTogJ1NwYXJlIFBhcnRzJywgbW9kdWxlOiAnTUFURVJJQUxTJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NwYXJlIHBhcnRzIGxpbmtlZCB0byBjb21wb25lbnRzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignY29kZScsICdDb2RlJyksXG4gICAgICBudW0oJ2NvbXBvbmVudElkJywgJ0NvbXBvbmVudCBJRCcpLFxuICAgICAgbnVtKCdtYXRlcmlhbEl0ZW1JZCcsICdNYXRlcmlhbCBJdGVtIElEJyksXG4gICAgICBudW0oJ3F1YW50aXR5JywgJ1F1YW50aXR5JyksXG4gICAgKSxcbiAgfSxcblxuICAvLyDilIHilIHilIEgRkxFRVQg4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5cbiAge1xuICAgIGtleTogJ3ZlaGljbGVzJywgbmFtZTogJ1ZlaGljbGVzJywgbW9kdWxlOiAnRkxFRVQnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmxlZXQgdmVoaWNsZXMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdwbGF0ZU51bWJlcicsICdQbGF0ZSBOdW1iZXInKSxcbiAgICAgIHN0cigndmluJywgJ1ZJTicpLFxuICAgICAgZW5tKCd0eXBlJywgJ1R5cGUnLCBWRUhJQ0xFX1RZUEVTKSxcbiAgICAgIGVubSgnc3RhdHVzJywgJ1N0YXR1cycsIFZFSElDTEVfU1RBVFVTRVMpLFxuICAgICAgc3RyKCdtYWtlJywgJ01ha2UnKSxcbiAgICAgIHN0cignbW9kZWwnLCAnTW9kZWwnKSxcbiAgICAgIG51bSgneWVhcicsICdZZWFyJyksXG4gICAgICBlbm0oJ2Z1ZWxUeXBlJywgJ0Z1ZWwgVHlwZScsIEZVRUxfVFlQRVMpLFxuICAgICAgbnVtKCdjdXJyZW50TWlsZWFnZScsICdNaWxlYWdlJyksXG4gICAgICBudW0oJ2NvbXBhbnlJZCcsICdDb21wYW55IElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnZHJpdmVycycsIG5hbWU6ICdEcml2ZXJzJywgbW9kdWxlOiAnRkxFRVQnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmxlZXQgZHJpdmVycycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBudW0oJ3VzZXJJZCcsICdVc2VyIElEJyksXG4gICAgICBzdHIoJ2xpY2Vuc2VOdW1iZXInLCAnTGljZW5zZSBOdW1iZXInKSxcbiAgICAgIGRhdGUoJ2xpY2Vuc2VFeHBpcnknLCAnTGljZW5zZSBFeHBpcnknKSxcbiAgICAgIGVubSgnc3RhdHVzJywgJ1N0YXR1cycsIERSSVZFUl9TVEFUVVNFUyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAndmVoaWNsZS10cmlwcycsIG5hbWU6ICdWZWhpY2xlIFRyaXBzJywgbW9kdWxlOiAnRkxFRVQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVmVoaWNsZSB0cmlwIHJlY29yZHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgbnVtKCd2ZWhpY2xlSWQnLCAnVmVoaWNsZSBJRCcpLFxuICAgICAgbnVtKCdkcml2ZXJJZCcsICdEcml2ZXIgSUQnKSxcbiAgICAgIGVubSgnc3RhdHVzJywgJ1N0YXR1cycsIFRSSVBfU1RBVFVTRVMpLFxuICAgICAgc3RyKCdzdGFydExvY2F0aW9uJywgJ1N0YXJ0IExvY2F0aW9uJyksXG4gICAgICBzdHIoJ2VuZExvY2F0aW9uJywgJ0VuZCBMb2NhdGlvbicpLFxuICAgICAgbnVtKCdzdGFydE1pbGVhZ2UnLCAnU3RhcnQgTWlsZWFnZScpLFxuICAgICAgbnVtKCdlbmRNaWxlYWdlJywgJ0VuZCBNaWxlYWdlJyksXG4gICAgICBkYXRlKCdzdGFydFRpbWUnLCAnU3RhcnQgVGltZScpLFxuICAgICAgZGF0ZSgnZW5kVGltZScsICdFbmQgVGltZScpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2Z1ZWwtcmVjb3JkcycsIG5hbWU6ICdGdWVsIFJlY29yZHMnLCBtb2R1bGU6ICdGTEVFVCcsXG4gICAgZGVzY3JpcHRpb246ICdGdWVsIGNvbnN1bXB0aW9uIHJlY29yZHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgbnVtKCd2ZWhpY2xlSWQnLCAnVmVoaWNsZSBJRCcpLFxuICAgICAgZW5tKCdmdWVsVHlwZScsICdGdWVsIFR5cGUnLCBGVUVMX1RZUEVTKSxcbiAgICAgIG51bSgncXVhbnRpdHknLCAnUXVhbnRpdHknKSxcbiAgICAgIG51bSgnY29zdCcsICdDb3N0JyksXG4gICAgICBudW0oJ21pbGVhZ2UnLCAnTWlsZWFnZScpLFxuICAgICAgZGF0ZSgnZnVlbERhdGUnLCAnRnVlbCBEYXRlJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnZ2VvZmVuY2VzJywgbmFtZTogJ0dlb2ZlbmNlcycsIG1vZHVsZTogJ0ZMRUVUJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dlb2dyYXBoaWMgYm91bmRhcnkgZGVmaW5pdGlvbnMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgbnVtKCdjb21wYW55SWQnLCAnQ29tcGFueSBJRCcpLFxuICAgICAgZW5tKCdnZW9mZW5jZVR5cGUnLCAnR2VvZmVuY2UgVHlwZScsIEdFT0ZFTkNFX1RZUEVTKSxcbiAgICAgIG51bSgnY2VudGVyTGF0aXR1ZGUnLCAnQ2VudGVyIExhdCcpLFxuICAgICAgbnVtKCdjZW50ZXJMb25naXR1ZGUnLCAnQ2VudGVyIExuZycpLFxuICAgICAgbnVtKCdyYWRpdXMnLCAnUmFkaXVzJyksXG4gICAgICBib29sKCdhbGVydE9uRW50ZXInLCAnQWxlcnQgb24gRW50ZXInKSxcbiAgICAgIGJvb2woJ2FsZXJ0T25FeGl0JywgJ0FsZXJ0IG9uIEV4aXQnKSxcbiAgICAgIGJvb2woJ2lzQWN0aXZlJywgJ0FjdGl2ZScpLFxuICAgICksXG4gIH0sXG5cbiAgLy8g4pSB4pSB4pSBIFBST0pFQ1RTIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICdwcm9qZWN0cycsIG5hbWU6ICdQcm9qZWN0cycsIG1vZHVsZTogJ1BST0pFQ1RTJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Byb2plY3QgbWFuYWdlbWVudCcsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2NvZGUnLCAnQ29kZScpLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgc3RyKCdzdGF0dXMnLCAnU3RhdHVzJyksXG4gICAgICBkYXRlKCdzdGFydERhdGUnLCAnU3RhcnQgRGF0ZScpLFxuICAgICAgZGF0ZSgnZW5kRGF0ZScsICdFbmQgRGF0ZScpLFxuICAgICAgbnVtKCdidWRnZXQnLCAnQnVkZ2V0JyksXG4gICAgICBudW0oJ21hbmFnZXJJZCcsICdNYW5hZ2VyIElEJyksXG4gICAgICBudW0oJ2NvbXBhbnlJZCcsICdDb21wYW55IElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnY2FwZXgtcHJvamVjdHMnLCBuYW1lOiAnQ0FQRVggUHJvamVjdHMnLCBtb2R1bGU6ICdQUk9KRUNUUycsXG4gICAgZGVzY3JpcHRpb246ICdDYXBpdGFsIGV4cGVuZGl0dXJlIHByb2plY3RzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignY29kZScsICdDb2RlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBzdHIoJ3N0YXR1cycsICdTdGF0dXMnKSxcbiAgICAgIG51bSgnYnVkZ2V0JywgJ0J1ZGdldCcpLFxuICAgICAgbnVtKCdhY3R1YWxDb3N0JywgJ0FjdHVhbCBDb3N0JyksXG4gICAgICBkYXRlKCdzdGFydERhdGUnLCAnU3RhcnQgRGF0ZScpLFxuICAgICAgZGF0ZSgnZW5kRGF0ZScsICdFbmQgRGF0ZScpLFxuICAgICAgbnVtKCdjb21wYW55SWQnLCAnQ29tcGFueSBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2J1ZGdldHMnLCBuYW1lOiAnQnVkZ2V0cycsIG1vZHVsZTogJ1BST0pFQ1RTJyxcbiAgICBkZXNjcmlwdGlvbjogJ0J1ZGdldCBhbGxvY2F0aW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBudW0oJ3llYXInLCAnWWVhcicpLFxuICAgICAgbnVtKCdhbW91bnQnLCAnQW1vdW50JyksXG4gICAgICBudW0oJ3NwZW50JywgJ1NwZW50JyksXG4gICAgICBudW0oJ3JlbWFpbmluZycsICdSZW1haW5pbmcnKSxcbiAgICAgIG51bSgnZGVwYXJ0bWVudElkJywgJ0RlcGFydG1lbnQgSUQnKSxcbiAgICAgIG51bSgnY2F0ZWdvcnlJZCcsICdDYXRlZ29yeSBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2JpZHMnLCBuYW1lOiAnQmlkcycsIG1vZHVsZTogJ1BST0pFQ1RTJyxcbiAgICBkZXNjcmlwdGlvbjogJ1ZlbmRvciBiaWRzIGZvciBwcm9qZWN0cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBzdHIoJ3ZlbmRvck5hbWUnLCAnVmVuZG9yJyksXG4gICAgICBudW0oJ2Ftb3VudCcsICdBbW91bnQnKSxcbiAgICAgIHN0cignc3RhdHVzJywgJ1N0YXR1cycpLFxuICAgICAgZGF0ZSgnc3VibWl0dGVkRGF0ZScsICdTdWJtaXR0ZWQgRGF0ZScpLFxuICAgICAgbnVtKCdwcm9qZWN0SWQnLCAnUHJvamVjdCBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAgLy8g4pSB4pSB4pSBIERPQ1VNRU5UUyDilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIHilIFcblxuICB7XG4gICAga2V5OiAnZmlsZXMnLCBuYW1lOiAnRmlsZXMnLCBtb2R1bGU6ICdET0NVTUVOVFMnLFxuICAgIGRlc2NyaXB0aW9uOiAnVXBsb2FkZWQgZmlsZXMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgbnVtKCdmb2xkZXJJZCcsICdGb2xkZXIgSUQnKSxcbiAgICAgIG51bSgnc2l6ZScsICdTaXplIChieXRlcyknKSxcbiAgICAgIHN0cignbWltZVR5cGUnLCAnTUlNRSBUeXBlJyksXG4gICAgICBzdHIoJ3VybCcsICdVUkwnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdmb2xkZXJzJywgbmFtZTogJ0ZvbGRlcnMnLCBtb2R1bGU6ICdET0NVTUVOVFMnLFxuICAgIGRlc2NyaXB0aW9uOiAnRmlsZSBzeXN0ZW0gZm9sZGVycycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBudW0oJ3BhcmVudElkJywgJ1BhcmVudCBGb2xkZXIgSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdkcmF3aW5ncycsIG5hbWU6ICdEcmF3aW5ncycsIG1vZHVsZTogJ0RPQ1VNRU5UUycsXG4gICAgZGVzY3JpcHRpb246ICdFbmdpbmVlcmluZyBkcmF3aW5ncycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ251bWJlcicsICdOdW1iZXInKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIG51bSgnY2F0ZWdvcnlJZCcsICdDYXRlZ29yeSBJRCcpLFxuICAgICAgbnVtKCd1bml0SWQnLCAnVW5pdCBJRCcpLFxuICAgICAgbnVtKCdjb21wb25lbnRJZCcsICdDb21wb25lbnQgSUQnKSxcbiAgICAgIHN0cigncmV2aXNpb24nLCAnUmV2aXNpb24nKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBDT01QTElBTkNFIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICdjb21wbGlhbmNlLW9ibGlnYXRpb25zJywgbmFtZTogJ0NvbXBsaWFuY2UgT2JsaWdhdGlvbnMnLCBtb2R1bGU6ICdDT01QTElBTkNFJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JlZ3VsYXRvcnkgb2JsaWdhdGlvbnMgYW5kIHJlcXVpcmVtZW50cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIGVubSgnb2JsaWdhdGlvblR5cGUnLCAnT2JsaWdhdGlvbiBUeXBlJywgT0JMSUdBVElPTl9UWVBFUyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBPQkxJR0FUSU9OX1NUQVRVU0VTKSxcbiAgICAgIG51bSgncGVybWl0SWQnLCAnUGVybWl0IElEJyksXG4gICAgICBudW0oJ3Jlc3BvbnNpYmxlVXNlcklkJywgJ1Jlc3BvbnNpYmxlIFVzZXIgSUQnKSxcbiAgICAgIHN0cigncmVxdWlyZW1lbnRzJywgJ1JlcXVpcmVtZW50cycpLFxuICAgICAgZGF0ZSgnbmV4dER1ZURhdGUnLCAnTmV4dCBEdWUgRGF0ZScpLFxuICAgICAgZGF0ZSgnbGFzdENvbXBsZXRlZERhdGUnLCAnTGFzdCBDb21wbGV0ZWQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdjb21wbGlhbmNlLXN1Ym1pc3Npb25zJywgbmFtZTogJ0NvbXBsaWFuY2UgU3VibWlzc2lvbnMnLCBtb2R1bGU6ICdDT01QTElBTkNFJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JlZ3VsYXRvcnkgY29tcGxpYW5jZSBzdWJtaXNzaW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3N1Ym1pc3Npb25SZWZlcmVuY2UnLCAnUmVmZXJlbmNlJyksXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIG51bSgnb2JsaWdhdGlvbklkJywgJ09ibGlnYXRpb24gSUQnKSxcbiAgICAgIGVubSgnc3RhdHVzJywgJ1N0YXR1cycsIFNVQk1JU1NJT05fU1RBVFVTRVMpLFxuICAgICAgZGF0ZSgncGVyaW9kU3RhcnQnLCAnUGVyaW9kIFN0YXJ0JyksXG4gICAgICBkYXRlKCdwZXJpb2RFbmQnLCAnUGVyaW9kIEVuZCcpLFxuICAgICAgZGF0ZSgnc3VibWl0dGVkRGF0ZScsICdTdWJtaXR0ZWQgRGF0ZScpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2Vudmlyb25tZW50YWwtcGVybWl0cycsIG5hbWU6ICdFbnZpcm9ubWVudGFsIFBlcm1pdHMnLCBtb2R1bGU6ICdDT01QTElBTkNFJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Vudmlyb25tZW50YWwgcGVybWl0cyBhbmQgbGljZW5zZXMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCdwZXJtaXROdW1iZXInLCAnUGVybWl0IE51bWJlcicsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIGVubSgncGVybWl0VHlwZScsICdQZXJtaXQgVHlwZScsIFBFUk1JVF9UWVBFUyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBQRVJNSVRfU1RBVFVTRVMpLFxuICAgICAgc3RyKCdpc3N1aW5nQXV0aG9yaXR5JywgJ0lzc3VpbmcgQXV0aG9yaXR5JyksXG4gICAgICBudW0oJ3VuaXRJZCcsICdVbml0IElEJyksXG4gICAgICBudW0oJ2xvY2F0aW9uSWQnLCAnTG9jYXRpb24gSUQnKSxcbiAgICAgIGRhdGUoJ2lzc3VlRGF0ZScsICdJc3N1ZSBEYXRlJyksXG4gICAgICBkYXRlKCdleHBpcnlEYXRlJywgJ0V4cGlyeSBEYXRlJyksXG4gICAgICBkYXRlKCdyZW5ld2FsRGF0ZScsICdSZW5ld2FsIERhdGUnKSxcbiAgICAgIG51bSgncGVybWl0RmVlJywgJ1Blcm1pdCBGZWUnKSxcbiAgICAgIG51bSgnYW5udWFsRmVlJywgJ0FubnVhbCBGZWUnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdjZXJ0aWZpY2F0aW9ucycsIG5hbWU6ICdDZXJ0aWZpY2F0aW9ucycsIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxuICAgIGRlc2NyaXB0aW9uOiAnSW5kdXN0cnkgY2VydGlmaWNhdGlvbnMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgc3RyKCdjZXJ0aWZpY2F0aW9uQm9keScsICdDZXJ0aWZpY2F0aW9uIEJvZHknKSxcbiAgICAgIGRhdGUoJ2NlcnRpZmljYXRpb25EYXRlJywgJ0NlcnRpZmljYXRpb24gRGF0ZScpLFxuICAgICAgZGF0ZSgnZXhwaXJ5RGF0ZScsICdFeHBpcnkgRGF0ZScpLFxuICAgICAgc3RyKCdzdGF0dXMnLCAnU3RhdHVzJyksXG4gICAgKSxcbiAgfSxcblxuICAvLyDilIHilIHilIEgRU5FUkdZIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICdhbmNpbGxhcnktc2VydmljZXMnLCBuYW1lOiAnQW5jaWxsYXJ5IFNlcnZpY2VzJywgbW9kdWxlOiAnRU5FUkdZJyxcbiAgICBkZXNjcmlwdGlvbjogJ0dyaWQgYW5jaWxsYXJ5IHNlcnZpY2VzIGNvbnRyYWN0cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3NlcnZpY2VOYW1lJywgJ1NlcnZpY2UgTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBlbm0oJ3NlcnZpY2VUeXBlJywgJ1NlcnZpY2UgVHlwZScsIEFOQ0lMTEFSWV9UWVBFUyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBBTkNJTExBUllfU1RBVFVTRVMpLFxuICAgICAgc3RyKCdjb250cmFjdE51bWJlcicsICdDb250cmFjdCBOdW1iZXInKSxcbiAgICAgIHN0cignZ3JpZE9wZXJhdG9yJywgJ0dyaWQgT3BlcmF0b3InKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIGRhdGUoJ3N0YXJ0RGF0ZScsICdTdGFydCBEYXRlJyksXG4gICAgICBkYXRlKCdlbmREYXRlJywgJ0VuZCBEYXRlJyksXG4gICAgICBudW0oJ2NvbW1pdHRlZENhcGFjaXR5TXcnLCAnQ29tbWl0dGVkIE1XJyksXG4gICAgICBudW0oJ3JhdGVQZXJNdycsICdSYXRlIC8gTVcnKSxcbiAgICAgIG51bSgnbW9udGhseVJldmVudWUnLCAnTW9udGhseSBSZXZlbnVlJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnZ3JpZC1jb25uZWN0aW9ucycsIG5hbWU6ICdHcmlkIENvbm5lY3Rpb25zJywgbW9kdWxlOiAnRU5FUkdZJyxcbiAgICBkZXNjcmlwdGlvbjogJ0VsZWN0cmljYWwgZ3JpZCBpbnRlcmNvbm5lY3Rpb25zJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignY29ubmVjdGlvbk5hbWUnLCAnTmFtZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBHUklEX1NUQVRVU0VTKSxcbiAgICAgIHN0cignZ3JpZE9wZXJhdG9yJywgJ0dyaWQgT3BlcmF0b3InKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIG51bSgndm9sdGFnZUxldmVsS3YnLCAnVm9sdGFnZSAoa1YpJyksXG4gICAgICBudW0oJ21heEV4cG9ydENhcGFjaXR5TXcnLCAnTWF4IEV4cG9ydCBNVycpLFxuICAgICAgbnVtKCdtYXhJbXBvcnRDYXBhY2l0eU13JywgJ01heCBJbXBvcnQgTVcnKSxcbiAgICAgIGRhdGUoJ2Nvbm5lY3Rpb25EYXRlJywgJ0Nvbm5lY3Rpb24gRGF0ZScpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2N1cnRhaWxtZW50LWV2ZW50cycsIG5hbWU6ICdDdXJ0YWlsbWVudCBFdmVudHMnLCBtb2R1bGU6ICdFTkVSR1knLFxuICAgIGRlc2NyaXB0aW9uOiAnUG93ZXIgZ2VuZXJhdGlvbiBjdXJ0YWlsbWVudCBldmVudHMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCdldmVudE51bWJlcicsICdFdmVudCBOdW1iZXInKSxcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgZW5tKCdjdXJ0YWlsbWVudFR5cGUnLCAnVHlwZScsIENVUlRBSUxNRU5UX1RZUEVTKSxcbiAgICAgIGVubSgnc3RhdHVzJywgJ1N0YXR1cycsIENVUlRBSUxNRU5UX1NUQVRVU0VTKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIGRhdGUoJ3N0YXJ0VGltZScsICdTdGFydCBUaW1lJyksXG4gICAgICBkYXRlKCdlbmRUaW1lJywgJ0VuZCBUaW1lJyksXG4gICAgICBudW0oJ2N1cnRhaWxlZENhcGFjaXR5TXcnLCAnQ3VydGFpbGVkIE1XJyksXG4gICAgICBudW0oJ2xvc3RSZXZlbnVlJywgJ0xvc3QgUmV2ZW51ZScpLFxuICAgICksXG4gIH0sXG5cbiAgLy8g4pSB4pSB4pSBIFdBUlJBTlRZIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICd3YXJyYW50eS1jb250cmFjdHMnLCBuYW1lOiAnV2FycmFudHkgQ29udHJhY3RzJywgbW9kdWxlOiAnV0FSUkFOVFknLFxuICAgIGRlc2NyaXB0aW9uOiAnRXF1aXBtZW50IHdhcnJhbnR5IGNvbnRyYWN0cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ2NvbnRyYWN0TnVtYmVyJywgJ0NvbnRyYWN0IE51bWJlcicsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIGVubSgnd2FycmFudHlUeXBlJywgJ1R5cGUnLCBXQVJSQU5UWV9UWVBFUyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBXQVJSQU5UWV9TVEFUVVNFUyksXG4gICAgICBzdHIoJ3Byb3ZpZGVyTmFtZScsICdQcm92aWRlcicpLFxuICAgICAgc3RyKCdwcm92aWRlckVtYWlsJywgJ1Byb3ZpZGVyIEVtYWlsJyksXG4gICAgICBkYXRlKCdzdGFydERhdGUnLCAnU3RhcnQgRGF0ZScpLFxuICAgICAgZGF0ZSgnZW5kRGF0ZScsICdFbmQgRGF0ZScpLFxuICAgICAgbnVtKCdtYXhDbGFpbUFtb3VudCcsICdNYXggQ2xhaW0nKSxcbiAgICAgIG51bSgnY29udHJhY3RDb3N0JywgJ0NvbnRyYWN0IENvc3QnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICd3YXJyYW50eS1jbGFpbXMnLCBuYW1lOiAnV2FycmFudHkgQ2xhaW1zJywgbW9kdWxlOiAnV0FSUkFOVFknLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2xhaW1zIGFnYWluc3Qgd2FycmFudHkgY29udHJhY3RzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignY2xhaW1OdW1iZXInLCAnQ2xhaW0gTnVtYmVyJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgZW5tKCdzdGF0dXMnLCAnU3RhdHVzJywgV0FSUkFOVFlfQ0xBSU1fU1RBVFVTRVMpLFxuICAgICAgbnVtKCd3YXJyYW50eUNvbnRyYWN0SWQnLCAnQ29udHJhY3QgSUQnKSxcbiAgICAgIG51bSgndW5pdElkJywgJ1VuaXQgSUQnKSxcbiAgICAgIG51bSgnY2xhaW1lZEFtb3VudCcsICdDbGFpbWVkJyksXG4gICAgICBudW0oJ2FwcHJvdmVkQW1vdW50JywgJ0FwcHJvdmVkJyksXG4gICAgICBudW0oJ3BhaWRBbW91bnQnLCAnUGFpZCcpLFxuICAgICAgZGF0ZSgnaW5jaWRlbnREYXRlJywgJ0luY2lkZW50IERhdGUnKSxcbiAgICAgIGRhdGUoJ3N1Ym1pdHRlZERhdGUnLCAnU3VibWl0dGVkIERhdGUnKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBSRVNFUlZPSVIg4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5cbiAge1xuICAgIGtleTogJ2dhdGUtc3lzdGVtcycsIG5hbWU6ICdHYXRlIFN5c3RlbXMnLCBtb2R1bGU6ICdSRVNFUlZPSVInLFxuICAgIGRlc2NyaXB0aW9uOiAnRGFtIGdhdGUgY29udHJvbCBzeXN0ZW1zJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignZ2F0ZUlkJywgJ0dhdGUgSUQnKSxcbiAgICAgIGVubSgnZ2F0ZVR5cGUnLCAnR2F0ZSBUeXBlJywgR0FURV9UWVBFUyksXG4gICAgICBzdHIoJ25hbWUnLCAnTmFtZScpLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgc3RyKCdzdGF0dXMnLCAnU3RhdHVzJyksXG4gICAgICBqc29uKCdwaHlzaWNhbENoYXJhY3RlcmlzdGljcycsICdQaHlzaWNhbCBTcGVjcycpLFxuICAgICAganNvbignY29udHJvbFN5c3RlbScsICdDb250cm9sIFN5c3RlbScpLFxuICAgICAgbnVtKCdsb2NhdGlvbklkJywgJ0xvY2F0aW9uIElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnYWxlcnQtZGVmaW5pdGlvbnMnLCBuYW1lOiAnQWxlcnQgRGVmaW5pdGlvbnMnLCBtb2R1bGU6ICdSRVNFUlZPSVInLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVzZXJ2b2lyIGFsZXJ0IGNvbmZpZ3VyYXRpb25zJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBzdHIoJ2FsZXJ0Q2F0ZWdvcnknLCAnQ2F0ZWdvcnknKSxcbiAgICAgIHN0cignc2V2ZXJpdHlMZXZlbCcsICdTZXZlcml0eScpLFxuICAgICAgYm9vbCgnZW5hYmxlZCcsICdFbmFibGVkJyksXG4gICAgICBqc29uKCd0cmlnZ2VyQ29uZGl0aW9ucycsICdUcmlnZ2VyIENvbmRpdGlvbnMnKSxcbiAgICAgIGpzb24oJ25vdGlmaWNhdGlvblNldHRpbmdzJywgJ05vdGlmaWNhdGlvbnMnKSxcbiAgICAgIG51bSgnbG9jYXRpb25JZCcsICdMb2NhdGlvbiBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ21hbnVhbC1yZWFkaW5ncycsIG5hbWU6ICdNYW51YWwgUmVhZGluZ3MnLCBtb2R1bGU6ICdSRVNFUlZPSVInLFxuICAgIGRlc2NyaXB0aW9uOiAnTWFudWFsbHkgcmVjb3JkZWQgc2Vuc29yIHJlYWRpbmdzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIGRhdGUoJ3JlYWRpbmdEYXRlJywgJ1JlYWRpbmcgRGF0ZScpLFxuICAgICAgZW5tKCdyZWFkaW5nVHlwZScsICdSZWFkaW5nIFR5cGUnLCBSRUFESU5HX1RZUEVTKSxcbiAgICAgIHN0cignbG9jYXRpb24nLCAnTG9jYXRpb24nKSxcbiAgICAgIHN0cignZ2F1Z2VJZCcsICdHYXVnZSBJRCcpLFxuICAgICAgbnVtKCd2YWx1ZScsICdWYWx1ZScpLFxuICAgICAgc3RyKCd1bml0JywgJ1VuaXQnKSxcbiAgICAgIG51bSgnb3BlcmF0b3JJZCcsICdPcGVyYXRvciBJRCcpLFxuICAgICAgbnVtKCdsb2NhdGlvbklkJywgJ0xvY2F0aW9uIElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnbGFib3JhdG9yeS1yZXN1bHRzJywgbmFtZTogJ0xhYm9yYXRvcnkgUmVzdWx0cycsIG1vZHVsZTogJ1JFU0VSVk9JUicsXG4gICAgZGVzY3JpcHRpb246ICdXYXRlciBxdWFsaXR5IGxhYiByZXN1bHRzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIGVubSgnc2FtcGxlVHlwZScsICdTYW1wbGUgVHlwZScsIFNBTVBMRV9UWVBFUyksXG4gICAgICBkYXRlKCdzYW1wbGVEYXRlJywgJ1NhbXBsZSBEYXRlJyksXG4gICAgICBzdHIoJ3NhbXBsZUxvY2F0aW9uJywgJ1NhbXBsZSBMb2NhdGlvbicpLFxuICAgICAgc3RyKCdsYWJOYW1lJywgJ0xhYiBOYW1lJyksXG4gICAgICBzdHIoJ2xhYlJlcG9ydElkJywgJ1JlcG9ydCBJRCcpLFxuICAgICAganNvbigncGFyYW1ldGVycycsICdQYXJhbWV0ZXJzJyksXG4gICAgICBudW0oJ2xvY2F0aW9uSWQnLCAnTG9jYXRpb24gSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdmaXNoLW1vbml0b3JpbmcnLCBuYW1lOiAnRmlzaCBNb25pdG9yaW5nJywgbW9kdWxlOiAnUkVTRVJWT0lSJyxcbiAgICBkZXNjcmlwdGlvbjogJ0Zpc2ggcGFzc2FnZSBhbmQgcG9wdWxhdGlvbiBtb25pdG9yaW5nJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIGRhdGUoJ21vbml0b3JpbmdEYXRlJywgJ01vbml0b3JpbmcgRGF0ZScpLFxuICAgICAgc3RyKCdtb25pdG9yaW5nTG9jYXRpb24nLCAnTG9jYXRpb24nKSxcbiAgICAgIGpzb24oJ3NwZWNpZXNDb3VudHMnLCAnU3BlY2llcyBDb3VudHMnKSxcbiAgICAgIGpzb24oJ2Vudmlyb25tZW50YWxDb25kaXRpb25zJywgJ0Vudmlyb25tZW50YWwgQ29uZGl0aW9ucycpLFxuICAgICAgc3RyKCdub3RlcycsICdOb3RlcycpLFxuICAgICAgbnVtKCdsb2NhdGlvbklkJywgJ0xvY2F0aW9uIElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnYmF0aHltZXRyaWMtc3VydmV5cycsIG5hbWU6ICdCYXRoeW1ldHJpYyBTdXJ2ZXlzJywgbW9kdWxlOiAnUkVTRVJWT0lSJyxcbiAgICBkZXNjcmlwdGlvbjogJ1Jlc2Vydm9pciBiZWQgc3VydmV5cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBkYXRlKCdzdXJ2ZXlEYXRlJywgJ1N1cnZleSBEYXRlJyksXG4gICAgICBlbm0oJ3N1cnZleU1ldGhvZCcsICdNZXRob2QnLCBTVVJWRVlfTUVUSE9EUyksXG4gICAgICBudW0oJ2NvdmVyYWdlUGVyY2VudGFnZScsICdDb3ZlcmFnZSAlJyksXG4gICAgICBudW0oJ3RvdGFsQ2FwYWNpdHknLCAnVG90YWwgQ2FwYWNpdHknKSxcbiAgICAgIG51bSgnc2VkaW1lbnRWb2x1bWUnLCAnU2VkaW1lbnQgVm9sdW1lJyksXG4gICAgICBzdHIoJ3JlcG9ydFVybCcsICdSZXBvcnQgVVJMJyksXG4gICAgICBudW0oJ2xvY2F0aW9uSWQnLCAnTG9jYXRpb24gSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdvcGVyYXRpb25hbC1vYnNlcnZhdGlvbnMnLCBuYW1lOiAnT3BlcmF0aW9uYWwgT2JzZXJ2YXRpb25zJywgbW9kdWxlOiAnUkVTRVJWT0lSJyxcbiAgICBkZXNjcmlwdGlvbjogJ09wZXJhdG9yIGZpZWxkIG9ic2VydmF0aW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJyksXG4gICAgICBlbm0oJ2NhdGVnb3J5JywgJ0NhdGVnb3J5JywgT0JTRVJWQVRJT05fQ0FURUdPUklFUyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBlbm0oJ3NldmVyaXR5JywgJ1NldmVyaXR5JywgT0JTRVJWQVRJT05fU0VWRVJJVElFUyksXG4gICAgICBib29sKCdmb2xsb3dVcFJlcXVpcmVkJywgJ0ZvbGxvdy1VcCBSZXF1aXJlZCcpLFxuICAgICAgc3RyKCdzdGF0dXMnLCAnU3RhdHVzJyksXG4gICAgICBudW0oJ29wZXJhdG9ySWQnLCAnT3BlcmF0b3IgSUQnKSxcbiAgICAgIG51bSgnbG9jYXRpb25JZCcsICdMb2NhdGlvbiBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ3JlZ3VsYXRvcnktdXBkYXRlcycsIG5hbWU6ICdSZWd1bGF0b3J5IFVwZGF0ZXMnLCBtb2R1bGU6ICdSRVNFUlZPSVInLFxuICAgIGRlc2NyaXB0aW9uOiAnUmVndWxhdG9yeSBjaGFuZ2VzIGFuZCB1cGRhdGVzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnKSxcbiAgICAgIHN0cigndXBkYXRlVHlwZScsICdVcGRhdGUgVHlwZScpLFxuICAgICAgc3RyKCdpc3N1aW5nQWdlbmN5JywgJ0lzc3VpbmcgQWdlbmN5JyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBzdHIoJ2FjdGlvblJlcXVpcmVkJywgJ0FjdGlvbiBSZXF1aXJlZCcpLFxuICAgICAgZGF0ZSgnZHVlRGF0ZScsICdEdWUgRGF0ZScpLFxuICAgICAgc3RyKCdzdGF0dXMnLCAnU3RhdHVzJyksXG4gICAgICBudW0oJ2xvY2F0aW9uSWQnLCAnTG9jYXRpb24gSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdhaS1zY2VuYXJpb3MnLCBuYW1lOiAnQUkgU2NlbmFyaW9zJywgbW9kdWxlOiAnUkVTRVJWT0lSJyxcbiAgICBkZXNjcmlwdGlvbjogJ0FJLWdlbmVyYXRlZCBvcGVyYXRpb25hbCBzY2VuYXJpb3MnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCduYW1lJywgJ05hbWUnKSxcbiAgICAgIGVubSgndHlwZScsICdUeXBlJywgQUlfU0NFTkFSSU9fVFlQRVMpLFxuICAgICAgc3RyKCdkZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicpLFxuICAgICAgbnVtKCdjb25maWRlbmNlJywgJ0NvbmZpZGVuY2UnKSxcbiAgICAgIGJvb2woJ3NlbGVjdGVkJywgJ1NlbGVjdGVkJyksXG4gICAgICBib29sKCdpbXBsZW1lbnRlZCcsICdJbXBsZW1lbnRlZCcpLFxuICAgICAganNvbignc2ltdWxhdGlvbklucHV0cycsICdTaW11bGF0aW9uIElucHV0cycpLFxuICAgICAganNvbignbWV0cmljcycsICdNZXRyaWNzJyksXG4gICAgICBudW0oJ2xvY2F0aW9uSWQnLCAnTG9jYXRpb24gSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBRVUFMSVRZIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICdyb290LWNhdXNlLWFuYWx5c2VzJywgbmFtZTogJ1Jvb3QgQ2F1c2UgQW5hbHlzZXMnLCBtb2R1bGU6ICdRVUFMSVRZJyxcbiAgICBkZXNjcmlwdGlvbjogJ1JDQSBpbnZlc3RpZ2F0aW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBSQ0FfU1RBVFVTRVMpLFxuICAgICAgZW5tKCdtZXRob2RvbG9neScsICdNZXRob2RvbG9neScsIFJDQV9NRVRIT0RPTE9HSUVTKSxcbiAgICAgIG51bSgnZmFpbHVyZUlkJywgJ0ZhaWx1cmUgSUQnKSxcbiAgICAgIG51bSgnZXZlbnRJZCcsICdFdmVudCBJRCcpLFxuICAgICAgc3RyKCdmaW5kaW5ncycsICdGaW5kaW5ncycpLFxuICAgICAgc3RyKCdyZWNvbW1lbmRhdGlvbnMnLCAnUmVjb21tZW5kYXRpb25zJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnc3lzdGVtaWMtcmlzay1hc3Nlc3NtZW50cycsIG5hbWU6ICdTeXN0ZW1pYyBSaXNrIEFzc2Vzc21lbnRzJywgbW9kdWxlOiAnUVVBTElUWScsXG4gICAgZGVzY3JpcHRpb246ICdDcm9zcy1zeXN0ZW0gcmlzayBldmFsdWF0aW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBzdHIoJ3Jpc2tMZXZlbCcsICdSaXNrIExldmVsJyksXG4gICAgICBudW0oJ3VuaXRJZCcsICdVbml0IElEJyksXG4gICAgICBzdHIoJ2ZpbmRpbmdzJywgJ0ZpbmRpbmdzJyksXG4gICAgICBzdHIoJ3JlY29tbWVuZGF0aW9ucycsICdSZWNvbW1lbmRhdGlvbnMnKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBLTk9XTEVER0Ug4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5cbiAge1xuICAgIGtleTogJ2FydGljbGVzJywgbmFtZTogJ0FydGljbGVzJywgbW9kdWxlOiAnS05PV0xFREdFJyxcbiAgICBkZXNjcmlwdGlvbjogJ0tub3dsZWRnZSBiYXNlIGFydGljbGVzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb250ZW50JywgJ0NvbnRlbnQnKSxcbiAgICAgIG51bSgnY2F0ZWdvcnlJZCcsICdDYXRlZ29yeSBJRCcpLFxuICAgICAgc3RyKCdhdXRob3InLCAnQXV0aG9yJyksXG4gICAgICBkYXRlKCdwdWJsaXNoZWRBdCcsICdQdWJsaXNoZWQgQXQnKSxcbiAgICAgIHN0cignc3RhdHVzJywgJ1N0YXR1cycpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2Jlc3QtcHJhY3RpY2VzJywgbmFtZTogJ0Jlc3QgUHJhY3RpY2VzJywgbW9kdWxlOiAnS05PV0xFREdFJyxcbiAgICBkZXNjcmlwdGlvbjogJ0luZHVzdHJ5IGJlc3QgcHJhY3RpY2VzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnLCB7IHJlcXVpcmVkOiB0cnVlIH0pLFxuICAgICAgc3RyKCdjb250ZW50JywgJ0NvbnRlbnQnKSxcbiAgICAgIG51bSgnY2F0ZWdvcnlJZCcsICdDYXRlZ29yeSBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2ZhcXMnLCBuYW1lOiAnRkFRcycsIG1vZHVsZTogJ0tOT1dMRURHRScsXG4gICAgZGVzY3JpcHRpb246ICdGcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3F1ZXN0aW9uJywgJ1F1ZXN0aW9uJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignYW5zd2VyJywgJ0Fuc3dlcicpLFxuICAgICAgbnVtKCdjYXRlZ29yeUlkJywgJ0NhdGVnb3J5IElEJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnbGVzc29ucy1sZWFybmVkJywgbmFtZTogJ0xlc3NvbnMgTGVhcm5lZCcsIG1vZHVsZTogJ0tOT1dMRURHRScsXG4gICAgZGVzY3JpcHRpb246ICdQb3N0LWV2ZW50IGxlc3NvbnMgbGVhcm5lZCcsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIHN0cignbGVzc29uJywgJ0xlc3NvbicpLFxuICAgICksXG4gIH0sXG5cbiAgLy8g4pSB4pSB4pSBIFNFTlNPUlMg4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSBXG5cbiAge1xuICAgIGtleTogJ3NlbnNvcnMnLCBuYW1lOiAnU2Vuc29ycycsIG1vZHVsZTogJ1NFTlNPUlMnLFxuICAgIGRlc2NyaXB0aW9uOiAnSW9UIHNlbnNvcnMgYXR0YWNoZWQgdG8gZXF1aXBtZW50JyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignbmFtZScsICdOYW1lJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignY29kZScsICdDb2RlJyksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBlbm0oJ3R5cGUnLCAnVHlwZScsIFNFTlNPUl9UWVBFUyksXG4gICAgICBudW0oJ3VuaXRJZCcsICdVbml0IElEJyksXG4gICAgICBudW0oJ2NvbXBvbmVudElkJywgJ0NvbXBvbmVudCBJRCcpLFxuICAgICAgc3RyKCd1bml0JywgJ01lYXN1cmVtZW50IFVuaXQnKSxcbiAgICAgIG51bSgnbWluVmFsdWUnLCAnTWluIFZhbHVlJyksXG4gICAgICBudW0oJ21heFZhbHVlJywgJ01heCBWYWx1ZScpLFxuICAgICAgYm9vbCgnaXNBY3RpdmUnLCAnQWN0aXZlJyksXG4gICAgKSxcbiAgfSxcblxuICB7XG4gICAga2V5OiAnc2Vuc29yLWFsZXJ0cycsIG5hbWU6ICdTZW5zb3IgQWxlcnRzJywgbW9kdWxlOiAnU0VOU09SUycsXG4gICAgZGVzY3JpcHRpb246ICdBbGVydHMgdHJpZ2dlcmVkIGJ5IHNlbnNvciB0aHJlc2hvbGRzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIG51bSgnc2Vuc29ySWQnLCAnU2Vuc29yIElEJyksXG4gICAgICBlbm0oJ3NldmVyaXR5JywgJ1NldmVyaXR5JywgQUxFUlRfU0VWRVJJVElFUyksXG4gICAgICBlbm0oJ3N0YXR1cycsICdTdGF0dXMnLCBBTEVSVF9TVEFUVVNFUyksXG4gICAgICBzdHIoJ21lc3NhZ2UnLCAnTWVzc2FnZScpLFxuICAgICAgbnVtKCd2YWx1ZScsICdWYWx1ZScpLFxuICAgICAgbnVtKCd0aHJlc2hvbGQnLCAnVGhyZXNob2xkJyksXG4gICAgICBkYXRlKCdhY2tub3dsZWRnZWRBdCcsICdBY2tub3dsZWRnZWQgQXQnKSxcbiAgICAgIGRhdGUoJ3Jlc29sdmVkQXQnLCAnUmVzb2x2ZWQgQXQnKSxcbiAgICApLFxuICB9LFxuXG4gIC8vIOKUgeKUgeKUgSBNSVNDIOKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgeKUgVxuXG4gIHtcbiAgICBrZXk6ICd0b2RvcycsIG5hbWU6ICdUb2RvcycsIG1vZHVsZTogJ01JU0MnLFxuICAgIGRlc2NyaXB0aW9uOiAnUGVyc29uYWwgdG8tZG8gaXRlbXMnLFxuICAgIGZpZWxkczogZmllbGRzKFxuICAgICAgc3RyKCd0aXRsZScsICdUaXRsZScsIHsgcmVxdWlyZWQ6IHRydWUgfSksXG4gICAgICBzdHIoJ2Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJyksXG4gICAgICBib29sKCdjb21wbGV0ZWQnLCAnQ29tcGxldGVkJyksXG4gICAgICBkYXRlKCdkdWVEYXRlJywgJ0R1ZSBEYXRlJyksXG4gICAgICBudW0oJ2Fzc2lnbmVkVG9JZCcsICdBc3NpZ25lZCBUbyBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ25vdGVzJywgbmFtZTogJ05vdGVzJywgbW9kdWxlOiAnTUlTQycsXG4gICAgZGVzY3JpcHRpb246ICdOb3RlcyBhdHRhY2hlZCB0byBhbnkgZW50aXR5JyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnKSxcbiAgICAgIHN0cignY29udGVudCcsICdDb250ZW50JyksXG4gICAgICBzdHIoJ2VudGl0eVR5cGUnLCAnRW50aXR5IFR5cGUnKSxcbiAgICAgIG51bSgnZW50aXR5SWQnLCAnRW50aXR5IElEJyksXG4gICAgICBudW0oJ2F1dGhvcklkJywgJ0F1dGhvciBJRCcpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2luY2lkZW50cycsIG5hbWU6ICdJbmNpZGVudHMnLCBtb2R1bGU6ICdNSVNDJyxcbiAgICBkZXNjcmlwdGlvbjogJ1NhZmV0eSBhbmQgb3BlcmF0aW9uYWwgaW5jaWRlbnRzJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cigndGl0bGUnLCAnVGl0bGUnKSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIHN0cigndHlwZScsICdUeXBlJyksXG4gICAgICBzdHIoJ3NldmVyaXR5JywgJ1NldmVyaXR5JyksXG4gICAgICBudW0oJ3VuaXRJZCcsICdVbml0IElEJyksXG4gICAgICBkYXRlKCdyZXBvcnRlZERhdGUnLCAnUmVwb3J0ZWQgRGF0ZScpLFxuICAgICksXG4gIH0sXG5cbiAge1xuICAgIGtleTogJ2V2ZW50cycsIG5hbWU6ICdFdmVudHMnLCBtb2R1bGU6ICdNSVNDJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NhbGVuZGFyIC8gc2NoZWR1bGVkIGV2ZW50cycsXG4gICAgZmllbGRzOiBmaWVsZHMoXG4gICAgICBzdHIoJ3RpdGxlJywgJ1RpdGxlJywgeyByZXF1aXJlZDogdHJ1ZSB9KSxcbiAgICAgIHN0cignZGVzY3JpcHRpb24nLCAnRGVzY3JpcHRpb24nKSxcbiAgICAgIGRhdGUoJ3N0YXJ0RGF0ZScsICdTdGFydCBEYXRlJyksXG4gICAgICBkYXRlKCdlbmREYXRlJywgJ0VuZCBEYXRlJyksXG4gICAgICBudW0oJ2xvY2F0aW9uSWQnLCAnTG9jYXRpb24gSUQnKSxcbiAgICApLFxuICB9LFxuXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlcycsIG5hbWU6ICdNZXNzYWdlcycsIG1vZHVsZTogJ01JU0MnLFxuICAgIGRlc2NyaXB0aW9uOiAnSW50ZXJuYWwgbWVzc2FnaW5nJyxcbiAgICBmaWVsZHM6IGZpZWxkcyhcbiAgICAgIHN0cignY29udGVudCcsICdDb250ZW50JyksXG4gICAgICBudW0oJ3NlbmRlcklkJywgJ1NlbmRlciBJRCcpLFxuICAgICAgbnVtKCdyZWNpcGllbnRJZCcsICdSZWNpcGllbnQgSUQnKSxcbiAgICAgIGJvb2woJ3JlYWQnLCAnUmVhZCcpLFxuICAgICksXG4gIH0sXG5dO1xuXG4vKipcbiAqIEVudGl0eSBrZXlzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJyb3dzZXIgYnkgZGVmYXVsdC5cbiAqIENvbnN1bWVycyBjYW4gb3ZlcnJpZGUgdmlhIGBEYXRhYmFzZU1hbmFnZXJDb25maWcuZXhjbHVkZWRFbnRpdGllc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYQ0xVREVEX0VOVElUSUVTOiBzdHJpbmdbXSA9IFtcbiAgJ2xvZ2luLXJlcXVlc3RzJyxcbiAgJ2xvZ2luLWhpc3RvcnknLFxuICAnanNhLWl0ZW1zJyxcbiAgJ2pzYS1zdGVwcycsXG4gICdjb21wb25lbnQtY2hlY2tsaXN0cycsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ2ZvbnRzJyxcbiAgJ3Rlcm1zLW9mLXVzZScsXG5dO1xuXG4vKipcbiAqIEh1bWFuLXJlYWRhYmxlIGxhYmVscyBmb3IgZWFjaCBtb2R1bGUgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1PRFVMRV9MQUJFTFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIENPUkU6ICdDb3JlJyxcbiAgTUFJTlRFTkFOQ0U6ICdNYWludGVuYW5jZScsXG4gIElOU1BFQ1RJT05TOiAnSW5zcGVjdGlvbnMnLFxuICBNQVRFUklBTFM6ICdNYXRlcmlhbHMnLFxuICBGTEVFVDogJ0ZsZWV0IE1hbmFnZW1lbnQnLFxuICBQUk9KRUNUUzogJ1Byb2plY3RzJyxcbiAgRE9DVU1FTlRTOiAnRG9jdW1lbnRzJyxcbiAgQ09NUExJQU5DRTogJ0NvbXBsaWFuY2UnLFxuICBFTkVSR1k6ICdFbmVyZ3knLFxuICBXQVJSQU5UWTogJ1dhcnJhbnR5JyxcbiAgUkVTRVJWT0lSOiAnUmVzZXJ2b2lyJyxcbiAgUVVBTElUWTogJ1F1YWxpdHknLFxuICBLTk9XTEVER0U6ICdLbm93bGVkZ2UgQmFzZScsXG4gIFNFTlNPUlM6ICdTZW5zb3JzICYgSW9UJyxcbiAgTUlTQzogJ01pc2NlbGxhbmVvdXMnLFxufTtcblxuLyoqXG4gKiBNYXAgb2YgZW50aXR5IGtleSDihpIgc2VydmljZSBjbGFzcyBuYW1lIChhcyBleHBvcnRlZCBmcm9tIHRoZSBTREspLlxuICogVXNlZCBieSBRdWVyeUV4ZWN1dG9yU2VydmljZSB0byByZXNvbHZlIHRoZSBjb3JyZWN0IHNlcnZpY2UgYXQgcnVudGltZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVElUWV9TRVJWSUNFX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2NvbXBhbmllcyc6ICdDb21wYW55U2VydmljZScsXG4gICd1bml0cyc6ICdVbml0U2VydmljZScsXG4gICdjb21wb25lbnRzJzogJ0NvbXBvbmVudFNlcnZpY2UnLFxuICAnY29tcG9uZW50LWdyb3Vwcyc6ICdDb21wb25lbnRHcm91cFNlcnZpY2UnLFxuICAnc3ViLWFzc2VtYmxpZXMnOiAnU3ViQXNzZW1ibHlTZXJ2aWNlJyxcbiAgJ2xvY2F0aW9ucyc6ICdMb2NhdGlvblNlcnZpY2UnLFxuICAnZGVwYXJ0bWVudHMnOiAnRGVwYXJ0bWVudFNlcnZpY2UnLFxuICAndXNlcnMnOiAnVXNlclNlcnZpY2UnLFxuICAnc3VwcGxpZXJzJzogJ1N1cHBsaWVyU2VydmljZScsXG4gICdpbnRlcnZlbnRpb25zJzogJ0ludGVydmVudGlvblNlcnZpY2UnLFxuICAnaW50ZXJ2ZW50aW9uLXJlcXVlc3RzJzogJ0ludGVydmVudGlvblJlcXVlc3RTZXJ2aWNlJyxcbiAgJ2ZhaWx1cmVzJzogJ0ZhaWx1cmVTZXJ2aWNlJyxcbiAgJ2luc3BlY3Rpb25zJzogJ0luc3BlY3Rpb25TZXJ2aWNlJyxcbiAgJ21haW50ZW5hbmNlLXJlY29yZHMnOiAnTWFpbnRlbmFuY2VSZWNvcmRTZXJ2aWNlJyxcbiAgJ21hdGVyaWFsLWl0ZW1zJzogJ01hdGVyaWFsSXRlbVNlcnZpY2UnLFxuICAnbWF0ZXJpYWwtY29uc3VtYWJsZXMnOiAnTWF0ZXJpYWxDb25zdW1hYmxlU2VydmljZScsXG4gICdtYXRlcmlhbC1pbnN0cnVtZW50cyc6ICdNYXRlcmlhbEluc3RydW1lbnRTZXJ2aWNlJyxcbiAgJ21hdGVyaWFsLXRvb2xpbmcnOiAnTWF0ZXJpYWxUb29saW5nU2VydmljZScsXG4gICdzcGFyZS1wYXJ0cyc6ICdTcGFyZVBhcnRTZXJ2aWNlJyxcbiAgJ3ZlaGljbGVzJzogJ1ZlaGljbGVTZXJ2aWNlJyxcbiAgJ2RyaXZlcnMnOiAnRHJpdmVyU2VydmljZScsXG4gICd2ZWhpY2xlLXRyaXBzJzogJ1ZlaGljbGVUcmlwU2VydmljZScsXG4gICdmdWVsLXJlY29yZHMnOiAnRnVlbFJlY29yZFNlcnZpY2UnLFxuICAnZ2VvZmVuY2VzJzogJ0dlb2ZlbmNlU2VydmljZScsXG4gICdwcm9qZWN0cyc6ICdQcm9qZWN0U2VydmljZScsXG4gICdjYXBleC1wcm9qZWN0cyc6ICdDYXBleFByb2plY3RTZXJ2aWNlJyxcbiAgJ2J1ZGdldHMnOiAnQnVkZ2V0U2VydmljZScsXG4gICdiaWRzJzogJ0JpZFNlcnZpY2UnLFxuICAnZmlsZXMnOiAnVGdGaWxlU2VydmljZScsXG4gICdmb2xkZXJzJzogJ1RnRm9sZGVyU2VydmljZScsXG4gICdkcmF3aW5ncyc6ICdEcmF3aW5nU2VydmljZScsXG4gICdjb21wbGlhbmNlLW9ibGlnYXRpb25zJzogJ0NvbXBsaWFuY2VPYmxpZ2F0aW9uU2VydmljZScsXG4gICdjb21wbGlhbmNlLXN1Ym1pc3Npb25zJzogJ0NvbXBsaWFuY2VTdWJtaXNzaW9uU2VydmljZScsXG4gICdlbnZpcm9ubWVudGFsLXBlcm1pdHMnOiAnRW52aXJvbm1lbnRhbFBlcm1pdFNlcnZpY2UnLFxuICAnY2VydGlmaWNhdGlvbnMnOiAnQ2VydGlmaWNhdGlvblNlcnZpY2UnLFxuICAnYW5jaWxsYXJ5LXNlcnZpY2VzJzogJ0FuY2lsbGFyeVNlcnZpY2VDcnVkU2VydmljZScsXG4gICdncmlkLWNvbm5lY3Rpb25zJzogJ0dyaWRDb25uZWN0aW9uU2VydmljZScsXG4gICdjdXJ0YWlsbWVudC1ldmVudHMnOiAnQ3VydGFpbG1lbnRFdmVudFNlcnZpY2UnLFxuICAnd2FycmFudHktY29udHJhY3RzJzogJ1dhcnJhbnR5Q29udHJhY3RTZXJ2aWNlJyxcbiAgJ3dhcnJhbnR5LWNsYWltcyc6ICdXYXJyYW50eUNsYWltU2VydmljZScsXG4gICdnYXRlLXN5c3RlbXMnOiAnR2F0ZVN5c3RlbVNlcnZpY2UnLFxuICAnYWxlcnQtZGVmaW5pdGlvbnMnOiAnQWxlcnREZWZpbml0aW9uU2VydmljZScsXG4gICdtYW51YWwtcmVhZGluZ3MnOiAnTWFudWFsUmVhZGluZ1NlcnZpY2UnLFxuICAnbGFib3JhdG9yeS1yZXN1bHRzJzogJ0xhYm9yYXRvcnlSZXN1bHRTZXJ2aWNlJyxcbiAgJ2Zpc2gtbW9uaXRvcmluZyc6ICdGaXNoTW9uaXRvcmluZ1NlcnZpY2UnLFxuICAnYmF0aHltZXRyaWMtc3VydmV5cyc6ICdCYXRoeW1ldHJpY1N1cnZleVNlcnZpY2UnLFxuICAnb3BlcmF0aW9uYWwtb2JzZXJ2YXRpb25zJzogJ09wZXJhdGlvbmFsT2JzZXJ2YXRpb25TZXJ2aWNlJyxcbiAgJ3JlZ3VsYXRvcnktdXBkYXRlcyc6ICdSZWd1bGF0b3J5VXBkYXRlU2VydmljZScsXG4gICdhaS1zY2VuYXJpb3MnOiAnQUlTY2VuYXJpb1NlcnZpY2UnLFxuICAncm9vdC1jYXVzZS1hbmFseXNlcyc6ICdSb290Q2F1c2VBbmFseXNpc1NlcnZpY2UnLFxuICAnc3lzdGVtaWMtcmlzay1hc3Nlc3NtZW50cyc6ICdTeXN0ZW1pY1Jpc2tBc3Nlc3NtZW50U2VydmljZScsXG4gICdhcnRpY2xlcyc6ICdBcnRpY2xlU2VydmljZScsXG4gICdiZXN0LXByYWN0aWNlcyc6ICdCZXN0UHJhY3RpY2VTZXJ2aWNlJyxcbiAgJ2ZhcXMnOiAnRmFxU2VydmljZScsXG4gICdsZXNzb25zLWxlYXJuZWQnOiAnTGVzc29uTGVhcm5lZFNlcnZpY2UnLFxuICAnc2Vuc29ycyc6ICdTZW5zb3JTZXJ2aWNlJyxcbiAgJ3NlbnNvci1hbGVydHMnOiAnQWxlcnRTZXJ2aWNlJyxcbiAgJ3RvZG9zJzogJ1RvZG9TZXJ2aWNlJyxcbiAgJ25vdGVzJzogJ05vdGVTZXJ2aWNlJyxcbiAgJ2luY2lkZW50cyc6ICdJbmNpZGVudFNlcnZpY2UnLFxuICAnZXZlbnRzJzogJ0V2ZW50U2VydmljZScsXG4gICdtZXNzYWdlcyc6ICdNZXNzYWdlU2VydmljZScsXG59O1xuIl19
|