@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.
Files changed (533) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +788 -0
  3. package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
  4. package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
  5. package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
  6. package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
  7. package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
  8. package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
  9. package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
  10. package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
  11. package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
  12. package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
  13. package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
  14. package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
  15. package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
  16. package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
  17. package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
  18. package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
  19. package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
  20. package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
  21. package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
  22. package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
  23. package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
  24. package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
  25. package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
  26. package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
  27. package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
  28. package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
  29. package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
  30. package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
  31. package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
  32. package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
  33. package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
  34. package/esm2022/lib/core/auth-interceptor.mjs +33 -0
  35. package/esm2022/lib/core/client-interceptor.mjs +34 -0
  36. package/esm2022/lib/core/error-handler.mjs +32 -0
  37. package/esm2022/lib/core/http-client.service.mjs +254 -0
  38. package/esm2022/lib/core/websocket.service.mjs +185 -0
  39. package/esm2022/lib/models/admin/audit.models.mjs +2 -0
  40. package/esm2022/lib/models/admin/backup.models.mjs +2 -0
  41. package/esm2022/lib/models/admin/client.models.mjs +2 -0
  42. package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
  43. package/esm2022/lib/models/admin/erp.models.mjs +2 -0
  44. package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
  45. package/esm2022/lib/models/admin/index.mjs +14 -0
  46. package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
  47. package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
  48. package/esm2022/lib/models/admin/queue.models.mjs +2 -0
  49. package/esm2022/lib/models/admin/role.models.mjs +2 -0
  50. package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
  51. package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
  52. package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
  53. package/esm2022/lib/models/api/ai.models.mjs +2 -0
  54. package/esm2022/lib/models/api/aip.models.mjs +2 -0
  55. package/esm2022/lib/models/api/cat.models.mjs +2 -0
  56. package/esm2022/lib/models/api/company.models.mjs +2 -0
  57. package/esm2022/lib/models/api/compliance.models.mjs +2 -0
  58. package/esm2022/lib/models/api/component.models.mjs +2 -0
  59. package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
  60. package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
  61. package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
  62. package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
  63. package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
  64. package/esm2022/lib/models/api/deferral.models.mjs +2 -0
  65. package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
  66. package/esm2022/lib/models/api/document.models.mjs +2 -0
  67. package/esm2022/lib/models/api/energy.models.mjs +2 -0
  68. package/esm2022/lib/models/api/failure.models.mjs +2 -0
  69. package/esm2022/lib/models/api/fleet.models.mjs +2 -0
  70. package/esm2022/lib/models/api/inspection.models.mjs +2 -0
  71. package/esm2022/lib/models/api/intervention.models.mjs +2 -0
  72. package/esm2022/lib/models/api/iot.models.mjs +2 -0
  73. package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
  74. package/esm2022/lib/models/api/loto.models.mjs +2 -0
  75. package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
  76. package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
  77. package/esm2022/lib/models/api/material.models.mjs +2 -0
  78. package/esm2022/lib/models/api/media.models.mjs +2 -0
  79. package/esm2022/lib/models/api/misc.models.mjs +2 -0
  80. package/esm2022/lib/models/api/project.models.mjs +2 -0
  81. package/esm2022/lib/models/api/quality.models.mjs +2 -0
  82. package/esm2022/lib/models/api/reporting.models.mjs +3 -0
  83. package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
  84. package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
  85. package/esm2022/lib/models/api/search.models.mjs +2 -0
  86. package/esm2022/lib/models/api/sensor.models.mjs +2 -0
  87. package/esm2022/lib/models/api/unit.models.mjs +2 -0
  88. package/esm2022/lib/models/api/user.models.mjs +2 -0
  89. package/esm2022/lib/models/api/warranty.models.mjs +2 -0
  90. package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
  91. package/esm2022/lib/models/api/workflow.models.mjs +2 -0
  92. package/esm2022/lib/models/auth/index.mjs +4 -0
  93. package/esm2022/lib/models/auth/login.models.mjs +2 -0
  94. package/esm2022/lib/models/auth/sso.models.mjs +2 -0
  95. package/esm2022/lib/models/auth/totp.models.mjs +2 -0
  96. package/esm2022/lib/models/base.models.mjs +99 -0
  97. package/esm2022/lib/models/chat/chat.models.mjs +2 -0
  98. package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
  99. package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
  100. package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
  101. package/esm2022/lib/models/enums/index.mjs +15 -0
  102. package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
  103. package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
  104. package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
  105. package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
  106. package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
  107. package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
  108. package/esm2022/lib/models/enums/status.enums.mjs +41 -0
  109. package/esm2022/lib/models/enums/time.enums.mjs +5 -0
  110. package/esm2022/lib/models/enums/type.enums.mjs +45 -0
  111. package/esm2022/lib/models/enums/user.enums.mjs +6 -0
  112. package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
  113. package/esm2022/lib/models/index.mjs +42 -0
  114. package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
  115. package/esm2022/lib/models/video/video-call.models.mjs +2 -0
  116. package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
  117. package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
  118. package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
  119. package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
  120. package/esm2022/lib/services/admin/backup.service.mjs +28 -0
  121. package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
  122. package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
  123. package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
  124. package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
  125. package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
  126. package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
  127. package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
  128. package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
  129. package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
  130. package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
  131. package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
  132. package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
  133. package/esm2022/lib/services/admin/index.mjs +31 -0
  134. package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
  135. package/esm2022/lib/services/admin/notification.service.mjs +31 -0
  136. package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
  137. package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
  138. package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
  139. package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
  140. package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
  141. package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
  142. package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
  143. package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
  144. package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
  145. package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
  146. package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
  147. package/esm2022/lib/services/api/agent.service.mjs +29 -0
  148. package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
  149. package/esm2022/lib/services/api/ai.service.mjs +66 -0
  150. package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
  151. package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
  152. package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
  153. package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
  154. package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
  155. package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
  156. package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
  157. package/esm2022/lib/services/api/aip.service.mjs +158 -0
  158. package/esm2022/lib/services/api/alert.service.mjs +26 -0
  159. package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
  160. package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
  161. package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
  162. package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
  163. package/esm2022/lib/services/api/bid.service.mjs +17 -0
  164. package/esm2022/lib/services/api/budget.service.mjs +17 -0
  165. package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
  166. package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
  167. package/esm2022/lib/services/api/cat.service.mjs +77 -0
  168. package/esm2022/lib/services/api/client-article.service.mjs +23 -0
  169. package/esm2022/lib/services/api/community.service.mjs +41 -0
  170. package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
  171. package/esm2022/lib/services/api/company-material.service.mjs +17 -0
  172. package/esm2022/lib/services/api/company.service.mjs +30 -0
  173. package/esm2022/lib/services/api/compliance.service.mjs +74 -0
  174. package/esm2022/lib/services/api/component-info.service.mjs +17 -0
  175. package/esm2022/lib/services/api/component-location.service.mjs +17 -0
  176. package/esm2022/lib/services/api/component.service.mjs +53 -0
  177. package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
  178. package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
  179. package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
  180. package/esm2022/lib/services/api/cortex.service.mjs +29 -0
  181. package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
  182. package/esm2022/lib/services/api/custom.service.mjs +43 -0
  183. package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
  184. package/esm2022/lib/services/api/deferral.service.mjs +54 -0
  185. package/esm2022/lib/services/api/department.service.mjs +17 -0
  186. package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
  187. package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
  188. package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
  189. package/esm2022/lib/services/api/document.service.mjs +53 -0
  190. package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
  191. package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
  192. package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
  193. package/esm2022/lib/services/api/energy.service.mjs +91 -0
  194. package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
  195. package/esm2022/lib/services/api/event.service.mjs +17 -0
  196. package/esm2022/lib/services/api/export.service.mjs +216 -0
  197. package/esm2022/lib/services/api/extension.service.mjs +56 -0
  198. package/esm2022/lib/services/api/failure.service.mjs +53 -0
  199. package/esm2022/lib/services/api/fleet.service.mjs +140 -0
  200. package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
  201. package/esm2022/lib/services/api/index.mjs +101 -0
  202. package/esm2022/lib/services/api/inspection.service.mjs +29 -0
  203. package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
  204. package/esm2022/lib/services/api/intervention.service.mjs +17 -0
  205. package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
  206. package/esm2022/lib/services/api/license.service.mjs +25 -0
  207. package/esm2022/lib/services/api/location.service.mjs +17 -0
  208. package/esm2022/lib/services/api/log.service.mjs +17 -0
  209. package/esm2022/lib/services/api/login-history.service.mjs +17 -0
  210. package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
  211. package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
  212. package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
  213. package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
  214. package/esm2022/lib/services/api/material-item.service.mjs +53 -0
  215. package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
  216. package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
  217. package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
  218. package/esm2022/lib/services/api/note.service.mjs +37 -0
  219. package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
  220. package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
  221. package/esm2022/lib/services/api/procurement.service.mjs +53 -0
  222. package/esm2022/lib/services/api/project.service.mjs +17 -0
  223. package/esm2022/lib/services/api/property-template.service.mjs +17 -0
  224. package/esm2022/lib/services/api/quality.service.mjs +29 -0
  225. package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
  226. package/esm2022/lib/services/api/reporting.service.mjs +117 -0
  227. package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
  228. package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
  229. package/esm2022/lib/services/api/room.service.mjs +17 -0
  230. package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
  231. package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
  232. package/esm2022/lib/services/api/search.service.mjs +77 -0
  233. package/esm2022/lib/services/api/sensor.service.mjs +36 -0
  234. package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
  235. package/esm2022/lib/services/api/sla.service.mjs +17 -0
  236. package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
  237. package/esm2022/lib/services/api/ticket.service.mjs +73 -0
  238. package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
  239. package/esm2022/lib/services/api/todo.service.mjs +17 -0
  240. package/esm2022/lib/services/api/unit.service.mjs +17 -0
  241. package/esm2022/lib/services/api/upload.service.mjs +84 -0
  242. package/esm2022/lib/services/api/user.service.mjs +107 -0
  243. package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
  244. package/esm2022/lib/services/api/warranty.service.mjs +29 -0
  245. package/esm2022/lib/services/api/work-order.service.mjs +28 -0
  246. package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
  247. package/esm2022/lib/services/api/workflow.service.mjs +86 -0
  248. package/esm2022/lib/services/auth/auth.service.mjs +97 -0
  249. package/esm2022/lib/services/auth/index.mjs +5 -0
  250. package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
  251. package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
  252. package/esm2022/lib/services/auth/totp.service.mjs +34 -0
  253. package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
  254. package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
  255. package/esm2022/lib/services/chat/index.mjs +3 -0
  256. package/esm2022/lib/services/index.mjs +8 -0
  257. package/esm2022/lib/services/realtime/index.mjs +2 -0
  258. package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
  259. package/esm2022/lib/services/reservoir/index.mjs +2 -0
  260. package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
  261. package/esm2022/lib/services/video/index.mjs +3 -0
  262. package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
  263. package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
  264. package/esm2022/lib/tgm-sdk.config.mjs +32 -0
  265. package/esm2022/lib/tgm-sdk.module.mjs +38 -0
  266. package/esm2022/public-api.mjs +52 -0
  267. package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
  268. package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
  269. package/index.d.ts +5 -0
  270. package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
  271. package/lib/components/database-manager/database-manager.module.d.ts +15 -0
  272. package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
  273. package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
  274. package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
  275. package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
  276. package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
  277. package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
  278. package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
  279. package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
  280. package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
  281. package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
  282. package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
  283. package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
  284. package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
  285. package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
  286. package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
  287. package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
  288. package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
  289. package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
  290. package/lib/components/reporting/reporting.module.d.ts +14 -0
  291. package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
  292. package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
  293. package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
  294. package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
  295. package/lib/components/video-call/types/video-call.types.d.ts +49 -0
  296. package/lib/components/video-call/video-call.module.d.ts +11 -0
  297. package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
  298. package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
  299. package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
  300. package/lib/core/auth-interceptor.d.ts +13 -0
  301. package/lib/core/client-interceptor.d.ts +14 -0
  302. package/lib/core/error-handler.d.ts +13 -0
  303. package/lib/core/http-client.service.d.ts +61 -0
  304. package/lib/core/websocket.service.d.ts +37 -0
  305. package/lib/models/admin/audit.models.d.ts +73 -0
  306. package/lib/models/admin/backup.models.d.ts +101 -0
  307. package/lib/models/admin/client.models.d.ts +99 -0
  308. package/lib/models/admin/email-provider.models.d.ts +56 -0
  309. package/lib/models/admin/erp.models.d.ts +188 -0
  310. package/lib/models/admin/identity-provider.models.d.ts +1 -0
  311. package/lib/models/admin/index.d.ts +13 -0
  312. package/lib/models/admin/messaging-provider.models.d.ts +49 -0
  313. package/lib/models/admin/platform-admin.models.d.ts +33 -0
  314. package/lib/models/admin/queue.models.d.ts +54 -0
  315. package/lib/models/admin/role.models.d.ts +50 -0
  316. package/lib/models/admin/sandbox.models.d.ts +54 -0
  317. package/lib/models/admin/ticket.models.d.ts +48 -0
  318. package/lib/models/admin/webhook.models.d.ts +65 -0
  319. package/lib/models/api/ai.models.d.ts +75 -0
  320. package/lib/models/api/aip.models.d.ts +545 -0
  321. package/lib/models/api/cat.models.d.ts +260 -0
  322. package/lib/models/api/company.models.d.ts +125 -0
  323. package/lib/models/api/compliance.models.d.ts +74 -0
  324. package/lib/models/api/component.models.d.ts +294 -0
  325. package/lib/models/api/cortex-edge.models.d.ts +14 -0
  326. package/lib/models/api/cortex-event.models.d.ts +12 -0
  327. package/lib/models/api/cortex-insight.models.d.ts +25 -0
  328. package/lib/models/api/cortex-node.models.d.ts +10 -0
  329. package/lib/models/api/custom-field.models.d.ts +37 -0
  330. package/lib/models/api/deferral.models.d.ts +81 -0
  331. package/lib/models/api/diagnostic-report.models.d.ts +29 -0
  332. package/lib/models/api/document.models.d.ts +95 -0
  333. package/lib/models/api/energy.models.d.ts +210 -0
  334. package/lib/models/api/failure.models.d.ts +171 -0
  335. package/lib/models/api/fleet.models.d.ts +193 -0
  336. package/lib/models/api/inspection.models.d.ts +110 -0
  337. package/lib/models/api/intervention.models.d.ts +254 -0
  338. package/lib/models/api/iot.models.d.ts +15 -0
  339. package/lib/models/api/knowledge.models.d.ts +340 -0
  340. package/lib/models/api/loto.models.d.ts +51 -0
  341. package/lib/models/api/maintenance-record.models.d.ts +100 -0
  342. package/lib/models/api/maintenance.models.d.ts +188 -0
  343. package/lib/models/api/material.models.d.ts +261 -0
  344. package/lib/models/api/media.models.d.ts +106 -0
  345. package/lib/models/api/misc.models.d.ts +929 -0
  346. package/lib/models/api/project.models.d.ts +118 -0
  347. package/lib/models/api/quality.models.d.ts +153 -0
  348. package/lib/models/api/reporting.models.d.ts +76 -0
  349. package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
  350. package/lib/models/api/reservoir.models.d.ts +274 -0
  351. package/lib/models/api/search.models.d.ts +30 -0
  352. package/lib/models/api/sensor.models.d.ts +117 -0
  353. package/lib/models/api/unit.models.d.ts +82 -0
  354. package/lib/models/api/user.models.d.ts +253 -0
  355. package/lib/models/api/warranty.models.d.ts +51 -0
  356. package/lib/models/api/work-permit.models.d.ts +70 -0
  357. package/lib/models/api/workflow.models.d.ts +52 -0
  358. package/lib/models/auth/index.d.ts +3 -0
  359. package/lib/models/auth/login.models.d.ts +134 -0
  360. package/lib/models/auth/sso.models.d.ts +136 -0
  361. package/lib/models/auth/totp.models.d.ts +19 -0
  362. package/lib/models/base.models.d.ts +90 -0
  363. package/lib/models/chat/chat.models.d.ts +171 -0
  364. package/lib/models/enums/cat.enums.d.ts +114 -0
  365. package/lib/models/enums/energy.enums.d.ts +50 -0
  366. package/lib/models/enums/erp.enums.d.ts +49 -0
  367. package/lib/models/enums/index.d.ts +14 -0
  368. package/lib/models/enums/inspection.enums.d.ts +61 -0
  369. package/lib/models/enums/loto.enums.d.ts +41 -0
  370. package/lib/models/enums/misc.enums.d.ts +151 -0
  371. package/lib/models/enums/quality.enums.d.ts +25 -0
  372. package/lib/models/enums/reservoir.enums.d.ts +80 -0
  373. package/lib/models/enums/sso.enums.d.ts +15 -0
  374. package/lib/models/enums/status.enums.d.ts +296 -0
  375. package/lib/models/enums/time.enums.d.ts +51 -0
  376. package/lib/models/enums/type.enums.d.ts +324 -0
  377. package/lib/models/enums/user.enums.d.ts +31 -0
  378. package/lib/models/enums/work-permit.enums.d.ts +56 -0
  379. package/lib/models/index.d.ts +41 -0
  380. package/lib/models/realtime/realtime-event.models.d.ts +95 -0
  381. package/lib/models/video/video-call.models.d.ts +65 -0
  382. package/lib/services/admin/activity-log.service.d.ts +13 -0
  383. package/lib/services/admin/announcement.service.d.ts +17 -0
  384. package/lib/services/admin/article-admin.service.d.ts +17 -0
  385. package/lib/services/admin/audit-log.service.d.ts +22 -0
  386. package/lib/services/admin/backup.service.d.ts +15 -0
  387. package/lib/services/admin/cache-admin.service.d.ts +26 -0
  388. package/lib/services/admin/client-admin.service.d.ts +38 -0
  389. package/lib/services/admin/client-api-key.service.d.ts +15 -0
  390. package/lib/services/admin/client-ocr.service.d.ts +14 -0
  391. package/lib/services/admin/client-usage.service.d.ts +15 -0
  392. package/lib/services/admin/data-export.service.d.ts +10 -0
  393. package/lib/services/admin/document-admin.service.d.ts +18 -0
  394. package/lib/services/admin/email-admin.service.d.ts +14 -0
  395. package/lib/services/admin/email-provider.service.d.ts +25 -0
  396. package/lib/services/admin/erp-admin.service.d.ts +41 -0
  397. package/lib/services/admin/identity-provider.service.d.ts +21 -0
  398. package/lib/services/admin/impersonation.service.d.ts +11 -0
  399. package/lib/services/admin/index.d.ts +30 -0
  400. package/lib/services/admin/messaging-provider.service.d.ts +24 -0
  401. package/lib/services/admin/notification.service.d.ts +15 -0
  402. package/lib/services/admin/platform-admin.service.d.ts +17 -0
  403. package/lib/services/admin/platform-webhook.service.d.ts +16 -0
  404. package/lib/services/admin/queue-admin.service.d.ts +24 -0
  405. package/lib/services/admin/role-admin.service.d.ts +37 -0
  406. package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
  407. package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
  408. package/lib/services/admin/subscription.service.d.ts +15 -0
  409. package/lib/services/admin/system-health.service.d.ts +11 -0
  410. package/lib/services/admin/user-admin.service.d.ts +27 -0
  411. package/lib/services/admin/user-permission.service.d.ts +18 -0
  412. package/lib/services/admin/webhook-admin.service.d.ts +26 -0
  413. package/lib/services/api/agent.service.d.ts +16 -0
  414. package/lib/services/api/ai-feedback.service.d.ts +9 -0
  415. package/lib/services/api/ai.service.d.ts +36 -0
  416. package/lib/services/api/aip-analysis.service.d.ts +13 -0
  417. package/lib/services/api/aip-financial.service.d.ts +16 -0
  418. package/lib/services/api/aip-geographic.service.d.ts +16 -0
  419. package/lib/services/api/aip-network.service.d.ts +16 -0
  420. package/lib/services/api/aip-performance.service.d.ts +16 -0
  421. package/lib/services/api/aip-resource.service.d.ts +14 -0
  422. package/lib/services/api/aip-workflow.service.d.ts +24 -0
  423. package/lib/services/api/aip.service.d.ts +73 -0
  424. package/lib/services/api/alert.service.d.ts +15 -0
  425. package/lib/services/api/anomaly-detection.service.d.ts +26 -0
  426. package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
  427. package/lib/services/api/audit-entry.service.d.ts +13 -0
  428. package/lib/services/api/base-crud.service.d.ts +18 -0
  429. package/lib/services/api/bid.service.d.ts +10 -0
  430. package/lib/services/api/budget.service.d.ts +10 -0
  431. package/lib/services/api/bulk-operation.service.d.ts +26 -0
  432. package/lib/services/api/capex-project.service.d.ts +10 -0
  433. package/lib/services/api/cat.service.d.ts +40 -0
  434. package/lib/services/api/client-article.service.d.ts +14 -0
  435. package/lib/services/api/community.service.d.ts +21 -0
  436. package/lib/services/api/company-material-type.service.d.ts +10 -0
  437. package/lib/services/api/company-material.service.d.ts +9 -0
  438. package/lib/services/api/company.service.d.ts +15 -0
  439. package/lib/services/api/compliance.service.d.ts +35 -0
  440. package/lib/services/api/component-info.service.d.ts +10 -0
  441. package/lib/services/api/component-location.service.d.ts +10 -0
  442. package/lib/services/api/component.service.d.ts +32 -0
  443. package/lib/services/api/cortex-event.service.d.ts +10 -0
  444. package/lib/services/api/cortex-insight.service.d.ts +14 -0
  445. package/lib/services/api/cortex-node.service.d.ts +10 -0
  446. package/lib/services/api/cortex.service.d.ts +15 -0
  447. package/lib/services/api/custom-field.service.d.ts +33 -0
  448. package/lib/services/api/custom.service.d.ts +23 -0
  449. package/lib/services/api/dashboard.service.d.ts +18 -0
  450. package/lib/services/api/deferral.service.d.ts +29 -0
  451. package/lib/services/api/department.service.d.ts +9 -0
  452. package/lib/services/api/device-gateway.service.d.ts +16 -0
  453. package/lib/services/api/diagnostic-report.service.d.ts +14 -0
  454. package/lib/services/api/digital-twin.service.d.ts +29 -0
  455. package/lib/services/api/document.service.d.ts +28 -0
  456. package/lib/services/api/dynamic-crud.service.d.ts +41 -0
  457. package/lib/services/api/energy-analytics.service.d.ts +16 -0
  458. package/lib/services/api/energy-production.service.d.ts +10 -0
  459. package/lib/services/api/energy.service.d.ts +46 -0
  460. package/lib/services/api/entity-comment.service.d.ts +16 -0
  461. package/lib/services/api/event.service.d.ts +10 -0
  462. package/lib/services/api/export.service.d.ts +48 -0
  463. package/lib/services/api/extension.service.d.ts +24 -0
  464. package/lib/services/api/failure.service.d.ts +28 -0
  465. package/lib/services/api/fleet.service.d.ts +71 -0
  466. package/lib/services/api/inactive-component.service.d.ts +10 -0
  467. package/lib/services/api/index.d.ts +101 -0
  468. package/lib/services/api/inspection.service.d.ts +16 -0
  469. package/lib/services/api/intervention-request.service.d.ts +10 -0
  470. package/lib/services/api/intervention.service.d.ts +10 -0
  471. package/lib/services/api/knowledge.service.d.ts +106 -0
  472. package/lib/services/api/license.service.d.ts +14 -0
  473. package/lib/services/api/location.service.d.ts +9 -0
  474. package/lib/services/api/log.service.d.ts +9 -0
  475. package/lib/services/api/login-history.service.d.ts +10 -0
  476. package/lib/services/api/maintenance-plan.service.d.ts +10 -0
  477. package/lib/services/api/maintenance-record.service.d.ts +10 -0
  478. package/lib/services/api/material-consumable.service.d.ts +22 -0
  479. package/lib/services/api/material-instrument.service.d.ts +16 -0
  480. package/lib/services/api/material-item.service.d.ts +28 -0
  481. package/lib/services/api/material-tooling.service.d.ts +22 -0
  482. package/lib/services/api/measurement-unit.service.d.ts +10 -0
  483. package/lib/services/api/misc-crud.service.d.ts +167 -0
  484. package/lib/services/api/note.service.d.ts +14 -0
  485. package/lib/services/api/outage-resource.service.d.ts +15 -0
  486. package/lib/services/api/plant-data.service.d.ts +14 -0
  487. package/lib/services/api/procurement.service.d.ts +27 -0
  488. package/lib/services/api/project.service.d.ts +10 -0
  489. package/lib/services/api/property-template.service.d.ts +10 -0
  490. package/lib/services/api/quality.service.d.ts +16 -0
  491. package/lib/services/api/recurring-event.service.d.ts +10 -0
  492. package/lib/services/api/reporting.service.d.ts +38 -0
  493. package/lib/services/api/reservoir-data.service.d.ts +10 -0
  494. package/lib/services/api/reservoir.service.d.ts +109 -0
  495. package/lib/services/api/room.service.d.ts +10 -0
  496. package/lib/services/api/sandbox.service.d.ts +26 -0
  497. package/lib/services/api/scheduled-report.service.d.ts +10 -0
  498. package/lib/services/api/search.service.d.ts +54 -0
  499. package/lib/services/api/sensor.service.d.ts +17 -0
  500. package/lib/services/api/sla-policy.service.d.ts +10 -0
  501. package/lib/services/api/sla.service.d.ts +10 -0
  502. package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
  503. package/lib/services/api/ticket.service.d.ts +60 -0
  504. package/lib/services/api/time-entry.service.d.ts +10 -0
  505. package/lib/services/api/todo.service.d.ts +10 -0
  506. package/lib/services/api/unit.service.d.ts +10 -0
  507. package/lib/services/api/upload.service.d.ts +50 -0
  508. package/lib/services/api/user.service.d.ts +59 -0
  509. package/lib/services/api/warehouse.service.d.ts +15 -0
  510. package/lib/services/api/warranty.service.d.ts +16 -0
  511. package/lib/services/api/work-order.service.d.ts +17 -0
  512. package/lib/services/api/work-permit.service.d.ts +10 -0
  513. package/lib/services/api/workflow.service.d.ts +33 -0
  514. package/lib/services/auth/auth.service.d.ts +33 -0
  515. package/lib/services/auth/index.d.ts +4 -0
  516. package/lib/services/auth/platform-auth.service.d.ts +16 -0
  517. package/lib/services/auth/sso-auth.service.d.ts +21 -0
  518. package/lib/services/auth/totp.service.d.ts +18 -0
  519. package/lib/services/chat/chat-rest.service.d.ts +40 -0
  520. package/lib/services/chat/chat-websocket.service.d.ts +34 -0
  521. package/lib/services/chat/index.d.ts +2 -0
  522. package/lib/services/index.d.ts +7 -0
  523. package/lib/services/realtime/index.d.ts +1 -0
  524. package/lib/services/realtime/realtime-event.service.d.ts +137 -0
  525. package/lib/services/reservoir/index.d.ts +1 -0
  526. package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
  527. package/lib/services/video/index.d.ts +2 -0
  528. package/lib/services/video/video-call-rest.service.d.ts +19 -0
  529. package/lib/services/video/video-call-websocket.service.d.ts +31 -0
  530. package/lib/tgm-sdk.config.d.ts +36 -0
  531. package/lib/tgm-sdk.module.d.ts +13 -0
  532. package/package.json +40 -0
  533. 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