@decaf-ts/integrations 0.14.0 → 0.14.3

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 (1166) hide show
  1. package/README.md +11 -1
  2. package/dist/integrations.cjs +3317 -2
  3. package/dist/integrations.js +3665 -2
  4. package/lib/cjs/blob/azure/AzureBlobEnvironment.cjs +2 -2
  5. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +2 -2
  6. package/lib/cjs/blob/azure/index.cjs +2 -2
  7. package/lib/cjs/blob/core/BlobEnvironment.cjs +2 -2
  8. package/lib/cjs/blob/core/BlobErrors.cjs +2 -2
  9. package/lib/cjs/blob/core/BlobKey.cjs +2 -2
  10. package/lib/cjs/blob/core/BlobStoreFactory.cjs +2 -2
  11. package/lib/cjs/blob/core/BlobStoreService.cjs +2 -2
  12. package/lib/cjs/blob/core/BlobTypes.cjs +2 -2
  13. package/lib/cjs/blob/core/BlobValue.cjs +2 -2
  14. package/lib/cjs/blob/core/index.cjs +2 -2
  15. package/lib/cjs/blob/gcp/GcsBlobEnvironment.cjs +2 -2
  16. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +2 -2
  17. package/lib/cjs/blob/gcp/index.cjs +2 -2
  18. package/lib/cjs/blob/index.cjs +2 -2
  19. package/lib/cjs/blob/local/LocalBlobEnvironment.cjs +2 -2
  20. package/lib/cjs/blob/local/LocalBlobStoreService.cjs +2 -2
  21. package/lib/cjs/blob/local/index.cjs +2 -2
  22. package/lib/cjs/blob/memory/MemoryBlobEnvironment.cjs +2 -2
  23. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs +2 -2
  24. package/lib/cjs/blob/memory/index.cjs +2 -2
  25. package/lib/cjs/blob/s3/MinioBlobEnvironment.cjs +2 -2
  26. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +2 -2
  27. package/lib/cjs/blob/s3/R2BlobEnvironment.cjs +2 -2
  28. package/lib/cjs/blob/s3/R2BlobStoreService.cjs +2 -2
  29. package/lib/cjs/blob/s3/S3BlobEnvironment.cjs +2 -2
  30. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +2 -2
  31. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +2 -2
  32. package/lib/cjs/blob/s3/index.cjs +2 -2
  33. package/lib/cjs/calendar/CalendarService.cjs +2 -2
  34. package/lib/cjs/calendar/environment.cjs +2 -2
  35. package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +2 -2
  36. package/lib/cjs/calendar/google-calendar/index.cjs +2 -2
  37. package/lib/cjs/calendar/index.cjs +2 -2
  38. package/lib/cjs/calendar/types.cjs +2 -2
  39. package/lib/cjs/calendar/validators/cron.cjs +2 -2
  40. package/lib/cjs/calendar/writers/CalendarFsWriter.cjs +2 -2
  41. package/lib/cjs/calendar/writers/CalenderDownloader.cjs +2 -2
  42. package/lib/cjs/calendar/writers/ICalendarWriter.cjs +2 -2
  43. package/lib/cjs/comms/discord/DiscordService.cjs +2 -2
  44. package/lib/cjs/comms/discord/index.cjs +2 -2
  45. package/lib/cjs/comms/email/EmailService.cjs +2 -2
  46. package/lib/cjs/comms/email/index.cjs +2 -2
  47. package/lib/cjs/comms/email/mime.cjs +2 -2
  48. package/lib/cjs/comms/email/smtp.cjs +2 -2
  49. package/lib/cjs/comms/environment.cjs +2 -2
  50. package/lib/cjs/comms/gmail/GmailService.cjs +2 -2
  51. package/lib/cjs/comms/gmail/index.cjs +2 -2
  52. package/lib/cjs/comms/index.cjs +2 -2
  53. package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +2 -2
  54. package/lib/cjs/comms/outlook/index.cjs +2 -2
  55. package/lib/cjs/comms/slack/SlackService.cjs +2 -2
  56. package/lib/cjs/comms/slack/index.cjs +2 -2
  57. package/lib/cjs/comms/teams/TeamsService.cjs +2 -2
  58. package/lib/cjs/comms/teams/index.cjs +2 -2
  59. package/lib/cjs/comms/telegram/TelegramService.cjs +2 -2
  60. package/lib/cjs/comms/telegram/index.cjs +2 -2
  61. package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +2 -2
  62. package/lib/cjs/comms/whatsapp/index.cjs +2 -2
  63. package/lib/cjs/devops/environment.cjs +2 -2
  64. package/lib/cjs/devops/github/GithubService.cjs +2 -2
  65. package/lib/cjs/devops/github/index.cjs +2 -2
  66. package/lib/cjs/devops/gitlab/GitlabService.cjs +2 -2
  67. package/lib/cjs/devops/gitlab/index.cjs +2 -2
  68. package/lib/cjs/devops/index.cjs +2 -2
  69. package/lib/cjs/docker/DockerComposeService.cjs +2 -2
  70. package/lib/cjs/docker/index.cjs +2 -2
  71. package/lib/cjs/feature-flags/EngineCapabilityFeatureFlag.service.cjs +2 -2
  72. package/lib/cjs/feature-flags/constants.cjs +2 -2
  73. package/lib/cjs/feature-flags/decorators.cjs +2 -2
  74. package/lib/cjs/feature-flags/environment.cjs +2 -2
  75. package/lib/cjs/feature-flags/index.cjs +2 -2
  76. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -2
  77. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -2
  78. package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs +2 -2
  79. package/lib/cjs/feature-flags/readers/index.cjs +2 -2
  80. package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs +2 -2
  81. package/lib/cjs/feature-flags/types.cjs +2 -2
  82. package/lib/cjs/feature-flags/utils.cjs +2 -2
  83. package/lib/cjs/index.cjs +5 -5
  84. package/lib/cjs/io/airtable/AirtableService.cjs +2 -2
  85. package/lib/cjs/io/airtable/index.cjs +2 -2
  86. package/lib/cjs/io/confluence/ConfluenceService.cjs +2 -2
  87. package/lib/cjs/io/confluence/index.cjs +2 -2
  88. package/lib/cjs/io/environment.cjs +2 -2
  89. package/lib/cjs/io/google-docs/GoogleDocsService.cjs +2 -2
  90. package/lib/cjs/io/google-docs/index.cjs +2 -2
  91. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +2 -2
  92. package/lib/cjs/io/google-sheets/index.cjs +2 -2
  93. package/lib/cjs/io/graphql/GraphqlService.cjs +2 -2
  94. package/lib/cjs/io/graphql/index.cjs +2 -2
  95. package/lib/cjs/io/index.cjs +2 -2
  96. package/lib/cjs/io/jira/JiraService.cjs +2 -2
  97. package/lib/cjs/io/jira/index.cjs +2 -2
  98. package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +2 -2
  99. package/lib/cjs/io/microsoft-excel/index.cjs +2 -2
  100. package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +2 -2
  101. package/lib/cjs/io/microsoft-sharepoint/index.cjs +2 -2
  102. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +2 -2
  103. package/lib/cjs/io/spreadsheet/index.cjs +2 -2
  104. package/lib/cjs/keycloak/broker.cjs +2 -2
  105. package/lib/cjs/keycloak/index.cjs +2 -2
  106. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +2 -2
  107. package/lib/cjs/keycloak/services/KeycloakClientService.cjs +2 -2
  108. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +2 -2
  109. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +2 -2
  110. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +2 -2
  111. package/lib/cjs/keycloak/services/KeycloakService.cjs +2 -2
  112. package/lib/cjs/keycloak/services/KeycloakUserService.cjs +2 -2
  113. package/lib/cjs/keycloak/services/index.cjs +2 -2
  114. package/lib/cjs/keycloak/services/runtime.cjs +2 -2
  115. package/lib/cjs/keycloak/types.cjs +2 -2
  116. package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs +2 -2
  117. package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs +2 -2
  118. package/lib/cjs/kibana/builders/index.cjs +2 -2
  119. package/lib/cjs/kibana/helpers.cjs +2 -2
  120. package/lib/cjs/kibana/index.cjs +2 -2
  121. package/lib/cjs/kibana/services/KibanaAuthService.cjs +2 -2
  122. package/lib/cjs/kibana/services/KibanaDashboardService.cjs +2 -2
  123. package/lib/cjs/kibana/services/KibanaDataViewService.cjs +2 -2
  124. package/lib/cjs/kibana/services/KibanaRoleService.cjs +2 -2
  125. package/lib/cjs/kibana/services/KibanaService.cjs +2 -2
  126. package/lib/cjs/kibana/services/KibanaSpaceService.cjs +2 -2
  127. package/lib/cjs/kibana/services/KibanaUserService.cjs +2 -2
  128. package/lib/cjs/kibana/services/index.cjs +2 -2
  129. package/lib/cjs/kibana/services/runtime.cjs +2 -2
  130. package/lib/cjs/kibana/types.cjs +2 -2
  131. package/lib/cjs/loader/ObjectLoader.cjs +2 -2
  132. package/lib/cjs/loader/assets.cjs +2 -2
  133. package/lib/cjs/loader/config.cjs +2 -2
  134. package/lib/cjs/loader/families.cjs +2 -2
  135. package/lib/cjs/loader/index.cjs +2 -2
  136. package/lib/cjs/loader/nest.cjs +2 -2
  137. package/lib/cjs/loader/types.cjs +2 -2
  138. package/lib/cjs/namespaces/index.cjs +2 -2
  139. package/lib/cjs/namespaces/models/authorization-model.cjs +2 -2
  140. package/lib/cjs/namespaces/models/credential.model.cjs +2 -2
  141. package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -2
  142. package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -2
  143. package/lib/cjs/namespaces/models/group.model.cjs +2 -2
  144. package/lib/cjs/namespaces/models/index.cjs +2 -2
  145. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -2
  146. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -2
  147. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -2
  148. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -2
  149. package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -2
  150. package/lib/cjs/namespaces/models/permission.model.cjs +2 -2
  151. package/lib/cjs/namespaces/models/principal.model.cjs +2 -2
  152. package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -2
  153. package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -2
  154. package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -2
  155. package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -2
  156. package/lib/cjs/namespaces/models/role.model.cjs +2 -2
  157. package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -2
  158. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -2
  159. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -2
  160. package/lib/cjs/namespaces/models/tenant.model.cjs +2 -2
  161. package/lib/cjs/namespaces/models/user.model.cjs +2 -2
  162. package/lib/cjs/namespaces/org-based-authorization-system.cjs +2 -2
  163. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +2 -2
  164. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +2 -2
  165. package/lib/cjs/namespaces/rls/index.cjs +2 -2
  166. package/lib/cjs/namespaces/rls/principal-resolver.cjs +2 -2
  167. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +2 -2
  168. package/lib/cjs/namespaces/rls/rls.constants.cjs +2 -2
  169. package/lib/cjs/namespaces/rls/rls.template.cjs +2 -2
  170. package/lib/cjs/namespaces/rls/rls.types.cjs +2 -2
  171. package/lib/cjs/namespaces/rls/session-binding.cjs +2 -2
  172. package/lib/cjs/namespaces/services/authz.service.cjs +2 -2
  173. package/lib/cjs/namespaces/services/bootstrap.service.cjs +2 -2
  174. package/lib/cjs/namespaces/services/credential.service.cjs +2 -2
  175. package/lib/cjs/namespaces/services/effective-permission.service.cjs +2 -2
  176. package/lib/cjs/namespaces/services/group-membership.service.cjs +2 -2
  177. package/lib/cjs/namespaces/services/group.service.cjs +2 -2
  178. package/lib/cjs/namespaces/services/index.cjs +2 -2
  179. package/lib/cjs/namespaces/services/inheritance-block.service.cjs +2 -2
  180. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +2 -2
  181. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +2 -2
  182. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +2 -2
  183. package/lib/cjs/namespaces/services/org-unit.service.cjs +2 -2
  184. package/lib/cjs/namespaces/services/permission.service.cjs +2 -2
  185. package/lib/cjs/namespaces/services/principal.service.cjs +2 -2
  186. package/lib/cjs/namespaces/services/protected-resource.service.cjs +2 -2
  187. package/lib/cjs/namespaces/services/resource-grant.service.cjs +2 -2
  188. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +2 -2
  189. package/lib/cjs/namespaces/services/role-assignment.service.cjs +2 -2
  190. package/lib/cjs/namespaces/services/role-permission.service.cjs +2 -2
  191. package/lib/cjs/namespaces/services/role.service.cjs +2 -2
  192. package/lib/cjs/namespaces/services/storage-binding.service.cjs +2 -2
  193. package/lib/cjs/namespaces/services/system-management.service.cjs +2 -2
  194. package/lib/cjs/namespaces/services/tenant-membership.service.cjs +2 -2
  195. package/lib/cjs/namespaces/services/tenant-profile.service.cjs +2 -2
  196. package/lib/cjs/namespaces/services/tenant.service.cjs +2 -2
  197. package/lib/cjs/namespaces/services/user.service.cjs +2 -2
  198. package/lib/cjs/namespaces/types.cjs +2 -2
  199. package/lib/cjs/namespaces/utils.cjs +2 -2
  200. package/lib/cjs/nest/decorators.cjs +2 -2
  201. package/lib/cjs/nest/index.cjs +2 -2
  202. package/lib/cjs/nest/keycloakAuthHandler.cjs +2 -2
  203. package/lib/cjs/nest/keycloakModule.cjs +2 -2
  204. package/lib/cjs/nest/logging.cjs +2 -2
  205. package/lib/cjs/nest/types.cjs +2 -2
  206. package/lib/cjs/nest/utils.cjs +2 -2
  207. package/lib/cjs/plugins/contract.cjs +2 -2
  208. package/lib/cjs/plugins/index.cjs +2 -2
  209. package/lib/cjs/plugins/kibana/host.cjs +2 -2
  210. package/lib/cjs/plugins/kibana/index.cjs +2 -2
  211. package/lib/cjs/plugins/kibana/installer.cjs +2 -2
  212. package/lib/cjs/plugins/kibana/manifest.cjs +2 -2
  213. package/lib/cjs/plugins/kibana/templates.cjs +2 -2
  214. package/lib/cjs/plugins/kibana/types.cjs +2 -2
  215. package/lib/cjs/plugins/superset/host.cjs +2 -2
  216. package/lib/cjs/plugins/superset/index.cjs +2 -2
  217. package/lib/cjs/plugins/superset/installer.cjs +2 -2
  218. package/lib/cjs/plugins/superset/manifest.cjs +2 -2
  219. package/lib/cjs/plugins/superset/templates.cjs +2 -2
  220. package/lib/cjs/plugins/superset/types.cjs +2 -2
  221. package/lib/cjs/redis/RedisContextLock.cjs +2 -2
  222. package/lib/cjs/redis/RedisDispatch.cjs +2 -2
  223. package/lib/cjs/redis/RedisPaginator.cjs +2 -2
  224. package/lib/cjs/redis/RedisStatement.cjs +2 -2
  225. package/lib/cjs/redis/adapter.cjs +2 -2
  226. package/lib/cjs/redis/constants.cjs +2 -2
  227. package/lib/cjs/redis/handlers.cjs +2 -2
  228. package/lib/cjs/redis/index.cjs +2 -2
  229. package/lib/cjs/redis/serialization.cjs +2 -2
  230. package/lib/cjs/redis/types.cjs +2 -2
  231. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +2 -2
  232. package/lib/cjs/secrets/aws/AwsSecretEnvironment.cjs +2 -2
  233. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -2
  234. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +2 -2
  235. package/lib/cjs/secrets/aws/index.cjs +2 -2
  236. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -2
  237. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +2 -2
  238. package/lib/cjs/secrets/azure/AzureSecretEnvironment.cjs +2 -2
  239. package/lib/cjs/secrets/azure/index.cjs +2 -2
  240. package/lib/cjs/secrets/core/ClientBasedSecretService.cjs +2 -2
  241. package/lib/cjs/secrets/core/SecretEnvironment.cjs +2 -2
  242. package/lib/cjs/secrets/core/SecretErrors.cjs +2 -2
  243. package/lib/cjs/secrets/core/SecretName.cjs +2 -2
  244. package/lib/cjs/secrets/core/SecretReference.cjs +3 -2
  245. package/lib/cjs/secrets/core/SecretSerialization.cjs +2 -2
  246. package/lib/cjs/secrets/core/SecretService.cjs +2 -2
  247. package/lib/cjs/secrets/core/SecretTypes.cjs +2 -2
  248. package/lib/cjs/secrets/core/index.cjs +2 -2
  249. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +2 -2
  250. package/lib/cjs/secrets/fs/FsSecretService.cjs +2 -2
  251. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +2 -2
  252. package/lib/cjs/secrets/fs/index.cjs +2 -2
  253. package/lib/cjs/secrets/gcp/GcpSecretEnvironment.cjs +2 -2
  254. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -2
  255. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +2 -2
  256. package/lib/cjs/secrets/gcp/index.cjs +2 -2
  257. package/lib/cjs/secrets/index.cjs +2 -2
  258. package/lib/cjs/secrets/kubernetes/KubernetesSecretEnvironment.cjs +34 -0
  259. package/lib/cjs/secrets/kubernetes/KubernetesSecretService.cjs +479 -0
  260. package/lib/cjs/secrets/kubernetes/KubernetesSecretServiceConfig.cjs +4 -0
  261. package/lib/cjs/secrets/kubernetes/index.cjs +27 -0
  262. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +2 -2
  263. package/lib/cjs/secrets/model/ModelSecretEnvironment.cjs +2 -2
  264. package/lib/cjs/secrets/model/ModelSecretService.cjs +2 -2
  265. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +2 -2
  266. package/lib/cjs/secrets/model/Secret.cjs +2 -2
  267. package/lib/cjs/secrets/model/index.cjs +2 -2
  268. package/lib/cjs/secrets/onepassword/OnePasswordSecretEnvironment.cjs +2 -2
  269. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -2
  270. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +2 -2
  271. package/lib/cjs/secrets/onepassword/index.cjs +2 -2
  272. package/lib/cjs/secrets/vault/VaultSecretEnvironment.cjs +2 -2
  273. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -2
  274. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +2 -2
  275. package/lib/cjs/secrets/vault/index.cjs +2 -2
  276. package/lib/cjs/sftp/aws/AwsSftpEnvironment.cjs +2 -2
  277. package/lib/cjs/sftp/aws/AwsSftpService.cjs +2 -2
  278. package/lib/cjs/sftp/aws/index.cjs +24 -0
  279. package/lib/cjs/sftp/core/SftpEnvironment.cjs +2 -2
  280. package/lib/cjs/sftp/core/SftpSource.cjs +2 -2
  281. package/lib/cjs/sftp/core/index.cjs +2 -2
  282. package/lib/cjs/sftp/index.cjs +2 -2
  283. package/lib/cjs/sftp/ssh2/Ssh2SftpEnvironment.cjs +2 -2
  284. package/lib/cjs/sftp/ssh2/Ssh2SftpService.cjs +2 -2
  285. package/lib/cjs/sftp/ssh2/index.cjs +24 -0
  286. package/lib/cjs/shared/environmentValue.cjs +2 -2
  287. package/lib/cjs/shared/http/HttpApiService.cjs +2 -2
  288. package/lib/cjs/shared/http/hermeticBoot.cjs +2 -2
  289. package/lib/cjs/shared/http/index.cjs +2 -2
  290. package/lib/cjs/shared/runtime.cjs +2 -2
  291. package/lib/cjs/user-requests/index.cjs +2 -2
  292. package/lib/cjs/utils.cjs +2 -2
  293. package/lib/esm/blob/azure/AzureBlobEnvironment.js +1 -1
  294. package/lib/esm/blob/azure/AzureBlobStoreService.js +1 -1
  295. package/lib/esm/blob/azure/index.js +1 -1
  296. package/lib/esm/blob/core/BlobEnvironment.js +1 -1
  297. package/lib/esm/blob/core/BlobErrors.js +1 -1
  298. package/lib/esm/blob/core/BlobKey.js +1 -1
  299. package/lib/esm/blob/core/BlobStoreFactory.js +1 -1
  300. package/lib/esm/blob/core/BlobStoreService.js +1 -1
  301. package/lib/esm/blob/core/BlobTypes.js +1 -1
  302. package/lib/esm/blob/core/BlobValue.js +1 -1
  303. package/lib/esm/blob/core/index.js +1 -1
  304. package/lib/esm/blob/gcp/GcsBlobEnvironment.js +1 -1
  305. package/lib/esm/blob/gcp/GcsBlobStoreService.js +1 -1
  306. package/lib/esm/blob/gcp/index.js +1 -1
  307. package/lib/esm/blob/index.js +1 -1
  308. package/lib/esm/blob/local/LocalBlobEnvironment.js +1 -1
  309. package/lib/esm/blob/local/LocalBlobStoreService.js +1 -1
  310. package/lib/esm/blob/local/index.js +1 -1
  311. package/lib/esm/blob/memory/MemoryBlobEnvironment.js +1 -1
  312. package/lib/esm/blob/memory/MemoryBlobStoreService.js +1 -1
  313. package/lib/esm/blob/memory/index.js +1 -1
  314. package/lib/esm/blob/s3/MinioBlobEnvironment.js +1 -1
  315. package/lib/esm/blob/s3/MinioBlobStoreService.js +1 -1
  316. package/lib/esm/blob/s3/R2BlobEnvironment.js +1 -1
  317. package/lib/esm/blob/s3/R2BlobStoreService.js +1 -1
  318. package/lib/esm/blob/s3/S3BlobEnvironment.js +1 -1
  319. package/lib/esm/blob/s3/S3BlobStoreService.js +1 -1
  320. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +1 -1
  321. package/lib/esm/blob/s3/index.js +1 -1
  322. package/lib/esm/calendar/CalendarService.js +1 -1
  323. package/lib/esm/calendar/environment.js +1 -1
  324. package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +1 -1
  325. package/lib/esm/calendar/google-calendar/index.js +1 -1
  326. package/lib/esm/calendar/index.js +1 -1
  327. package/lib/esm/calendar/types.js +1 -1
  328. package/lib/esm/calendar/validators/cron.js +1 -1
  329. package/lib/esm/calendar/writers/CalendarFsWriter.js +1 -1
  330. package/lib/esm/calendar/writers/CalenderDownloader.js +1 -1
  331. package/lib/esm/calendar/writers/ICalendarWriter.js +1 -1
  332. package/lib/esm/comms/discord/DiscordService.js +1 -1
  333. package/lib/esm/comms/discord/index.js +1 -1
  334. package/lib/esm/comms/email/EmailService.js +1 -1
  335. package/lib/esm/comms/email/index.js +1 -1
  336. package/lib/esm/comms/email/mime.js +1 -1
  337. package/lib/esm/comms/email/smtp.js +1 -1
  338. package/lib/esm/comms/environment.js +1 -1
  339. package/lib/esm/comms/gmail/GmailService.js +1 -1
  340. package/lib/esm/comms/gmail/index.js +1 -1
  341. package/lib/esm/comms/index.js +1 -1
  342. package/lib/esm/comms/outlook/MicrosoftOutlookService.js +1 -1
  343. package/lib/esm/comms/outlook/index.js +1 -1
  344. package/lib/esm/comms/slack/SlackService.js +1 -1
  345. package/lib/esm/comms/slack/index.js +1 -1
  346. package/lib/esm/comms/teams/TeamsService.js +1 -1
  347. package/lib/esm/comms/teams/index.js +1 -1
  348. package/lib/esm/comms/telegram/TelegramService.js +1 -1
  349. package/lib/esm/comms/telegram/index.js +1 -1
  350. package/lib/esm/comms/whatsapp/WhatsAppService.js +1 -1
  351. package/lib/esm/comms/whatsapp/index.js +1 -1
  352. package/lib/esm/devops/environment.js +1 -1
  353. package/lib/esm/devops/github/GithubService.js +1 -1
  354. package/lib/esm/devops/github/index.js +1 -1
  355. package/lib/esm/devops/gitlab/GitlabService.js +1 -1
  356. package/lib/esm/devops/gitlab/index.js +1 -1
  357. package/lib/esm/devops/index.js +1 -1
  358. package/lib/esm/docker/DockerComposeService.js +1 -1
  359. package/lib/esm/docker/index.js +1 -1
  360. package/lib/esm/feature-flags/EngineCapabilityFeatureFlag.service.js +1 -1
  361. package/lib/esm/feature-flags/constants.js +1 -1
  362. package/lib/esm/feature-flags/decorators.js +1 -1
  363. package/lib/esm/feature-flags/environment.js +1 -1
  364. package/lib/esm/feature-flags/index.js +1 -1
  365. package/lib/esm/feature-flags/models/FeatureFlag.model.js +1 -1
  366. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +1 -1
  367. package/lib/esm/feature-flags/readers/FeatureFlagReader.js +1 -1
  368. package/lib/esm/feature-flags/readers/index.js +1 -1
  369. package/lib/esm/feature-flags/services/FeatureFlag.service.js +1 -1
  370. package/lib/esm/feature-flags/types.js +1 -1
  371. package/lib/esm/feature-flags/utils.js +1 -1
  372. package/lib/esm/index.js +4 -4
  373. package/lib/esm/io/airtable/AirtableService.js +1 -1
  374. package/lib/esm/io/airtable/index.js +1 -1
  375. package/lib/esm/io/confluence/ConfluenceService.js +1 -1
  376. package/lib/esm/io/confluence/index.js +1 -1
  377. package/lib/esm/io/environment.js +1 -1
  378. package/lib/esm/io/google-docs/GoogleDocsService.js +1 -1
  379. package/lib/esm/io/google-docs/index.js +1 -1
  380. package/lib/esm/io/google-sheets/GoogleSheetsService.js +1 -1
  381. package/lib/esm/io/google-sheets/index.js +1 -1
  382. package/lib/esm/io/graphql/GraphqlService.js +1 -1
  383. package/lib/esm/io/graphql/index.js +1 -1
  384. package/lib/esm/io/index.js +1 -1
  385. package/lib/esm/io/jira/JiraService.js +1 -1
  386. package/lib/esm/io/jira/index.js +1 -1
  387. package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +1 -1
  388. package/lib/esm/io/microsoft-excel/index.js +1 -1
  389. package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +1 -1
  390. package/lib/esm/io/microsoft-sharepoint/index.js +1 -1
  391. package/lib/esm/io/spreadsheet/SpreadsheetService.js +1 -1
  392. package/lib/esm/io/spreadsheet/index.js +1 -1
  393. package/lib/esm/keycloak/broker.js +1 -1
  394. package/lib/esm/keycloak/index.js +1 -1
  395. package/lib/esm/keycloak/services/KeycloakAuthService.js +1 -1
  396. package/lib/esm/keycloak/services/KeycloakClientService.js +1 -1
  397. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +1 -1
  398. package/lib/esm/keycloak/services/KeycloakRealmService.js +1 -1
  399. package/lib/esm/keycloak/services/KeycloakRoleService.js +1 -1
  400. package/lib/esm/keycloak/services/KeycloakService.js +1 -1
  401. package/lib/esm/keycloak/services/KeycloakUserService.js +1 -1
  402. package/lib/esm/keycloak/services/index.js +1 -1
  403. package/lib/esm/keycloak/services/runtime.js +1 -1
  404. package/lib/esm/keycloak/types.js +1 -1
  405. package/lib/esm/kibana/builders/KibanaIndexBuilder.js +1 -1
  406. package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js +1 -1
  407. package/lib/esm/kibana/builders/index.js +1 -1
  408. package/lib/esm/kibana/helpers.js +1 -1
  409. package/lib/esm/kibana/index.js +1 -1
  410. package/lib/esm/kibana/services/KibanaAuthService.js +1 -1
  411. package/lib/esm/kibana/services/KibanaDashboardService.js +1 -1
  412. package/lib/esm/kibana/services/KibanaDataViewService.js +1 -1
  413. package/lib/esm/kibana/services/KibanaRoleService.js +1 -1
  414. package/lib/esm/kibana/services/KibanaService.js +1 -1
  415. package/lib/esm/kibana/services/KibanaSpaceService.js +1 -1
  416. package/lib/esm/kibana/services/KibanaUserService.js +1 -1
  417. package/lib/esm/kibana/services/index.js +1 -1
  418. package/lib/esm/kibana/services/runtime.js +1 -1
  419. package/lib/esm/kibana/types.js +1 -1
  420. package/lib/esm/loader/ObjectLoader.js +1 -1
  421. package/lib/esm/loader/assets.js +1 -1
  422. package/lib/esm/loader/config.js +1 -1
  423. package/lib/esm/loader/families.js +1 -1
  424. package/lib/esm/loader/index.js +1 -1
  425. package/lib/esm/loader/nest.js +1 -1
  426. package/lib/esm/loader/types.js +1 -1
  427. package/lib/esm/namespaces/index.js +1 -1
  428. package/lib/esm/namespaces/models/authorization-model.js +1 -1
  429. package/lib/esm/namespaces/models/credential.model.js +1 -1
  430. package/lib/esm/namespaces/models/effective-permission.model.js +1 -1
  431. package/lib/esm/namespaces/models/group-membership.model.js +1 -1
  432. package/lib/esm/namespaces/models/group.model.js +1 -1
  433. package/lib/esm/namespaces/models/index.js +1 -1
  434. package/lib/esm/namespaces/models/inheritance-block.model.js +1 -1
  435. package/lib/esm/namespaces/models/org-unit-closure.model.js +1 -1
  436. package/lib/esm/namespaces/models/org-unit-membership.model.js +1 -1
  437. package/lib/esm/namespaces/models/org-unit-profile.model.js +1 -1
  438. package/lib/esm/namespaces/models/org-unit.model.js +1 -1
  439. package/lib/esm/namespaces/models/permission.model.js +1 -1
  440. package/lib/esm/namespaces/models/principal.model.js +1 -1
  441. package/lib/esm/namespaces/models/protected-resource.model.js +1 -1
  442. package/lib/esm/namespaces/models/resource-grant.model.js +1 -1
  443. package/lib/esm/namespaces/models/role-assignment.model.js +1 -1
  444. package/lib/esm/namespaces/models/role-permission.model.js +1 -1
  445. package/lib/esm/namespaces/models/role.model.js +1 -1
  446. package/lib/esm/namespaces/models/storage-binding.model.js +1 -1
  447. package/lib/esm/namespaces/models/tenant-membership.model.js +1 -1
  448. package/lib/esm/namespaces/models/tenant-profile.model.js +1 -1
  449. package/lib/esm/namespaces/models/tenant.model.js +1 -1
  450. package/lib/esm/namespaces/models/user.model.js +1 -1
  451. package/lib/esm/namespaces/org-based-authorization-system.js +1 -1
  452. package/lib/esm/namespaces/org-based-authorization-system.models.js +1 -1
  453. package/lib/esm/namespaces/org-based-authorization-system.services.js +1 -1
  454. package/lib/esm/namespaces/rls/index.js +1 -1
  455. package/lib/esm/namespaces/rls/principal-resolver.js +1 -1
  456. package/lib/esm/namespaces/rls/rls-bootstrap.service.js +1 -1
  457. package/lib/esm/namespaces/rls/rls.constants.js +1 -1
  458. package/lib/esm/namespaces/rls/rls.template.js +1 -1
  459. package/lib/esm/namespaces/rls/rls.types.js +1 -1
  460. package/lib/esm/namespaces/rls/session-binding.js +1 -1
  461. package/lib/esm/namespaces/services/authz.service.js +1 -1
  462. package/lib/esm/namespaces/services/bootstrap.service.js +1 -1
  463. package/lib/esm/namespaces/services/credential.service.js +1 -1
  464. package/lib/esm/namespaces/services/effective-permission.service.js +1 -1
  465. package/lib/esm/namespaces/services/group-membership.service.js +1 -1
  466. package/lib/esm/namespaces/services/group.service.js +1 -1
  467. package/lib/esm/namespaces/services/index.js +1 -1
  468. package/lib/esm/namespaces/services/inheritance-block.service.js +1 -1
  469. package/lib/esm/namespaces/services/org-unit-closure.service.js +1 -1
  470. package/lib/esm/namespaces/services/org-unit-membership.service.js +1 -1
  471. package/lib/esm/namespaces/services/org-unit-profile.service.js +1 -1
  472. package/lib/esm/namespaces/services/org-unit.service.js +1 -1
  473. package/lib/esm/namespaces/services/permission.service.js +1 -1
  474. package/lib/esm/namespaces/services/principal.service.js +1 -1
  475. package/lib/esm/namespaces/services/protected-resource.service.js +1 -1
  476. package/lib/esm/namespaces/services/resource-grant.service.js +1 -1
  477. package/lib/esm/namespaces/services/resource-lifecycle.service.js +1 -1
  478. package/lib/esm/namespaces/services/role-assignment.service.js +1 -1
  479. package/lib/esm/namespaces/services/role-permission.service.js +1 -1
  480. package/lib/esm/namespaces/services/role.service.js +1 -1
  481. package/lib/esm/namespaces/services/storage-binding.service.js +1 -1
  482. package/lib/esm/namespaces/services/system-management.service.js +1 -1
  483. package/lib/esm/namespaces/services/tenant-membership.service.js +1 -1
  484. package/lib/esm/namespaces/services/tenant-profile.service.js +1 -1
  485. package/lib/esm/namespaces/services/tenant.service.js +1 -1
  486. package/lib/esm/namespaces/services/user.service.js +1 -1
  487. package/lib/esm/namespaces/types.js +1 -1
  488. package/lib/esm/namespaces/utils.js +1 -1
  489. package/lib/esm/nest/decorators.js +1 -1
  490. package/lib/esm/nest/index.js +1 -1
  491. package/lib/esm/nest/keycloakAuthHandler.js +1 -1
  492. package/lib/esm/nest/keycloakModule.js +1 -1
  493. package/lib/esm/nest/logging.js +1 -1
  494. package/lib/esm/nest/types.js +1 -1
  495. package/lib/esm/nest/utils.js +1 -1
  496. package/lib/esm/plugins/contract.js +1 -1
  497. package/lib/esm/plugins/index.js +1 -1
  498. package/lib/esm/plugins/kibana/host.js +1 -1
  499. package/lib/esm/plugins/kibana/index.js +1 -1
  500. package/lib/esm/plugins/kibana/installer.js +1 -1
  501. package/lib/esm/plugins/kibana/manifest.js +1 -1
  502. package/lib/esm/plugins/kibana/templates.js +1 -1
  503. package/lib/esm/plugins/kibana/types.js +1 -1
  504. package/lib/esm/plugins/superset/host.js +1 -1
  505. package/lib/esm/plugins/superset/index.js +1 -1
  506. package/lib/esm/plugins/superset/installer.js +1 -1
  507. package/lib/esm/plugins/superset/manifest.js +1 -1
  508. package/lib/esm/plugins/superset/templates.js +1 -1
  509. package/lib/esm/plugins/superset/types.js +1 -1
  510. package/lib/esm/redis/RedisContextLock.js +1 -1
  511. package/lib/esm/redis/RedisDispatch.js +1 -1
  512. package/lib/esm/redis/RedisPaginator.js +1 -1
  513. package/lib/esm/redis/RedisStatement.js +1 -1
  514. package/lib/esm/redis/adapter.js +1 -1
  515. package/lib/esm/redis/constants.js +1 -1
  516. package/lib/esm/redis/handlers.js +1 -1
  517. package/lib/esm/redis/index.js +1 -1
  518. package/lib/esm/redis/serialization.js +1 -1
  519. package/lib/esm/redis/types.js +1 -1
  520. package/lib/esm/secrets/InfraCredentialBootstrap.js +1 -1
  521. package/lib/esm/secrets/aws/AwsSecretEnvironment.js +1 -1
  522. package/lib/esm/secrets/aws/AwsSecretService.js +1 -1
  523. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +1 -1
  524. package/lib/esm/secrets/aws/index.js +1 -1
  525. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +1 -1
  526. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +1 -1
  527. package/lib/esm/secrets/azure/AzureSecretEnvironment.js +1 -1
  528. package/lib/esm/secrets/azure/index.js +1 -1
  529. package/lib/esm/secrets/core/ClientBasedSecretService.js +1 -1
  530. package/lib/esm/secrets/core/SecretEnvironment.js +1 -1
  531. package/lib/esm/secrets/core/SecretErrors.js +1 -1
  532. package/lib/esm/secrets/core/SecretName.js +1 -1
  533. package/lib/esm/secrets/core/SecretReference.js +2 -1
  534. package/lib/esm/secrets/core/SecretSerialization.js +1 -1
  535. package/lib/esm/secrets/core/SecretService.js +1 -1
  536. package/lib/esm/secrets/core/SecretTypes.js +1 -1
  537. package/lib/esm/secrets/core/index.js +1 -1
  538. package/lib/esm/secrets/fs/FsSecretEnvironment.js +1 -1
  539. package/lib/esm/secrets/fs/FsSecretService.js +1 -1
  540. package/lib/esm/secrets/fs/FsSecretServiceConfig.js +1 -1
  541. package/lib/esm/secrets/fs/index.js +1 -1
  542. package/lib/esm/secrets/gcp/GcpSecretEnvironment.js +1 -1
  543. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +1 -1
  544. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +1 -1
  545. package/lib/esm/secrets/gcp/index.js +1 -1
  546. package/lib/esm/secrets/index.js +1 -1
  547. package/lib/esm/secrets/kubernetes/KubernetesSecretEnvironment.js +30 -0
  548. package/lib/esm/secrets/kubernetes/KubernetesSecretService.js +474 -0
  549. package/lib/esm/secrets/kubernetes/KubernetesSecretServiceConfig.js +9 -0
  550. package/lib/esm/secrets/kubernetes/index.js +10 -0
  551. package/lib/esm/secrets/model/ModelSecretCrypto.js +1 -1
  552. package/lib/esm/secrets/model/ModelSecretEnvironment.js +1 -1
  553. package/lib/esm/secrets/model/ModelSecretService.js +1 -1
  554. package/lib/esm/secrets/model/ModelSecretServiceConfig.js +1 -1
  555. package/lib/esm/secrets/model/Secret.js +1 -1
  556. package/lib/esm/secrets/model/index.js +1 -1
  557. package/lib/esm/secrets/onepassword/OnePasswordSecretEnvironment.js +1 -1
  558. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +1 -1
  559. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +1 -1
  560. package/lib/esm/secrets/onepassword/index.js +1 -1
  561. package/lib/esm/secrets/vault/VaultSecretEnvironment.js +1 -1
  562. package/lib/esm/secrets/vault/VaultSecretService.js +1 -1
  563. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +1 -1
  564. package/lib/esm/secrets/vault/index.js +1 -1
  565. package/lib/esm/sftp/aws/AwsSftpEnvironment.js +1 -1
  566. package/lib/esm/sftp/aws/AwsSftpService.js +1 -1
  567. package/lib/esm/sftp/aws/index.js +7 -0
  568. package/lib/esm/sftp/core/SftpEnvironment.js +1 -1
  569. package/lib/esm/sftp/core/SftpSource.js +1 -1
  570. package/lib/esm/sftp/core/index.js +1 -1
  571. package/lib/esm/sftp/index.js +1 -1
  572. package/lib/esm/sftp/ssh2/Ssh2SftpEnvironment.js +1 -1
  573. package/lib/esm/sftp/ssh2/Ssh2SftpService.js +1 -1
  574. package/lib/esm/sftp/ssh2/index.js +7 -0
  575. package/lib/esm/shared/environmentValue.js +1 -1
  576. package/lib/esm/shared/http/HttpApiService.js +1 -1
  577. package/lib/esm/shared/http/hermeticBoot.js +1 -1
  578. package/lib/esm/shared/http/index.js +1 -1
  579. package/lib/esm/shared/runtime.js +1 -1
  580. package/lib/esm/user-requests/index.js +1 -1
  581. package/lib/esm/utils.js +1 -1
  582. package/lib/types/index.d.cts +2 -2
  583. package/lib/types/index.d.mts +2 -2
  584. package/lib/types/secrets/core/SecretTypes.d.cts +13 -1
  585. package/lib/types/secrets/core/SecretTypes.d.mts +13 -1
  586. package/lib/types/secrets/kubernetes/KubernetesSecretEnvironment.d.cts +34 -0
  587. package/lib/types/secrets/kubernetes/KubernetesSecretEnvironment.d.mts +34 -0
  588. package/lib/types/secrets/kubernetes/KubernetesSecretService.d.cts +45 -0
  589. package/lib/types/secrets/kubernetes/KubernetesSecretService.d.mts +45 -0
  590. package/lib/types/secrets/kubernetes/KubernetesSecretServiceConfig.d.cts +49 -0
  591. package/lib/types/secrets/kubernetes/KubernetesSecretServiceConfig.d.mts +49 -0
  592. package/lib/types/secrets/kubernetes/index.d.cts +9 -0
  593. package/lib/types/secrets/kubernetes/index.d.mts +9 -0
  594. package/lib/types/sftp/aws/index.d.cts +6 -0
  595. package/lib/types/sftp/aws/index.d.mts +6 -0
  596. package/lib/types/sftp/ssh2/index.d.cts +6 -0
  597. package/lib/types/sftp/ssh2/index.d.mts +6 -0
  598. package/package.json +180 -55
  599. package/dist/integrations.cjs.map +0 -1
  600. package/dist/integrations.js.map +0 -1
  601. package/lib/cjs/blob/azure/AzureBlobEnvironment.cjs.map +0 -1
  602. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +0 -1
  603. package/lib/cjs/blob/azure/index.cjs.map +0 -1
  604. package/lib/cjs/blob/core/BlobEnvironment.cjs.map +0 -1
  605. package/lib/cjs/blob/core/BlobErrors.cjs.map +0 -1
  606. package/lib/cjs/blob/core/BlobKey.cjs.map +0 -1
  607. package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +0 -1
  608. package/lib/cjs/blob/core/BlobStoreService.cjs.map +0 -1
  609. package/lib/cjs/blob/core/BlobTypes.cjs.map +0 -1
  610. package/lib/cjs/blob/core/BlobValue.cjs.map +0 -1
  611. package/lib/cjs/blob/core/index.cjs.map +0 -1
  612. package/lib/cjs/blob/gcp/GcsBlobEnvironment.cjs.map +0 -1
  613. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +0 -1
  614. package/lib/cjs/blob/gcp/index.cjs.map +0 -1
  615. package/lib/cjs/blob/index.cjs.map +0 -1
  616. package/lib/cjs/blob/local/LocalBlobEnvironment.cjs.map +0 -1
  617. package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +0 -1
  618. package/lib/cjs/blob/local/index.cjs.map +0 -1
  619. package/lib/cjs/blob/memory/MemoryBlobEnvironment.cjs.map +0 -1
  620. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +0 -1
  621. package/lib/cjs/blob/memory/index.cjs.map +0 -1
  622. package/lib/cjs/blob/s3/MinioBlobEnvironment.cjs.map +0 -1
  623. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +0 -1
  624. package/lib/cjs/blob/s3/R2BlobEnvironment.cjs.map +0 -1
  625. package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +0 -1
  626. package/lib/cjs/blob/s3/S3BlobEnvironment.cjs.map +0 -1
  627. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +0 -1
  628. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +0 -1
  629. package/lib/cjs/blob/s3/index.cjs.map +0 -1
  630. package/lib/cjs/calendar/CalendarService.cjs.map +0 -1
  631. package/lib/cjs/calendar/environment.cjs.map +0 -1
  632. package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +0 -1
  633. package/lib/cjs/calendar/google-calendar/index.cjs.map +0 -1
  634. package/lib/cjs/calendar/index.cjs.map +0 -1
  635. package/lib/cjs/calendar/types.cjs.map +0 -1
  636. package/lib/cjs/calendar/validators/cron.cjs.map +0 -1
  637. package/lib/cjs/calendar/writers/CalendarFsWriter.cjs.map +0 -1
  638. package/lib/cjs/calendar/writers/CalenderDownloader.cjs.map +0 -1
  639. package/lib/cjs/calendar/writers/ICalendarWriter.cjs.map +0 -1
  640. package/lib/cjs/comms/discord/DiscordService.cjs.map +0 -1
  641. package/lib/cjs/comms/discord/index.cjs.map +0 -1
  642. package/lib/cjs/comms/email/EmailService.cjs.map +0 -1
  643. package/lib/cjs/comms/email/index.cjs.map +0 -1
  644. package/lib/cjs/comms/email/mime.cjs.map +0 -1
  645. package/lib/cjs/comms/email/smtp.cjs.map +0 -1
  646. package/lib/cjs/comms/environment.cjs.map +0 -1
  647. package/lib/cjs/comms/gmail/GmailService.cjs.map +0 -1
  648. package/lib/cjs/comms/gmail/index.cjs.map +0 -1
  649. package/lib/cjs/comms/index.cjs.map +0 -1
  650. package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +0 -1
  651. package/lib/cjs/comms/outlook/index.cjs.map +0 -1
  652. package/lib/cjs/comms/slack/SlackService.cjs.map +0 -1
  653. package/lib/cjs/comms/slack/index.cjs.map +0 -1
  654. package/lib/cjs/comms/teams/TeamsService.cjs.map +0 -1
  655. package/lib/cjs/comms/teams/index.cjs.map +0 -1
  656. package/lib/cjs/comms/telegram/TelegramService.cjs.map +0 -1
  657. package/lib/cjs/comms/telegram/index.cjs.map +0 -1
  658. package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +0 -1
  659. package/lib/cjs/comms/whatsapp/index.cjs.map +0 -1
  660. package/lib/cjs/devops/environment.cjs.map +0 -1
  661. package/lib/cjs/devops/github/GithubService.cjs.map +0 -1
  662. package/lib/cjs/devops/github/index.cjs.map +0 -1
  663. package/lib/cjs/devops/gitlab/GitlabService.cjs.map +0 -1
  664. package/lib/cjs/devops/gitlab/index.cjs.map +0 -1
  665. package/lib/cjs/devops/index.cjs.map +0 -1
  666. package/lib/cjs/docker/DockerComposeService.cjs.map +0 -1
  667. package/lib/cjs/docker/index.cjs.map +0 -1
  668. package/lib/cjs/feature-flags/EngineCapabilityFeatureFlag.service.cjs.map +0 -1
  669. package/lib/cjs/feature-flags/constants.cjs.map +0 -1
  670. package/lib/cjs/feature-flags/decorators.cjs.map +0 -1
  671. package/lib/cjs/feature-flags/environment.cjs.map +0 -1
  672. package/lib/cjs/feature-flags/index.cjs.map +0 -1
  673. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +0 -1
  674. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +0 -1
  675. package/lib/cjs/feature-flags/readers/FeatureFlagReader.cjs.map +0 -1
  676. package/lib/cjs/feature-flags/readers/index.cjs.map +0 -1
  677. package/lib/cjs/feature-flags/services/FeatureFlag.service.cjs.map +0 -1
  678. package/lib/cjs/feature-flags/types.cjs.map +0 -1
  679. package/lib/cjs/feature-flags/utils.cjs.map +0 -1
  680. package/lib/cjs/index.cjs.map +0 -1
  681. package/lib/cjs/io/airtable/AirtableService.cjs.map +0 -1
  682. package/lib/cjs/io/airtable/index.cjs.map +0 -1
  683. package/lib/cjs/io/confluence/ConfluenceService.cjs.map +0 -1
  684. package/lib/cjs/io/confluence/index.cjs.map +0 -1
  685. package/lib/cjs/io/environment.cjs.map +0 -1
  686. package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +0 -1
  687. package/lib/cjs/io/google-docs/index.cjs.map +0 -1
  688. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +0 -1
  689. package/lib/cjs/io/google-sheets/index.cjs.map +0 -1
  690. package/lib/cjs/io/graphql/GraphqlService.cjs.map +0 -1
  691. package/lib/cjs/io/graphql/index.cjs.map +0 -1
  692. package/lib/cjs/io/index.cjs.map +0 -1
  693. package/lib/cjs/io/jira/JiraService.cjs.map +0 -1
  694. package/lib/cjs/io/jira/index.cjs.map +0 -1
  695. package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +0 -1
  696. package/lib/cjs/io/microsoft-excel/index.cjs.map +0 -1
  697. package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +0 -1
  698. package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +0 -1
  699. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +0 -1
  700. package/lib/cjs/io/spreadsheet/index.cjs.map +0 -1
  701. package/lib/cjs/keycloak/broker.cjs.map +0 -1
  702. package/lib/cjs/keycloak/index.cjs.map +0 -1
  703. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +0 -1
  704. package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +0 -1
  705. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +0 -1
  706. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +0 -1
  707. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +0 -1
  708. package/lib/cjs/keycloak/services/KeycloakService.cjs.map +0 -1
  709. package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +0 -1
  710. package/lib/cjs/keycloak/services/index.cjs.map +0 -1
  711. package/lib/cjs/keycloak/services/runtime.cjs.map +0 -1
  712. package/lib/cjs/keycloak/types.cjs.map +0 -1
  713. package/lib/cjs/kibana/builders/KibanaIndexBuilder.cjs.map +0 -1
  714. package/lib/cjs/kibana/builders/KibanaIndexBuilderCollection.cjs.map +0 -1
  715. package/lib/cjs/kibana/builders/index.cjs.map +0 -1
  716. package/lib/cjs/kibana/helpers.cjs.map +0 -1
  717. package/lib/cjs/kibana/index.cjs.map +0 -1
  718. package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +0 -1
  719. package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +0 -1
  720. package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +0 -1
  721. package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +0 -1
  722. package/lib/cjs/kibana/services/KibanaService.cjs.map +0 -1
  723. package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +0 -1
  724. package/lib/cjs/kibana/services/KibanaUserService.cjs.map +0 -1
  725. package/lib/cjs/kibana/services/index.cjs.map +0 -1
  726. package/lib/cjs/kibana/services/runtime.cjs.map +0 -1
  727. package/lib/cjs/kibana/types.cjs.map +0 -1
  728. package/lib/cjs/loader/ObjectLoader.cjs.map +0 -1
  729. package/lib/cjs/loader/assets.cjs.map +0 -1
  730. package/lib/cjs/loader/config.cjs.map +0 -1
  731. package/lib/cjs/loader/families.cjs.map +0 -1
  732. package/lib/cjs/loader/index.cjs.map +0 -1
  733. package/lib/cjs/loader/nest.cjs.map +0 -1
  734. package/lib/cjs/loader/types.cjs.map +0 -1
  735. package/lib/cjs/namespaces/index.cjs.map +0 -1
  736. package/lib/cjs/namespaces/models/authorization-model.cjs.map +0 -1
  737. package/lib/cjs/namespaces/models/credential.model.cjs.map +0 -1
  738. package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +0 -1
  739. package/lib/cjs/namespaces/models/group-membership.model.cjs.map +0 -1
  740. package/lib/cjs/namespaces/models/group.model.cjs.map +0 -1
  741. package/lib/cjs/namespaces/models/index.cjs.map +0 -1
  742. package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +0 -1
  743. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +0 -1
  744. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +0 -1
  745. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +0 -1
  746. package/lib/cjs/namespaces/models/org-unit.model.cjs.map +0 -1
  747. package/lib/cjs/namespaces/models/permission.model.cjs.map +0 -1
  748. package/lib/cjs/namespaces/models/principal.model.cjs.map +0 -1
  749. package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +0 -1
  750. package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +0 -1
  751. package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +0 -1
  752. package/lib/cjs/namespaces/models/role-permission.model.cjs.map +0 -1
  753. package/lib/cjs/namespaces/models/role.model.cjs.map +0 -1
  754. package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +0 -1
  755. package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +0 -1
  756. package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +0 -1
  757. package/lib/cjs/namespaces/models/tenant.model.cjs.map +0 -1
  758. package/lib/cjs/namespaces/models/user.model.cjs.map +0 -1
  759. package/lib/cjs/namespaces/org-based-authorization-system.cjs.map +0 -1
  760. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs.map +0 -1
  761. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs.map +0 -1
  762. package/lib/cjs/namespaces/rls/index.cjs.map +0 -1
  763. package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +0 -1
  764. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +0 -1
  765. package/lib/cjs/namespaces/rls/rls.constants.cjs.map +0 -1
  766. package/lib/cjs/namespaces/rls/rls.template.cjs.map +0 -1
  767. package/lib/cjs/namespaces/rls/rls.types.cjs.map +0 -1
  768. package/lib/cjs/namespaces/rls/session-binding.cjs.map +0 -1
  769. package/lib/cjs/namespaces/services/authz.service.cjs.map +0 -1
  770. package/lib/cjs/namespaces/services/bootstrap.service.cjs.map +0 -1
  771. package/lib/cjs/namespaces/services/credential.service.cjs.map +0 -1
  772. package/lib/cjs/namespaces/services/effective-permission.service.cjs.map +0 -1
  773. package/lib/cjs/namespaces/services/group-membership.service.cjs.map +0 -1
  774. package/lib/cjs/namespaces/services/group.service.cjs.map +0 -1
  775. package/lib/cjs/namespaces/services/index.cjs.map +0 -1
  776. package/lib/cjs/namespaces/services/inheritance-block.service.cjs.map +0 -1
  777. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs.map +0 -1
  778. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs.map +0 -1
  779. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs.map +0 -1
  780. package/lib/cjs/namespaces/services/org-unit.service.cjs.map +0 -1
  781. package/lib/cjs/namespaces/services/permission.service.cjs.map +0 -1
  782. package/lib/cjs/namespaces/services/principal.service.cjs.map +0 -1
  783. package/lib/cjs/namespaces/services/protected-resource.service.cjs.map +0 -1
  784. package/lib/cjs/namespaces/services/resource-grant.service.cjs.map +0 -1
  785. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs.map +0 -1
  786. package/lib/cjs/namespaces/services/role-assignment.service.cjs.map +0 -1
  787. package/lib/cjs/namespaces/services/role-permission.service.cjs.map +0 -1
  788. package/lib/cjs/namespaces/services/role.service.cjs.map +0 -1
  789. package/lib/cjs/namespaces/services/storage-binding.service.cjs.map +0 -1
  790. package/lib/cjs/namespaces/services/system-management.service.cjs.map +0 -1
  791. package/lib/cjs/namespaces/services/tenant-membership.service.cjs.map +0 -1
  792. package/lib/cjs/namespaces/services/tenant-profile.service.cjs.map +0 -1
  793. package/lib/cjs/namespaces/services/tenant.service.cjs.map +0 -1
  794. package/lib/cjs/namespaces/services/user.service.cjs.map +0 -1
  795. package/lib/cjs/namespaces/types.cjs.map +0 -1
  796. package/lib/cjs/namespaces/utils.cjs.map +0 -1
  797. package/lib/cjs/nest/decorators.cjs.map +0 -1
  798. package/lib/cjs/nest/index.cjs.map +0 -1
  799. package/lib/cjs/nest/keycloakAuthHandler.cjs.map +0 -1
  800. package/lib/cjs/nest/keycloakModule.cjs.map +0 -1
  801. package/lib/cjs/nest/logging.cjs.map +0 -1
  802. package/lib/cjs/nest/types.cjs.map +0 -1
  803. package/lib/cjs/nest/utils.cjs.map +0 -1
  804. package/lib/cjs/plugins/contract.cjs.map +0 -1
  805. package/lib/cjs/plugins/index.cjs.map +0 -1
  806. package/lib/cjs/plugins/kibana/host.cjs.map +0 -1
  807. package/lib/cjs/plugins/kibana/index.cjs.map +0 -1
  808. package/lib/cjs/plugins/kibana/installer.cjs.map +0 -1
  809. package/lib/cjs/plugins/kibana/manifest.cjs.map +0 -1
  810. package/lib/cjs/plugins/kibana/templates.cjs.map +0 -1
  811. package/lib/cjs/plugins/kibana/types.cjs.map +0 -1
  812. package/lib/cjs/plugins/superset/host.cjs.map +0 -1
  813. package/lib/cjs/plugins/superset/index.cjs.map +0 -1
  814. package/lib/cjs/plugins/superset/installer.cjs.map +0 -1
  815. package/lib/cjs/plugins/superset/manifest.cjs.map +0 -1
  816. package/lib/cjs/plugins/superset/templates.cjs.map +0 -1
  817. package/lib/cjs/plugins/superset/types.cjs.map +0 -1
  818. package/lib/cjs/redis/RedisContextLock.cjs.map +0 -1
  819. package/lib/cjs/redis/RedisDispatch.cjs.map +0 -1
  820. package/lib/cjs/redis/RedisPaginator.cjs.map +0 -1
  821. package/lib/cjs/redis/RedisStatement.cjs.map +0 -1
  822. package/lib/cjs/redis/adapter.cjs.map +0 -1
  823. package/lib/cjs/redis/constants.cjs.map +0 -1
  824. package/lib/cjs/redis/handlers.cjs.map +0 -1
  825. package/lib/cjs/redis/index.cjs.map +0 -1
  826. package/lib/cjs/redis/serialization.cjs.map +0 -1
  827. package/lib/cjs/redis/types.cjs.map +0 -1
  828. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +0 -1
  829. package/lib/cjs/secrets/aws/AwsSecretEnvironment.cjs.map +0 -1
  830. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +0 -1
  831. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +0 -1
  832. package/lib/cjs/secrets/aws/index.cjs.map +0 -1
  833. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +0 -1
  834. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +0 -1
  835. package/lib/cjs/secrets/azure/AzureSecretEnvironment.cjs.map +0 -1
  836. package/lib/cjs/secrets/azure/index.cjs.map +0 -1
  837. package/lib/cjs/secrets/core/ClientBasedSecretService.cjs.map +0 -1
  838. package/lib/cjs/secrets/core/SecretEnvironment.cjs.map +0 -1
  839. package/lib/cjs/secrets/core/SecretErrors.cjs.map +0 -1
  840. package/lib/cjs/secrets/core/SecretName.cjs.map +0 -1
  841. package/lib/cjs/secrets/core/SecretReference.cjs.map +0 -1
  842. package/lib/cjs/secrets/core/SecretSerialization.cjs.map +0 -1
  843. package/lib/cjs/secrets/core/SecretService.cjs.map +0 -1
  844. package/lib/cjs/secrets/core/SecretTypes.cjs.map +0 -1
  845. package/lib/cjs/secrets/core/index.cjs.map +0 -1
  846. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +0 -1
  847. package/lib/cjs/secrets/fs/FsSecretService.cjs.map +0 -1
  848. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +0 -1
  849. package/lib/cjs/secrets/fs/index.cjs.map +0 -1
  850. package/lib/cjs/secrets/gcp/GcpSecretEnvironment.cjs.map +0 -1
  851. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +0 -1
  852. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +0 -1
  853. package/lib/cjs/secrets/gcp/index.cjs.map +0 -1
  854. package/lib/cjs/secrets/index.cjs.map +0 -1
  855. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +0 -1
  856. package/lib/cjs/secrets/model/ModelSecretEnvironment.cjs.map +0 -1
  857. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +0 -1
  858. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +0 -1
  859. package/lib/cjs/secrets/model/Secret.cjs.map +0 -1
  860. package/lib/cjs/secrets/model/index.cjs.map +0 -1
  861. package/lib/cjs/secrets/onepassword/OnePasswordSecretEnvironment.cjs.map +0 -1
  862. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +0 -1
  863. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +0 -1
  864. package/lib/cjs/secrets/onepassword/index.cjs.map +0 -1
  865. package/lib/cjs/secrets/vault/VaultSecretEnvironment.cjs.map +0 -1
  866. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +0 -1
  867. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +0 -1
  868. package/lib/cjs/secrets/vault/index.cjs.map +0 -1
  869. package/lib/cjs/sftp/aws/AwsSftpEnvironment.cjs.map +0 -1
  870. package/lib/cjs/sftp/aws/AwsSftpService.cjs.map +0 -1
  871. package/lib/cjs/sftp/core/SftpEnvironment.cjs.map +0 -1
  872. package/lib/cjs/sftp/core/SftpSource.cjs.map +0 -1
  873. package/lib/cjs/sftp/core/index.cjs.map +0 -1
  874. package/lib/cjs/sftp/index.cjs.map +0 -1
  875. package/lib/cjs/sftp/ssh2/Ssh2SftpEnvironment.cjs.map +0 -1
  876. package/lib/cjs/sftp/ssh2/Ssh2SftpService.cjs.map +0 -1
  877. package/lib/cjs/shared/environmentValue.cjs.map +0 -1
  878. package/lib/cjs/shared/http/HttpApiService.cjs.map +0 -1
  879. package/lib/cjs/shared/http/hermeticBoot.cjs.map +0 -1
  880. package/lib/cjs/shared/http/index.cjs.map +0 -1
  881. package/lib/cjs/shared/runtime.cjs.map +0 -1
  882. package/lib/cjs/user-requests/index.cjs.map +0 -1
  883. package/lib/cjs/utils.cjs.map +0 -1
  884. package/lib/esm/blob/azure/AzureBlobEnvironment.js.map +0 -1
  885. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +0 -1
  886. package/lib/esm/blob/azure/index.js.map +0 -1
  887. package/lib/esm/blob/core/BlobEnvironment.js.map +0 -1
  888. package/lib/esm/blob/core/BlobErrors.js.map +0 -1
  889. package/lib/esm/blob/core/BlobKey.js.map +0 -1
  890. package/lib/esm/blob/core/BlobStoreFactory.js.map +0 -1
  891. package/lib/esm/blob/core/BlobStoreService.js.map +0 -1
  892. package/lib/esm/blob/core/BlobTypes.js.map +0 -1
  893. package/lib/esm/blob/core/BlobValue.js.map +0 -1
  894. package/lib/esm/blob/core/index.js.map +0 -1
  895. package/lib/esm/blob/gcp/GcsBlobEnvironment.js.map +0 -1
  896. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +0 -1
  897. package/lib/esm/blob/gcp/index.js.map +0 -1
  898. package/lib/esm/blob/index.js.map +0 -1
  899. package/lib/esm/blob/local/LocalBlobEnvironment.js.map +0 -1
  900. package/lib/esm/blob/local/LocalBlobStoreService.js.map +0 -1
  901. package/lib/esm/blob/local/index.js.map +0 -1
  902. package/lib/esm/blob/memory/MemoryBlobEnvironment.js.map +0 -1
  903. package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +0 -1
  904. package/lib/esm/blob/memory/index.js.map +0 -1
  905. package/lib/esm/blob/s3/MinioBlobEnvironment.js.map +0 -1
  906. package/lib/esm/blob/s3/MinioBlobStoreService.js.map +0 -1
  907. package/lib/esm/blob/s3/R2BlobEnvironment.js.map +0 -1
  908. package/lib/esm/blob/s3/R2BlobStoreService.js.map +0 -1
  909. package/lib/esm/blob/s3/S3BlobEnvironment.js.map +0 -1
  910. package/lib/esm/blob/s3/S3BlobStoreService.js.map +0 -1
  911. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +0 -1
  912. package/lib/esm/blob/s3/index.js.map +0 -1
  913. package/lib/esm/calendar/CalendarService.js.map +0 -1
  914. package/lib/esm/calendar/environment.js.map +0 -1
  915. package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +0 -1
  916. package/lib/esm/calendar/google-calendar/index.js.map +0 -1
  917. package/lib/esm/calendar/index.js.map +0 -1
  918. package/lib/esm/calendar/types.js.map +0 -1
  919. package/lib/esm/calendar/validators/cron.js.map +0 -1
  920. package/lib/esm/calendar/writers/CalendarFsWriter.js.map +0 -1
  921. package/lib/esm/calendar/writers/CalenderDownloader.js.map +0 -1
  922. package/lib/esm/calendar/writers/ICalendarWriter.js.map +0 -1
  923. package/lib/esm/comms/discord/DiscordService.js.map +0 -1
  924. package/lib/esm/comms/discord/index.js.map +0 -1
  925. package/lib/esm/comms/email/EmailService.js.map +0 -1
  926. package/lib/esm/comms/email/index.js.map +0 -1
  927. package/lib/esm/comms/email/mime.js.map +0 -1
  928. package/lib/esm/comms/email/smtp.js.map +0 -1
  929. package/lib/esm/comms/environment.js.map +0 -1
  930. package/lib/esm/comms/gmail/GmailService.js.map +0 -1
  931. package/lib/esm/comms/gmail/index.js.map +0 -1
  932. package/lib/esm/comms/index.js.map +0 -1
  933. package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +0 -1
  934. package/lib/esm/comms/outlook/index.js.map +0 -1
  935. package/lib/esm/comms/slack/SlackService.js.map +0 -1
  936. package/lib/esm/comms/slack/index.js.map +0 -1
  937. package/lib/esm/comms/teams/TeamsService.js.map +0 -1
  938. package/lib/esm/comms/teams/index.js.map +0 -1
  939. package/lib/esm/comms/telegram/TelegramService.js.map +0 -1
  940. package/lib/esm/comms/telegram/index.js.map +0 -1
  941. package/lib/esm/comms/whatsapp/WhatsAppService.js.map +0 -1
  942. package/lib/esm/comms/whatsapp/index.js.map +0 -1
  943. package/lib/esm/devops/environment.js.map +0 -1
  944. package/lib/esm/devops/github/GithubService.js.map +0 -1
  945. package/lib/esm/devops/github/index.js.map +0 -1
  946. package/lib/esm/devops/gitlab/GitlabService.js.map +0 -1
  947. package/lib/esm/devops/gitlab/index.js.map +0 -1
  948. package/lib/esm/devops/index.js.map +0 -1
  949. package/lib/esm/docker/DockerComposeService.js.map +0 -1
  950. package/lib/esm/docker/index.js.map +0 -1
  951. package/lib/esm/feature-flags/EngineCapabilityFeatureFlag.service.js.map +0 -1
  952. package/lib/esm/feature-flags/constants.js.map +0 -1
  953. package/lib/esm/feature-flags/decorators.js.map +0 -1
  954. package/lib/esm/feature-flags/environment.js.map +0 -1
  955. package/lib/esm/feature-flags/index.js.map +0 -1
  956. package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +0 -1
  957. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +0 -1
  958. package/lib/esm/feature-flags/readers/FeatureFlagReader.js.map +0 -1
  959. package/lib/esm/feature-flags/readers/index.js.map +0 -1
  960. package/lib/esm/feature-flags/services/FeatureFlag.service.js.map +0 -1
  961. package/lib/esm/feature-flags/types.js.map +0 -1
  962. package/lib/esm/feature-flags/utils.js.map +0 -1
  963. package/lib/esm/index.js.map +0 -1
  964. package/lib/esm/io/airtable/AirtableService.js.map +0 -1
  965. package/lib/esm/io/airtable/index.js.map +0 -1
  966. package/lib/esm/io/confluence/ConfluenceService.js.map +0 -1
  967. package/lib/esm/io/confluence/index.js.map +0 -1
  968. package/lib/esm/io/environment.js.map +0 -1
  969. package/lib/esm/io/google-docs/GoogleDocsService.js.map +0 -1
  970. package/lib/esm/io/google-docs/index.js.map +0 -1
  971. package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +0 -1
  972. package/lib/esm/io/google-sheets/index.js.map +0 -1
  973. package/lib/esm/io/graphql/GraphqlService.js.map +0 -1
  974. package/lib/esm/io/graphql/index.js.map +0 -1
  975. package/lib/esm/io/index.js.map +0 -1
  976. package/lib/esm/io/jira/JiraService.js.map +0 -1
  977. package/lib/esm/io/jira/index.js.map +0 -1
  978. package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +0 -1
  979. package/lib/esm/io/microsoft-excel/index.js.map +0 -1
  980. package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +0 -1
  981. package/lib/esm/io/microsoft-sharepoint/index.js.map +0 -1
  982. package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +0 -1
  983. package/lib/esm/io/spreadsheet/index.js.map +0 -1
  984. package/lib/esm/keycloak/broker.js.map +0 -1
  985. package/lib/esm/keycloak/index.js.map +0 -1
  986. package/lib/esm/keycloak/services/KeycloakAuthService.js.map +0 -1
  987. package/lib/esm/keycloak/services/KeycloakClientService.js.map +0 -1
  988. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +0 -1
  989. package/lib/esm/keycloak/services/KeycloakRealmService.js.map +0 -1
  990. package/lib/esm/keycloak/services/KeycloakRoleService.js.map +0 -1
  991. package/lib/esm/keycloak/services/KeycloakService.js.map +0 -1
  992. package/lib/esm/keycloak/services/KeycloakUserService.js.map +0 -1
  993. package/lib/esm/keycloak/services/index.js.map +0 -1
  994. package/lib/esm/keycloak/services/runtime.js.map +0 -1
  995. package/lib/esm/keycloak/types.js.map +0 -1
  996. package/lib/esm/kibana/builders/KibanaIndexBuilder.js.map +0 -1
  997. package/lib/esm/kibana/builders/KibanaIndexBuilderCollection.js.map +0 -1
  998. package/lib/esm/kibana/builders/index.js.map +0 -1
  999. package/lib/esm/kibana/helpers.js.map +0 -1
  1000. package/lib/esm/kibana/index.js.map +0 -1
  1001. package/lib/esm/kibana/services/KibanaAuthService.js.map +0 -1
  1002. package/lib/esm/kibana/services/KibanaDashboardService.js.map +0 -1
  1003. package/lib/esm/kibana/services/KibanaDataViewService.js.map +0 -1
  1004. package/lib/esm/kibana/services/KibanaRoleService.js.map +0 -1
  1005. package/lib/esm/kibana/services/KibanaService.js.map +0 -1
  1006. package/lib/esm/kibana/services/KibanaSpaceService.js.map +0 -1
  1007. package/lib/esm/kibana/services/KibanaUserService.js.map +0 -1
  1008. package/lib/esm/kibana/services/index.js.map +0 -1
  1009. package/lib/esm/kibana/services/runtime.js.map +0 -1
  1010. package/lib/esm/kibana/types.js.map +0 -1
  1011. package/lib/esm/loader/ObjectLoader.js.map +0 -1
  1012. package/lib/esm/loader/assets.js.map +0 -1
  1013. package/lib/esm/loader/config.js.map +0 -1
  1014. package/lib/esm/loader/families.js.map +0 -1
  1015. package/lib/esm/loader/index.js.map +0 -1
  1016. package/lib/esm/loader/nest.js.map +0 -1
  1017. package/lib/esm/loader/types.js.map +0 -1
  1018. package/lib/esm/namespaces/index.js.map +0 -1
  1019. package/lib/esm/namespaces/models/authorization-model.js.map +0 -1
  1020. package/lib/esm/namespaces/models/credential.model.js.map +0 -1
  1021. package/lib/esm/namespaces/models/effective-permission.model.js.map +0 -1
  1022. package/lib/esm/namespaces/models/group-membership.model.js.map +0 -1
  1023. package/lib/esm/namespaces/models/group.model.js.map +0 -1
  1024. package/lib/esm/namespaces/models/index.js.map +0 -1
  1025. package/lib/esm/namespaces/models/inheritance-block.model.js.map +0 -1
  1026. package/lib/esm/namespaces/models/org-unit-closure.model.js.map +0 -1
  1027. package/lib/esm/namespaces/models/org-unit-membership.model.js.map +0 -1
  1028. package/lib/esm/namespaces/models/org-unit-profile.model.js.map +0 -1
  1029. package/lib/esm/namespaces/models/org-unit.model.js.map +0 -1
  1030. package/lib/esm/namespaces/models/permission.model.js.map +0 -1
  1031. package/lib/esm/namespaces/models/principal.model.js.map +0 -1
  1032. package/lib/esm/namespaces/models/protected-resource.model.js.map +0 -1
  1033. package/lib/esm/namespaces/models/resource-grant.model.js.map +0 -1
  1034. package/lib/esm/namespaces/models/role-assignment.model.js.map +0 -1
  1035. package/lib/esm/namespaces/models/role-permission.model.js.map +0 -1
  1036. package/lib/esm/namespaces/models/role.model.js.map +0 -1
  1037. package/lib/esm/namespaces/models/storage-binding.model.js.map +0 -1
  1038. package/lib/esm/namespaces/models/tenant-membership.model.js.map +0 -1
  1039. package/lib/esm/namespaces/models/tenant-profile.model.js.map +0 -1
  1040. package/lib/esm/namespaces/models/tenant.model.js.map +0 -1
  1041. package/lib/esm/namespaces/models/user.model.js.map +0 -1
  1042. package/lib/esm/namespaces/org-based-authorization-system.js.map +0 -1
  1043. package/lib/esm/namespaces/org-based-authorization-system.models.js.map +0 -1
  1044. package/lib/esm/namespaces/org-based-authorization-system.services.js.map +0 -1
  1045. package/lib/esm/namespaces/rls/index.js.map +0 -1
  1046. package/lib/esm/namespaces/rls/principal-resolver.js.map +0 -1
  1047. package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +0 -1
  1048. package/lib/esm/namespaces/rls/rls.constants.js.map +0 -1
  1049. package/lib/esm/namespaces/rls/rls.template.js.map +0 -1
  1050. package/lib/esm/namespaces/rls/rls.types.js.map +0 -1
  1051. package/lib/esm/namespaces/rls/session-binding.js.map +0 -1
  1052. package/lib/esm/namespaces/services/authz.service.js.map +0 -1
  1053. package/lib/esm/namespaces/services/bootstrap.service.js.map +0 -1
  1054. package/lib/esm/namespaces/services/credential.service.js.map +0 -1
  1055. package/lib/esm/namespaces/services/effective-permission.service.js.map +0 -1
  1056. package/lib/esm/namespaces/services/group-membership.service.js.map +0 -1
  1057. package/lib/esm/namespaces/services/group.service.js.map +0 -1
  1058. package/lib/esm/namespaces/services/index.js.map +0 -1
  1059. package/lib/esm/namespaces/services/inheritance-block.service.js.map +0 -1
  1060. package/lib/esm/namespaces/services/org-unit-closure.service.js.map +0 -1
  1061. package/lib/esm/namespaces/services/org-unit-membership.service.js.map +0 -1
  1062. package/lib/esm/namespaces/services/org-unit-profile.service.js.map +0 -1
  1063. package/lib/esm/namespaces/services/org-unit.service.js.map +0 -1
  1064. package/lib/esm/namespaces/services/permission.service.js.map +0 -1
  1065. package/lib/esm/namespaces/services/principal.service.js.map +0 -1
  1066. package/lib/esm/namespaces/services/protected-resource.service.js.map +0 -1
  1067. package/lib/esm/namespaces/services/resource-grant.service.js.map +0 -1
  1068. package/lib/esm/namespaces/services/resource-lifecycle.service.js.map +0 -1
  1069. package/lib/esm/namespaces/services/role-assignment.service.js.map +0 -1
  1070. package/lib/esm/namespaces/services/role-permission.service.js.map +0 -1
  1071. package/lib/esm/namespaces/services/role.service.js.map +0 -1
  1072. package/lib/esm/namespaces/services/storage-binding.service.js.map +0 -1
  1073. package/lib/esm/namespaces/services/system-management.service.js.map +0 -1
  1074. package/lib/esm/namespaces/services/tenant-membership.service.js.map +0 -1
  1075. package/lib/esm/namespaces/services/tenant-profile.service.js.map +0 -1
  1076. package/lib/esm/namespaces/services/tenant.service.js.map +0 -1
  1077. package/lib/esm/namespaces/services/user.service.js.map +0 -1
  1078. package/lib/esm/namespaces/types.js.map +0 -1
  1079. package/lib/esm/namespaces/utils.js.map +0 -1
  1080. package/lib/esm/nest/decorators.js.map +0 -1
  1081. package/lib/esm/nest/index.js.map +0 -1
  1082. package/lib/esm/nest/keycloakAuthHandler.js.map +0 -1
  1083. package/lib/esm/nest/keycloakModule.js.map +0 -1
  1084. package/lib/esm/nest/logging.js.map +0 -1
  1085. package/lib/esm/nest/types.js.map +0 -1
  1086. package/lib/esm/nest/utils.js.map +0 -1
  1087. package/lib/esm/plugins/contract.js.map +0 -1
  1088. package/lib/esm/plugins/index.js.map +0 -1
  1089. package/lib/esm/plugins/kibana/host.js.map +0 -1
  1090. package/lib/esm/plugins/kibana/index.js.map +0 -1
  1091. package/lib/esm/plugins/kibana/installer.js.map +0 -1
  1092. package/lib/esm/plugins/kibana/manifest.js.map +0 -1
  1093. package/lib/esm/plugins/kibana/templates.js.map +0 -1
  1094. package/lib/esm/plugins/kibana/types.js.map +0 -1
  1095. package/lib/esm/plugins/superset/host.js.map +0 -1
  1096. package/lib/esm/plugins/superset/index.js.map +0 -1
  1097. package/lib/esm/plugins/superset/installer.js.map +0 -1
  1098. package/lib/esm/plugins/superset/manifest.js.map +0 -1
  1099. package/lib/esm/plugins/superset/templates.js.map +0 -1
  1100. package/lib/esm/plugins/superset/types.js.map +0 -1
  1101. package/lib/esm/redis/RedisContextLock.js.map +0 -1
  1102. package/lib/esm/redis/RedisDispatch.js.map +0 -1
  1103. package/lib/esm/redis/RedisPaginator.js.map +0 -1
  1104. package/lib/esm/redis/RedisStatement.js.map +0 -1
  1105. package/lib/esm/redis/adapter.js.map +0 -1
  1106. package/lib/esm/redis/constants.js.map +0 -1
  1107. package/lib/esm/redis/handlers.js.map +0 -1
  1108. package/lib/esm/redis/index.js.map +0 -1
  1109. package/lib/esm/redis/serialization.js.map +0 -1
  1110. package/lib/esm/redis/types.js.map +0 -1
  1111. package/lib/esm/secrets/InfraCredentialBootstrap.js.map +0 -1
  1112. package/lib/esm/secrets/aws/AwsSecretEnvironment.js.map +0 -1
  1113. package/lib/esm/secrets/aws/AwsSecretService.js.map +0 -1
  1114. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +0 -1
  1115. package/lib/esm/secrets/aws/index.js.map +0 -1
  1116. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +0 -1
  1117. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +0 -1
  1118. package/lib/esm/secrets/azure/AzureSecretEnvironment.js.map +0 -1
  1119. package/lib/esm/secrets/azure/index.js.map +0 -1
  1120. package/lib/esm/secrets/core/ClientBasedSecretService.js.map +0 -1
  1121. package/lib/esm/secrets/core/SecretEnvironment.js.map +0 -1
  1122. package/lib/esm/secrets/core/SecretErrors.js.map +0 -1
  1123. package/lib/esm/secrets/core/SecretName.js.map +0 -1
  1124. package/lib/esm/secrets/core/SecretReference.js.map +0 -1
  1125. package/lib/esm/secrets/core/SecretSerialization.js.map +0 -1
  1126. package/lib/esm/secrets/core/SecretService.js.map +0 -1
  1127. package/lib/esm/secrets/core/SecretTypes.js.map +0 -1
  1128. package/lib/esm/secrets/core/index.js.map +0 -1
  1129. package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +0 -1
  1130. package/lib/esm/secrets/fs/FsSecretService.js.map +0 -1
  1131. package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +0 -1
  1132. package/lib/esm/secrets/fs/index.js.map +0 -1
  1133. package/lib/esm/secrets/gcp/GcpSecretEnvironment.js.map +0 -1
  1134. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +0 -1
  1135. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +0 -1
  1136. package/lib/esm/secrets/gcp/index.js.map +0 -1
  1137. package/lib/esm/secrets/index.js.map +0 -1
  1138. package/lib/esm/secrets/model/ModelSecretCrypto.js.map +0 -1
  1139. package/lib/esm/secrets/model/ModelSecretEnvironment.js.map +0 -1
  1140. package/lib/esm/secrets/model/ModelSecretService.js.map +0 -1
  1141. package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +0 -1
  1142. package/lib/esm/secrets/model/Secret.js.map +0 -1
  1143. package/lib/esm/secrets/model/index.js.map +0 -1
  1144. package/lib/esm/secrets/onepassword/OnePasswordSecretEnvironment.js.map +0 -1
  1145. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +0 -1
  1146. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +0 -1
  1147. package/lib/esm/secrets/onepassword/index.js.map +0 -1
  1148. package/lib/esm/secrets/vault/VaultSecretEnvironment.js.map +0 -1
  1149. package/lib/esm/secrets/vault/VaultSecretService.js.map +0 -1
  1150. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +0 -1
  1151. package/lib/esm/secrets/vault/index.js.map +0 -1
  1152. package/lib/esm/sftp/aws/AwsSftpEnvironment.js.map +0 -1
  1153. package/lib/esm/sftp/aws/AwsSftpService.js.map +0 -1
  1154. package/lib/esm/sftp/core/SftpEnvironment.js.map +0 -1
  1155. package/lib/esm/sftp/core/SftpSource.js.map +0 -1
  1156. package/lib/esm/sftp/core/index.js.map +0 -1
  1157. package/lib/esm/sftp/index.js.map +0 -1
  1158. package/lib/esm/sftp/ssh2/Ssh2SftpEnvironment.js.map +0 -1
  1159. package/lib/esm/sftp/ssh2/Ssh2SftpService.js.map +0 -1
  1160. package/lib/esm/shared/environmentValue.js.map +0 -1
  1161. package/lib/esm/shared/http/HttpApiService.js.map +0 -1
  1162. package/lib/esm/shared/http/hermeticBoot.js.map +0 -1
  1163. package/lib/esm/shared/http/index.js.map +0 -1
  1164. package/lib/esm/shared/runtime.js.map +0 -1
  1165. package/lib/esm/user-requests/index.js.map +0 -1
  1166. package/lib/esm/utils.js.map +0 -1
@@ -1020,4 +1020,4 @@ __decorate([
1020
1020
  __metadata("design:paramtypes", [String, String, String, Object]),
1021
1021
  __metadata("design:returntype", Promise)
1022
1022
  ], SystemManagementService.prototype, "reactivateUserInTenant", null);
1023
- //# sourceMappingURL=org-based-authorization-system.services.js.map
1023
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvb3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtLnNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGdCQUFnQixFQUVoQixhQUFhLEVBRWIsU0FBUyxFQUNULGtCQUFrQixFQUVsQixFQUFFLEVBQ0YsVUFBVSxFQUNWLGFBQWEsR0FDZCw0Q0FBeUM7QUFlMUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixLQUFLLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsYUFBYSxFQUNiLElBQUksRUFDSixjQUFjLEVBQ2QsY0FBYyxFQUNkLGNBQWMsRUFDZCxNQUFNLEVBQ04sZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixJQUFJLEdBQ0wsbURBQWdEO0FBQ2pELEVBQUU7QUFDRixtQ0FBbUM7QUFDbkMsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBa0IsRUFBRSxRQUFnQixFQUFXLEVBQUUsQ0FDbkUsVUFBVSxDQUFDLFNBQW9DLENBQUMsS0FBSyxRQUFRLENBQUM7QUFDaEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQUUsTUFBMEIsRUFBVyxFQUFFLENBQzVFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQWdDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzRSxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWEsRUFBVSxFQUFFLENBQzFDLEtBQUs7S0FDRixJQUFJLEVBQUU7S0FDTixXQUFXLEVBQUU7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LGtCQUFrQixFQUNsQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQzFCLEdBQUcsSUFBSSxDQUNSLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FDdEQsUUFBUSxFQUNSLFdBQVcsRUFDWCxHQUFHLElBQUksQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUdLLEFBQU4sS0FBSyxDQUFDLHNCQUFzQixDQUMxQixrQkFBMEIsRUFDMUIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsR0FBRyxJQUFXO1FBRWQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUNwQyxrQkFBa0IsRUFDbEIsZ0JBQWdCLENBQUMsTUFBTSxFQUN2QixHQUFHLElBQUksQ0FDUixDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsbUJBQW1CLENBQ3ZELFFBQVEsRUFDUixXQUFXLEVBQ1gsR0FBRyxJQUFJLENBQ1IsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWpJTztJQURMLGFBQWEsRUFBRTs7Ozs0RUFnRGY7QUFHSztJQURMLGFBQWEsRUFBRTs7OztnRUF5Q2Y7QUFHSztJQURMLGFBQWEsRUFBRTs7OztrRUFpQmY7QUFHSztJQURMLGFBQWEsRUFBRTs7OztxRUFpQmYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlTW9kZWxTZXJ2aWNlLFxuICBJc29sYXRpb25UaWVyLFxuICBNZW1iZXJzaGlwU3RhdHVzLFxuICBQZXJtaXNzaW9uQ2F0ZWdvcnksXG4gIFByaW5jaXBhbEtpbmQsXG4gIFJlc291cmNlVmlzaWJpbGl0eSxcbiAgU2NvcGVLaW5kLFxuICBTdG9yYWdlQmluZGluZ0tpbmQsXG4gIFN0b3JhZ2VLaW5kLFxuICBpZCxcbiAgcmVsYXRpb25JZCxcbiAgdHJhbnNhY3Rpb25hbCxcbn0gZnJvbSBcIi4vb3JnLWJhc2VkLWF1dGhvcml6YXRpb24tc3lzdGVtXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFzc2lnblJvbGVJbnB1dCxcbiAgQm9vdHN0cmFwT3JnVW5pdCxcbiAgQm9vdHN0cmFwVGVtcGxhdGUsXG4gIENyZWF0ZU9yZ1VuaXRJbnB1dCxcbiAgQ3JlYXRlUGVybWlzc2lvbklucHV0LFxuICBDcmVhdGVSb2xlSW5wdXQsXG4gIENyZWF0ZVN0b3JhZ2VCaW5kaW5nSW5wdXQsXG4gIENyZWF0ZVRlbmFudElucHV0LFxuICBDcmVhdGVVc2VySW5wdXQsXG4gIEVmZmVjdGl2ZVBlcm1pc3Npb25TbmFwc2hvdCxcbiAgR3JhbnRSZXNvdXJjZUlucHV0LFxuICBSZWdpc3RlclJlc291cmNlSW5wdXQsXG59IGZyb20gXCIuL29yZy1iYXNlZC1hdXRob3JpemF0aW9uLXN5c3RlbVwiO1xuaW1wb3J0IHtcbiAgRWZmZWN0aXZlUGVybWlzc2lvbixcbiAgR3JvdXAsXG4gIEdyb3VwTWVtYmVyc2hpcCxcbiAgSW5oZXJpdGFuY2VCbG9jayxcbiAgT3JnVW5pdCxcbiAgT3JnVW5pdENsb3N1cmUsXG4gIE9yZ1VuaXRNZW1iZXJzaGlwLFxuICBPcmdVbml0UHJvZmlsZSxcbiAgUGVybWlzc2lvbixcbiAgUHJvdGVjdGVkUmVzb3VyY2UsXG4gIFByaW5jaXBhbCxcbiAgUmVzb3VyY2VHcmFudCxcbiAgUm9sZSxcbiAgUm9sZUFzc2lnbm1lbnQsXG4gIFJvbGVQZXJtaXNzaW9uLFxuICBTdG9yYWdlQmluZGluZyxcbiAgVGVuYW50LFxuICBUZW5hbnRNZW1iZXJzaGlwLFxuICBUZW5hbnRQcm9maWxlLFxuICBVc2VyLFxufSBmcm9tIFwiLi9vcmctYmFzZWQtYXV0aG9yaXphdGlvbi1zeXN0ZW0ubW9kZWxzXCI7XG4vL1xuLy8gY29uc3Qgbm93SXNvID0gKCkgPT4gbmV3IERhdGUoKTtcbi8vIGNvbnN0IGFzQXJyYXkgPSA8VD4odmFsdWU6IFRbXSB8IHVuZGVmaW5lZCk6IFRbXSA9PiB2YWx1ZSA/PyBbXTtcbmNvbnN0IHNhbWVUZW5hbnQgPSAocm93VGVuYW50OiB1bmtub3duLCB0ZW5hbnRJZDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICByZWxhdGlvbklkKHJvd1RlbmFudCBhcyB7IGlkOiBzdHJpbmcgfSB8IHN0cmluZykgPT09IHRlbmFudElkO1xuY29uc3QgcmVsYXRpb25NYXRjaCA9ICh2YWx1ZTogdW5rbm93biwgdGFyZ2V0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIHRhcmdldCA/IHJlbGF0aW9uSWQodmFsdWUgYXMgeyBpZDogc3RyaW5nIH0gfCBzdHJpbmcpID09PSB0YXJnZXQgOiBmYWxzZTtcbmNvbnN0IGxvd2VyU2x1ZyA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIHZhbHVlXG4gICAgLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgLnJlcGxhY2UoL14tK3wtKyQvZywgXCJcIikgfHwgXCJpdGVtXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZU1hbnlCeUlkKFxuICBzZXJ2aWNlOiBCYXNlTW9kZWxTZXJ2aWNlPGFueT4sXG4gIHJvd3M6IEFycmF5PHsgaWQ6IHN0cmluZyB9PixcbiAgLi4uYXJnczogYW55W11cbik6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgYXdhaXQgc2VydmljZS5kZWxldGVCeUlkKHJvdy5pZCwgLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbmFudFByb2ZpbGVTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxUZW5hbnRQcm9maWxlPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFRlbmFudFByb2ZpbGUpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHJvZmlsZShcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByb2ZpbGVLZXk6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8VGVuYW50UHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgIHByb2ZpbGVLZXksXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdEZvclRlbmFudChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8VGVuYW50UHJvZmlsZVtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocHJvZmlsZSkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2gocHJvZmlsZS50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVGb3JUZW5hbnQodGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZChcbiAgICAgIHRoaXMsXG4gICAgICBhd2FpdCB0aGlzLmxpc3RGb3JUZW5hbnQodGVuYW50SWQsIC4uLmFyZ3MpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9yZ1VuaXRQcm9maWxlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8T3JnVW5pdFByb2ZpbGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoT3JnVW5pdFByb2ZpbGUpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHJvZmlsZShcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBwcm9maWxlS2V5OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgb3JnVW5pdDogb3JnVW5pdElkLFxuICAgICAgICBwcm9maWxlS2V5LFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGb3JPcmdVbml0KFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdFByb2ZpbGVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHByb2ZpbGUpID0+XG4gICAgICByZWxhdGlvbk1hdGNoKHByb2ZpbGUub3JnVW5pdCwgb3JnVW5pdElkKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9yZ1VuaXRDbG9zdXJlU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8T3JnVW5pdENsb3N1cmU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoT3JnVW5pdENsb3N1cmUpO1xuICB9XG5cbiAgYXN5bmMgbGlzdEFuY2VzdG9ycyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdENsb3N1cmVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHJvdykgPT5cbiAgICAgICAgICBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgIHJlbGF0aW9uTWF0Y2gocm93LmRlc2NlbmRhbnQsIG9yZ1VuaXRJZClcbiAgICAgIClcbiAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5kZXB0aCAtIHJpZ2h0LmRlcHRoKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3REZXNjZW5kYW50cyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdENsb3N1cmVbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHJvdykgPT5cbiAgICAgICAgICBzYW1lVGVuYW50KHJvdy50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICAgIHJlbGF0aW9uTWF0Y2gocm93LmFuY2VzdG9yLCBvcmdVbml0SWQpXG4gICAgICApXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuZGVwdGggLSByaWdodC5kZXB0aCk7XG4gIH1cblxuICBhc3luYyBpc0FuY2VzdG9yT2YoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBhbmNlc3Rvck9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIGRlc2NlbmRhbnRPcmdVbml0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5saXN0QW5jZXN0b3JzKHRlbmFudElkLCBkZXNjZW5kYW50T3JnVW5pdElkLCAuLi5hcmdzKVxuICAgICkuc29tZSgocm93KSA9PiByZWxhdGlvbk1hdGNoKHJvdy5hbmNlc3RvciwgYW5jZXN0b3JPcmdVbml0SWQpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlbGZMaW5rKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0Q2xvc3VyZT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogdGVuYW50SWQsXG4gICAgICAgIGFuY2VzdG9yOiBvcmdVbml0SWQsXG4gICAgICAgIGRlc2NlbmRhbnQ6IG9yZ1VuaXRJZCxcbiAgICAgICAgZGVwdGg6IDAsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBpbnNlcnRBbmNlc3RvckxpbmtzRm9yTmV3Q2hpbGQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwYXJlbnRPcmdVbml0SWQ6IHN0cmluZyxcbiAgICBjaGlsZE9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFuY2VzdG9yTGlua3MgPSBhd2FpdCB0aGlzLmxpc3RBbmNlc3RvcnMoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHBhcmVudE9yZ1VuaXRJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYW5jZXN0b3JMaW5rcy5tYXAoKGxpbmspID0+XG4gICAgICAgIHRoaXMuY3JlYXRlT25lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBpZCgpLFxuICAgICAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgICAgIGFuY2VzdG9yOiBsaW5rLmFuY2VzdG9yLFxuICAgICAgICAgICAgZGVzY2VuZGFudDogY2hpbGRPcmdVbml0SWQsXG4gICAgICAgICAgICBkZXB0aDogbGluay5kZXB0aCArIDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTGlua3NGb3JTdWJ0cmVlKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3VidHJlZSA9IGF3YWl0IHRoaXMubGlzdERlc2NlbmRhbnRzKHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGRlc2NlbmRhbnRJZHMgPSBuZXcgU2V0KFtcbiAgICAgIG9yZ1VuaXRJZCxcbiAgICAgIC4uLnN1YnRyZWUubWFwKChyb3cpID0+IHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpKSxcbiAgICBdKTtcbiAgICBjb25zdCBhbmNlc3RvcklkcyA9IG5ldyBTZXQoW1xuICAgICAgb3JnVW5pdElkLFxuICAgICAgLi4uc3VidHJlZS5tYXAoKHJvdykgPT4gcmVsYXRpb25JZChyb3cuYW5jZXN0b3IpKSxcbiAgICBdKTtcbiAgICBjb25zdCByb3dzID0gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKFxuICAgICAgKHJvdykgPT5cbiAgICAgICAgc2FtZVRlbmFudChyb3cudGVuYW50LCB0ZW5hbnRJZCkgJiZcbiAgICAgICAgKGRlc2NlbmRhbnRJZHMuaGFzKHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpKSB8fFxuICAgICAgICAgIGFuY2VzdG9ySWRzLmhhcyhyZWxhdGlvbklkKHJvdy5hbmNlc3RvcikpKVxuICAgICk7XG4gICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgcm93cywgLi4uYXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluaGVyaXRhbmNlQmxvY2tTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxJbmhlcml0YW5jZUJsb2NrPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKEluaGVyaXRhbmNlQmxvY2spO1xuICB9XG5cbiAgYXN5bmMgYmxvY2tDYXRlZ29yeShcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25DYXRlZ29yeTogUGVybWlzc2lvbkNhdGVnb3J5LFxuICAgIGJsb2NrZWRGcm9tQW5jZXN0b3JJZD86IHN0cmluZyxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxJbmhlcml0YW5jZUJsb2NrPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgb3JnVW5pdDogb3JnVW5pdElkLFxuICAgICAgICBibG9ja2VkRnJvbUFuY2VzdG9yOiBibG9ja2VkRnJvbUFuY2VzdG9ySWQsXG4gICAgICAgIHBlcm1pc3Npb25DYXRlZ29yeSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgdW5ibG9ja0NhdGVnb3J5KGJsb2NrSWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQoYmxvY2tJZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBsaXN0Rm9yT3JnVW5pdChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8SW5oZXJpdGFuY2VCbG9ja1tdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChibG9jaykgPT5cbiAgICAgICAgc2FtZVRlbmFudChibG9jay50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICByZWxhdGlvbk1hdGNoKGJsb2NrLm9yZ1VuaXQsIG9yZ1VuaXRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY2F0ZWdvcnlCbG9ja2VkRm9yQW5jZXN0b3IoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBhbmNlc3Rvck9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIGNhdGVnb3J5OiBQZXJtaXNzaW9uQ2F0ZWdvcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RGb3JPcmdVbml0KHRlbmFudElkLCBvcmdVbml0SWQsIC4uLmFyZ3MpKS5zb21lKFxuICAgICAgKGJsb2NrKSA9PlxuICAgICAgICBibG9jay5wZXJtaXNzaW9uQ2F0ZWdvcnkgPT09IGNhdGVnb3J5ICYmXG4gICAgICAgICghYmxvY2suYmxvY2tlZEZyb21BbmNlc3RvciB8fFxuICAgICAgICAgIHJlbGF0aW9uTWF0Y2goYmxvY2suYmxvY2tlZEZyb21BbmNlc3RvciwgYW5jZXN0b3JPcmdVbml0SWQpKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbmFudFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFRlbmFudD4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihUZW5hbnQpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGVuYW50KFxuICAgIGlucHV0OiBDcmVhdGVUZW5hbnRJbnB1dCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFRlbmFudD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHNsdWc6IGlucHV0LnNsdWcsXG4gICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgIGlzb2xhdGlvblRpZXI6IGlucHV0Lmlzb2xhdGlvblRpZXIgPz8gSXNvbGF0aW9uVGllci5Qb29sZWQsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRCeVNsdWcoc2x1Zzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8VGVuYW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE9uZUJ5KFwic2x1Z1wiLCBzbHVnIGFzIG5ldmVyLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHJlbmFtZVRlbmFudChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFRlbmFudD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh0ZW5hbnRJZCwgeyBuYW1lIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY2hhbmdlU2x1ZyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHNsdWc6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFRlbmFudD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZSh0ZW5hbnRJZCwgeyBzbHVnIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgc2V0SXNvbGF0aW9uVGllcihcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIGlzb2xhdGlvblRpZXI6IElzb2xhdGlvblRpZXIsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxUZW5hbnQ+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUodGVuYW50SWQsIHsgaXNvbGF0aW9uVGllciB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVRlbmFudENvbnRyb2xsZWQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQodGVuYW50SWQsIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcmdVbml0U2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8T3JnVW5pdD4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihPcmdVbml0KTtcbiAgfVxuXG4gIHByaXZhdGUgb3JnVW5pdFBhdGgocGFyZW50UGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBsb3dlclNsdWcobmFtZSk7XG4gICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgID8gYCR7cGFyZW50UGF0aC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfS8ke3NlZ21lbnR9YFxuICAgICAgOiBgLyR7c2VnbWVudH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQcm9maWxlSWZOZWVkZWQoXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgcHJvZmlsZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHByb2ZpbGVNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFwcm9maWxlS2V5KSByZXR1cm47XG4gICAgY29uc3QgcHJvZmlsZVNlcnZpY2UgPSBuZXcgT3JnVW5pdFByb2ZpbGVTZXJ2aWNlKCk7XG4gICAgYXdhaXQgcHJvZmlsZVNlcnZpY2UuY3JlYXRlUHJvZmlsZShcbiAgICAgIG9yZ1VuaXRJZCxcbiAgICAgIHByb2ZpbGVLZXksXG4gICAgICBwcm9maWxlTWV0YWRhdGEsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgY3JlYXRlUm9vdChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHByb2ZpbGVLZXk/OiBzdHJpbmcsXG4gICAgcHJvZmlsZU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0PiB7XG4gICAgY29uc3Qgb3JnVW5pdCA9IGF3YWl0IHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aDogdGhpcy5vcmdVbml0UGF0aCh1bmRlZmluZWQsIG5hbWUpLFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVByb2ZpbGVJZk5lZWRlZChcbiAgICAgIG9yZ1VuaXQuaWQsXG4gICAgICBwcm9maWxlS2V5LFxuICAgICAgcHJvZmlsZU1ldGFkYXRhLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgY29uc3QgY2xvc3VyZVNlcnZpY2UgPSBuZXcgT3JnVW5pdENsb3N1cmVTZXJ2aWNlKCk7XG4gICAgYXdhaXQgY2xvc3VyZVNlcnZpY2UuY3JlYXRlU2VsZkxpbmsodGVuYW50SWQsIG9yZ1VuaXQuaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiBvcmdVbml0O1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyBjcmVhdGVDaGlsZChcbiAgICBpbnB1dDogQ3JlYXRlT3JnVW5pdElucHV0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdD4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGlucHV0LnBhcmVudE9yZ1VuaXRJZFxuICAgICAgPyBhd2FpdCB0aGlzLmdldEJ5SWQoaW5wdXQucGFyZW50T3JnVW5pdElkLCAuLi5hcmdzKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb3JnVW5pdCA9IGF3YWl0IHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAgcGFyZW50OiBwYXJlbnQ/LmlkID8/IGlucHV0LnBhcmVudE9yZ1VuaXRJZCxcbiAgICAgICAgbmFtZTogaW5wdXQubmFtZSxcbiAgICAgICAgcGF0aDogdGhpcy5vcmdVbml0UGF0aChwYXJlbnQ/LnBhdGgsIGlucHV0Lm5hbWUpLFxuICAgICAgICBtZXRhZGF0YTogaW5wdXQubWV0YWRhdGEsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVQcm9maWxlSWZOZWVkZWQoXG4gICAgICBvcmdVbml0LmlkLFxuICAgICAgaW5wdXQucHJvZmlsZUtleSxcbiAgICAgIGlucHV0LnByb2ZpbGVNZXRhZGF0YSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgIGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmNyZWF0ZVNlbGZMaW5rKGlucHV0LnRlbmFudElkLCBvcmdVbml0LmlkLCAuLi5hcmdzKTtcbiAgICBpZiAoaW5wdXQucGFyZW50T3JnVW5pdElkKSB7XG4gICAgICBhd2FpdCBjbG9zdXJlU2VydmljZS5pbnNlcnRBbmNlc3RvckxpbmtzRm9yTmV3Q2hpbGQoXG4gICAgICAgIGlucHV0LnRlbmFudElkLFxuICAgICAgICBpbnB1dC5wYXJlbnRPcmdVbml0SWQsXG4gICAgICAgIG9yZ1VuaXQuaWQsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvcmdVbml0O1xuICB9XG5cbiAgYXN5bmMgbGlzdENoaWxkcmVuKFxuICAgIHBhcmVudE9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigob3JnVW5pdCkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2gob3JnVW5pdC5wYXJlbnQsIHBhcmVudE9yZ1VuaXRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRlbmFudE9yZ1VuaXRzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0W10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChvcmdVbml0KSA9PlxuICAgICAgc2FtZVRlbmFudChvcmdVbml0LnRlbmFudCwgdGVuYW50SWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3REZXNjZW5kYW50T3JnVW5pdHMoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBpbmNsdWRlU2VsZiA9IGZhbHNlLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8T3JnVW5pdFtdPiB7XG4gICAgY29uc3QgY2xvc3VyZVNlcnZpY2UgPSBuZXcgT3JnVW5pdENsb3N1cmVTZXJ2aWNlKCk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSBhd2FpdCBjbG9zdXJlU2VydmljZS5saXN0RGVzY2VuZGFudHMoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIG9yZ1VuaXRJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoZGVzY2VuZGFudHMubWFwKChyb3cpID0+IHJlbGF0aW9uSWQocm93LmRlc2NlbmRhbnQpKSk7XG4gICAgaWYgKGluY2x1ZGVTZWxmKSBpZHMuYWRkKG9yZ1VuaXRJZCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChvcmdVbml0KSA9PiBpZHMuaGFzKG9yZ1VuaXQuaWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RBbmNlc3Rvck9yZ1VuaXRzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgaW5jbHVkZVNlbGYgPSBmYWxzZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRbXT4ge1xuICAgIGNvbnN0IGNsb3N1cmVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRDbG9zdXJlU2VydmljZSgpO1xuICAgIGNvbnN0IGFuY2VzdG9ycyA9IGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmxpc3RBbmNlc3RvcnMoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIG9yZ1VuaXRJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoYW5jZXN0b3JzLm1hcCgocm93KSA9PiByZWxhdGlvbklkKHJvdy5hbmNlc3RvcikpKTtcbiAgICBpZiAoaW5jbHVkZVNlbGYpIGlkcy5hZGQob3JnVW5pdElkKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdFRlbmFudE9yZ1VuaXRzKHRlbmFudElkLCAuLi5hcmdzKSkuZmlsdGVyKFxuICAgICAgKG9yZ1VuaXQpID0+IGlkcy5oYXMob3JnVW5pdC5pZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuYW1lT3JnVW5pdChcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmdldEJ5SWQob3JnVW5pdElkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUoXG4gICAgICBvcmdVbml0SWQsXG4gICAgICB7IG5hbWUsIHBhdGg6IHRoaXMub3JnVW5pdFBhdGgodW5kZWZpbmVkLCBuYW1lKSB9LFxuICAgICAgLi4uYXJnc1xuICAgICkudGhlbihhc3luYyAodXBkYXRlZCkgPT4ge1xuICAgICAgdXBkYXRlZC5wYXRoID0gZXhpc3RpbmcucGFyZW50XG4gICAgICAgID8gdGhpcy5vcmdVbml0UGF0aCh1bmRlZmluZWQsIG5hbWUpXG4gICAgICAgIDogdGhpcy5vcmdVbml0UGF0aCh1bmRlZmluZWQsIG5hbWUpO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSk7XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCgpXG4gIGFzeW5jIG1vdmVPcmdVbml0KFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgbmV3UGFyZW50T3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0PiB7XG4gICAgY29uc3QgbmV3UGFyZW50ID0gYXdhaXQgdGhpcy5nZXRCeUlkKG5ld1BhcmVudE9yZ1VuaXRJZCwgLi4uYXJncyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLmdldEJ5SWQob3JnVW5pdElkLCAuLi5hcmdzKTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdGhpcy51cGRhdGVPbmUoXG4gICAgICBvcmdVbml0SWQsXG4gICAgICB7XG4gICAgICAgIHBhcmVudDogbmV3UGFyZW50LmlkLFxuICAgICAgICBwYXRoOiB0aGlzLm9yZ1VuaXRQYXRoKG5ld1BhcmVudC5wYXRoLCBleGlzdGluZy5uYW1lKSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnJlYnVpbGRUZW5hbnRDbG9zdXJlKHRlbmFudElkLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgcmVidWlsZFRlbmFudENsb3N1cmUodGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbG9zdXJlU2VydmljZSA9IG5ldyBPcmdVbml0Q2xvc3VyZVNlcnZpY2UoKTtcbiAgICBjb25zdCBleGlzdGluZ0xpbmtzID0gYXdhaXQgY2xvc3VyZVNlcnZpY2UubGlzdEFsbCguLi5hcmdzKTtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZChcbiAgICAgIGNsb3N1cmVTZXJ2aWNlLFxuICAgICAgZXhpc3RpbmdMaW5rcy5maWx0ZXIoKHJvdykgPT4gc2FtZVRlbmFudChyb3cudGVuYW50LCB0ZW5hbnRJZCkpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG5cbiAgICBjb25zdCBvcmdVbml0cyA9IChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLnNvcnQoXG4gICAgICAobGVmdCwgcmlnaHQpID0+IHtcbiAgICAgICAgY29uc3QgbGVmdERlcHRoID0gbGVmdC5wYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoO1xuICAgICAgICBjb25zdCByaWdodERlcHRoID0gcmlnaHQucGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxlZnREZXB0aCAtIHJpZ2h0RGVwdGg7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qgb3JnVW5pdCBvZiBvcmdVbml0cykge1xuICAgICAgYXdhaXQgY2xvc3VyZVNlcnZpY2UuY3JlYXRlU2VsZkxpbmsodGVuYW50SWQsIG9yZ1VuaXQuaWQsIC4uLmFyZ3MpO1xuICAgICAgaWYgKG9yZ1VuaXQucGFyZW50KSB7XG4gICAgICAgIGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmluc2VydEFuY2VzdG9yTGlua3NGb3JOZXdDaGlsZChcbiAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICByZWxhdGlvbklkKG9yZ1VuaXQucGFyZW50KSxcbiAgICAgICAgICBvcmdVbml0LmlkLFxuICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCgpXG4gIGFzeW5jIGRlbGV0ZU9yZ1VuaXRUcmVlKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xvc3VyZVNlcnZpY2UgPSBuZXcgT3JnVW5pdENsb3N1cmVTZXJ2aWNlKCk7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSBhd2FpdCB0aGlzLmxpc3REZXNjZW5kYW50T3JnVW5pdHMoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIG9yZ1VuaXRJZCxcbiAgICAgIHRydWUsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBkZXNjZW5kYW50SWRzID0gbmV3IFNldChkZXNjZW5kYW50cy5tYXAoKG9yZ1VuaXQpID0+IG9yZ1VuaXQuaWQpKTtcbiAgICBjb25zdCBvcmdVbml0cyA9IChhd2FpdCB0aGlzLmxpc3RUZW5hbnRPcmdVbml0cyh0ZW5hbnRJZCwgLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChvcmdVbml0KSA9PiBkZXNjZW5kYW50SWRzLmhhcyhvcmdVbml0LmlkKVxuICAgICk7XG4gICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgb3JnVW5pdHMsIC4uLmFyZ3MpO1xuICAgIGF3YWl0IGNsb3N1cmVTZXJ2aWNlLmRlbGV0ZUxpbmtzRm9yU3VidHJlZSh0ZW5hbnRJZCwgb3JnVW5pdElkLCAuLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFVzZXI+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoVXNlcik7XG4gIH1cblxuICBhc3luYyBjcmVhdGVVc2VyKGlucHV0OiBDcmVhdGVVc2VySW5wdXQsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgZW1haWw6IGlucHV0LmVtYWlsLFxuICAgICAgICBwaG9uZTogaW5wdXQucGhvbmUsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBpbnB1dC5kaXNwbGF5TmFtZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEJ5RW1haWwoZW1haWw6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFVzZXI+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmluZChcbiAgICAgICh1c2VyKSA9PiB1c2VyLmVtYWlsID09PSBlbWFpbFxuICAgICkgYXMgVXNlcjtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURpc3BsYXlOYW1lKFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHVzZXJJZCwgeyBkaXNwbGF5TmFtZSB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUVtYWlsKFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIGVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHVzZXJJZCwgeyBlbWFpbCB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVBob25lKFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICAgIHBob25lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHVzZXJJZCwgeyBwaG9uZSB9LCAuLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJpbmNpcGFsU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8UHJpbmNpcGFsPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFByaW5jaXBhbCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVQcmluY2lwYWwoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBraW5kOiBQcmluY2lwYWxLaW5kLFxuICAgIHN1YmplY3RJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJpbmNpcGFsPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAga2luZCxcbiAgICAgICAgc3ViamVjdElkLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0Rm9yU3ViamVjdChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIGtpbmQ6IFByaW5jaXBhbEtpbmQsXG4gICAgc3ViamVjdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQcmluY2lwYWwgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmluZChcbiAgICAgIChwcmluY2lwYWwpID0+XG4gICAgICAgIHNhbWVUZW5hbnQocHJpbmNpcGFsLnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgIHByaW5jaXBhbC5raW5kID09PSBraW5kICYmXG4gICAgICAgIHByaW5jaXBhbC5zdWJqZWN0SWQgPT09IHN1YmplY3RJZFxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRPckNyZWF0ZUZvclN1YmplY3QoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBraW5kOiBQcmluY2lwYWxLaW5kLFxuICAgIHN1YmplY3RJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJpbmNpcGFsPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIChhd2FpdCB0aGlzLmdldEZvclN1YmplY3QodGVuYW50SWQsIGtpbmQsIHN1YmplY3RJZCwgLi4uYXJncykpID8/XG4gICAgICAoYXdhaXQgdGhpcy5jcmVhdGVQcmluY2lwYWwodGVuYW50SWQsIGtpbmQsIHN1YmplY3RJZCwgLi4uYXJncykpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldFVzZXJQcmluY2lwYWwoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByaW5jaXBhbD4ge1xuICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlRm9yU3ViamVjdChcbiAgICAgIHRlbmFudElkLFxuICAgICAgUHJpbmNpcGFsS2luZC5Vc2VyLFxuICAgICAgdXNlcklkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRHcm91cFByaW5jaXBhbChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIGdyb3VwSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByaW5jaXBhbD4ge1xuICAgIHJldHVybiB0aGlzLmdldE9yQ3JlYXRlRm9yU3ViamVjdChcbiAgICAgIHRlbmFudElkLFxuICAgICAgUHJpbmNpcGFsS2luZC5Hcm91cCxcbiAgICAgIGdyb3VwSWQsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVuYW50TWVtYmVyc2hpcFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFRlbmFudE1lbWJlcnNoaXA+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoVGVuYW50TWVtYmVyc2hpcCk7XG4gIH1cblxuICBhc3luYyBhZGRVc2VyVG9UZW5hbnQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICBzdGF0dXM6IE1lbWJlcnNoaXBTdGF0dXMgPSBNZW1iZXJzaGlwU3RhdHVzLkFjdGl2ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFRlbmFudE1lbWJlcnNoaXA+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNldFN0YXR1cyhcbiAgICBtZW1iZXJzaGlwSWQ6IHN0cmluZyxcbiAgICBzdGF0dXM6IE1lbWJlcnNoaXBTdGF0dXMsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxUZW5hbnRNZW1iZXJzaGlwPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKG1lbWJlcnNoaXBJZCwgeyBzdGF0dXMgfSwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBsaXN0VXNlclRlbmFudHMoXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxUZW5hbnRNZW1iZXJzaGlwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChtZW1iZXJzaGlwLnVzZXIsIHVzZXJJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRlbmFudFVzZXJzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxUZW5hbnRNZW1iZXJzaGlwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PlxuICAgICAgc2FtZVRlbmFudChtZW1iZXJzaGlwLnRlbmFudCwgdGVuYW50SWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVVzZXJGcm9tVGVuYW50KFxuICAgIG1lbWJlcnNoaXBJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChtZW1iZXJzaGlwSWQsIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcmdVbml0TWVtYmVyc2hpcFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPE9yZ1VuaXRNZW1iZXJzaGlwPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKE9yZ1VuaXRNZW1iZXJzaGlwKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFVzZXJUb09yZ1VuaXQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICBzdGF0dXM6IE1lbWJlcnNoaXBTdGF0dXMgPSBNZW1iZXJzaGlwU3RhdHVzLkFjdGl2ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRNZW1iZXJzaGlwPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgb3JnVW5pdDogb3JnVW5pdElkLFxuICAgICAgICB1c2VyOiB1c2VySWQsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNldFN0YXR1cyhcbiAgICBtZW1iZXJzaGlwSWQ6IHN0cmluZyxcbiAgICBzdGF0dXM6IE1lbWJlcnNoaXBTdGF0dXMsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxPcmdVbml0TWVtYmVyc2hpcD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShtZW1iZXJzaGlwSWQsIHsgc3RhdHVzIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFVzZXJPcmdVbml0cyhcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRNZW1iZXJzaGlwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChtZW1iZXJzaGlwLnVzZXIsIHVzZXJJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdE9yZ1VuaXRVc2VycyhcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPE9yZ1VuaXRNZW1iZXJzaGlwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChtZW1iZXJzaGlwKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChtZW1iZXJzaGlwLm9yZ1VuaXQsIG9yZ1VuaXRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlVXNlckZyb21PcmdVbml0KFxuICAgIG1lbWJlcnNoaXBJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChtZW1iZXJzaGlwSWQsIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcm91cFNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPEdyb3VwPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKEdyb3VwKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUdyb3VwKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZD86IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8R3JvdXA+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IHRlbmFudElkLFxuICAgICAgICBvcmdVbml0OiBvcmdVbml0SWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuYW1lR3JvdXAoXG4gICAgZ3JvdXBJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEdyb3VwPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKGdyb3VwSWQsIHsgbmFtZSB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIG1vdmVHcm91cFRvT3JnVW5pdChcbiAgICBncm91cElkOiBzdHJpbmcsXG4gICAgb3JnVW5pdElkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxHcm91cD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShncm91cElkLCB7IG9yZ1VuaXQ6IG9yZ1VuaXRJZCB9LCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUZW5hbnRHcm91cHModGVuYW50SWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPEdyb3VwW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncm91cCkgPT5cbiAgICAgIHNhbWVUZW5hbnQoZ3JvdXAudGVuYW50LCB0ZW5hbnRJZClcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcm91cE1lbWJlcnNoaXBTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxHcm91cE1lbWJlcnNoaXA+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoR3JvdXBNZW1iZXJzaGlwKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFByaW5jaXBhbFRvR3JvdXAoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBncm91cElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8R3JvdXBNZW1iZXJzaGlwPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiB0ZW5hbnRJZCxcbiAgICAgICAgZ3JvdXA6IGdyb3VwSWQsXG4gICAgICAgIHByaW5jaXBhbDogcHJpbmNpcGFsSWQsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdEdyb3VwTWVtYmVycyhcbiAgICBncm91cElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxHcm91cE1lbWJlcnNoaXBbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKG1lbWJlcnNoaXApID0+XG4gICAgICByZWxhdGlvbk1hdGNoKG1lbWJlcnNoaXAuZ3JvdXAsIGdyb3VwSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RQcmluY2lwYWxHcm91cHMoXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEdyb3VwTWVtYmVyc2hpcFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigobWVtYmVyc2hpcCkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2gobWVtYmVyc2hpcC5wcmluY2lwYWwsIHByaW5jaXBhbElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW1vdmVQcmluY2lwYWxGcm9tR3JvdXAoXG4gICAgbWVtYmVyc2hpcElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVCeUlkKG1lbWJlcnNoaXBJZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyByZXNvbHZlR3JvdXBQcmluY2lwYWxJZHNGb3JQcmluY2lwYWwoXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcHJpbmNpcGFsU2VydmljZSA9IG5ldyBQcmluY2lwYWxTZXJ2aWNlKCk7XG4gICAgY29uc3QgbWVtYmVyc2hpcHMgPSBhd2FpdCB0aGlzLmxpc3RQcmluY2lwYWxHcm91cHMocHJpbmNpcGFsSWQsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IHByaW5jaXBhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1lbWJlcnNoaXBzLm1hcChhc3luYyAobWVtYmVyc2hpcCkgPT4ge1xuICAgICAgICBjb25zdCB0ZW5hbnRJZCA9IHJlbGF0aW9uSWQobWVtYmVyc2hpcC50ZW5hbnQpO1xuICAgICAgICBjb25zdCBncm91cElkID0gcmVsYXRpb25JZChtZW1iZXJzaGlwLmdyb3VwKTtcbiAgICAgICAgY29uc3QgcHJpbmNpcGFsID0gYXdhaXQgcHJpbmNpcGFsU2VydmljZS5nZXRHcm91cFByaW5jaXBhbChcbiAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICBncm91cElkLFxuICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHByaW5jaXBhbC5pZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcHJpbmNpcGFscztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvblNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFBlcm1pc3Npb24+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUGVybWlzc2lvbik7XG4gIH1cblxuICBhc3luYyBjcmVhdGVQZXJtaXNzaW9uKFxuICAgIGlucHV0OiBDcmVhdGVQZXJtaXNzaW9uSW5wdXQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAga2V5OiBpbnB1dC5rZXksXG4gICAgICAgIGNhdGVnb3J5OiBpbnB1dC5jYXRlZ29yeSxcbiAgICAgICAgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlLZXkoa2V5OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxQZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbmQoXG4gICAgICAocGVybWlzc2lvbikgPT4gcGVybWlzc2lvbi5rZXkgPT09IGtleVxuICAgICkgYXMgUGVybWlzc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGxpc3RCeUNhdGVnb3J5KFxuICAgIGNhdGVnb3J5OiBQZXJtaXNzaW9uQ2F0ZWdvcnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQZXJtaXNzaW9uW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKFxuICAgICAgKHBlcm1pc3Npb24pID0+IHBlcm1pc3Npb24uY2F0ZWdvcnkgPT09IGNhdGVnb3J5XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURlc2NyaXB0aW9uKFxuICAgIHBlcm1pc3Npb25JZDogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQZXJtaXNzaW9uPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHBlcm1pc3Npb25JZCwgeyBkZXNjcmlwdGlvbiB9LCAuLi5hcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm9sZVNlcnZpY2UgZXh0ZW5kcyBCYXNlTW9kZWxTZXJ2aWNlPFJvbGU+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUm9sZSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVSb2xlKGlucHV0OiBDcmVhdGVSb2xlSW5wdXQsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxSb2xlPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT25lKFxuICAgICAge1xuICAgICAgICBpZDogaWQoKSxcbiAgICAgICAgdGVuYW50OiBpbnB1dC50ZW5hbnRJZCxcbiAgICAgICAga2V5OiBpbnB1dC5rZXksXG4gICAgICAgIG5hbWU6IGlucHV0Lm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBpbnB1dC5kZXNjcmlwdGlvbixcbiAgICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3lzdGVtUm9sZUJ5S2V5KGtleTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Um9sZT4ge1xuICAgIGNvbnN0IHJvbGUgPSAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT4gIWNhbmRpZGF0ZS50ZW5hbnQgJiYgY2FuZGlkYXRlLmtleSA9PT0ga2V5XG4gICAgKTtcbiAgICBpZiAoIXJvbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm9sZSBcIiR7a2V5fVwiIG5vdCBmb3VuZGApO1xuICAgIH1cbiAgICByZXR1cm4gcm9sZTtcbiAgfVxuXG4gIGFzeW5jIGdldFRlbmFudFJvbGVCeUtleShcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZT4ge1xuICAgIGNvbnN0IHJvbGUgPSAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT5cbiAgICAgICAgc2FtZVRlbmFudChjYW5kaWRhdGUudGVuYW50LCB0ZW5hbnRJZCkgJiYgY2FuZGlkYXRlLmtleSA9PT0ga2V5XG4gICAgKTtcbiAgICBpZiAoIXJvbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUm9sZSBcIiR7a2V5fVwiIG5vdCBmb3VuZCBmb3IgdGVuYW50ICR7dGVuYW50SWR9YCk7XG4gICAgfVxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgYXN5bmMgcmVuYW1lUm9sZShcbiAgICByb2xlSWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSb2xlPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHJvbGVJZCwgeyBuYW1lIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUm9sZU1ldGFkYXRhKFxuICAgIHJvbGVJZDogc3RyaW5nLFxuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGU+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUocm9sZUlkLCB7IG1ldGFkYXRhIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRlbmFudFJvbGVzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgaW5jbHVkZVN5c3RlbSA9IGZhbHNlLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZVtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocm9sZSkgPT5cbiAgICAgIGluY2x1ZGVTeXN0ZW1cbiAgICAgICAgPyAhcm9sZS50ZW5hbnQgfHwgc2FtZVRlbmFudChyb2xlLnRlbmFudCwgdGVuYW50SWQpXG4gICAgICAgIDogc2FtZVRlbmFudChyb2xlLnRlbmFudCwgdGVuYW50SWQpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUm9sZVBlcm1pc3Npb25TZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxSb2xlUGVybWlzc2lvbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihSb2xlUGVybWlzc2lvbik7XG4gIH1cblxuICBhc3luYyBhZGRQZXJtaXNzaW9uVG9Sb2xlKFxuICAgIHJvbGVJZDogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25JZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZVBlcm1pc3Npb24+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICByb2xlOiByb2xlSWQsXG4gICAgICAgIHBlcm1pc3Npb246IHBlcm1pc3Npb25JZCxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFBlcm1pc3Npb25LZXlUb1JvbGUoXG4gICAgcm9sZUlkOiBzdHJpbmcsXG4gICAgcGVybWlzc2lvbktleTogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZVBlcm1pc3Npb24+IHtcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gYXdhaXQgbmV3IFBlcm1pc3Npb25TZXJ2aWNlKCkuZ2V0QnlLZXkoXG4gICAgICBwZXJtaXNzaW9uS2V5LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYWRkUGVybWlzc2lvblRvUm9sZShyb2xlSWQsIHBlcm1pc3Npb24uaWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUGVybWlzc2lvbkZyb21Sb2xlKFxuICAgIHJvbGVQZXJtaXNzaW9uSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZUJ5SWQocm9sZVBlcm1pc3Npb25JZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyBsaXN0Um9sZVBlcm1pc3Npb25zKFxuICAgIHJvbGVJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZVBlcm1pc3Npb25bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHJvbGVQZXJtaXNzaW9uKSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChyb2xlUGVybWlzc2lvbi5yb2xlLCByb2xlSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RQZXJtaXNzaW9uUm9sZXMoXG4gICAgcGVybWlzc2lvbklkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSb2xlUGVybWlzc2lvbltdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocm9sZVBlcm1pc3Npb24pID0+XG4gICAgICByZWxhdGlvbk1hdGNoKHJvbGVQZXJtaXNzaW9uLnBlcm1pc3Npb24sIHBlcm1pc3Npb25JZClcbiAgICApO1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyByZXBsYWNlUm9sZVBlcm1pc3Npb25zKFxuICAgIHJvbGVJZDogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25JZHM6IHN0cmluZ1tdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZVBlcm1pc3Npb25bXT4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5saXN0Um9sZVBlcm1pc3Npb25zKHJvbGVJZCwgLi4uYXJncyk7XG4gICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQodGhpcywgZXhpc3RpbmcsIC4uLmFyZ3MpO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHBlcm1pc3Npb25JZHMubWFwKChwZXJtaXNzaW9uSWQpID0+XG4gICAgICAgIHRoaXMuYWRkUGVybWlzc2lvblRvUm9sZShyb2xlSWQsIHBlcm1pc3Npb25JZCwgLi4uYXJncylcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyBjcmVhdGVSb2xlV2l0aFBlcm1pc3Npb25zKFxuICAgIGlucHV0OiBDcmVhdGVSb2xlSW5wdXQsXG4gICAgcGVybWlzc2lvbktleXM6IHN0cmluZ1tdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZT4ge1xuICAgIGNvbnN0IHJvbGUgPSBhd2FpdCBuZXcgUm9sZVNlcnZpY2UoKS5jcmVhdGVSb2xlKGlucHV0LCAuLi5hcmdzKTtcbiAgICBmb3IgKGNvbnN0IHBlcm1pc3Npb25LZXkgb2YgcGVybWlzc2lvbktleXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkUGVybWlzc2lvbktleVRvUm9sZShyb2xlLmlkLCBwZXJtaXNzaW9uS2V5LCAuLi5hcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJvbGVBc3NpZ25tZW50U2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8Um9sZUFzc2lnbm1lbnQ+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoUm9sZUFzc2lnbm1lbnQpO1xuICB9XG5cbiAgYXN5bmMgYXNzaWduUm9sZShcbiAgICBpbnB1dDogQXNzaWduUm9sZUlucHV0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Um9sZUFzc2lnbm1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICBwcmluY2lwYWw6IGlucHV0LnByaW5jaXBhbElkLFxuICAgICAgICByb2xlOiBpbnB1dC5yb2xlSWQsXG4gICAgICAgIHNjb3BlS2luZDogaW5wdXQuc2NvcGVLaW5kLFxuICAgICAgICBzY29wZUlkOiBpbnB1dC5zY29wZUlkLFxuICAgICAgICBpbmhlcml0RG93bjogaW5wdXQuaW5oZXJpdERvd24gPz8gZmFsc2UsXG4gICAgICAgIHN0YXJ0c0F0OiBpbnB1dC5zdGFydHNBdCxcbiAgICAgICAgZXhwaXJlc0F0OiBpbnB1dC5leHBpcmVzQXQsXG4gICAgICAgIGNvbmRpdGlvbnM6IGlucHV0LmNvbmRpdGlvbnMsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZXZva2VBc3NpZ25tZW50KGFzc2lnbm1lbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChhc3NpZ25tZW50SWQsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFByaW5jaXBhbEFzc2lnbm1lbnRzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVBc3NpZ25tZW50W10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKFxuICAgICAgKGFzc2lnbm1lbnQpID0+XG4gICAgICAgIHNhbWVUZW5hbnQoYXNzaWdubWVudC50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICByZWxhdGlvbk1hdGNoKGFzc2lnbm1lbnQucHJpbmNpcGFsLCBwcmluY2lwYWxJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFJvbGVBc3NpZ25tZW50cyhcbiAgICByb2xlSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVBc3NpZ25tZW50W10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChhc3NpZ25tZW50KSA9PlxuICAgICAgcmVsYXRpb25NYXRjaChhc3NpZ25tZW50LnJvbGUsIHJvbGVJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRlbmFudEFzc2lnbm1lbnRzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSb2xlQXNzaWdubWVudFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigoYXNzaWdubWVudCkgPT5cbiAgICAgIHNhbWVUZW5hbnQoYXNzaWdubWVudC50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBc3NpZ25tZW50V2luZG93KFxuICAgIGFzc2lnbm1lbnRJZDogc3RyaW5nLFxuICAgIHN0YXJ0c0F0OiBEYXRlIHwgdW5kZWZpbmVkLFxuICAgIGV4cGlyZXNBdDogRGF0ZSB8IHVuZGVmaW5lZCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJvbGVBc3NpZ25tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKGFzc2lnbm1lbnRJZCwgeyBzdGFydHNBdCwgZXhwaXJlc0F0IH0sIC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSBleHRlbmRzIEJhc2VNb2RlbFNlcnZpY2U8RWZmZWN0aXZlUGVybWlzc2lvbj4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihFZmZlY3RpdmVQZXJtaXNzaW9uKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGb3JQcmluY2lwYWwoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RWZmZWN0aXZlUGVybWlzc2lvbltdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChwZXJtaXNzaW9uKSA9PlxuICAgICAgICBzYW1lVGVuYW50KHBlcm1pc3Npb24udGVuYW50LCB0ZW5hbnRJZCkgJiZcbiAgICAgICAgcmVsYXRpb25NYXRjaChwZXJtaXNzaW9uLnByaW5jaXBhbCwgcHJpbmNpcGFsSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RGb3JTY29wZShcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHNjb3BlS2luZDogU2NvcGVLaW5kLFxuICAgIHNjb3BlSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEVmZmVjdGl2ZVBlcm1pc3Npb25bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoXG4gICAgICAocGVybWlzc2lvbikgPT5cbiAgICAgICAgc2FtZVRlbmFudChwZXJtaXNzaW9uLnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgIHBlcm1pc3Npb24uc2NvcGVLaW5kID09PSBzY29wZUtpbmQgJiZcbiAgICAgICAgcGVybWlzc2lvbi5zY29wZUlkID09PSBzY29wZUlkXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1Blcm1pc3Npb24oXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIHBlcm1pc3Npb25LZXk6IHN0cmluZyxcbiAgICBzY29wZUtpbmQ6IFNjb3BlS2luZCxcbiAgICBzY29wZUlkOiBzdHJpbmcsXG4gICAgYXQ/OiBEYXRlLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0Rm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncykpLnNvbWUoXG4gICAgICAocGVybWlzc2lvbikgPT5cbiAgICAgICAgcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5ID09PSBwZXJtaXNzaW9uS2V5ICYmXG4gICAgICAgIHBlcm1pc3Npb24uc2NvcGVLaW5kID09PSBzY29wZUtpbmQgJiZcbiAgICAgICAgcGVybWlzc2lvbi5zY29wZUlkID09PSBzY29wZUlkICYmXG4gICAgICAgICghcGVybWlzc2lvbi5zdGFydHNBdCB8fCAhYXQgfHwgcGVybWlzc2lvbi5zdGFydHNBdCA8PSBhdCkgJiZcbiAgICAgICAgKCFwZXJtaXNzaW9uLmV4cGlyZXNBdCB8fCAhYXQgfHwgcGVybWlzc2lvbi5leHBpcmVzQXQgPj0gYXQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvclByaW5jaXBhbChcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIHByaW5jaXBhbElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgZGVsZXRlTWFueUJ5SWQoXG4gICAgICB0aGlzLFxuICAgICAgYXdhaXQgdGhpcy5saXN0Rm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncyksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZvclRlbmFudCh0ZW5hbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGRlbGV0ZU1hbnlCeUlkKFxuICAgICAgdGhpcyxcbiAgICAgIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocGVybWlzc2lvbikgPT5cbiAgICAgICAgc2FtZVRlbmFudChwZXJtaXNzaW9uLnRlbmFudCwgdGVuYW50SWQpXG4gICAgICApLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCgpXG4gIGFzeW5jIHJlYnVpbGRGb3JQcmluY2lwYWwoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8RWZmZWN0aXZlUGVybWlzc2lvbltdPiB7XG4gICAgYXdhaXQgdGhpcy5kZWxldGVGb3JQcmluY2lwYWwodGVuYW50SWQsIHByaW5jaXBhbElkLCAuLi5hcmdzKTtcblxuICAgIGNvbnN0IHJvbGVBc3NpZ25tZW50U2VydmljZSA9IG5ldyBSb2xlQXNzaWdubWVudFNlcnZpY2UoKTtcbiAgICBjb25zdCByb2xlUGVybWlzc2lvblNlcnZpY2UgPSBuZXcgUm9sZVBlcm1pc3Npb25TZXJ2aWNlKCk7XG4gICAgY29uc3QgcGVybWlzc2lvblNlcnZpY2UgPSBuZXcgUGVybWlzc2lvblNlcnZpY2UoKTtcbiAgICBjb25zdCBncm91cE1lbWJlcnNoaXBTZXJ2aWNlID0gbmV3IEdyb3VwTWVtYmVyc2hpcFNlcnZpY2UoKTtcbiAgICBjb25zdCBwcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgICBjb25zdCBvcmdVbml0Q2xvc3VyZVNlcnZpY2UgPSBuZXcgT3JnVW5pdENsb3N1cmVTZXJ2aWNlKCk7XG4gICAgY29uc3QgaW5oZXJpdGFuY2VCbG9ja1NlcnZpY2UgPSBuZXcgSW5oZXJpdGFuY2VCbG9ja1NlcnZpY2UoKTtcblxuICAgIGNvbnN0IG1hdGVyaWFsaXplZDogRWZmZWN0aXZlUGVybWlzc2lvblNuYXBzaG90W10gPSBbXTtcbiAgICBjb25zdCBzb3VyY2VBc3NpZ25tZW50cyA9XG4gICAgICBhd2FpdCByb2xlQXNzaWdubWVudFNlcnZpY2UubGlzdFByaW5jaXBhbEFzc2lnbm1lbnRzKFxuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG4gICAgY29uc3QgZ3JvdXBNZW1iZXJzaGlwcyA9IGF3YWl0IGdyb3VwTWVtYmVyc2hpcFNlcnZpY2UubGlzdFByaW5jaXBhbEdyb3VwcyhcbiAgICAgIHByaW5jaXBhbElkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgY29uc3QgZ3JvdXBBc3NpZ25tZW50cyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBncm91cE1lbWJlcnNoaXBzLm1hcChhc3luYyAobWVtYmVyc2hpcCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VwUHJpbmNpcGFsID0gYXdhaXQgcHJpbmNpcGFsU2VydmljZS5nZXRHcm91cFByaW5jaXBhbChcbiAgICAgICAgICAgIHJlbGF0aW9uSWQobWVtYmVyc2hpcC50ZW5hbnQpLFxuICAgICAgICAgICAgcmVsYXRpb25JZChtZW1iZXJzaGlwLmdyb3VwKSxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiByb2xlQXNzaWdubWVudFNlcnZpY2UubGlzdFByaW5jaXBhbEFzc2lnbm1lbnRzKFxuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBncm91cFByaW5jaXBhbC5pZCxcbiAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICkuZmxhdCgpO1xuXG4gICAgY29uc3QgYXNzaWdubWVudHMgPSBbLi4uc291cmNlQXNzaWdubWVudHMsIC4uLmdyb3VwQXNzaWdubWVudHNdO1xuICAgIGZvciAoY29uc3QgYXNzaWdubWVudCBvZiBhc3NpZ25tZW50cykge1xuICAgICAgY29uc3Qgcm9sZVBlcm1pc3Npb25zID0gYXdhaXQgcm9sZVBlcm1pc3Npb25TZXJ2aWNlLmxpc3RSb2xlUGVybWlzc2lvbnMoXG4gICAgICAgIHJlbGF0aW9uSWQoYXNzaWdubWVudC5yb2xlKSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJvbGVQZXJtaXNzaW9ucy5tYXAoYXN5bmMgKHJvbGVQZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IGF3YWl0IHBlcm1pc3Npb25TZXJ2aWNlLmZpbmRPbmVCeShcbiAgICAgICAgICAgIFwiaWRcIixcbiAgICAgICAgICAgIHJlbGF0aW9uSWQocm9sZVBlcm1pc3Npb24ucGVybWlzc2lvbikgYXMgbmV2ZXIsXG4gICAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gcGVybWlzc2lvbjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHBlcm1pc3Npb24gb2YgcGVybWlzc2lvbnMpIHtcbiAgICAgICAgaWYgKCFwZXJtaXNzaW9uKSBjb250aW51ZTtcbiAgICAgICAgY29uc3Qgc2NvcGVLaW5kID0gYXNzaWdubWVudC5zY29wZUtpbmQ7XG4gICAgICAgIGNvbnN0IHNjb3BlSWQgPSBhc3NpZ25tZW50LnNjb3BlSWQ7XG4gICAgICAgIGNvbnN0IHNjb3BlczogQXJyYXk8eyBzY29wZUtpbmQ6IFNjb3BlS2luZDsgc2NvcGVJZDogc3RyaW5nIH0+ID0gW107XG4gICAgICAgIGlmIChzY29wZUtpbmQgPT09IFNjb3BlS2luZC5UZW5hbnQpIHtcbiAgICAgICAgICBzY29wZXMucHVzaCh7IHNjb3BlS2luZCwgc2NvcGVJZDogdGVuYW50SWQgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NvcGVLaW5kID09PSBTY29wZUtpbmQuUmVzb3VyY2UpIHtcbiAgICAgICAgICBzY29wZXMucHVzaCh7IHNjb3BlS2luZCwgc2NvcGVJZCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0ICYmICFhc3NpZ25tZW50LmluaGVyaXREb3duKSB7XG4gICAgICAgICAgc2NvcGVzLnB1c2goeyBzY29wZUtpbmQsIHNjb3BlSWQgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NvcGVLaW5kID09PSBTY29wZUtpbmQuT3JnVW5pdCAmJiBhc3NpZ25tZW50LmluaGVyaXREb3duKSB7XG4gICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSBhd2FpdCBvcmdVbml0Q2xvc3VyZVNlcnZpY2UubGlzdERlc2NlbmRhbnRzKFxuICAgICAgICAgICAgdGVuYW50SWQsXG4gICAgICAgICAgICBzY29wZUlkLFxuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICk7XG4gICAgICAgICAgc2NvcGVzLnB1c2goXG4gICAgICAgICAgICAuLi5kZXNjZW5kYW50cy5tYXAoKHJvdykgPT4gKHtcbiAgICAgICAgICAgICAgc2NvcGVLaW5kLFxuICAgICAgICAgICAgICBzY29wZUlkOiByZWxhdGlvbklkKHJvdy5kZXNjZW5kYW50KSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZCBvZiBzY29wZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0ICYmXG4gICAgICAgICAgICBhc3NpZ25tZW50LmluaGVyaXREb3duICYmXG4gICAgICAgICAgICBzY29wZWQuc2NvcGVJZCAhPT0gc2NvcGVJZCAmJlxuICAgICAgICAgICAgKGF3YWl0IGluaGVyaXRhbmNlQmxvY2tTZXJ2aWNlLmNhdGVnb3J5QmxvY2tlZEZvckFuY2VzdG9yKFxuICAgICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgICAgc2NvcGVkLnNjb3BlSWQsXG4gICAgICAgICAgICAgIHNjb3BlSWQsXG4gICAgICAgICAgICAgIHBlcm1pc3Npb24uY2F0ZWdvcnksXG4gICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF0ZXJpYWxpemVkLnB1c2goe1xuICAgICAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgICAgIHByaW5jaXBhbElkLFxuICAgICAgICAgICAgcGVybWlzc2lvbktleTogcGVybWlzc2lvbi5rZXksXG4gICAgICAgICAgICBzY29wZUtpbmQ6IHNjb3BlZC5zY29wZUtpbmQsXG4gICAgICAgICAgICBzY29wZUlkOiBzY29wZWQuc2NvcGVJZCxcbiAgICAgICAgICAgIHNvdXJjZUtpbmQ6IFwicm9sZV9hc3NpZ25tZW50XCIsXG4gICAgICAgICAgICBzb3VyY2VJZDogYXNzaWdubWVudC5pZCxcbiAgICAgICAgICAgIHN0YXJ0c0F0OiBhc3NpZ25tZW50LnN0YXJ0c0F0LFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBhc3NpZ25tZW50LmV4cGlyZXNBdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1hdGVyaWFsaXplZC5tYXAoKHBlcm1pc3Npb24pID0+XG4gICAgICAgIHRoaXMuY3JlYXRlT25lKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiBwZXJtaXNzaW9uLmlkLFxuICAgICAgICAgICAgdGVuYW50OiBwZXJtaXNzaW9uLnRlbmFudElkLFxuICAgICAgICAgICAgcHJpbmNpcGFsOiBwZXJtaXNzaW9uLnByaW5jaXBhbElkLFxuICAgICAgICAgICAgcGVybWlzc2lvbktleTogcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5LFxuICAgICAgICAgICAgc2NvcGVLaW5kOiBwZXJtaXNzaW9uLnNjb3BlS2luZCxcbiAgICAgICAgICAgIHNjb3BlSWQ6IHBlcm1pc3Npb24uc2NvcGVJZCxcbiAgICAgICAgICAgIHNvdXJjZUtpbmQ6IHBlcm1pc3Npb24uc291cmNlS2luZCxcbiAgICAgICAgICAgIHNvdXJjZUlkOiBwZXJtaXNzaW9uLnNvdXJjZUlkLFxuICAgICAgICAgICAgc3RhcnRzQXQ6IHBlcm1pc3Npb24uc3RhcnRzQXQsXG4gICAgICAgICAgICBleHBpcmVzQXQ6IHBlcm1pc3Npb24uZXhwaXJlc0F0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYXJnc1xuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgcmVidWlsZEZvclRlbmFudCh0ZW5hbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByaW5jaXBhbHMgPSAoYXdhaXQgbmV3IFByaW5jaXBhbFNlcnZpY2UoKS5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoXG4gICAgICAocHJpbmNpcGFsKSA9PiBzYW1lVGVuYW50KHByaW5jaXBhbC50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBwcmluY2lwYWwgb2YgcHJpbmNpcGFscykge1xuICAgICAgYXdhaXQgdGhpcy5yZWJ1aWxkRm9yUHJpbmNpcGFsKHRlbmFudElkLCBwcmluY2lwYWwuaWQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvdGVjdGVkUmVzb3VyY2VTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxQcm90ZWN0ZWRSZXNvdXJjZT4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQcm90ZWN0ZWRSZXNvdXJjZSk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlclJlc291cmNlKFxuICAgIGlucHV0OiBSZWdpc3RlclJlc291cmNlSW5wdXQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQcm90ZWN0ZWRSZXNvdXJjZT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogaW5wdXQudGVuYW50SWQsXG4gICAgICAgIG9yZ1VuaXQ6IGlucHV0Lm9yZ1VuaXRJZCxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBpbnB1dC5yZXNvdXJjZVR5cGUsXG4gICAgICAgIHJlc291cmNlSWQ6IGlucHV0LnJlc291cmNlSWQsXG4gICAgICAgIHZpc2liaWxpdHk6IGlucHV0LnZpc2liaWxpdHksXG4gICAgICAgIG93bmVyOiBpbnB1dC5vd25lclByaW5jaXBhbElkLFxuICAgICAgICBzZW5zaXRpdml0eTogaW5wdXQuc2Vuc2l0aXZpdHksXG4gICAgICAgIG1ldGFkYXRhOiBpbnB1dC5tZXRhZGF0YSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEJ5RG9tYWluUmVzb3VyY2UoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICByZXNvdXJjZVR5cGU6IHN0cmluZyxcbiAgICByZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQcm90ZWN0ZWRSZXNvdXJjZSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maW5kKFxuICAgICAgKHJlc291cmNlKSA9PlxuICAgICAgICBzYW1lVGVuYW50KHJlc291cmNlLnRlbmFudCwgdGVuYW50SWQpICYmXG4gICAgICAgIHJlc291cmNlLnJlc291cmNlVHlwZSA9PT0gcmVzb3VyY2VUeXBlICYmXG4gICAgICAgIHJlc291cmNlLnJlc291cmNlSWQgPT09IHJlc291cmNlSWRcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbW92ZVJlc291cmNlVG9PcmdVbml0KFxuICAgIHByb3RlY3RlZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByb3RlY3RlZFJlc291cmNlPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKHByb3RlY3RlZFJlc291cmNlSWQsIHsgb3JnVW5pdDogb3JnVW5pdElkIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgc2V0VmlzaWJpbGl0eShcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgdmlzaWJpbGl0eTogUmVzb3VyY2VWaXNpYmlsaXR5LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJvdGVjdGVkUmVzb3VyY2U+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVPbmUocHJvdGVjdGVkUmVzb3VyY2VJZCwgeyB2aXNpYmlsaXR5IH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgdHJhbnNmZXJPd25lcnNoaXAoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VJZDogc3RyaW5nLFxuICAgIG93bmVyUHJpbmNpcGFsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFByb3RlY3RlZFJlc291cmNlPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKFxuICAgICAgcHJvdGVjdGVkUmVzb3VyY2VJZCxcbiAgICAgIHsgb3duZXI6IG93bmVyUHJpbmNpcGFsSWQgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdE9yZ1VuaXRSZXNvdXJjZXMoXG4gICAgb3JnVW5pdElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxQcm90ZWN0ZWRSZXNvdXJjZVtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigocmVzb3VyY2UpID0+XG4gICAgICByZWxhdGlvbk1hdGNoKHJlc291cmNlLm9yZ1VuaXQsIG9yZ1VuaXRJZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRlbmFudFJlc291cmNlcyhcbiAgICB0ZW5hbnRJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UHJvdGVjdGVkUmVzb3VyY2VbXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5saXN0QWxsKC4uLmFyZ3MpKS5maWx0ZXIoKHJlc291cmNlKSA9PlxuICAgICAgc2FtZVRlbmFudChyZXNvdXJjZS50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc291cmNlR3JhbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxSZXNvdXJjZUdyYW50PiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFJlc291cmNlR3JhbnQpO1xuICB9XG5cbiAgYXN5bmMgZ3JhbnRSZXNvdXJjZShcbiAgICBpbnB1dDogR3JhbnRSZXNvdXJjZUlucHV0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVzb3VyY2VHcmFudD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9uZShcbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkKCksXG4gICAgICAgIHRlbmFudDogaW5wdXQudGVuYW50SWQsXG4gICAgICAgIHJlc291cmNlOiBpbnB1dC5yZXNvdXJjZUlkLFxuICAgICAgICBwcmluY2lwYWw6IGlucHV0LnByaW5jaXBhbElkLFxuICAgICAgICBwZXJtaXNzaW9uS2V5OiBpbnB1dC5wZXJtaXNzaW9uS2V5LFxuICAgICAgICBzdGFydHNBdDogaW5wdXQuc3RhcnRzQXQsXG4gICAgICAgIGV4cGlyZXNBdDogaW5wdXQuZXhwaXJlc0F0LFxuICAgICAgICBjb25kaXRpb25zOiBpbnB1dC5jb25kaXRpb25zLFxuICAgICAgICBjcmVhdGVkQnk6IGlucHV0LmNyZWF0ZWRCeVByaW5jaXBhbElkLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmV2b2tlR3JhbnQoZ3JhbnRJZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZGVsZXRlQnlJZChncmFudElkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RSZXNvdXJjZUdyYW50cyhcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZXNvdXJjZUdyYW50W10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdEFsbCguLi5hcmdzKSkuZmlsdGVyKChncmFudCkgPT5cbiAgICAgIHJlbGF0aW9uTWF0Y2goZ3JhbnQucmVzb3VyY2UsIHByb3RlY3RlZFJlc291cmNlSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RQcmluY2lwYWxHcmFudHMoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVzb3VyY2VHcmFudFtdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcihcbiAgICAgIChncmFudCkgPT5cbiAgICAgICAgc2FtZVRlbmFudChncmFudC50ZW5hbnQsIHRlbmFudElkKSAmJlxuICAgICAgICByZWxhdGlvbk1hdGNoKGdyYW50LnByaW5jaXBhbCwgcHJpbmNpcGFsSWQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGhhc0dyYW50KFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWRSZXNvdXJjZUlkOiBzdHJpbmcsXG4gICAgcGVybWlzc2lvbktleTogc3RyaW5nLFxuICAgIGF0PzogRGF0ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5saXN0UHJpbmNpcGFsR3JhbnRzKHRlbmFudElkLCBwcmluY2lwYWxJZCwgLi4uYXJncylcbiAgICApLnNvbWUoXG4gICAgICAoZ3JhbnQpID0+XG4gICAgICAgIHJlbGF0aW9uTWF0Y2goZ3JhbnQucmVzb3VyY2UsIHByb3RlY3RlZFJlc291cmNlSWQpICYmXG4gICAgICAgIGdyYW50LnBlcm1pc3Npb25LZXkgPT09IHBlcm1pc3Npb25LZXkgJiZcbiAgICAgICAgKCFncmFudC5zdGFydHNBdCB8fCAhYXQgfHwgZ3JhbnQuc3RhcnRzQXQgPD0gYXQpICYmXG4gICAgICAgICghZ3JhbnQuZXhwaXJlc0F0IHx8ICFhdCB8fCBncmFudC5leHBpcmVzQXQgPj0gYXQpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbEZvclJlc291cmNlKFxuICAgIHByb3RlY3RlZFJlc291cmNlSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBkZWxldGVNYW55QnlJZChcbiAgICAgIHRoaXMsXG4gICAgICBhd2FpdCB0aGlzLmxpc3RSZXNvdXJjZUdyYW50cyhwcm90ZWN0ZWRSZXNvdXJjZUlkLCAuLi5hcmdzKSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUxpZmVjeWNsZVNlcnZpY2Uge1xuICBhc3luYyB1bnJlZ2lzdGVyUmVzb3VyY2UoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5ldyBSZXNvdXJjZUdyYW50U2VydmljZSgpLmRlbGV0ZUFsbEZvclJlc291cmNlKFxuICAgICAgcHJvdGVjdGVkUmVzb3VyY2VJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGF3YWl0IG5ldyBQcm90ZWN0ZWRSZXNvdXJjZVNlcnZpY2UoKS5kZWxldGVCeUlkKFxuICAgICAgcHJvdGVjdGVkUmVzb3VyY2VJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZVJlc291cmNlU2NvcGUoXG4gICAgcHJvdGVjdGVkUmVzb3VyY2VJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8e1xuICAgIHRlbmFudElkOiBzdHJpbmc7XG4gICAgb3JnVW5pdElkOiBzdHJpbmc7XG4gICAgdmlzaWJpbGl0eTogUmVzb3VyY2VWaXNpYmlsaXR5O1xuICAgIG93bmVyUHJpbmNpcGFsSWQ/OiBzdHJpbmc7XG4gIH0+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IGF3YWl0IG5ldyBQcm90ZWN0ZWRSZXNvdXJjZVNlcnZpY2UoKS5nZXRCeUlkKFxuICAgICAgcHJvdGVjdGVkUmVzb3VyY2VJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICB0ZW5hbnRJZDogcmVsYXRpb25JZChyZXNvdXJjZS50ZW5hbnQpLFxuICAgICAgb3JnVW5pdElkOiByZWxhdGlvbklkKHJlc291cmNlLm9yZ1VuaXQpLFxuICAgICAgdmlzaWJpbGl0eTogcmVzb3VyY2UudmlzaWJpbGl0eSxcbiAgICAgIG93bmVyUHJpbmNpcGFsSWQ6IHJlc291cmNlLm93bmVyID8gcmVsYXRpb25JZChyZXNvdXJjZS5vd25lcikgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZUJpbmRpbmdTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZGVsU2VydmljZTxTdG9yYWdlQmluZGluZz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihTdG9yYWdlQmluZGluZyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCaW5kaW5nKFxuICAgIGlucHV0OiBDcmVhdGVTdG9yYWdlQmluZGluZ0lucHV0LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8U3RvcmFnZUJpbmRpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPbmUoXG4gICAgICB7XG4gICAgICAgIGlkOiBpZCgpLFxuICAgICAgICB0ZW5hbnQ6IGlucHV0LnRlbmFudElkLFxuICAgICAgICBzdG9yYWdlS2luZDogaW5wdXQuc3RvcmFnZUtpbmQsXG4gICAgICAgIGJpbmRpbmdLaW5kOiBpbnB1dC5iaW5kaW5nS2luZCxcbiAgICAgICAgYmluZGluZ0tleTogaW5wdXQuYmluZGluZ0tleSxcbiAgICAgICAgcmVnaW9uOiBpbnB1dC5yZWdpb24sXG4gICAgICAgIGNvbmZpZzogaW5wdXQuY29uZmlnLFxuICAgICAgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRlbmFudEJpbmRpbmdzKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxTdG9yYWdlQmluZGluZ1tdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmxpc3RBbGwoLi4uYXJncykpLmZpbHRlcigoYmluZGluZykgPT5cbiAgICAgIHNhbWVUZW5hbnQoYmluZGluZy50ZW5hbnQsIHRlbmFudElkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRCaW5kaW5nKFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgc3RvcmFnZUtpbmQ6IFN0b3JhZ2VLaW5kLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8U3RvcmFnZUJpbmRpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMubGlzdFRlbmFudEJpbmRpbmdzKHRlbmFudElkLCAuLi5hcmdzKSkuZmluZChcbiAgICAgIChiaW5kaW5nKSA9PiBiaW5kaW5nLnN0b3JhZ2VLaW5kID09PSBzdG9yYWdlS2luZFxuICAgICk7XG4gIH1cblxuICBhc3luYyBzZXRCaW5kaW5nQ29uZmlnKFxuICAgIGJpbmRpbmdJZDogc3RyaW5nLFxuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxTdG9yYWdlQmluZGluZz4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9uZShiaW5kaW5nSWQsIHsgY29uZmlnIH0sIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgcHJvbW90ZVRvRGVkaWNhdGVkKFxuICAgIGJpbmRpbmdJZDogc3RyaW5nLFxuICAgIGJpbmRpbmdLZXk6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFN0b3JhZ2VCaW5kaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKFxuICAgICAgYmluZGluZ0lkLFxuICAgICAgeyBiaW5kaW5nS2luZDogU3RvcmFnZUJpbmRpbmdLaW5kLkRlZGljYXRlZCwgYmluZGluZ0tleSwgcmVnaW9uLCBjb25maWcgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2V0U2hhcmVkKFxuICAgIGJpbmRpbmdJZDogc3RyaW5nLFxuICAgIGJpbmRpbmdLZXk6IHN0cmluZyxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFN0b3JhZ2VCaW5kaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlT25lKFxuICAgICAgYmluZGluZ0lkLFxuICAgICAgeyBiaW5kaW5nS2luZDogU3RvcmFnZUJpbmRpbmdLaW5kLlNoYXJlZCwgYmluZGluZ0tleSwgcmVnaW9uLCBjb25maWcgfSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb290c3RyYXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlID0gbmV3IFRlbmFudFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSB0ZW5hbnRQcm9maWxlU2VydmljZSA9IG5ldyBUZW5hbnRQcm9maWxlU2VydmljZSgpO1xuICBwcml2YXRlIG9yZ1VuaXRTZXJ2aWNlID0gbmV3IE9yZ1VuaXRTZXJ2aWNlKCk7XG4gIHByaXZhdGUgb3JnVW5pdFByb2ZpbGVTZXJ2aWNlID0gbmV3IE9yZ1VuaXRQcm9maWxlU2VydmljZSgpO1xuICBwcml2YXRlIHVzZXJTZXJ2aWNlID0gbmV3IFVzZXJTZXJ2aWNlKCk7XG4gIHByaXZhdGUgbWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgVGVuYW50TWVtYmVyc2hpcFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBwcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBwZXJtaXNzaW9uU2VydmljZSA9IG5ldyBQZXJtaXNzaW9uU2VydmljZSgpO1xuICBwcml2YXRlIHJvbGVTZXJ2aWNlID0gbmV3IFJvbGVTZXJ2aWNlKCk7XG4gIHByaXZhdGUgcm9sZVBlcm1pc3Npb25TZXJ2aWNlID0gbmV3IFJvbGVQZXJtaXNzaW9uU2VydmljZSgpO1xuICBwcml2YXRlIHJvbGVBc3NpZ25tZW50U2VydmljZSA9IG5ldyBSb2xlQXNzaWdubWVudFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBlZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSA9IG5ldyBFZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSgpO1xuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgYm9vdHN0cmFwVGVuYW50RnJvbVRlbXBsYXRlKFxuICAgIHRlbXBsYXRlOiBCb290c3RyYXBUZW1wbGF0ZSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHtcbiAgICB0ZW5hbnRJZDogc3RyaW5nO1xuICAgIHJvb3RPcmdVbml0SWQ6IHN0cmluZztcbiAgICBvd25lclVzZXJJZDogc3RyaW5nO1xuICAgIG93bmVyUHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgfT4ge1xuICAgIGNvbnN0IHRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5jcmVhdGVUZW5hbnQoXG4gICAgICB0ZW1wbGF0ZS50ZW5hbnQsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBpZiAodGVtcGxhdGUudGVuYW50LnByb2ZpbGVLZXkpIHtcbiAgICAgIGF3YWl0IHRoaXMudGVuYW50UHJvZmlsZVNlcnZpY2UuY3JlYXRlUHJvZmlsZShcbiAgICAgICAgdGVuYW50LmlkLFxuICAgICAgICB0ZW1wbGF0ZS50ZW5hbnQucHJvZmlsZUtleSxcbiAgICAgICAgdGVtcGxhdGUudGVuYW50LnByb2ZpbGVNZXRhZGF0YSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVhdGVPcmdUcmVlID0gYXN5bmMgKFxuICAgICAgcGFyZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIG9yZ1VuaXQ6IEJvb3RzdHJhcE9yZ1VuaXRcbiAgICApOiBQcm9taXNlPE9yZ1VuaXQ+ID0+IHtcbiAgICAgIGNvbnN0IGNyZWF0ZWQgPVxuICAgICAgICBwYXJlbnRJZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLm9yZ1VuaXRTZXJ2aWNlLmNyZWF0ZVJvb3QoXG4gICAgICAgICAgICAgIHRlbmFudC5pZCxcbiAgICAgICAgICAgICAgb3JnVW5pdC5uYW1lLFxuICAgICAgICAgICAgICBvcmdVbml0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICBvcmdVbml0LnByb2ZpbGVLZXksXG4gICAgICAgICAgICAgIG9yZ1VuaXQubWV0YWRhdGEsXG4gICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGF3YWl0IHRoaXMub3JnVW5pdFNlcnZpY2UuY3JlYXRlQ2hpbGQoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgICAgICAgICAgIHBhcmVudE9yZ1VuaXRJZDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgbmFtZTogb3JnVW5pdC5uYW1lLFxuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBvcmdVbml0Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIHByb2ZpbGVLZXk6IG9yZ1VuaXQucHJvZmlsZUtleSxcbiAgICAgICAgICAgICAgICBwcm9maWxlTWV0YWRhdGE6IG9yZ1VuaXQubWV0YWRhdGEsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIC4uLmFyZ3NcbiAgICAgICAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG9yZ1VuaXQuY2hpbGRyZW4gPz8gW10pIHtcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JnVHJlZShjcmVhdGVkLmlkLCBjaGlsZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9O1xuXG4gICAgY29uc3Qgcm9vdE9yZ1VuaXQgPSBhd2FpdCBjcmVhdGVPcmdUcmVlKHVuZGVmaW5lZCwgdGVtcGxhdGUucm9vdE9yZ1VuaXQpO1xuICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy51c2VyU2VydmljZS5jcmVhdGVVc2VyKFxuICAgICAgdGVtcGxhdGUub3duZXJVc2VyLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5tZW1iZXJzaGlwU2VydmljZS5hZGRVc2VyVG9UZW5hbnQoXG4gICAgICB0ZW5hbnQuaWQsXG4gICAgICBvd25lci5pZCxcbiAgICAgIE1lbWJlcnNoaXBTdGF0dXMuQWN0aXZlLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgY29uc3Qgb3duZXJQcmluY2lwYWwgPSBhd2FpdCB0aGlzLnByaW5jaXBhbFNlcnZpY2UuZ2V0VXNlclByaW5jaXBhbChcbiAgICAgIHRlbmFudC5pZCxcbiAgICAgIG93bmVyLmlkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHBlcm1pc3Npb24gb2YgdGVtcGxhdGUucGVybWlzc2lvbnMpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVybWlzc2lvblNlcnZpY2UuY3JlYXRlUGVybWlzc2lvbihwZXJtaXNzaW9uLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvbGUgb2YgdGVtcGxhdGUucm9sZXMpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZWRSb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5jcmVhdGVSb2xlKFxuICAgICAgICB7XG4gICAgICAgICAgdGVuYW50SWQ6IHRlbmFudC5pZCxcbiAgICAgICAgICBrZXk6IHJvbGUua2V5LFxuICAgICAgICAgIG5hbWU6IHJvbGUubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogcm9sZS5kZXNjcmlwdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgcGVybWlzc2lvbktleSBvZiByb2xlLnBlcm1pc3Npb25LZXlzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9sZVBlcm1pc3Npb25TZXJ2aWNlLmFkZFBlcm1pc3Npb25LZXlUb1JvbGUoXG4gICAgICAgICAgY3JlYXRlZFJvbGUuaWQsXG4gICAgICAgICAgcGVybWlzc2lvbktleSxcbiAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3duZXJSb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5nZXRUZW5hbnRSb2xlQnlLZXkoXG4gICAgICB0ZW5hbnQuaWQsXG4gICAgICB0ZW1wbGF0ZS5vd25lclJvbGVLZXksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnJvbGVBc3NpZ25tZW50U2VydmljZS5hc3NpZ25Sb2xlKFxuICAgICAge1xuICAgICAgICB0ZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgICBwcmluY2lwYWxJZDogb3duZXJQcmluY2lwYWwuaWQsXG4gICAgICAgIHJvbGVJZDogb3duZXJSb2xlLmlkLFxuICAgICAgICBzY29wZUtpbmQ6IFNjb3BlS2luZC5PcmdVbml0LFxuICAgICAgICBzY29wZUlkOiByb290T3JnVW5pdC5pZCxcbiAgICAgICAgaW5oZXJpdERvd246IHRydWUsXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5yZWJ1aWxkRm9yUHJpbmNpcGFsKFxuICAgICAgdGVuYW50LmlkLFxuICAgICAgb3duZXJQcmluY2lwYWwuaWQsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZW5hbnRJZDogdGVuYW50LmlkLFxuICAgICAgcm9vdE9yZ1VuaXRJZDogcm9vdE9yZ1VuaXQuaWQsXG4gICAgICBvd25lclVzZXJJZDogb3duZXIuaWQsXG4gICAgICBvd25lclByaW5jaXBhbElkOiBvd25lclByaW5jaXBhbC5pZCxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSB7XG4gIHByaXZhdGUgbWVtYmVyc2hpcFNlcnZpY2UgPSBuZXcgVGVuYW50TWVtYmVyc2hpcFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBvcmdNZW1iZXJzaGlwU2VydmljZSA9IG5ldyBPcmdVbml0TWVtYmVyc2hpcFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBwcmluY2lwYWxTZXJ2aWNlID0gbmV3IFByaW5jaXBhbFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSByb2xlU2VydmljZSA9IG5ldyBSb2xlU2VydmljZSgpO1xuICBwcml2YXRlIHJvbGVBc3NpZ25tZW50U2VydmljZSA9IG5ldyBSb2xlQXNzaWdubWVudFNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBlZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSA9IG5ldyBFZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZSgpO1xuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgb25ib2FyZFVzZXJUb1RlbmFudEFuZE9yZ1VuaXQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICBvcmdVbml0SWQ6IHN0cmluZyxcbiAgICByb2xlS2V5OiBzdHJpbmcsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx7IHByaW5jaXBhbElkOiBzdHJpbmcgfT4ge1xuICAgIGF3YWl0IHRoaXMubWVtYmVyc2hpcFNlcnZpY2UuYWRkVXNlclRvVGVuYW50KFxuICAgICAgdGVuYW50SWQsXG4gICAgICB1c2VySWQsXG4gICAgICBNZW1iZXJzaGlwU3RhdHVzLkFjdGl2ZSxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIGF3YWl0IHRoaXMub3JnTWVtYmVyc2hpcFNlcnZpY2UuYWRkVXNlclRvT3JnVW5pdChcbiAgICAgIHRlbmFudElkLFxuICAgICAgb3JnVW5pdElkLFxuICAgICAgdXNlcklkLFxuICAgICAgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBwcmluY2lwYWwgPSBhd2FpdCB0aGlzLnByaW5jaXBhbFNlcnZpY2UuZ2V0VXNlclByaW5jaXBhbChcbiAgICAgIHRlbmFudElkLFxuICAgICAgdXNlcklkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgY29uc3Qgcm9sZSA9IGF3YWl0IHRoaXMucm9sZVNlcnZpY2UuZ2V0VGVuYW50Um9sZUJ5S2V5KFxuICAgICAgdGVuYW50SWQsXG4gICAgICByb2xlS2V5LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UuYXNzaWduUm9sZShcbiAgICAgIHtcbiAgICAgICAgdGVuYW50SWQsXG4gICAgICAgIHByaW5jaXBhbElkOiBwcmluY2lwYWwuaWQsXG4gICAgICAgIHJvbGVJZDogcm9sZS5pZCxcbiAgICAgICAgc2NvcGVLaW5kOiBTY29wZUtpbmQuT3JnVW5pdCxcbiAgICAgICAgc2NvcGVJZDogb3JnVW5pdElkLFxuICAgICAgICBpbmhlcml0RG93bjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnJlYnVpbGRGb3JQcmluY2lwYWwoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHByaW5jaXBhbC5pZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiB7IHByaW5jaXBhbElkOiBwcmluY2lwYWwuaWQgfTtcbiAgfVxuXG4gIEB0cmFuc2FjdGlvbmFsKClcbiAgYXN5bmMgY2hhbmdlVXNlck9yZ1JvbGUoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIG9yZ1VuaXRJZDogc3RyaW5nLFxuICAgIHJvbGVLZXk6IHN0cmluZyxcbiAgICBpbmhlcml0RG93bjogYm9vbGVhbixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb2xlID0gYXdhaXQgdGhpcy5yb2xlU2VydmljZS5nZXRUZW5hbnRSb2xlQnlLZXkoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHJvbGVLZXksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50QXNzaWdubWVudHMgPVxuICAgICAgYXdhaXQgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UubGlzdFByaW5jaXBhbEFzc2lnbm1lbnRzKFxuICAgICAgICB0ZW5hbnRJZCxcbiAgICAgICAgcHJpbmNpcGFsSWQsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG4gICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIGN1cnJlbnRBc3NpZ25tZW50cy5maWx0ZXIoXG4gICAgICAocm93KSA9PiByb3cuc2NvcGVLaW5kID09PSBTY29wZUtpbmQuT3JnVW5pdCAmJiByb3cuc2NvcGVJZCA9PT0gb3JnVW5pdElkXG4gICAgKSkge1xuICAgICAgYXdhaXQgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UucmV2b2tlQXNzaWdubWVudChhc3NpZ25tZW50LmlkLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yb2xlQXNzaWdubWVudFNlcnZpY2UuYXNzaWduUm9sZShcbiAgICAgIHtcbiAgICAgICAgdGVuYW50SWQsXG4gICAgICAgIHByaW5jaXBhbElkLFxuICAgICAgICByb2xlSWQ6IHJvbGUuaWQsXG4gICAgICAgIHNjb3BlS2luZDogU2NvcGVLaW5kLk9yZ1VuaXQsXG4gICAgICAgIHNjb3BlSWQ6IG9yZ1VuaXRJZCxcbiAgICAgICAgaW5oZXJpdERvd24sXG4gICAgICB9LFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5yZWJ1aWxkRm9yUHJpbmNpcGFsKFxuICAgICAgdGVuYW50SWQsXG4gICAgICBwcmluY2lwYWxJZCxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoKVxuICBhc3luYyBzdXNwZW5kVXNlckluVGVuYW50KFxuICAgIHRlbmFudE1lbWJlcnNoaXBJZDogc3RyaW5nLFxuICAgIHRlbmFudElkOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLm1lbWJlcnNoaXBTZXJ2aWNlLnNldFN0YXR1cyhcbiAgICAgIHRlbmFudE1lbWJlcnNoaXBJZCxcbiAgICAgIE1lbWJlcnNoaXBTdGF0dXMuU3VzcGVuZGVkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgYXdhaXQgdGhpcy5lZmZlY3RpdmVQZXJtaXNzaW9uU2VydmljZS5kZWxldGVGb3JQcmluY2lwYWwoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHByaW5jaXBhbElkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCgpXG4gIGFzeW5jIHJlYWN0aXZhdGVVc2VySW5UZW5hbnQoXG4gICAgdGVuYW50TWVtYmVyc2hpcElkOiBzdHJpbmcsXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubWVtYmVyc2hpcFNlcnZpY2Uuc2V0U3RhdHVzKFxuICAgICAgdGVuYW50TWVtYmVyc2hpcElkLFxuICAgICAgTWVtYmVyc2hpcFN0YXR1cy5BY3RpdmUsXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmVmZmVjdGl2ZVBlcm1pc3Npb25TZXJ2aWNlLnJlYnVpbGRGb3JQcmluY2lwYWwoXG4gICAgICB0ZW5hbnRJZCxcbiAgICAgIHByaW5jaXBhbElkLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -8,4 +8,4 @@ export * from "./rls.template.js";
8
8
  export * from "./rls-bootstrap.service.js";
9
9
  export * from "./principal-resolver.js";
10
10
  export * from "./session-binding.js";
11
- //# sourceMappingURL=index.js.map
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmFtZXNwYWNlcy9ybHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsbUNBQWdDO0FBQ2hDLCtCQUE0QjtBQUM1QixrQ0FBK0I7QUFDL0IsMkNBQXdDO0FBQ3hDLHdDQUFxQztBQUNyQyxxQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25hbWVzcGFjZXMvcmxzXG4gKiBAc3VtbWFyeSBOYW1lc3BhY2Ugcm93LWxldmVsLXNlY3VyaXR5IHRlbXBsYXRlLCBib290c3RyYXAgc2VydmljZSwgYW5kIHNlc3Npb24gaGVscGVycy5cbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vcmxzLmNvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmxzLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ybHMudGVtcGxhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jscy1ib290c3RyYXAuc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJpbmNpcGFsLXJlc29sdmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zZXNzaW9uLWJpbmRpbmdcIjtcbiJdfQ==
@@ -58,4 +58,4 @@ export async function resolvePrincipalForSubject(client, subject, tenantId) {
58
58
  const normalized = principalId.trim();
59
59
  return PRINCIPAL_UUID_PATTERN.test(normalized) ? normalized : undefined;
60
60
  }
61
- //# sourceMappingURL=principal-resolver.js.map
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbmNpcGFsLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvcmxzL3ByaW5jaXBhbC1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFxQjFEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQ2pDLGlFQUFpRSxDQUFDO0FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMEJBQTBCLENBQzlDLE1BQW1DLEVBQ25DLE9BQWUsRUFDZixRQUFpQjtJQUVqQixJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxVQUFVO1FBQy9DLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLDhHQUE4RyxDQUMvRyxDQUFDO0lBQ0osTUFBTSxpQkFBaUIsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVFLElBQUksQ0FBQyxpQkFBaUI7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN6QyxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4RSxNQUFNLElBQUksZUFBZSxDQUN2QixrRUFBa0UsQ0FDbkUsQ0FBQztJQUNOLENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FDaEMsOERBQThELEVBQzlELENBQUMsaUJBQWlCLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUN0QyxDQUFRLENBQUM7SUFDVixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7SUFDM0QsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3RELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvbmFtZXNwYWNlcy9ybHMvcHJpbmNpcGFsLXJlc29sdmVyXG4gKiBAc3VtbWFyeSBSZXNvbHZlcyBhIGRlY2FmIGBwcmluY2lwYWxzLmlkYCBVVUlEIGZyb20gYW4gYXV0aGVudGljYXRlZCBzdWJqZWN0IHRocm91Z2ggdGhlIFJMUyBgU0VDVVJJVFkgREVGSU5FUmAgaGVscGVyLlxuICogQGRlc2NyaXB0aW9uIEV4cG9zZXMge0BsaW5rIHJlc29sdmVQcmluY2lwYWxGb3JTdWJqZWN0fSwgYSBmYWlsLWNsb3NlZCxcbiAqIGZ1bGx5IHBhcmFtZXRlcml6ZWQgbG9va3VwIHRoYXQgbWFwcyBhbiBhdXRoZW50aWNhdGVkIHN1YmplY3QgaWQgKGFuZFxuICogb3B0aW9uYWwgdGVuYW50KSB0byB0aGUgc2luZ2xlIG1hdGNoaW5nIHByaW5jaXBhbCBVVUlEIHZpYSB0aGVcbiAqIGBhcHBfcmxzX3ByaW5jaXBhbF9mb3Jfc3ViamVjdCh0ZXh0LCB1dWlkKWAgU1FMIGhlbHBlciBpbnN0YWxsZWQgYnkgdGhlXG4gKiBuYW1lc3BhY2UgUkxTIHRlbXBsYXRlLiBJbnRlbmRlZCBmb3IgcHJpdmlsZWdlZCBpbmZyYXN0cnVjdHVyZSBjb2RlIChhdXRoXG4gKiBwcmltZSAvIHNlcnZpY2Ugcm9sZSkgdGhhdCBtdXN0IHRyYW5zbGF0ZSBhIGxvZ2luIGlkZW50aXR5IGludG8gdGhlXG4gKiBwcmluY2lwYWwgVVVJRCB0aGUgVHlwZU9STSBhZGFwdGVyIGJpbmRzIHRyYW5zYWN0aW9uLWxvY2FsbHkgdG9cbiAqIGBhcHAucHJpbmNpcGFsX2lkYDsgaXQgaXMgbm90IG1lYW50IHRvIHJ1biBvbiBhbiBSTFMtcmVzdHJpY3RlZCBhcHBsaWNhdGlvblxuICogc2Vzc2lvbi5cbiAqL1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1pbmltYWwgU1FMIGNsaWVudCBjb250cmFjdCBmb3IgdGhlIHByaW5jaXBhbC1zdWJqZWN0IHJlc29sdmVyXG4gKiBAc3VtbWFyeSBTdHJ1Y3R1cmFsIHN1YnNldCBjb25zdW1lZCBieSBgcmVzb2x2ZVByaW5jaXBhbEZvclN1YmplY3RgOyBhbnlcbiAqIHByaXZpbGVnZWQgY2xpZW50IGFibGUgdG8gcnVuIHBhcmFtZXRlcml6ZWQgcXVlcmllcyAoZm9yIGV4YW1wbGUgYSBgcGdgXG4gKiBgQ2xpZW50YCBvciBhIFR5cGVPUk0gYFF1ZXJ5UnVubmVyYCkgc2F0aXNmaWVzIGl0LiBUaGUgcmVzb2x2ZXIgcmVxdWlyZXMgYVxuICogcHJpdmlsZWdlZCBhdXRoLXByaW1lL3NlcnZpY2Utcm9sZSBjbGllbnQgYmVjYXVzZSB0aGUgaGVscGVyIGZ1bmN0aW9uIGlzXG4gKiBgUkVWT0tFYGQgZnJvbSBgUFVCTElDYC5cbiAqIEBpbnRlcmZhY2UgUHJpbmNpcGFsU3ViamVjdFF1ZXJ5Q2xpZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJpbmNpcGFsU3ViamVjdFF1ZXJ5Q2xpZW50IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3FsIC0gVGhlIFNRTCB0ZXh0IHdpdGggcG9zaXRpb25hbCBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0ge2FueVtdfSBbdmFsdWVzXSAtIFBvc2l0aW9uYWwgcGFyYW1ldGVyIHZhbHVlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59IFRoZSByYXcgZHJpdmVyIHJlc3VsdCAoYSByb3dzIGFycmF5IG9yIGFuIG9iamVjdCB3aXRoIGEgYHJvd3NgIGFycmF5KS5cbiAgICovXG4gIHF1ZXJ5KHNxbDogc3RyaW5nLCB2YWx1ZXM/OiBhbnlbXSk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdHRlcm4gZW5mb3JjaW5nIFVVSUQgc2hhcGUgb24gcmVzb2x2ZWQgcHJpbmNpcGFscyBhbmQgdGVuYW50IGlkc1xuICogQHN1bW1hcnkgVXNlZCB0byB2YWxpZGF0ZSB0aGUgb3B0aW9uYWwgYHRlbmFudElkYCBhcmd1bWVudCBhbmQgdG8gZmFpbFxuICogY2xvc2VkIG9uIGRyaXZlciByZXN1bHRzIHRoYXQgYXJlIG5vdCBVVUlELXNoYXBlZCBzdHJpbmdzLlxuICogQGNvbnN0IFBSSU5DSVBBTF9VVUlEX1BBVFRFUk5cbiAqL1xuZXhwb3J0IGNvbnN0IFBSSU5DSVBBTF9VVUlEX1BBVFRFUk4gPVxuICAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQvaTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHByaW5jaXBhbCBVVUlEIGZvciBhbiBhdXRoZW50aWNhdGVkIHN1YmplY3RcbiAqIEBzdW1tYXJ5IENhbGxzIHRoZSBgU0VDVVJJVFkgREVGSU5FUmAgaGVscGVyXG4gKiBgYXBwX3Jsc19wcmluY2lwYWxfZm9yX3N1YmplY3QodGV4dCwgdXVpZClgIHRocm91Z2ggdGhlIGdpdmVuIHByaXZpbGVnZWRcbiAqIGNsaWVudCB3aXRoIGZ1bGx5IHBhcmFtZXRlcml6ZWQgU1FMLiBGYWlscyBjbG9zZWQ6IGFuIGVtcHR5IHN1YmplY3QsIGFuXG4gKiBhbWJpZ3VvdXMgc3ViamVjdCAodGhlIGhlbHBlciByZXR1cm5zIGBOVUxMYCB1bmxlc3MgZXhhY3RseSBvbmUgcHJpbmNpcGFsXG4gKiBtYXRjaGVzKSwgYW5kIGRyaXZlciByZXN1bHRzIHRoYXQgYXJlIG5vdCBVVUlELXNoYXBlZCBzdHJpbmdzIGFsbCByZXNvbHZlIHRvXG4gKiBgdW5kZWZpbmVkYCByYXRoZXIgdGhhbiB0aHJvd2luZywgc28gY2FsbGVycyBoYW5kbGUgXCJubyBwcmluY2lwYWxcIiB1bmlmb3JtbHlcbiAqIGJ5IGRlbnlpbmcuIFJlcXVpcmVzIGEgcHJpdmlsZWdlZCBhdXRoLXByaW1lL3NlcnZpY2Utcm9sZSBjbGllbnQ7IHRoaXNcbiAqIHJlc29sdmVyIG11c3QgbmV2ZXIgYmUgaW52b2tlZCB3aXRoIGFuIGFwcGxpY2F0aW9uIHNlc3Npb24gY2xpZW50LlxuICogQGZ1bmN0aW9uIHJlc29sdmVQcmluY2lwYWxGb3JTdWJqZWN0XG4gKiBAcGFyYW0ge1ByaW5jaXBhbFN1YmplY3RRdWVyeUNsaWVudH0gY2xpZW50IC0gUHJpdmlsZWdlZCBjbGllbnQgdXNlZCB0byBydW4gdGhlIGhlbHBlciBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVGhlIGF1dGhlbnRpY2F0ZWQgc3ViamVjdCBpZCAoYHByaW5jaXBhbHMuc3ViamVjdF9pZGApLlxuICogQHBhcmFtIHtzdHJpbmd9IFt0ZW5hbnRJZF0gLSBPcHRpb25hbCB0ZW5hbnQgVVVJRCBzY29waW5nIHRoZSBsb29rdXAuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+fSBUaGUgcHJpbmNpcGFsIFVVSUQsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm9uZSBjYW4gYmUgcmVzb2x2ZWQuXG4gKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IFdoZW4gdGhlIGNsaWVudCBpcyBub3QgcXVlcnktY2FwYWJsZSwgb3IgYHRlbmFudElkYCBpcyBwcm92aWRlZCBidXQgbm90IGEgVVVJRC5cbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcmluY2lwYWxJZCA9IGF3YWl0IHJlc29sdmVQcmluY2lwYWxGb3JTdWJqZWN0KHBnQ2xpZW50LCBhdXRoU3ViamVjdCwgdGVuYW50SWQpO1xuICogaWYgKCFwcmluY2lwYWxJZClcbiAqICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcHJpbmNpcGFsIGZvciBzdWJqZWN0XCIpOyAvLyBmYWlsIGNsb3NlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByaW5jaXBhbEZvclN1YmplY3QoXG4gIGNsaWVudDogUHJpbmNpcGFsU3ViamVjdFF1ZXJ5Q2xpZW50LFxuICBzdWJqZWN0OiBzdHJpbmcsXG4gIHRlbmFudElkPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIWNsaWVudCB8fCB0eXBlb2YgY2xpZW50LnF1ZXJ5ICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIFwicmVzb2x2ZVByaW5jaXBhbEZvclN1YmplY3QgcmVxdWlyZXMgYSBwcml2aWxlZ2VkIGF1dGgtcHJpbWUvc2VydmljZS1yb2xlIGNsaWVudCwgbm90IHRoZSBhcHBsaWNhdGlvbiBzZXNzaW9uXCJcbiAgICApO1xuICBjb25zdCBub3JtYWxpemVkU3ViamVjdCA9IHR5cGVvZiBzdWJqZWN0ID09PSBcInN0cmluZ1wiID8gc3ViamVjdC50cmltKCkgOiBcIlwiO1xuICBpZiAoIW5vcm1hbGl6ZWRTdWJqZWN0KSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodGVuYW50SWQgIT09IHVuZGVmaW5lZCAmJiB0ZW5hbnRJZCAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgdGVuYW50SWQgIT09IFwic3RyaW5nXCIgfHwgIVBSSU5DSVBBTF9VVUlEX1BBVFRFUk4udGVzdCh0ZW5hbnRJZCkpXG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcInJlc29sdmVQcmluY2lwYWxGb3JTdWJqZWN0IHRlbmFudElkIG11c3QgYmUgYSBVVUlEIHdoZW4gcHJvdmlkZWRcIlxuICAgICAgKTtcbiAgfVxuICBjb25zdCByZXN1bHQgPSAoYXdhaXQgY2xpZW50LnF1ZXJ5KFxuICAgIFwiU0VMRUNUIGFwcF9ybHNfcHJpbmNpcGFsX2Zvcl9zdWJqZWN0KCQxLCAkMikgQVMgcHJpbmNpcGFsX2lkXCIsXG4gICAgW25vcm1hbGl6ZWRTdWJqZWN0LCB0ZW5hbnRJZCA/PyBudWxsXVxuICApKSBhcyBhbnk7XG4gIGNvbnN0IHJvd3MgPSBBcnJheS5pc0FycmF5KHJlc3VsdCkgPyByZXN1bHQgOiByZXN1bHQ/LnJvd3M7XG4gIGNvbnN0IHByaW5jaXBhbElkID0gQXJyYXkuaXNBcnJheShyb3dzKSA/IHJvd3NbMF0/LnByaW5jaXBhbF9pZCA6IHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBwcmluY2lwYWxJZCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHByaW5jaXBhbElkLnRyaW0oKTtcbiAgcmV0dXJuIFBSSU5DSVBBTF9VVUlEX1BBVFRFUk4udGVzdChub3JtYWxpemVkKSA/IG5vcm1hbGl6ZWQgOiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -258,4 +258,4 @@ export async function runAsPrincipal(executor, principalId, run, options = {}) {
258
258
  throw error;
259
259
  }
260
260
  }
261
- //# sourceMappingURL=rls-bootstrap.service.js.map
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxzLWJvb3RzdHJhcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvcmxzL3Jscy1ib290c3RyYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBQ0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsMEJBQXVCO0FBTXhCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsMkJBQXdCO0FBRXpFLE1BQU0sWUFBWSxHQUNoQixpRUFBaUUsQ0FBQztBQUVwRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxhQUFhO0lBQ3RELFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQWdCRCxTQUFTLDZCQUE2QixDQUNwQyxNQUFjLEVBQ2QsT0FBc0M7SUFFdEMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyRSxNQUFNLElBQUksZUFBZSxDQUN2QixHQUFHLE1BQU0sK0VBQStFLENBQ3pGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFdBQW1CO0lBQ25ELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxJ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QUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsZ0NBQWdDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uYW1lc3BhY2VzL3Jscy9ib290c3RyYXBcbiAqIEBzdW1tYXJ5IEJvb3RzdHJhcCBzZXJ2aWNlIHRoYXQgYXBwbGllcyB0aGUgbmFtZXNwYWNlIHJvdy1sZXZlbC1zZWN1cml0eSB0ZW1wbGF0ZS5cbiAqIEBkZXNjcmlwdGlvbiBXaXJlcyB0aGUgU1FMIHRlbXBsYXRlIGludG8gYSBxdWVyeSBleGVjdXRvciAoZm9yIGV4YW1wbGUgYVxuICogYHBnLkNsaWVudGApIHNvIGRlcGxveW1lbnRzIGFwcGx5IHRoZSBwb2xpY2llcyB0aHJvdWdoIGFwcGxpY2F0aW9uIGJvb3RzdHJhcFxuICogb3IgYSBtaWdyYXRpb24gcnVubmVyIGluc3RlYWQgb2YgaGFuZC1ydW5uaW5nIFNRTC4gQWxzbyBleHBvc2VzIGhlbHBlcnNcbiAqIHRoYXQgYmluZCBgYXBwLnByaW5jaXBhbF9pZGAgdHJhbnNhY3Rpb24tbG9jYWxseSBmb3IgcmVxdWVzdC1zY29wZWQgYWNjZXNzLlxuICovXG5pbXBvcnQgeyBDbGllbnRCYXNlZFNlcnZpY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHtcbiAgUkxTX0ZVTkNUSU9OX1NUQVRFTUVOVFMsXG4gIHJsc0Jvb3RzdHJhcFN0YXRlbWVudHMsXG4gIHJsc1BvbGljeVN0YXRlbWVudHMsXG59IGZyb20gXCIuL3Jscy50ZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUge1xuICBSbHNCb290c3RyYXBDb25maWcsXG4gIFJsc1F1ZXJ5RXhlY3V0b3IsXG4gIFJ1bkFzUHJpbmNpcGFsT3B0aW9ucyxcbn0gZnJvbSBcIi4vcmxzLnR5cGVzXCI7XG5pbXBvcnQgeyBSTFNfRlVOQ1RJT05fT1dORVJfUVVFUlksIFJMU19TRVRUSU5HUyB9IGZyb20gXCIuL3Jscy5jb25zdGFudHNcIjtcblxuY29uc3QgVVVJRF9QQVRURVJOID1cbiAgL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2k7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRocm93biB3aGVuIHRoZSBleGVjdXRvciByb2xlIGNhbm5vdCBzYWZlbHkgb3duIHRoZSBSTFMgaGVscGVyIGZ1bmN0aW9ucy5cbiAqIEBzdW1tYXJ5IFJhaXNlZCBieVxuICogYFJsc0Jvb3RzdHJhcFNlcnZpY2UuYXNzZXJ0RnVuY3Rpb25Pd25lclByaXZpbGVnZXMoKWAgd2hlbiB0aGUgY3VycmVudFxuICogZGF0YWJhc2Ugcm9sZSBpcyBuZWl0aGVyIGBTVVBFUlVTRVJgIG5vciBgQllQQVNTUkxTYCAob3Igd2hlbiBpdHNcbiAqIHByaXZpbGVnZXMgY2Fubm90IGJlIGRldGVybWluZWQpLiBFeHRlbmRzXG4gKiBge0BsaW5rIEludGVybmFsRXJyb3J9YCBzbyBjYWxsZXJzIGNhbiBjYXRjaCBpdCBnZW5lcmljYWxseSwgd2hpbGVcbiAqIGNhcnJ5aW5nIHRoZSBkaXN0aW5jdGl2ZSBgUmxzRnVuY3Rpb25Pd25lckVycm9yYCBuYW1lIGZvclxuICogZmFpbC1jbG9zZWQgbWF0Y2hpbmcuXG4gKiBAY2xhc3MgUmxzRnVuY3Rpb25Pd25lckVycm9yXG4gKiBAY2F0ZWdvcnkgTmFtZXNwYWNlc1xuICovXG5leHBvcnQgY2xhc3MgUmxzRnVuY3Rpb25Pd25lckVycm9yIGV4dGVuZHMgSW50ZXJuYWxFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiUmxzRnVuY3Rpb25Pd25lckVycm9yXCI7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9ucyBhY2NlcHRlZCBieSB0aGUgdHJhbnNhY3Rpb24tbG9jYWwgUkxTIGJpbmRpbmcgaGVscGVycy5cbiAqIEBzdW1tYXJ5IFNlc3Npb24td2lkZSBiaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQ6IHRoZSBvbmx5IGFjY2VwdGFibGUgdmFsdWUgaXNcbiAqIGBsb2NhbDogdHJ1ZWAsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQuIEEgYGxvY2FsOiBmYWxzZWAgcmVxdWVzdCBpc1xuICogcmVqZWN0ZWQgd2l0aCBgVmFsaWRhdGlvbkVycm9yYCBiZWZvcmUgYW55IFNRTCBpcyBzZW50LCBiZWNhdXNlIGFcbiAqIHNlc3Npb24td2lkZSBzZXR0aW5nIG9uIGEgcG9vbGVkIGNvbm5lY3Rpb24gbGVha3MgYWNyb3NzIHJlcXVlc3RzLlxuICogQGludGVyZmFjZSBSbHNCaW5kaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHt0cnVlfSBbbG9jYWxdIC0gTXVzdCBiZSBgdHJ1ZWAgb3Igb21pdHRlZCAodGhlIGRlZmF1bHQgaXMgYHRydWVgKTtcbiAqIGFueSBvdGhlciB2YWx1ZSBpcyByZWplY3RlZCBiZWZvcmUgYW55IFNRTCBpcyBzZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJsc0JpbmRpbmdPcHRpb25zIHtcbiAgbG9jYWw/OiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRUcmFuc2FjdGlvbkxvY2FsQmluZGluZyhcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJsc0JpbmRpbmdPcHRpb25zIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sb2NhbCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubG9jYWwgIT09IHRydWUpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgYCR7bWV0aG9kfSBvbmx5IHN1cHBvcnRzIHRyYW5zYWN0aW9uLWxvY2FsIGJpbmRpbmc6IHNlc3Npb24td2lkZSBiaW5kaW5nIGlzIG5vdCBhbGxvd2VkYFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVmFsaWRhdGVzIGEgcHJpbmNpcGFsIGlkZW50aWZpZXIgYmVmb3JlIGJpbmRpbmcgaXQgdG8gdGhlXG4gKiBgYXBwLnByaW5jaXBhbF9pZGAgUkxTIHNldHRpbmcuXG4gKiBAc3VtbWFyeSBGYWlsLWNsb3NlZCBzaGFwZSBndWFyZCBzaGFyZWQgYnkgdGhlIGJpbmRpbmcgaGVscGVyczogdGhlIHZhbHVlXG4gKiBtdXN0IGJlIGEgbm9uLWVtcHR5IFVVSUQgc3RyaW5nLiBPbiBmYWlsdXJlIGl0IHRocm93cyBhIGBWYWxpZGF0aW9uRXJyb3JgXG4gKiB3aXRoIGEgZml4ZWQgbWVzc2FnZSB0aGF0IG5ldmVyIGVjaG9lcyB0aGUgcmVqZWN0ZWQgdmFsdWUsIHNvIGludmFsaWQgaW5wdXRcbiAqIGNhbm5vdCBsZWFrIGludG8gZXJyb3Igc3VyZmFjZXMgb3IgbG9ncy5cbiAqIEBmdW5jdGlvbiBhc3NlcnRQcmluY2lwYWxJZFxuICogQHBhcmFtIHtzdHJpbmd9IHByaW5jaXBhbElkIC0gQ2FuZGlkYXRlIHByaW5jaXBhbCAob3IgdGVuYW50KSBVVUlEIHRvIHZhbGlkYXRlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IFdoZW4gdGhlIHZhbHVlIGlzIGVtcHR5IG9yIG5vdCBVVUlELXNoYXBlZDsgdGhlIG1lc3NhZ2UgZG9lcyBub3QgaW5jbHVkZSB0aGUgcmVqZWN0ZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQcmluY2lwYWxJZChwcmluY2lwYWxJZDogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghcHJpbmNpcGFsSWQgfHwgIVVVSURfUEFUVEVSTi50ZXN0KHByaW5jaXBhbElkKSkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJJbnZhbGlkIFJMUyBwcmluY2lwYWwgaWRcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUgbmFtZXNwYWNlIFJMUyB0ZW1wbGF0ZSB0aHJvdWdoIGEgU1FMIGV4ZWN1dG9yLlxuICogQHN1bW1hcnkgVGhlIHNlcnZpY2UgYm9vdHMgd2l0aCBhIFNRTCBleGVjdXRvciAoYHBnLkNsaWVudGAsIGBwZy5Qb29sYCwgb3IgYVxuICogY29tcGF0aWJsZSB3cmFwcGVyKSBhbmQgYXBwbGllcyB0aGUgbmFtZXNwYWNlIHJvdy1sZXZlbC1zZWN1cml0eSB0ZW1wbGF0ZTpcbiAqIGZ1bmN0aW9uIHBsdXMgcG9saWN5IERETCBleGVjdXRlZCBzZXF1ZW50aWFsbHkuIEl0IGlzIHRoZSBkZXBsb3ltZW50LXNpZGVcbiAqIGVudHJ5IHBvaW50IGZvciB0aGUgUkxTIHRlbXBsYXRlLCBtZWFudCB0byBydW4gZHVyaW5nIGFwcGxpY2F0aW9uIGJvb3RzdHJhcFxuICogb3IgYSBtaWdyYXRpb24gcnVubmVyIGluc3RlYWQgb2YgaGFuZC1ydW5uaW5nIFNRTC4gVGhlIHRlbXBsYXRlIGlzXG4gKiBpZGVtcG90ZW50IGFuZCBtYXkgcnVuIG9uIGV2ZXJ5IGRlcGxveW1lbnQuXG4gKiBAY2xhc3MgUmxzQm9vdHN0cmFwU2VydmljZVxuICogQGNhdGVnb3J5IE5hbWVzcGFjZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFJsc0Jvb3RzdHJhcFNlcnZpY2UgZXh0ZW5kcyBDbGllbnRCYXNlZFNlcnZpY2U8XG4gIFJsc1F1ZXJ5RXhlY3V0b3IsXG4gIFJsc0Jvb3RzdHJhcENvbmZpZ1xuPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBhc3luYyBpbml0aWFsaXplKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx7XG4gICAgY29uZmlnOiBSbHNCb290c3RyYXBDb25maWc7XG4gICAgY2xpZW50OiBSbHNRdWVyeUV4ZWN1dG9yO1xuICB9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gYXJnc1swXSBhcyBSbHNRdWVyeUV4ZWN1dG9yIHwgdW5kZWZpbmVkO1xuICAgIGlmICghY2xpZW50IHx8IHR5cGVvZiBjbGllbnQucXVlcnkgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJSbHNCb290c3RyYXBTZXJ2aWNlIHJlcXVpcmVzIGEgcXVlcnkgZXhlY3V0b3IgYXMgaXRzIGZpcnN0IGFyZ3VtZW50XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChhcmdzWzFdIGFzIFJsc0Jvb3RzdHJhcENvbmZpZyB8IHVuZGVmaW5lZCkgPz8ge307XG4gICAgcmV0dXJuIHsgY29uZmlnLCBjbGllbnQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyB0aGUgY29uZmlndXJlZCAob3IgYnVuZGxlZCkgUkxTIHN0YXRlbWVudCBsaXN0LlxuICAgKiBAc3VtbWFyeSBUaGUgc2VydmljZSBpcyBib290ZWQgd2l0aCBhbiBleGVjdXRvciAoYHBnLkNsaWVudGAsIGBwZy5Qb29sYCwgb3IgYVxuICAgKiBjb21wYXRpYmxlIHdyYXBwZXIpIGFuZCBhcHBsaWVzIGZ1bmN0aW9uIHBsdXMgcG9saWN5IERETCBzZXF1ZW50aWFsbHkuIFRoZVxuICAgKiB0ZW1wbGF0ZSBpcyBpZGVtcG90ZW50IGFuZCBtYXkgcnVuIG9uIGV2ZXJ5IGRlcGxveW1lbnQuIEJlZm9yZSBhbnkgRERMIGlzXG4gICAqIHNlbnQsIGBhc3NlcnRGdW5jdGlvbk93bmVyUHJpdmlsZWdlcygpYCB2ZXJpZmllcyB0aGF0IHRoZSBjdXJyZW50XG4gICAqIGV4ZWN1dG9yIHJvbGUgaXMgYFNVUEVSVVNFUmAgb3IgYEJZUEFTU1JMU2AgYW5kIGZhaWxzIGNsb3NlZCBvdGhlcndpc2UsXG4gICAqIHNvIGBTRUNVUklUWSBERUZJTkVSYCBoZWxwZXIgZnVuY3Rpb25zIGFyZSBuZXZlciBjcmVhdGVkIHdpdGggYW4gb3duZXJcbiAgICogdGhhdCB3b3VsZCByZWN1cnNlIHVuZGVyIGBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFlgLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHthcHBsaWVkOiBudW1iZXJ9Pn0gVGhlIG51bWJlciBvZiBzdGF0ZW1lbnRzIGV4ZWN1dGVkLlxuICAgKiBAdGhyb3dzIHtSbHNGdW5jdGlvbk93bmVyRXJyb3J9IFdoZW4gdGhlIGV4ZWN1dG9yIHJvbGUgaXMgbmVpdGhlciBgU1VQRVJVU0VSYCBub3IgYEJZUEFTU1JMU2AsIG9yIGl0cyBwcml2aWxlZ2VzIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBXaGVuIHRoZSByZXNvbHZlZCBzdGF0ZW1lbnQgbGlzdCBpcyBlbXB0eS5cbiAgICovXG4gIGFzeW5jIGFwcGx5KC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx7IGFwcGxpZWQ6IG51bWJlciB9PiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImFwcGx5XCIsIHRydWUpKS5mb3IodGhpcy5hcHBseSk7XG4gICAgY29uc3Qgc3RhdGVtZW50cyA9IHRoaXMuc3RhdGVtZW50cygpO1xuICAgIGlmICghc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm8gUkxTIHN0YXRlbWVudHMgdG8gYXBwbHlcIik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXNzZXJ0RnVuY3Rpb25Pd25lclByaXZpbGVnZXMoLi4uYXJncyk7XG4gICAgbG9nLnZlcmJvc2UoYEFwcGx5aW5nICR7c3RhdGVtZW50cy5sZW5ndGh9IFJMUyBzdGF0ZW1lbnRzYCk7XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoc3RhdGVtZW50KTtcbiAgICB9XG4gICAgbG9nLmluZm8oXG4gICAgICBgQXBwbGllZCBuYW1lc3BhY2UgUkxTIHRlbXBsYXRlICgke3N0YXRlbWVudHMubGVuZ3RofSBzdGF0ZW1lbnRzKWBcbiAgICApO1xuICAgIHJldHVybiB7IGFwcGxpZWQ6IHN0YXRlbWVudHMubGVuZ3RoIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFZlcmlmaWVzIHRoYXQgdGhlIGN1cnJlbnQgZXhlY3V0b3Igcm9sZSBjYW4gb3duIHRoZSBSTFMgaGVscGVyIGZ1bmN0aW9ucy5cbiAgICogQHN1bW1hcnkgUnVucyBgUkxTX0ZVTkNUSU9OX09XTkVSX1FVRVJZYCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIGV4ZWN1dG9yXG4gICAqIGFuZCByZWFkcyB0aGUgY3VycmVudCByb2xlJ3MgYHJvbHN1cGVyYC9gcm9sYnlwYXNzcmxzYCBmbGFncyBmcm9tXG4gICAqIGBwZ19yb2xlc2AuIEZhaWxzIGNsb3NlZDogd2hlbiB0aGUgcm93IGlzIG1pc3Npbmcgb3IgdGhlIGZsYWdzIGFyZSBub3RcbiAgICogYm9vbGVhbnMsIGl0IHRocm93cyBgUmxzRnVuY3Rpb25Pd25lckVycm9yYCB3aXRoIHRoZSBzYW1lXG4gICAqIGZhaWwtY2xvc2VkIHNlbWFudGljcyBhcyBhbiBleHBsaWNpdCBwcml2aWxlZ2UgZmFpbHVyZS4gQ2FsbGVkXG4gICAqIGF1dG9tYXRpY2FsbHkgYnkgYGFwcGx5KClgIGJlZm9yZSBhbnkgRERMIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0gYXJncyAtIE9wdGlvbmFsIHRyYWlsaW5nIGRlY2FmIGBDb250ZXh0YCBhcmd1bWVudHMgZm9yd2FyZGVkIHRvIHRoZSBsb2cgY29udGV4dC5cbiAgICogQHJldHVybiBSZXNvbHZlcyB3aGVuIHRoZSBjdXJyZW50IHJvbGUgaXMgYFNVUEVSVVNFUmAgb3IgYEJZUEFTU1JMU2AuXG4gICAqIEB0aHJvd3Mge1Jsc0Z1bmN0aW9uT3duZXJFcnJvcn0gV2hlbiB0aGUgZXhlY3V0b3Igcm9sZSBpcyBuZWl0aGVyIGBTVVBFUlVTRVJgIG5vciBgQllQQVNTUkxTYCwgb3Igd2hlbiBpdHMgcHJpdmlsZWdlcyBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBmcm9tIGBwZ19yb2xlc2AuXG4gICAqL1xuICBhc3luYyBhc3NlcnRGdW5jdGlvbk93bmVyUHJpdmlsZWdlcyguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBcImFzc2VydEZ1bmN0aW9uT3duZXJQcml2aWxlZ2VzXCIsIHRydWUpXG4gICAgKS5mb3IodGhpcy5hc3NlcnRGdW5jdGlvbk93bmVyUHJpdmlsZWdlcyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoUkxTX0ZVTkNUSU9OX09XTkVSX1FVRVJZKTtcbiAgICBjb25zdCByb3cgPSAocmVzdWx0LnJvd3M/LlswXSA/PyB1bmRlZmluZWQpIGFzXG4gICAgICB8IHsgcm9sbmFtZT86IHN0cmluZzsgcm9sc3VwZXI/OiBib29sZWFuOyByb2xieXBhc3NybHM/OiBib29sZWFuIH1cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJvbGVOYW1lID0gcm93Py5yb2xuYW1lXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHJvdy5yb2xuYW1lKVxuICAgICAgOiBcImN1cnJlbnRfdXNlclwiO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiByb3c/LnJvbHN1cGVyICE9PSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIHJvdz8ucm9sYnlwYXNzcmxzICE9PSBcImJvb2xlYW5cIlxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJsc0Z1bmN0aW9uT3duZXJFcnJvcihcbiAgICAgICAgYENhbm5vdCBhcHBseSB0aGUgbmFtZXNwYWNlIFJMUyB0ZW1wbGF0ZTogY291bGQgbm90IGRldGVybWluZSB0aGUgcHJpdmlsZWdlcyBvZiAke3JvbGVOYW1lfS4gYCArXG4gICAgICAgICAgXCJUaGUgU0VDVVJJVFkgREVGSU5FUiBoZWxwZXIgZnVuY3Rpb25zIHJlcXVpcmUgYSBTVVBFUlVTRVIgb3IgQllQQVNTUkxTIG93bmVyOyByZWZ1c2luZyB0byBcIiArXG4gICAgICAgICAgXCJhcHBseSBwb2xpY2llcyB0aGF0IHdvdWxkIHJlY3Vyc2UgdW5kZXIgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXJvdy5yb2xzdXBlciAmJiAhcm93LnJvbGJ5cGFzc3Jscykge1xuICAgICAgdGhyb3cgbmV3IFJsc0Z1bmN0aW9uT3duZXJFcnJvcihcbiAgICAgICAgYENhbm5vdCBhcHBseSB0aGUgbmFtZXNwYWNlIFJMUyB0ZW1wbGF0ZSBhcyAke3JvbGVOYW1lfTogdGhlIGV4ZWN1dG9yIHJvbGUgaXMgbmVpdGhlciBTVVBFUlVTRVIgYCArXG4gICAgICAgICAgXCJub3IgQllQQVNTUkxTLiBUaGUgU0VDVVJJVFkgREVGSU5FUiBoZWxwZXIgZnVuY3Rpb25zIG11c3QgYmUgb3duZWQgYnkgYSByb2xlIHRoYXQgYnlwYXNzZXMgUkxTLCBcIiArXG4gICAgICAgICAgXCJvdGhlcndpc2UgZXZlcnkgcG9saWN5IGV2YWx1YXRpb24gcmVjdXJzZXMgdW5kZXIgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIGFuZCBmYWlscy4gQ29ubmVjdCBhcyBcIiArXG4gICAgICAgICAgXCJ0aGUgZGF0YWJhc2Ugb3duZXIvQllQQVNTUkxTIG1pZ3JhdGlvbiByb2xlLCBvciBjcmVhdGUgdGhlIGhlbHBlciBmdW5jdGlvbnMgd2l0aCBhIGRlZGljYXRlZCBcIiArXG4gICAgICAgICAgXCJCWVBBU1NSTFMgb3duZXIuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGxvZy52ZXJib3NlKGBWZXJpZmllZCBSTFMgZnVuY3Rpb24gb3duZXIgcHJpdmlsZWdlcyBmb3IgJHtyb2xlTmFtZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHN0YXRlbWVudCBsaXN0IGZvciB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBzdGF0ZW1lbnRzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLl9jb25maWcgPz8ge307XG4gICAgaWYgKGNvbmZpZy5zdGF0ZW1lbnRzKSByZXR1cm4gWy4uLmNvbmZpZy5zdGF0ZW1lbnRzXTtcbiAgICBpZiAoY29uZmlnLnBvbGljaWVzKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5STFNfRlVOQ1RJT05fU1RBVEVNRU5UUyxcbiAgICAgICAgLi4ucmxzUG9saWN5U3RhdGVtZW50cyhjb25maWcucG9saWNpZXMpLFxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIHJsc0Jvb3RzdHJhcFN0YXRlbWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQmluZHMgdGhlIGFjdGluZyBwcmluY2lwYWwgZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLlxuICAgKiBAc3VtbWFyeSBJc3N1ZXMgcGFyYW1ldGVyaXplZCBgU0VMRUNUIHNldF9jb25maWcoJDEsICQyLCB0cnVlKWAgYWZ0ZXJcbiAgICogdmFsaWRhdGlvbiwgc28gdGhlIGJpbmRpbmcgbGl2ZXMgb25seSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGlzXG4gICAqIGRpc2NhcmRlZCBvbiBjb21taXQvcm9sbGJhY2sg4oCUIHNhZmUgb24gcG9vbGVkIGNvbm5lY3Rpb25zLiBBIHNlc3Npb24td2lkZVxuICAgKiBiaW5kaW5nIHJlcXVlc3QgZmFpbHMgd2l0aCBgVmFsaWRhdGlvbkVycm9yYCBiZWZvcmUgYW55IFNRTCBpcyBzZW50LCBhbmRcbiAgICogdGhlIHZlcmJvc2UgbG9nIHJlY29yZHMgb25seSB0aGF0IGEgYmluZGluZyBoYXBwZW5lZCwgbmV2ZXIgdGhlIHByaW5jaXBhbFxuICAgKiBpZC5cbiAgICogQHBhcmFtIHByaW5jaXBhbElkIFByaW5jaXBhbCBVVUlEIHN0b3JlZCBpbiBgYXBwLnByaW5jaXBhbF9pZGAuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9ubHkgYGxvY2FsOiB0cnVlYCAodGhlIGRlZmF1bHQpIGlzIGFjY2VwdGVkOyB0aGUgYmluZGluZyBpc1xuICAgKiBhbHdheXMgdHJhbnNhY3Rpb24tbG9jYWwgYW5kIGlzIGRpc2NhcmRlZCBvbiBjb21taXQvcm9sbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIGJvdW5kIHRyYW5zYWN0aW9uLWxvY2FsbHkuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gV2hlbiB0aGUgcHJpbmNpcGFsIGlkIGlzIGludmFsaWQgb3IgYSBzZXNzaW9uLXdpZGUgYmluZGluZyBpcyByZXF1ZXN0ZWQuXG4gICAqL1xuICBhc3luYyBzZXRQcmluY2lwYWwoXG4gICAgcHJpbmNpcGFsSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSbHNCaW5kaW5nT3B0aW9ucyA9IHt9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJzZXRQcmluY2lwYWxcIiwgdHJ1ZSkpLmZvcihcbiAgICAgIHRoaXMuc2V0UHJpbmNpcGFsXG4gICAgKTtcbiAgICBhc3NlcnRQcmluY2lwYWxJZChwcmluY2lwYWxJZCk7XG4gICAgYXNzZXJ0VHJhbnNhY3Rpb25Mb2NhbEJpbmRpbmcoXCJzZXRQcmluY2lwYWxcIiwgb3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoXCJTRUxFQ1Qgc2V0X2NvbmZpZygkMSwgJDIsIHRydWUpXCIsIFtcbiAgICAgIFJMU19TRVRUSU5HUy5QcmluY2lwYWwsXG4gICAgICBwcmluY2lwYWxJZCxcbiAgICBdKTtcbiAgICBsb2cudmVyYm9zZShcIkJvdW5kIFJMUyBwcmluY2lwYWwgKHRyYW5zYWN0aW9uLWxvY2FsKVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQmluZHMgdGhlIGFjdGluZyB0ZW5hbnQgZm9yIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLlxuICAgKiBAc3VtbWFyeSBJc3N1ZXMgcGFyYW1ldGVyaXplZCBgU0VMRUNUIHNldF9jb25maWcoJDEsICQyLCB0cnVlKWAgYWZ0ZXJcbiAgICogdmFsaWRhdGlvbiwgc28gdGhlIGJpbmRpbmcgbGl2ZXMgb25seSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGlzXG4gICAqIGRpc2NhcmRlZCBvbiBjb21taXQvcm9sbGJhY2sg4oCUIHNhZmUgb24gcG9vbGVkIGNvbm5lY3Rpb25zLiBBIHNlc3Npb24td2lkZVxuICAgKiBiaW5kaW5nIHJlcXVlc3QgZmFpbHMgd2l0aCBgVmFsaWRhdGlvbkVycm9yYCBiZWZvcmUgYW55IFNRTCBpcyBzZW50LCBhbmRcbiAgICogdGhlIHZlcmJvc2UgbG9nIHJlY29yZHMgb25seSB0aGF0IGEgYmluZGluZyBoYXBwZW5lZCwgbmV2ZXIgdGhlIHRlbmFudFxuICAgKiBpZC5cbiAgICogQHBhcmFtIHRlbmFudElkIFRlbmFudCBVVUlEIHN0b3JlZCBpbiBgYXBwLnRlbmFudF9pZGAuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9ubHkgYGxvY2FsOiB0cnVlYCAodGhlIGRlZmF1bHQpIGlzIGFjY2VwdGVkOyB0aGUgYmluZGluZyBpc1xuICAgKiBhbHdheXMgdHJhbnNhY3Rpb24tbG9jYWwgYW5kIGlzIGRpc2NhcmRlZCBvbiBjb21taXQvcm9sbGJhY2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIGJvdW5kIHRyYW5zYWN0aW9uLWxvY2FsbHkuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gV2hlbiB0aGUgdGVuYW50IGlkIGlzIGludmFsaWQgb3IgYSBzZXNzaW9uLXdpZGUgYmluZGluZyBpcyByZXF1ZXN0ZWQuXG4gICAqL1xuICBhc3luYyBzZXRUZW5hbnQoXG4gICAgdGVuYW50SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBSbHNCaW5kaW5nT3B0aW9ucyA9IHt9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJzZXRUZW5hbnRcIiwgdHJ1ZSkpLmZvcihcbiAgICAgIHRoaXMuc2V0VGVuYW50XG4gICAgKTtcbiAgICBhc3NlcnRQcmluY2lwYWxJZCh0ZW5hbnRJZCk7XG4gICAgYXNzZXJ0VHJhbnNhY3Rpb25Mb2NhbEJpbmRpbmcoXCJzZXRUZW5hbnRcIiwgb3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5jbGllbnQucXVlcnkoXCJTRUxFQ1Qgc2V0X2NvbmZpZygkMSwgJDIsIHRydWUpXCIsIFtcbiAgICAgIFJMU19TRVRUSU5HUy5UZW5hbnQsXG4gICAgICB0ZW5hbnRJZCxcbiAgICBdKTtcbiAgICBsb2cudmVyYm9zZShcIkJvdW5kIFJMUyB0ZW5hbnQgKHRyYW5zYWN0aW9uLWxvY2FsKVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIHRoZSBhY3RpbmcgcHJpbmNpcGFsIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi5cbiAgICogQHN1bW1hcnkgUmVzZXRzIGBhcHAucHJpbmNpcGFsX2lkYCB0byB0aGUgZW1wdHkgc3RyaW5nIHdpdGhcbiAgICogYFNFTEVDVCBzZXRfY29uZmlnKCQxLCAkMiwgdHJ1ZSlgLCBzbyB0aGUgY2xlYXIgaXMgYWxzbyB0cmFuc2FjdGlvbi1sb2NhbFxuICAgKiBhbmQgbmV2ZXIgcmVhY2hlcyB0aGUgcG9vbGVkIHNlc3Npb24uIEEgc2Vzc2lvbi13aWRlIGNsZWFyIHJlcXVlc3QgZmFpbHNcbiAgICogd2l0aCBgVmFsaWRhdGlvbkVycm9yYCBiZWZvcmUgYW55IFNRTCBpcyBzZW50LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPbmx5IGBsb2NhbDogdHJ1ZWAgKHRoZSBkZWZhdWx0KSBpcyBhY2NlcHRlZDsgdGhlIGNsZWFyIGlzXG4gICAqIGFsd2F5cyB0cmFuc2FjdGlvbi1sb2NhbCBhbmQgZG9lcyBub3QgcmVhY2ggdGhlIHBvb2xlZCBzZXNzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUmVzb2x2ZXMgb25jZSB0aGUgc2V0dGluZyBpcyBjbGVhcmVkIHRyYW5zYWN0aW9uLWxvY2FsbHkuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gV2hlbiBhIHNlc3Npb24td2lkZSBjbGVhciBpcyByZXF1ZXN0ZWQuXG4gICAqL1xuICBhc3luYyBjbGVhclByaW5jaXBhbChcbiAgICBvcHRpb25zOiBSbHNCaW5kaW5nT3B0aW9ucyA9IHt9LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgXCJjbGVhclByaW5jaXBhbFwiLCB0cnVlKSkuZm9yKFxuICAgICAgdGhpcy5jbGVhclByaW5jaXBhbFxuICAgICk7XG4gICAgYXNzZXJ0VHJhbnNhY3Rpb25Mb2NhbEJpbmRpbmcoXCJjbGVhclByaW5jaXBhbFwiLCBvcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5xdWVyeShcIlNFTEVDVCBzZXRfY29uZmlnKCQxLCAkMiwgdHJ1ZSlcIiwgW1xuICAgICAgUkxTX1NFVFRJTkdTLlByaW5jaXBhbCxcbiAgICAgIFwiXCIsXG4gICAgXSk7XG4gICAgbG9nLnZlcmJvc2UoXCJDbGVhcmVkIFJMUyBwcmluY2lwYWwgKHRyYW5zYWN0aW9uLWxvY2FsKVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyB0aGUgcHJpbmNpcGFsIGN1cnJlbnRseSBib3VuZCB0byB0aGUgY29ubmVjdGlvbi5cbiAgICovXG4gIGFzeW5jIGN1cnJlbnRQcmluY2lwYWwoLi4uYXJnczogYW55W10pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGxvZyB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFwiY3VycmVudFByaW5jaXBhbFwiLCB0cnVlKSkuZm9yKFxuICAgICAgdGhpcy5jdXJyZW50UHJpbmNpcGFsXG4gICAgKTtcbiAgICBsb2cudmVyYm9zZShcIlJlYWRpbmcgY3VycmVudCBSTFMgcHJpbmNpcGFsXCIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LnF1ZXJ5KFxuICAgICAgXCJTRUxFQ1QgYXBwX3Jsc19wcmluY2lwYWxfaWQoKSBBUyBwcmluY2lwYWxfaWRcIlxuICAgICk7XG4gICAgY29uc3Qgcm93ID0gKHJlc3VsdC5yb3dzPy5bMF0gPz8ge30pIGFzIHsgcHJpbmNpcGFsX2lkPzogc3RyaW5nIHwgbnVsbCB9O1xuICAgIHJldHVybiByb3cucHJpbmNpcGFsX2lkID8/IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUnVucyBhIGNhbGxiYWNrIGluc2lkZSBhIHRyYW5zYWN0aW9uIHdpdGggdGhlIFJMUyBwcmluY2lwYWwgYm91bmQuXG4gKiBAc3VtbWFyeSBUaGUgZXhlY3V0b3IgbXVzdCBiZSBhIHNpbmdsZSBjb25uZWN0aW9uIChgcGcuQ2xpZW50YCksIG5vdCBhIHBvb2wsXG4gKiBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGhlIGBhcHAucHJpbmNpcGFsX2lkYCBzZXR0aW5nIGFyZVxuICogY29ubmVjdGlvbi1zY29wZWQuIEJ5IGRlZmF1bHQgdGhlIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrLCBrZWVwaW5nXG4gKiBpbnRlZ3JhdGlvbi10ZXN0IG11dGF0aW9ucyBpc29sYXRlZDsgcGFzcyBgeyBjb21taXQ6IHRydWUgfWAgZm9yIHJlYWwgd3JpdGVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQXNQcmluY2lwYWw8VD4oXG4gIGV4ZWN1dG9yOiBSbHNRdWVyeUV4ZWN1dG9yLFxuICBwcmluY2lwYWxJZDogc3RyaW5nLFxuICBydW46IChleGVjdXRvcjogUmxzUXVlcnlFeGVjdXRvcikgPT4gUHJvbWlzZTxUPixcbiAgb3B0aW9uczogUnVuQXNQcmluY2lwYWxPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4ge1xuICBhc3NlcnRQcmluY2lwYWxJZChwcmluY2lwYWxJZCk7XG4gIGF3YWl0IGV4ZWN1dG9yLnF1ZXJ5KFwiQkVHSU5cIik7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY3V0b3IucXVlcnkoXCJTRUxFQ1Qgc2V0X2NvbmZpZygkMSwgJDIsIHRydWUpXCIsIFtcbiAgICAgIFJMU19TRVRUSU5HUy5QcmluY2lwYWwsXG4gICAgICBwcmluY2lwYWxJZCxcbiAgICBdKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW4oZXhlY3V0b3IpO1xuICAgIGF3YWl0IGV4ZWN1dG9yLnF1ZXJ5KG9wdGlvbnMuY29tbWl0ID8gXCJDT01NSVRcIiA6IFwiUk9MTEJBQ0tcIik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY3V0b3IucXVlcnkoXCJST0xMQkFDS1wiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBmYWlsdXJlXG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG4iXX0=
@@ -72,4 +72,4 @@ export const RLS_PROTECTED_TABLES = [
72
72
  "credentials",
73
73
  "secrets",
74
74
  ];
75
- //# sourceMappingURL=rls.constants.js.map
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxzLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uYW1lc3BhY2VzL3Jscy9ybHMuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLElBQUksRUFBRSxnQkFBZ0I7SUFDdEIsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixLQUFLLEVBQUUsaUJBQWlCO0NBQ2hCLENBQUM7QUFFWDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsTUFBTSxFQUFFLGVBQWU7Q0FDZixDQUFDO0FBRVg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRztJQUMzQixNQUFNLEVBQUUsa0JBQWtCO0lBQzFCLE1BQU0sRUFBRSxrQkFBa0I7SUFDMUIsS0FBSyxFQUFFLGlCQUFpQjtDQUNoQixDQUFDO0FBRVg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FDbkMsbUdBQW1HLENBQUM7QUFFdEc7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLFNBQVM7SUFDVCxXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLE9BQU87SUFDUCxRQUFRO0lBQ1IsWUFBWTtJQUNaLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixPQUFPO0lBQ1Asa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLFNBQVM7Q0FDRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uYW1lc3BhY2VzL3Jscy9jb25zdGFudHNcbiAqIEBzdW1tYXJ5IFJvdy1sZXZlbC1zZWN1cml0eSBjb25zdGFudHMgZm9yIHRoZSBuYW1lc3BhY2UgYXV0aG9yaXphdGlvbiBzY2hlbWEuXG4gKiBAZGVzY3JpcHRpb24gQ2Fub25pY2FsIHBlcm1pc3Npb24ga2V5cywgc2Vzc2lvbiBzZXR0aW5ncywgZGVmYXVsdCByb2xlIGtleXMsIGFuZFxuICogdGhlIHRhYmxlcyBjb3ZlcmVkIGJ5IHRoZSBuYW1lc3BhY2UgUkxTIHRlbXBsYXRlLlxuICovXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBlcm1pc3Npb24ga2V5cyBjb25zdW1lZCBieSB0aGUgU1FMIFJMUyBwb2xpY2llcy5cbiAqIEBzdW1tYXJ5IEEgbmFtZXNwYWNlIHJlYWRlciBjYW4gb25seSByZWFkLCBhIHdyaXRlciBjYW4gYWxzbyBjcmVhdGUvdXBkYXRlL2RlbGV0ZVxuICogbm9uLWFkbWluaXN0cmF0aXZlIHJvd3MsIGFuZCBhbiBhZG1pbiBjYW4gZG8gZXZlcnl0aGluZyBpbiB0aGUgbmFtZXNwYWNlLlxuICovXG5leHBvcnQgY29uc3QgUkxTX1BFUk1JU1NJT05fS0VZUyA9IHtcbiAgUmVhZDogXCJuYW1lc3BhY2UucmVhZFwiLFxuICBXcml0ZTogXCJuYW1lc3BhY2Uud3JpdGVcIixcbiAgQWRtaW46IFwibmFtZXNwYWNlLmFkbWluXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXNzaW9uIHNldHRpbmdzIHJlYWQgYnkgdGhlIFJMUyBwb2xpY2llcy5cbiAqIEBzdW1tYXJ5IFRoZSBhcHBsaWNhdGlvbiBtdXN0IHNldCBgYXBwLnByaW5jaXBhbF9pZGAgZm9yIGV2ZXJ5IHJlcXVlc3Qtc2NvcGVkXG4gKiBkYXRhYmFzZSBzZXNzaW9uIG9yIHRyYW5zYWN0aW9uIGJlZm9yZSBxdWVyeWluZyBuYW1lc3BhY2UgdGFibGVzLlxuICovXG5leHBvcnQgY29uc3QgUkxTX1NFVFRJTkdTID0ge1xuICBQcmluY2lwYWw6IFwiYXBwLnByaW5jaXBhbF9pZFwiLFxuICBUZW5hbnQ6IFwiYXBwLnRlbmFudF9pZFwiLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCByb2xlIGtleXMgZm9yIHRoZSByZWFkZXIvd3JpdGVyL2FkbWluIG1hdHJpeC5cbiAqIEBzdW1tYXJ5IEJvb3RzdHJhcHBpbmcgYSB0ZW5hbnQgd2l0aCB0aGVzZSBrZXlzIGdpdmVzIGNvbnN1bWVycyBhIHN0YWJsZVxuICogdGhyZWUtdGllciBuYW1lc3BhY2Ugcm9sZSBtb2RlbCB3aXRob3V0IGNvdXBsaW5nIHRoZW0gdG8gY3VzdG9tIHJvbGUgbmFtZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBSTFNfUk9MRV9LRVlTID0ge1xuICBSZWFkZXI6IFwibmFtZXNwYWNlLXJlYWRlclwiLFxuICBXcml0ZXI6IFwibmFtZXNwYWNlLXdyaXRlclwiLFxuICBBZG1pbjogXCJuYW1lc3BhY2UtYWRtaW5cIixcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJvb3QtdGltZSBwcml2aWxlZ2UgcHJvYmUgZm9yIHRoZSBSTFMgYFNFQ1VSSVRZIERFRklORVJgIGhlbHBlciBmdW5jdGlvbnMuXG4gKiBAc3VtbWFyeSBSZWFkcyB0aGUgY3VycmVudCByb2xlJ3MgYHJvbHN1cGVyYCBhbmQgYHJvbGJ5cGFzc3Jsc2AgZmxhZ3MgZnJvbVxuICogYHBnX3JvbGVzYC4gYFJsc0Jvb3RzdHJhcFNlcnZpY2UuYXNzZXJ0RnVuY3Rpb25Pd25lclByaXZpbGVnZXMoKWAgZXhlY3V0ZXNcbiAqIHRoaXMgcXVlcnkgYmVmb3JlIGFwcGx5aW5nIGFueSBSTFMgRERMIGFuZCByZWZ1c2VzIHRvIHByb2NlZWQgdW5sZXNzIHRoZVxuICogZXhlY3V0b3Igcm9sZSBpcyBgU1VQRVJVU0VSYCBvciBgQllQQVNTUkxTYCwgYmVjYXVzZSBhIGBTRUNVUklUWSBERUZJTkVSYFxuICogb3duZXIgdGhhdCBkb2VzIG5vdCBieXBhc3MgUkxTIG1ha2VzIGV2ZXJ5IHBvbGljeSBldmFsdWF0aW9uIHJlY3Vyc2UgdW5kZXJcbiAqIGBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFlgLlxuICovXG5leHBvcnQgY29uc3QgUkxTX0ZVTkNUSU9OX09XTkVSX1FVRVJZID1cbiAgXCJTRUxFQ1QgY3VycmVudF91c2VyIEFTIHJvbG5hbWUsIHJvbHN1cGVyLCByb2xieXBhc3NybHMgRlJPTSBwZ19yb2xlcyBXSEVSRSByb2xuYW1lID0gY3VycmVudF91c2VyXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRhYmxlcyBwcm90ZWN0ZWQgYnkgdGhlIG5hbWVzcGFjZSBSTFMgdGVtcGxhdGUuXG4gKiBAc3VtbWFyeSBJbmNsdWRlcyB0aGUgYXV0aG9yaXphdGlvbiBtYWNoaW5lcnksIG9yZyBwcm9maWxlcywgcHJvdGVjdGVkXG4gKiByZXNvdXJjZXMsIGFuZCB0aGUgc2xpY2UtMSBjcmVkZW50aWFsL3NlY3JldCByZWNvcmRzLlxuICovXG5leHBvcnQgY29uc3QgUkxTX1BST1RFQ1RFRF9UQUJMRVMgPSBbXG4gIFwidGVuYW50c1wiLFxuICBcIm9yZ191bml0c1wiLFxuICBcIm9yZ191bml0X2Nsb3N1cmVcIixcbiAgXCJ1c2Vyc1wiLFxuICBcImdyb3Vwc1wiLFxuICBcInByaW5jaXBhbHNcIixcbiAgXCJ0ZW5hbnRfbWVtYmVyc2hpcHNcIixcbiAgXCJvcmdfdW5pdF9tZW1iZXJzaGlwc1wiLFxuICBcImdyb3VwX21lbWJlcnNoaXBzXCIsXG4gIFwicGVybWlzc2lvbnNcIixcbiAgXCJyb2xlc1wiLFxuICBcInJvbGVfcGVybWlzc2lvbnNcIixcbiAgXCJyb2xlX2Fzc2lnbm1lbnRzXCIsXG4gIFwiaW5oZXJpdGFuY2VfYmxvY2tzXCIsXG4gIFwicHJvdGVjdGVkX3Jlc291cmNlc1wiLFxuICBcInJlc291cmNlX2dyYW50c1wiLFxuICBcImVmZmVjdGl2ZV9wZXJtaXNzaW9uc1wiLFxuICBcInN0b3JhZ2VfYmluZGluZ3NcIixcbiAgXCJ0ZW5hbnRfcHJvZmlsZXNcIixcbiAgXCJvcmdfdW5pdF9wcm9maWxlc1wiLFxuICBcImNyZWRlbnRpYWxzXCIsXG4gIFwic2VjcmV0c1wiLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgUmxzUHJvdGVjdGVkVGFibGUgPSAodHlwZW9mIFJMU19QUk9URUNURURfVEFCTEVTKVtudW1iZXJdO1xuIl19
@@ -708,4 +708,4 @@ export function assertRlsTableCoverage(policySets = NAMESPACE_RLS_POLICY_SETS) {
708
708
  throw new InternalError(`RLS template is missing tables: ${missing.join(", ")}`);
709
709
  }
710
710
  }
711
- //# sourceMappingURL=rls.template.js.map
711
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxzLnRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvcmxzL3Jscy50ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXhELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsMkJBQXdCO0FBRXJFLE1BQU0sb0JBQW9CLEdBQUcsbUNBQW1DLENBQUM7QUFFakU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXNCO0lBQ3hEOzs7OzttQ0FLaUMsWUFBWSxDQUFDLFNBQVM7TUFDbkQ7SUFDSjs7Ozs7RUFLQSxvQkFBb0I7Ozs7O01BS2hCO0lBQ0o7Ozs7Ozs7O0VBUUEsb0JBQW9COzs7Ozs7TUFNaEI7SUFDSiwrRUFBK0U7SUFDL0U7Ozs7O0VBS0Esb0JBQW9COzs7OztNQUtoQjtJQUNKOzs7Ozs7Ozs7O0VBVUEsb0JBQW9COzs7Ozs7Ozs7Ozs7O01BYWhCO0lBQ0o7Ozs7Ozs7O0VBUUEsb0JBQW9COzs7Ozs7OztNQVFoQjtJQUNKOzs7Ozs7Ozs7RUFTQSxvQkFBb0I7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUJoQjtJQUNKOzs7OztFQUtBLG9CQUFvQjs7Ozs7Ozs7O01BU2hCO0lBQ0o7Ozs7Ozs7O0VBUUEsb0JBQW9COzs7Ozs7Ozs7O01BVWhCO0lBQ0o7Ozs7O0VBS0Esb0JBQW9COzs7OztNQUtoQjtJQUNKOzs7OztFQUtBLG9CQUFvQjs7OztNQUloQjtJQUNKOzs7Ozs7OztFQVFBLG9CQUFvQjs7Ozs7OztNQU9oQjtJQUNKOzs7Ozs7OztFQVFBLG9CQUFvQjs7Ozs7TUFLaEI7SUFDSjs7Ozs7RUFLQSxvQkFBb0I7Ozs7Ozs7Ozs7TUFVaEI7SUFDSjs7Ozs7RUFLQSxvQkFBb0I7OztNQUdoQjtJQUNKOzs7Ozs7OztFQVFBLG9C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Qyx5QkFBeUIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLENBQ3RFLElBQUksRUFDSixVQUFVLENBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCO0lBQ3BDLE9BQU8sQ0FBQyxHQUFHLHVCQUF1QixFQUFFLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQzdCLGFBQXNDLHlCQUF5QjtJQUUvRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxhQUFzQyx5QkFBeUI7SUFFL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksYUFBYSxDQUNyQixtQ0FBbUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUN4RCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25hbWVzcGFjZXMvcmxzL3RlbXBsYXRlXG4gKiBAc3VtbWFyeSBTUUwgdGVtcGxhdGUgZm9yIHRoZSBuYW1lc3BhY2Ugcm93LWxldmVsLXNlY3VyaXR5IHBvbGljaWVzLlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyB0aGUgaGVscGVyIGZ1bmN0aW9ucyBhbmQgZW5hYmxlL2ZvcmNlL3BvbGljeSBEREwgdGhhdFxuICogZW5mb3JjZSB0aGUgcmVhZGVyL3dyaXRlci9hZG1pbiBtYXRyaXggYWNyb3NzIHRoZSBuYW1lc3BhY2UgdGFibGVzIGFuZCB0aGVcbiAqIHNsaWNlLTEgY3JlZGVudGlhbC9zZWNyZXQgcmVjb3Jkcy5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgYXNzdW1lcyB0aGUgY2Fub25pY2FsIHNuYWtlX2Nhc2Ugc2NoZW1hIGRvY3VtZW50ZWQgYnkgdGhlXG4gKiBgaW50ZWdyYXRpb25zL3NxbGAgYXJ0aWZhY3RzLiBIZWxwZXIgZnVuY3Rpb25zIGFyZSBgU0VDVVJJVFkgREVGSU5FUmAgc28gdGhlXG4gKiBhdXRob3JpemF0aW9uIGxvb2t1cHMgYnlwYXNzIFJMUyBhbmQgY2Fubm90IHJlY3Vyc2UgdGhyb3VnaCB0aGUgcG9saWNpZXMgdGhleVxuICogaW1wbGVtZW50LiBQcm9kdWN0aW9uIGRlcGxveW1lbnRzIHNob3VsZCBvd24gdGhvc2UgZnVuY3Rpb25zIHdpdGggYSByb2xlIHRoYXRcbiAqIGlzIGFsbG93ZWQgdG8gYnlwYXNzIFJMUyAodGhlIGRhdGFiYXNlIG93bmVyLCBhIGBCWVBBU1NSTFNgIHJvbGUsIG9yIHRoZVxuICogbWlncmF0aW9uIHJvbGUpLlxuICovXG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IFJsc1BvbGljeVNldCB9IGZyb20gXCIuL3Jscy50eXBlc1wiO1xuaW1wb3J0IHsgUkxTX1BST1RFQ1RFRF9UQUJMRVMsIFJMU19TRVRUSU5HUyB9IGZyb20gXCIuL3Jscy5jb25zdGFudHNcIjtcblxuY29uc3QgRlVOQ1RJT05fU0VBUkNIX1BBVEggPSBcIlNFVCBzZWFyY2hfcGF0aCA9IHB1YmxpYywgcGdfdGVtcFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIZWxwZXIgZnVuY3Rpb25zIGJhY2tpbmcgdGhlIG5hbWVzcGFjZSBSTFMgcG9saWNpZXMuXG4gKiBAc3VtbWFyeSBFYWNoIGZ1bmN0aW9uIGlzIGlkZW1wb3RlbnRseSBjcmVhdGVkIHdpdGggYENSRUFURSBPUiBSRVBMQUNFYC5cbiAqIGBhcHBfcmxzX3ByaW5jaXBhbF9mb3Jfc3ViamVjdCh0ZXh0LCB1dWlkKWAgaXMgYWRkaXRpb25hbGx5IGBTRUNVUklUWVxuICogREVGSU5FUmAgd2l0aCBgc2VhcmNoX3BhdGhgIHBpbm5lZCB0byBgcHVibGljLCBwZ190ZW1wYCBhbmQgYFJFVk9LRWBkIGZyb21cbiAqIGBQVUJMSUNgOiBpdCBtYXBzIGFuIGF1dGhlbnRpY2F0ZWQgc3ViamVjdCAoYW5kIG9wdGlvbmFsIHRlbmFudCkgdG8gdGhlXG4gKiBzaW5nbGUgbWF0Y2hpbmcgcHJpbmNpcGFsIFVVSUQgLSBvciBgTlVMTGAgd2hlbiB0aGUgbWF0Y2ggaXMgYW1iaWd1b3VzIG9yXG4gKiBhYnNlbnQgLSBhbmQgaXMgY29uc3VtZWQgYnkgcHJpdmlsZWdlZCByZXNvbHZlcnMgc3VjaCBhc1xuICogYHJlc29sdmVQcmluY2lwYWxGb3JTdWJqZWN0YCBmcm9tIGAuL3ByaW5jaXBhbC1yZXNvbHZlcmAuXG4gKi9cbmV4cG9ydCBjb25zdCBSTFNfRlVOQ1RJT05fU1RBVEVNRU5UUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX3ByaW5jaXBhbF9pZCgpXG5SRVRVUk5TIHV1aWRcbkxBTkdVQUdFIHNxbFxuU1RBQkxFXG5BUyAkZm4kXG4gIFNFTEVDVCBOVUxMSUYoY3VycmVudF9zZXR0aW5nKCcke1JMU19TRVRUSU5HUy5QcmluY2lwYWx9JywgdHJ1ZSksICcnKTo6dXVpZFxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19zdWJqZWN0X2lkKClcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBwLnN1YmplY3RfaWRcbiAgRlJPTSBwcmluY2lwYWxzIHBcbiAgV0hFUkUgcC5pZCA9IGFwcF9ybHNfcHJpbmNpcGFsX2lkKClcbiRmbiQ7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfcHJpbmNpcGFsX2Zvcl9zdWJqZWN0KFxuICBwX3N1YmplY3QgdGV4dCxcbiAgcF90ZW5hbnQgdXVpZCBERUZBVUxUIE5VTExcbilcblJFVFVSTlMgdXVpZFxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBDQVNFIFdIRU4gQ09VTlQoKikgPSAxIFRIRU4gKE1JTihwLmlkOjp0ZXh0KSk6OnV1aWQgRUxTRSBOVUxMIEVORFxuICBGUk9NIHByaW5jaXBhbHMgcFxuICBXSEVSRSBwLnN1YmplY3RfaWQgPSBOVUxMSUYocF9zdWJqZWN0LCAnJylcbiAgICBBTkQgKHBfdGVuYW50IElTIE5VTEwgT1IgcC50ZW5hbnRfaWQgPSBwX3RlbmFudClcbiRmbiQ7YCxcbiAgYFJFVk9LRSBBTEwgT04gRlVOQ1RJT04gYXBwX3Jsc19wcmluY2lwYWxfZm9yX3N1YmplY3QodGV4dCwgdXVpZCkgRlJPTSBQVUJMSUM7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfb3JnX3VuaXRfdGVuYW50KHBfb3JnX3VuaXQgdXVpZClcblJFVFVSTlMgdXVpZFxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBvdS50ZW5hbnRfaWRcbiAgRlJPTSBvcmdfdW5pdHMgb3VcbiAgV0hFUkUgb3UuaWQgPSBwX29yZ191bml0XG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2hhc19wZXJtaXNzaW9uKFxuICBwX3RlbmFudCB1dWlkLFxuICBwX3Blcm1pc3Npb24gdGV4dCxcbiAgcF9zY29wZV9raW5kIHRleHQsXG4gIHBfc2NvcGVfaWQgdGV4dFxuKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIGVmZmVjdGl2ZV9wZXJtaXNzaW9ucyBlcFxuICAgIFdIRVJFIGVwLnRlbmFudF9pZCA9IHBfdGVuYW50XG4gICAgICBBTkQgZXAucHJpbmNpcGFsX2lkID0gYXBwX3Jsc19wcmluY2lwYWxfaWQoKVxuICAgICAgQU5EIGVwLnBlcm1pc3Npb25fa2V5ID0gcF9wZXJtaXNzaW9uXG4gICAgICBBTkQgZXAuc2NvcGVfa2luZCA9IHBfc2NvcGVfa2luZFxuICAgICAgQU5EIGVwLnNjb3BlX2lkID0gcF9zY29wZV9pZFxuICAgICAgQU5EIChlcC5zdGFydHNfYXQgSVMgTlVMTCBPUiBlcC5zdGFydHNfYXQgPD0gbm93KCkpXG4gICAgICBBTkQgKGVwLmV4cGlyZXNfYXQgSVMgTlVMTCBPUiBlcC5leHBpcmVzX2F0ID49IG5vdygpKVxuICApXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX3RlbmFudF9wZXJtaXNzaW9uKFxuICBwX3RlbmFudCB1dWlkLFxuICBwX3Blcm1pc3Npb24gdGV4dFxuKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIGFwcF9ybHNfaGFzX3Blcm1pc3Npb24oXG4gICAgcF90ZW5hbnQsXG4gICAgcF9wZXJtaXNzaW9uLFxuICAgICd0ZW5hbnQnLFxuICAgIHBfdGVuYW50Ojp0ZXh0XG4gIClcbiRmbiQ7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfb3JnX3VuaXRfcGVybWlzc2lvbihcbiAgcF90ZW5hbnQgdXVpZCxcbiAgcF9vcmdfdW5pdCB1dWlkLFxuICBwX3Blcm1pc3Npb24gdGV4dFxuKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIGFwcF9ybHNfaGFzX3Blcm1pc3Npb24oXG4gICAgcF90ZW5hbnQsXG4gICAgcF9wZXJtaXNzaW9uLFxuICAgICd0ZW5hbnQnLFxuICAgIHBfdGVuYW50Ojp0ZXh0XG4gIClcbiAgT1IgKFxuICAgIHBfb3JnX3VuaXQgSVMgTk9UIE5VTExcbiAgICBBTkQgYXBwX3Jsc19oYXNfcGVybWlzc2lvbihcbiAgICAgIHBfdGVuYW50LFxuICAgICAgcF9wZXJtaXNzaW9uLFxuICAgICAgJ29yZ191bml0JyxcbiAgICAgIHBfb3JnX3VuaXQ6OnRleHRcbiAgICApXG4gIClcbiRmbiQ7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfaXNfdGVuYW50X21lbWJlcihwX3RlbmFudCB1dWlkKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIHRlbmFudF9tZW1iZXJzaGlwcyB0bVxuICAgIFdIRVJFIHRtLnRlbmFudF9pZCA9IHBfdGVuYW50XG4gICAgICBBTkQgdG0uc3RhdHVzID0gJ2FjdGl2ZSdcbiAgICAgIEFORCB0bS51c2VyX2lkOjp0ZXh0ID0gYXBwX3Jsc19zdWJqZWN0X2lkKClcbiAgKVxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19pc19vcmdfdW5pdF9tZW1iZXIoXG4gIHBfdGVuYW50IHV1aWQsXG4gIHBfb3JnX3VuaXQgdXVpZFxuKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIG9yZ191bml0X21lbWJlcnNoaXBzIG1cbiAgICBXSEVSRSBtLnRlbmFudF9pZCA9IHBfdGVuYW50XG4gICAgICBBTkQgbS5vcmdfdW5pdF9pZCA9IHBfb3JnX3VuaXRcbiAgICAgIEFORCBtLnN0YXR1cyA9ICdhY3RpdmUnXG4gICAgICBBTkQgbS51c2VyX2lkOjp0ZXh0ID0gYXBwX3Jsc19zdWJqZWN0X2lkKClcbiAgKVxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19jYW5fcmVhZF90ZW5hbnQocF90ZW5hbnQgdXVpZClcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBhcHBfcmxzX3RlbmFudF9wZXJtaXNzaW9uKHBfdGVuYW50LCAnbmFtZXNwYWNlLmFkbWluJylcbiAgT1IgYXBwX3Jsc190ZW5hbnRfcGVybWlzc2lvbihwX3RlbmFudCwgJ25hbWVzcGFjZS53cml0ZScpXG4gIE9SIGFwcF9ybHNfdGVuYW50X3Blcm1pc3Npb24ocF90ZW5hbnQsICduYW1lc3BhY2UucmVhZCcpXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2Nhbl93cml0ZV90ZW5hbnQocF90ZW5hbnQgdXVpZClcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBhcHBfcmxzX3RlbmFudF9wZXJtaXNzaW9uKHBfdGVuYW50LCAnbmFtZXNwYWNlLmFkbWluJylcbiAgT1IgYXBwX3Jsc190ZW5hbnRfcGVybWlzc2lvbihwX3RlbmFudCwgJ25hbWVzcGFjZS53cml0ZScpXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2Nhbl9yZWFkX29yZ191bml0KFxuICBwX3RlbmFudCB1dWlkLFxuICBwX29yZ191bml0IHV1aWRcbilcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBhcHBfcmxzX2Nhbl9yZWFkX3RlbmFudChwX3RlbmFudClcbiAgT1IgYXBwX3Jsc19vcmdfdW5pdF9wZXJtaXNzaW9uKHBfdGVuYW50LCBwX29yZ191bml0LCAnbmFtZXNwYWNlLmFkbWluJylcbiAgT1IgYXBwX3Jsc19vcmdfdW5pdF9wZXJtaXNzaW9uKHBfdGVuYW50LCBwX29yZ191bml0LCAnbmFtZXNwYWNlLndyaXRlJylcbiAgT1IgYXBwX3Jsc19vcmdfdW5pdF9wZXJtaXNzaW9uKHBfdGVuYW50LCBwX29yZ191bml0LCAnbmFtZXNwYWNlLnJlYWQnKVxuICBPUiBhcHBfcmxzX2lzX29yZ191bml0X21lbWJlcihwX3RlbmFudCwgcF9vcmdfdW5pdClcbiRmbiQ7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfY2FuX3dyaXRlX29yZ191bml0KFxuICBwX3RlbmFudCB1dWlkLFxuICBwX29yZ191bml0IHV1aWRcbilcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBhcHBfcmxzX2Nhbl93cml0ZV90ZW5hbnQocF90ZW5hbnQpXG4gIE9SIGFwcF9ybHNfb3JnX3VuaXRfcGVybWlzc2lvbihwX3RlbmFudCwgcF9vcmdfdW5pdCwgJ25hbWVzcGFjZS5hZG1pbicpXG4gIE9SIGFwcF9ybHNfb3JnX3VuaXRfcGVybWlzc2lvbihwX3RlbmFudCwgcF9vcmdfdW5pdCwgJ25hbWVzcGFjZS53cml0ZScpXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2lzX2FkbWluKClcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBFWElTVFMgKFxuICAgIFNFTEVDVCAxXG4gICAgRlJPTSBlZmZlY3RpdmVfcGVybWlzc2lvbnMgZXBcbiAgICBXSEVSRSBlcC5wcmluY2lwYWxfaWQgPSBhcHBfcmxzX3ByaW5jaXBhbF9pZCgpXG4gICAgICBBTkQgZXAucGVybWlzc2lvbl9rZXkgPSAnbmFtZXNwYWNlLmFkbWluJ1xuICAgICAgQU5EIChlcC5zdGFydHNfYXQgSVMgTlVMTCBPUiBlcC5zdGFydHNfYXQgPD0gbm93KCkpXG4gICAgICBBTkQgKGVwLmV4cGlyZXNfYXQgSVMgTlVMTCBPUiBlcC5leHBpcmVzX2F0ID49IG5vdygpKVxuICApXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2lzX3RlbmFudF9hZG1pbihwX3RlbmFudCB1dWlkKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIGFwcF9ybHNfdGVuYW50X3Blcm1pc3Npb24ocF90ZW5hbnQsICduYW1lc3BhY2UuYWRtaW4nKVxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19pc19vcmdfdW5pdF9hZG1pbihcbiAgcF90ZW5hbnQgdXVpZCxcbiAgcF9vcmdfdW5pdCB1dWlkXG4pXG5SRVRVUk5TIGJvb2xlYW5cbkxBTkdVQUdFIHNxbFxuU1RBQkxFXG5TRUNVUklUWSBERUZJTkVSXG4ke0ZVTkNUSU9OX1NFQVJDSF9QQVRIfVxuQVMgJGZuJFxuICBTRUxFQ1QgYXBwX3Jsc19pc190ZW5hbnRfYWRtaW4ocF90ZW5hbnQpXG4gIE9SIChcbiAgICBwX29yZ191bml0IElTIE5PVCBOVUxMXG4gICAgQU5EIGFwcF9ybHNfb3JnX3VuaXRfcGVybWlzc2lvbihwX3RlbmFudCwgcF9vcmdfdW5pdCwgJ25hbWVzcGFjZS5hZG1pbicpXG4gIClcbiRmbiQ7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfaXNfc2NvcGVfYWRtaW4oXG4gIHBfdGVuYW50IHV1aWQsXG4gIHBfc2NvcGVfa2luZCB0ZXh0LFxuICBwX3Njb3BlX2lkIHRleHRcbilcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBDQVNFXG4gICAgV0hFTiBwX3Njb3BlX2tpbmQgPSAndGVuYW50JyBUSEVOIGFwcF9ybHNfaXNfdGVuYW50X2FkbWluKHBfdGVuYW50KVxuICAgIFdIRU4gcF9zY29wZV9raW5kID0gJ29yZ191bml0JyBUSEVOIGFwcF9ybHNfaXNfb3JnX3VuaXRfYWRtaW4oXG4gICAgICBwX3RlbmFudCxcbiAgICAgIHBfc2NvcGVfaWQ6OnV1aWRcbiAgICApXG4gICAgV0hFTiBwX3Njb3BlX2tpbmQgPSAncmVzb3VyY2UnIFRIRU4gRVhJU1RTIChcbiAgICAgIFNFTEVDVCAxXG4gICAgICBGUk9NIHByb3RlY3RlZF9yZXNvdXJjZXMgclxuICAgICAgV0hFUkUgci5pZCA9IHBfc2NvcGVfaWQ6OnV1aWRcbiAgICAgICAgQU5EIHIudGVuYW50X2lkID0gcF90ZW5hbnRcbiAgICAgICAgQU5EIGFwcF9ybHNfaXNfb3JnX3VuaXRfYWRtaW4ocF90ZW5hbnQsIHIub3JnX3VuaXRfaWQpXG4gICAgKVxuICAgIEVMU0UgZmFsc2VcbiAgRU5EXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2Nhbl9hZG1pbl91c2VyKHBfdXNlcl9pZCB1dWlkKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIHRlbmFudF9tZW1iZXJzaGlwcyB0bVxuICAgIFdIRVJFIHRtLnVzZXJfaWQgPSBwX3VzZXJfaWRcbiAgICAgIEFORCBhcHBfcmxzX2lzX3RlbmFudF9hZG1pbih0bS50ZW5hbnRfaWQpXG4gIClcbiRmbiQ7YCxcbiAgYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFwcF9ybHNfY2FuX3JlYWRfZ3JvdXAoXG4gIHBfdGVuYW50IHV1aWQsXG4gIHBfZ3JvdXAgdXVpZFxuKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIGdyb3VwcyBnXG4gICAgV0hFUkUgZy5pZCA9IHBfZ3JvdXBcbiAgICAgIEFORCBnLnRlbmFudF9pZCA9IHBfdGVuYW50XG4gICAgICBBTkQgKFxuICAgICAgICAoZy5vcmdfdW5pdF9pZCBJUyBOVUxMIEFORCBhcHBfcmxzX2Nhbl9yZWFkX3RlbmFudChwX3RlbmFudCkpXG4gICAgICAgIE9SIChcbiAgICAgICAgICBnLm9yZ191bml0X2lkIElTIE5PVCBOVUxMXG4gICAgICAgICAgQU5EIGFwcF9ybHNfY2FuX3JlYWRfb3JnX3VuaXQocF90ZW5hbnQsIGcub3JnX3VuaXRfaWQpXG4gICAgICAgIClcbiAgICAgIClcbiAgKVxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19jYW5fd3JpdGVfZ3JvdXAoXG4gIHBfdGVuYW50IHV1aWQsXG4gIHBfZ3JvdXAgdXVpZFxuKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIGdyb3VwcyBnXG4gICAgV0hFUkUgZy5pZCA9IHBfZ3JvdXBcbiAgICAgIEFORCBnLnRlbmFudF9pZCA9IHBfdGVuYW50XG4gICAgICBBTkQgKFxuICAgICAgICAoZy5vcmdfdW5pdF9pZCBJUyBOVUxMIEFORCBhcHBfcmxzX2Nhbl93cml0ZV90ZW5hbnQocF90ZW5hbnQpKVxuICAgICAgICBPUiAoXG4gICAgICAgICAgZy5vcmdfdW5pdF9pZCBJUyBOT1QgTlVMTFxuICAgICAgICAgIEFORCBhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdChwX3RlbmFudCwgZy5vcmdfdW5pdF9pZClcbiAgICAgICAgKVxuICAgICAgKVxuICApXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2Nhbl9yZWFkX3Jlc291cmNlKFxuICBwX3RlbmFudCB1dWlkLFxuICBwX3Jlc291cmNlIHV1aWRcbilcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBFWElTVFMgKFxuICAgIFNFTEVDVCAxXG4gICAgRlJPTSBwcm90ZWN0ZWRfcmVzb3VyY2VzIHJcbiAgICBXSEVSRSByLmlkID0gcF9yZXNvdXJjZVxuICAgICAgQU5EIHIudGVuYW50X2lkID0gcF90ZW5hbnRcbiAgICAgIEFORCAoXG4gICAgICAgIHIub3duZXJfcHJpbmNpcGFsX2lkID0gYXBwX3Jsc19wcmluY2lwYWxfaWQoKVxuICAgICAgICBPUiBhcHBfcmxzX2lzX29yZ191bml0X2FkbWluKHBfdGVuYW50LCByLm9yZ191bml0X2lkKVxuICAgICAgICBPUiAoXG4gICAgICAgICAgci52aXNpYmlsaXR5ID0gJ3RlbmFudCdcbiAgICAgICAgICBBTkQgYXBwX3Jsc19jYW5fcmVhZF90ZW5hbnQocF90ZW5hbnQpXG4gICAgICAgIClcbiAgICAgICAgT1IgKFxuICAgICAgICAgIHIudmlzaWJpbGl0eSBJTiAoJ29yZ191bml0JywgJ29yZ19zdWJ0cmVlJylcbiAgICAgICAgICBBTkQgYXBwX3Jsc19jYW5fcmVhZF9vcmdfdW5pdChwX3RlbmFudCwgci5vcmdfdW5pdF9pZClcbiAgICAgICAgKVxuICAgICAgICBPUiBFWElTVFMgKFxuICAgICAgICAgIFNFTEVDVCAxXG4gICAgICAgICAgRlJPTSByZXNvdXJjZV9ncmFudHMgZ1xuICAgICAgICAgIFdIRVJFIGcucmVzb3VyY2VfaWQgPSByLmlkXG4gICAgICAgICAgICBBTkQgZy5wcmluY2lwYWxfaWQgPSBhcHBfcmxzX3ByaW5jaXBhbF9pZCgpXG4gICAgICAgICAgICBBTkQgZy5wZXJtaXNzaW9uX2tleSBJTiAoXG4gICAgICAgICAgICAgICdyZXNvdXJjZS5yZWFkJyxcbiAgICAgICAgICAgICAgJ25hbWVzcGFjZS5yZWFkJyxcbiAgICAgICAgICAgICAgJ25hbWVzcGFjZS53cml0ZScsXG4gICAgICAgICAgICAgICduYW1lc3BhY2UuYWRtaW4nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBBTkQgKGcuc3RhcnRzX2F0IElTIE5VTEwgT1IgZy5zdGFydHNfYXQgPD0gbm93KCkpXG4gICAgICAgICAgICBBTkQgKGcuZXhwaXJlc19hdCBJUyBOVUxMIE9SIGcuZXhwaXJlc19hdCA+PSBub3coKSlcbiAgICAgICAgKVxuICAgICAgKVxuICApXG4kZm4kO2AsXG4gIGBDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBhcHBfcmxzX2Nhbl93cml0ZV9yZXNvdXJjZShcbiAgcF90ZW5hbnQgdXVpZCxcbiAgcF9yZXNvdXJjZSB1dWlkXG4pXG5SRVRVUk5TIGJvb2xlYW5cbkxBTkdVQUdFIHNxbFxuU1RBQkxFXG5TRUNVUklUWSBERUZJTkVSXG4ke0ZVTkNUSU9OX1NFQVJDSF9QQVRIfVxuQVMgJGZuJFxuICBTRUxFQ1QgRVhJU1RTIChcbiAgICBTRUxFQ1QgMVxuICAgIEZST00gcHJvdGVjdGVkX3Jlc291cmNlcyByXG4gICAgV0hFUkUgci5pZCA9IHBfcmVzb3VyY2VcbiAgICAgIEFORCByLnRlbmFudF9pZCA9IHBfdGVuYW50XG4gICAgICBBTkQgKFxuICAgICAgICBhcHBfcmxzX2lzX29yZ191bml0X2FkbWluKHBfdGVuYW50LCByLm9yZ191bml0X2lkKVxuICAgICAgICBPUiBhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdChwX3RlbmFudCwgci5vcmdfdW5pdF9pZClcbiAgICAgIClcbiAgKVxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19pc19yb2xlX2FkbWluKHBfcm9sZSB1dWlkKVxuUkVUVVJOUyBib29sZWFuXG5MQU5HVUFHRSBzcWxcblNUQUJMRVxuU0VDVVJJVFkgREVGSU5FUlxuJHtGVU5DVElPTl9TRUFSQ0hfUEFUSH1cbkFTICRmbiRcbiAgU0VMRUNUIEVYSVNUUyAoXG4gICAgU0VMRUNUIDFcbiAgICBGUk9NIHJvbGVzIHJcbiAgICBXSEVSRSByLmlkID0gcF9yb2xlXG4gICAgICBBTkQgKFxuICAgICAgICAoci50ZW5hbnRfaWQgSVMgTlVMTCBBTkQgYXBwX3Jsc19pc19hZG1pbigpKVxuICAgICAgICBPUiAoXG4gICAgICAgICAgci50ZW5hbnRfaWQgSVMgTk9UIE5VTExcbiAgICAgICAgICBBTkQgYXBwX3Jsc19pc190ZW5hbnRfYWRtaW4oci50ZW5hbnRfaWQpXG4gICAgICAgIClcbiAgICAgIClcbiAgKVxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19jYW5fcmVhZF9jcmVkZW50aWFsX3Njb3BlKFxuICBwX3RlbmFudCB1dWlkLFxuICBwX29yZ191bml0IHV1aWRcbilcblJFVFVSTlMgYm9vbGVhblxuTEFOR1VBR0Ugc3FsXG5TVEFCTEVcblNFQ1VSSVRZIERFRklORVJcbiR7RlVOQ1RJT05fU0VBUkNIX1BBVEh9XG5BUyAkZm4kXG4gIFNFTEVDVCBDQVNFXG4gICAgV0hFTiBwX29yZ191bml0IElTIE5VTEwgVEhFTiBhcHBfcmxzX2Nhbl9yZWFkX3RlbmFudChwX3RlbmFudClcbiAgICBFTFNFIGFwcF9ybHNfY2FuX3JlYWRfb3JnX3VuaXQocF90ZW5hbnQsIHBfb3JnX3VuaXQpXG4gIEVORFxuJGZuJDtgLFxuICBgQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gYXBwX3Jsc19jYW5fd3JpdGVfY3JlZGVudGlhbF9zY29wZShcbiAgcF90ZW5hbnQgdXVpZCxcbiAgcF9vcmdfdW5pdCB1dWlkXG4pXG5SRVRVUk5TIGJvb2xlYW5cbkxBTkdVQUdFIHNxbFxuU1RBQkxFXG5TRUNVUklUWSBERUZJTkVSXG4ke0ZVTkNUSU9OX1NFQVJDSF9QQVRIfVxuQVMgJGZuJFxuICBTRUxFQ1QgQ0FTRVxuICAgIFdIRU4gcF9vcmdfdW5pdCBJUyBOVUxMIFRIRU4gYXBwX3Jsc19jYW5fd3JpdGVfdGVuYW50KHBfdGVuYW50KVxuICAgIEVMU0UgYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQocF90ZW5hbnQsIHBfb3JnX3VuaXQpXG4gIEVORFxuJGZuJDtgLFxuXTtcblxuY29uc3QgQURNSU4gPSBcImFwcF9ybHNfaXNfYWRtaW4oKVwiO1xuY29uc3QgVEVOQU5UX0FETUlOID0gXCJhcHBfcmxzX2lzX3RlbmFudF9hZG1pbih0ZW5hbnRfaWQpXCI7XG5jb25zdCBXUklURV9TQ09QRSA9IFwiYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBvcmdfdW5pdF9pZClcIjtcbmNvbnN0IENSRURFTlRJQUxfUkVBRCA9XG4gIFwiYXBwX3Jsc19jYW5fcmVhZF9jcmVkZW50aWFsX3Njb3BlKHRlbmFudF9pZCwgb3JnX3VuaXRfaWQpXCI7XG5jb25zdCBDUkVERU5USUFMX1dSSVRFID1cbiAgXCJhcHBfcmxzX2Nhbl93cml0ZV9jcmVkZW50aWFsX3Njb3BlKHRlbmFudF9pZCwgb3JnX3VuaXRfaWQpXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENhbm9uaWNhbCByZWFkZXIvd3JpdGVyL2FkbWluIHBvbGljeSBtYXRyaXguXG4gKiBAc3VtbWFyeSBBZG1pbmlzdHJhdGl2ZSB0YWJsZXMgKHBlcm1pc3Npb25zLCByb2xlcywgcm9sZSBhc3NpZ25tZW50cyxcbiAqIGluaGVyaXRhbmNlIGJsb2Nrcywgc3RvcmFnZSBiaW5kaW5ncykgYXJlIHZpc2libGUgb25seSB0byBhZG1pbnMuIENvbnRlbnRcbiAqIHRhYmxlcyBhcmUgdmlzaWJsZSB0byByZWFkZXJzIGFuZCB3cml0YWJsZSBieSB3cml0ZXJzLiBVc2VycyBhbHdheXMgc2VlIHRoZWlyXG4gKiBvd24gaWRlbnRpdHkgcm93cyBhbmQgdGhlaXIgb3duIGNyZWRlbnRpYWxzL3NlY3JldHMuXG4gKi9cbmV4cG9ydCBjb25zdCBOQU1FU1BBQ0VfUkxTX1BPTElDWV9TRVRTOiByZWFkb25seSBSbHNQb2xpY3lTZXRbXSA9IFtcbiAge1xuICAgIHRhYmxlOiBcInRlbmFudHNcIixcbiAgICBzZWxlY3Q6IFwiYXBwX3Jsc19pc190ZW5hbnRfbWVtYmVyKGlkKSBPUiBhcHBfcmxzX2Nhbl9yZWFkX3RlbmFudChpZClcIixcbiAgICBpbnNlcnQ6IEFETUlOLFxuICAgIHVwZGF0ZTogXCJhcHBfcmxzX2lzX3RlbmFudF9hZG1pbihpZClcIixcbiAgICBkZWxldGU6IFwiYXBwX3Jsc19pc190ZW5hbnRfYWRtaW4oaWQpXCIsXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJvcmdfdW5pdHNcIixcbiAgICBzZWxlY3Q6XG4gICAgICBcImFwcF9ybHNfY2FuX3JlYWRfb3JnX3VuaXQodGVuYW50X2lkLCBpZCkgT1IgKHBhcmVudF9pZCBJUyBOT1QgTlVMTCBBTkQgYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBwYXJlbnRfaWQpKVwiLFxuICAgIGluc2VydDpcbiAgICAgIFwiYXBwX3Jsc19jYW5fd3JpdGVfdGVuYW50KHRlbmFudF9pZCkgT1IgKHBhcmVudF9pZCBJUyBOT1QgTlVMTCBBTkQgYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBwYXJlbnRfaWQpKVwiLFxuICAgIHVwZGF0ZTpcbiAgICAgIFwiYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBpZCkgT1IgKHBhcmVudF9pZCBJUyBOT1QgTlVMTCBBTkQgYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBwYXJlbnRfaWQpKVwiLFxuICAgIGRlbGV0ZTpcbiAgICAgIFwiYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBpZCkgT1IgKHBhcmVudF9pZCBJUyBOT1QgTlVMTCBBTkQgYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBwYXJlbnRfaWQpKVwiLFxuICB9LFxuICB7XG4gICAgdGFibGU6IFwib3JnX3VuaXRfY2xvc3VyZVwiLFxuICAgIHNlbGVjdDpcbiAgICAgIFwiYXBwX3Jsc19jYW5fcmVhZF9vcmdfdW5pdCh0ZW5hbnRfaWQsIGRlc2NlbmRhbnRfb3JnX3VuaXRfaWQpXCIsXG4gICAgaW5zZXJ0OlxuICAgICAgXCJhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdCh0ZW5hbnRfaWQsIGRlc2NlbmRhbnRfb3JnX3VuaXRfaWQpXCIsXG4gICAgdXBkYXRlOlxuICAgICAgXCJhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdCh0ZW5hbnRfaWQsIGRlc2NlbmRhbnRfb3JnX3VuaXRfaWQpXCIsXG4gICAgZGVsZXRlOlxuICAgICAgXCJhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdCh0ZW5hbnRfaWQsIGRlc2NlbmRhbnRfb3JnX3VuaXRfaWQpXCIsXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJ1c2Vyc1wiLFxuICAgIHNlbGVjdDpcbiAgICAgIFwiaWQ6OnRleHQgPSBhcHBfcmxzX3N1YmplY3RfaWQoKSBPUiBhcHBfcmxzX2Nhbl9hZG1pbl91c2VyKGlkKVwiLFxuICAgIGluc2VydDogQURNSU4sXG4gICAgdXBkYXRlOlxuICAgICAgXCJpZDo6dGV4dCA9IGFwcF9ybHNfc3ViamVjdF9pZCgpIE9SIGFwcF9ybHNfY2FuX2FkbWluX3VzZXIoaWQpXCIsXG4gICAgZGVsZXRlOiBcImFwcF9ybHNfY2FuX2FkbWluX3VzZXIoaWQpXCIsXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJncm91cHNcIixcbiAgICBzZWxlY3Q6IFwiYXBwX3Jsc19jYW5fcmVhZF9ncm91cCh0ZW5hbnRfaWQsIGlkKVwiLFxuICAgIGluc2VydDpcbiAgICAgIFwiYXBwX3Jsc19jYW5fd3JpdGVfdGVuYW50KHRlbmFudF9pZCkgT1IgKG9yZ191bml0X2lkIElTIE5PVCBOVUxMIEFORCBhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdCh0ZW5hbnRfaWQsIG9yZ191bml0X2lkKSlcIixcbiAgICB1cGRhdGU6IFwiYXBwX3Jsc19jYW5fd3JpdGVfZ3JvdXAodGVuYW50X2lkLCBpZClcIixcbiAgICBkZWxldGU6IFwiYXBwX3Jsc19jYW5fd3JpdGVfZ3JvdXAodGVuYW50X2lkLCBpZClcIixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcInByaW5jaXBhbHNcIixcbiAgICBzZWxlY3Q6XG4gICAgICBcImlkID0gYXBwX3Jsc19wcmluY2lwYWxfaWQoKSBPUiAoa2luZCA9ICd1c2VyJyBBTkQgc3ViamVjdF9pZCA9IGFwcF9ybHNfc3ViamVjdF9pZCgpKSBPUiBhcHBfcmxzX2lzX3RlbmFudF9hZG1pbih0ZW5hbnRfaWQpXCIsXG4gICAgaW5zZXJ0OiBURU5BTlRfQURNSU4sXG4gICAgdXBkYXRlOiBURU5BTlRfQURNSU4sXG4gICAgZGVsZXRlOiBURU5BTlRfQURNSU4sXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJ0ZW5hbnRfbWVtYmVyc2hpcHNcIixcbiAgICBzZWxlY3Q6XG4gICAgICBcInVzZXJfaWQ6OnRleHQgPSBhcHBfcmxzX3N1YmplY3RfaWQoKSBPUiBhcHBfcmxzX2Nhbl9yZWFkX3RlbmFudCh0ZW5hbnRfaWQpXCIsXG4gICAgaW5zZXJ0OiBURU5BTlRfQURNSU4sXG4gICAgdXBkYXRlOiBURU5BTlRfQURNSU4sXG4gICAgZGVsZXRlOiBURU5BTlRfQURNSU4sXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJvcmdfdW5pdF9tZW1iZXJzaGlwc1wiLFxuICAgIHNlbGVjdDpcbiAgICAgIFwidXNlcl9pZDo6dGV4dCA9IGFwcF9ybHNfc3ViamVjdF9pZCgpIE9SIGFwcF9ybHNfb3JnX3VuaXRfcGVybWlzc2lvbih0ZW5hbnRfaWQsIG9yZ191bml0X2lkLCAnbmFtZXNwYWNlLmFkbWluJykgT1IgYXBwX3Jsc19vcmdfdW5pdF9wZXJtaXNzaW9uKHRlbmFudF9pZCwgb3JnX3VuaXRfaWQsICduYW1lc3BhY2Uud3JpdGUnKSBPUiBhcHBfcmxzX29yZ191bml0X3Blcm1pc3Npb24odGVuYW50X2lkLCBvcmdfdW5pdF9pZCwgJ25hbWVzcGFjZS5yZWFkJylcIixcbiAgICBpbnNlcnQ6IFdSSVRFX1NDT1BFLFxuICAgIHVwZGF0ZTogV1JJVEVfU0NPUEUsXG4gICAgZGVsZXRlOiBXUklURV9TQ09QRSxcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcImdyb3VwX21lbWJlcnNoaXBzXCIsXG4gICAgc2VsZWN0OiBcImFwcF9ybHNfY2FuX3JlYWRfZ3JvdXAodGVuYW50X2lkLCBncm91cF9pZClcIixcbiAgICBpbnNlcnQ6IFwiYXBwX3Jsc19jYW5fd3JpdGVfZ3JvdXAodGVuYW50X2lkLCBncm91cF9pZClcIixcbiAgICB1cGRhdGU6IFwiYXBwX3Jsc19jYW5fd3JpdGVfZ3JvdXAodGVuYW50X2lkLCBncm91cF9pZClcIixcbiAgICBkZWxldGU6IFwiYXBwX3Jsc19jYW5fd3JpdGVfZ3JvdXAodGVuYW50X2lkLCBncm91cF9pZClcIixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcInBlcm1pc3Npb25zXCIsXG4gICAgc2VsZWN0OiBBRE1JTixcbiAgICBpbnNlcnQ6IEFETUlOLFxuICAgIHVwZGF0ZTogQURNSU4sXG4gICAgZGVsZXRlOiBBRE1JTixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcInJvbGVzXCIsXG4gICAgc2VsZWN0OlxuICAgICAgXCIodGVuYW50X2lkIElTIE5PVCBOVUxMIEFORCBhcHBfcmxzX2lzX3RlbmFudF9hZG1pbih0ZW5hbnRfaWQpKSBPUiAodGVuYW50X2lkIElTIE5VTEwgQU5EIGFwcF9ybHNfaXNfYWRtaW4oKSlcIixcbiAgICBpbnNlcnQ6XG4gICAgICBcIih0ZW5hbnRfaWQgSVMgTk9UIE5VTEwgQU5EIGFwcF9ybHNfaXNfdGVuYW50X2FkbWluKHRlbmFudF9pZCkpIE9SICh0ZW5hbnRfaWQgSVMgTlVMTCBBTkQgYXBwX3Jsc19pc19hZG1pbigpKVwiLFxuICAgIHVwZGF0ZTpcbiAgICAgIFwiKHRlbmFudF9pZCBJUyBOT1QgTlVMTCBBTkQgYXBwX3Jsc19pc190ZW5hbnRfYWRtaW4odGVuYW50X2lkKSkgT1IgKHRlbmFudF9pZCBJUyBOVUxMIEFORCBhcHBfcmxzX2lzX2FkbWluKCkpXCIsXG4gICAgZGVsZXRlOlxuICAgICAgXCIodGVuYW50X2lkIElTIE5PVCBOVUxMIEFORCBhcHBfcmxzX2lzX3RlbmFudF9hZG1pbih0ZW5hbnRfaWQpKSBPUiAodGVuYW50X2lkIElTIE5VTEwgQU5EIGFwcF9ybHNfaXNfYWRtaW4oKSlcIixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcInJvbGVfcGVybWlzc2lvbnNcIixcbiAgICBzZWxlY3Q6IFwiYXBwX3Jsc19pc19yb2xlX2FkbWluKHJvbGVfaWQpXCIsXG4gICAgaW5zZXJ0OiBcImFwcF9ybHNfaXNfcm9sZV9hZG1pbihyb2xlX2lkKVwiLFxuICAgIHVwZGF0ZTogXCJhcHBfcmxzX2lzX3JvbGVfYWRtaW4ocm9sZV9pZClcIixcbiAgICBkZWxldGU6IFwiYXBwX3Jsc19pc19yb2xlX2FkbWluKHJvbGVfaWQpXCIsXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJyb2xlX2Fzc2lnbm1lbnRzXCIsXG4gICAgc2VsZWN0OiBcImFwcF9ybHNfaXNfc2NvcGVfYWRtaW4odGVuYW50X2lkLCBzY29wZV9raW5kLCBzY29wZV9pZClcIixcbiAgICBpbnNlcnQ6IFwiYXBwX3Jsc19pc19zY29wZV9hZG1pbih0ZW5hbnRfaWQsIHNjb3BlX2tpbmQsIHNjb3BlX2lkKVwiLFxuICAgIHVwZGF0ZTogXCJhcHBfcmxzX2lzX3Njb3BlX2FkbWluKHRlbmFudF9pZCwgc2NvcGVfa2luZCwgc2NvcGVfaWQpXCIsXG4gICAgZGVsZXRlOiBcImFwcF9ybHNfaXNfc2NvcGVfYWRtaW4odGVuYW50X2lkLCBzY29wZV9raW5kLCBzY29wZV9pZClcIixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcImluaGVyaXRhbmNlX2Jsb2Nrc1wiLFxuICAgIHNlbGVjdDogXCJhcHBfcmxzX2lzX29yZ191bml0X2FkbWluKHRlbmFudF9pZCwgb3JnX3VuaXRfaWQpXCIsXG4gICAgaW5zZXJ0OiBcImFwcF9ybHNfaXNfb3JnX3VuaXRfYWRtaW4odGVuYW50X2lkLCBvcmdfdW5pdF9pZClcIixcbiAgICB1cGRhdGU6IFwiYXBwX3Jsc19pc19vcmdfdW5pdF9hZG1pbih0ZW5hbnRfaWQsIG9yZ191bml0X2lkKVwiLFxuICAgIGRlbGV0ZTogXCJhcHBfcmxzX2lzX29yZ191bml0X2FkbWluKHRlbmFudF9pZCwgb3JnX3VuaXRfaWQpXCIsXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJwcm90ZWN0ZWRfcmVzb3VyY2VzXCIsXG4gICAgc2VsZWN0OiBcImFwcF9ybHNfY2FuX3JlYWRfcmVzb3VyY2UodGVuYW50X2lkLCBpZClcIixcbiAgICBpbnNlcnQ6XG4gICAgICBcImFwcF9ybHNfY2FuX3dyaXRlX3RlbmFudCh0ZW5hbnRfaWQpIE9SIChvcmdfdW5pdF9pZCBJUyBOT1QgTlVMTCBBTkQgYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQodGVuYW50X2lkLCBvcmdfdW5pdF9pZCkpXCIsXG4gICAgdXBkYXRlOiBcImFwcF9ybHNfY2FuX3dyaXRlX3Jlc291cmNlKHRlbmFudF9pZCwgaWQpXCIsXG4gICAgZGVsZXRlOiBcImFwcF9ybHNfY2FuX3dyaXRlX3Jlc291cmNlKHRlbmFudF9pZCwgaWQpXCIsXG4gIH0sXG4gIHtcbiAgICB0YWJsZTogXCJyZXNvdXJjZV9ncmFudHNcIixcbiAgICBzZWxlY3Q6XG4gICAgICBcInByaW5jaXBhbF9pZCA9IGFwcF9ybHNfcHJpbmNpcGFsX2lkKCkgT1IgYXBwX3Jsc19jYW5fcmVhZF9yZXNvdXJjZSh0ZW5hbnRfaWQsIHJlc291cmNlX2lkKVwiLFxuICAgIGluc2VydDogXCJhcHBfcmxzX2Nhbl93cml0ZV9yZXNvdXJjZSh0ZW5hbnRfaWQsIHJlc291cmNlX2lkKVwiLFxuICAgIHVwZGF0ZTogXCJhcHBfcmxzX2Nhbl93cml0ZV9yZXNvdXJjZSh0ZW5hbnRfaWQsIHJlc291cmNlX2lkKVwiLFxuICAgIGRlbGV0ZTogXCJhcHBfcmxzX2Nhbl93cml0ZV9yZXNvdXJjZSh0ZW5hbnRfaWQsIHJlc291cmNlX2lkKVwiLFxuICB9LFxuICB7XG4gICAgdGFibGU6IFwiZWZmZWN0aXZlX3Blcm1pc3Npb25zXCIsXG4gICAgc2VsZWN0OlxuICAgICAgXCJwcmluY2lwYWxfaWQgPSBhcHBfcmxzX3ByaW5jaXBhbF9pZCgpIE9SIGFwcF9ybHNfaXNfc2NvcGVfYWRtaW4odGVuYW50X2lkLCBzY29wZV9raW5kLCBzY29wZV9pZClcIixcbiAgICBpbnNlcnQ6IFwiYXBwX3Jsc19pc19zY29wZV9hZG1pbih0ZW5hbnRfaWQsIHNjb3BlX2tpbmQsIHNjb3BlX2lkKVwiLFxuICAgIHVwZGF0ZTogXCJhcHBfcmxzX2lzX3Njb3BlX2FkbWluKHRlbmFudF9pZCwgc2NvcGVfa2luZCwgc2NvcGVfaWQpXCIsXG4gICAgZGVsZXRlOiBcImFwcF9ybHNfaXNfc2NvcGVfYWRtaW4odGVuYW50X2lkLCBzY29wZV9raW5kLCBzY29wZV9pZClcIixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcInN0b3JhZ2VfYmluZGluZ3NcIixcbiAgICBzZWxlY3Q6IFRFTkFOVF9BRE1JTixcbiAgICBpbnNlcnQ6IFRFTkFOVF9BRE1JTixcbiAgICB1cGRhdGU6IFRFTkFOVF9BRE1JTixcbiAgICBkZWxldGU6IFRFTkFOVF9BRE1JTixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcInRlbmFudF9wcm9maWxlc1wiLFxuICAgIHNlbGVjdDpcbiAgICAgIFwiYXBwX3Jsc19pc190ZW5hbnRfbWVtYmVyKHRlbmFudF9pZCkgT1IgYXBwX3Jsc19jYW5fcmVhZF90ZW5hbnQodGVuYW50X2lkKVwiLFxuICAgIGluc2VydDogVEVOQU5UX0FETUlOLFxuICAgIHVwZGF0ZTogVEVOQU5UX0FETUlOLFxuICAgIGRlbGV0ZTogVEVOQU5UX0FETUlOLFxuICB9LFxuICB7XG4gICAgdGFibGU6IFwib3JnX3VuaXRfcHJvZmlsZXNcIixcbiAgICBzZWxlY3Q6XG4gICAgICBcImFwcF9ybHNfY2FuX3JlYWRfb3JnX3VuaXQoYXBwX3Jsc19vcmdfdW5pdF90ZW5hbnQob3JnX3VuaXRfaWQpLCBvcmdfdW5pdF9pZClcIixcbiAgICBpbnNlcnQ6XG4gICAgICBcImFwcF9ybHNfY2FuX3dyaXRlX29yZ191bml0KGFwcF9ybHNfb3JnX3VuaXRfdGVuYW50KG9yZ191bml0X2lkKSwgb3JnX3VuaXRfaWQpXCIsXG4gICAgdXBkYXRlOlxuICAgICAgXCJhcHBfcmxzX2Nhbl93cml0ZV9vcmdfdW5pdChhcHBfcmxzX29yZ191bml0X3RlbmFudChvcmdfdW5pdF9pZCksIG9yZ191bml0X2lkKVwiLFxuICAgIGRlbGV0ZTpcbiAgICAgIFwiYXBwX3Jsc19jYW5fd3JpdGVfb3JnX3VuaXQoYXBwX3Jsc19vcmdfdW5pdF90ZW5hbnQob3JnX3VuaXRfaWQpLCBvcmdfdW5pdF9pZClcIixcbiAgfSxcbiAge1xuICAgIHRhYmxlOiBcImNyZWRlbnRpYWxzXCIsXG4gICAgc2VsZWN0OlxuICAgICAgXCJvd25lcl9wcmluY2lwYWxfaWQgPSBhcHBfcmxzX3ByaW5jaXBhbF9pZCgpIE9SIFwiICsgQ1JFREVOVElBTF9SRUFELFxuICAgIGluc2VydDogQ1JFREVOVElBTF9XUklURSxcbiAgICB1cGRhdGU6IENSRURFTlRJQUxfV1JJVEUsXG4gICAgZGVsZXRlOiBDUkVERU5USUFMX1dSSVRFLFxuICB9LFxuICB7XG4gICAgdGFibGU6IFwic2VjcmV0c1wiLFxuICAgIHNlbGVjdDpcbiAgICAgIFwib3duZXJfcHJpbmNpcGFsX2lkID0gYXBwX3Jsc19wcmluY2lwYWxfaWQoKSBPUiBcIiArXG4gICAgICBDUkVERU5USUFMX1JFQUQgK1xuICAgICAgXCIgT1IgKHRlbmFudF9pZCBJUyBOVUxMIEFORCBhcHBfcmxzX2lzX2FkbWluKCkpXCIsXG4gICAgaW5zZXJ0OlxuICAgICAgQ1JFREVOVElBTF9XUklURSArIFwiIE9SICh0ZW5hbnRfaWQgSVMgTlVMTCBBTkQgYXBwX3Jsc19pc19hZG1pbigpKVwiLFxuICAgIHVwZGF0ZTpcbiAgICAgIENSRURFTlRJQUxfV1JJVEUgKyBcIiBPUiAodGVuYW50X2lkIElTIE5VTEwgQU5EIGFwcF9ybHNfaXNfYWRtaW4oKSlcIixcbiAgICBkZWxldGU6XG4gICAgICBDUkVERU5USUFMX1dSSVRFICsgXCIgT1IgKHRlbmFudF9pZCBJUyBOVUxMIEFORCBhcHBfcmxzX2lzX2FkbWluKCkpXCIsXG4gIH0sXG5dO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgZW5hYmxlL2ZvcmNlIGFuZCBwb2xpY3kgRERMIGZvciBhIHBvbGljeSBzZXQuXG4gKiBAc3VtbWFyeSBgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTYCBtYWtlcyB0aGUgb3V0cHV0IHNhZmUgdG8gcmVwbGF5IG9uIGV2ZXJ5XG4gKiBkZXBsb3ltZW50LiBNaXNzaW5nIGNvbW1hbmQgZXhwcmVzc2lvbnMgbGVhdmUgdGhhdCBjb21tYW5kIGRlbmllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJsc1BvbGljeVN0YXRlbWVudHMoXG4gIHBvbGljeVNldHM6IHJlYWRvbmx5IFJsc1BvbGljeVNldFtdID0gTkFNRVNQQUNFX1JMU19QT0xJQ1lfU0VUU1xuKTogc3RyaW5nW10ge1xuICBjb25zdCBzdGF0ZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHNldCBvZiBwb2xpY3lTZXRzKSB7XG4gICAgaWYgKHNldC5lbmFibGUgIT09IGZhbHNlKSB7XG4gICAgICBzdGF0ZW1lbnRzLnB1c2goXG4gICAgICAgIGBBTFRFUiBUQUJMRSAke3NldC50YWJsZX0gRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTtgLFxuICAgICAgICBgQUxURVIgVEFCTEUgJHtzZXQudGFibGV9IEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTtgXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSBzZXQudGFibGUucmVwbGFjZSgvW15BLVphLXowLTlfXS9nLCBcIl9cIik7XG4gICAgY29uc3QgY29tbWFuZHM6IEFycmF5PFxuICAgICAgW3N0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkLCAobmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpID0+IHN0cmluZ11cbiAgICA+ID0gW1xuICAgICAgW1xuICAgICAgICBcInNlbGVjdFwiLFxuICAgICAgICBzZXQuc2VsZWN0LFxuICAgICAgICAobmFtZSwgZXhwcmVzc2lvbikgPT5cbiAgICAgICAgICBgQ1JFQVRFIFBPTElDWSAke25hbWV9IE9OICR7c2V0LnRhYmxlfSBGT1IgU0VMRUNUIFVTSU5HICgke2V4cHJlc3Npb259KTtgLFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJpbnNlcnRcIixcbiAgICAgICAgc2V0Lmluc2VydCxcbiAgICAgICAgKG5hbWUsIGV4cHJlc3Npb24pID0+XG4gICAgICAgICAgYENSRUFURSBQT0xJQ1kgJHtuYW1lfSBPTiAke3NldC50YWJsZX0gRk9SIElOU0VSVCBXSVRIIENIRUNLICgke2V4cHJlc3Npb259KTtgLFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgXCJ1cGRhdGVcIixcbiAgICAgICAgc2V0LnVwZGF0ZSxcbiAgICAgICAgKG5hbWUsIGV4cHJlc3Npb24pID0+XG4gICAgICAgICAgYENSRUFURSBQT0xJQ1kgJHtuYW1lfSBPTiAke3NldC50YWJsZX0gRk9SIFVQREFURSBVU0lORyAoJHtleHByZXNzaW9ufSkgV0lUSCBDSEVDSyAoJHtleHByZXNzaW9ufSk7YCxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIFwiZGVsZXRlXCIsXG4gICAgICAgIHNldC5kZWxldGUsXG4gICAgICAgIChuYW1lLCBleHByZXNzaW9uKSA9PlxuICAgICAgICAgIGBDUkVBVEUgUE9MSUNZICR7bmFtZX0gT04gJHtzZXQudGFibGV9IEZPUiBERUxFVEUgVVNJTkcgKCR7ZXhwcmVzc2lvbn0pO2AsXG4gICAgICBdLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBbY29tbWFuZCwgZXhwcmVzc2lvbiwgcmVuZGVyXSBvZiBjb21tYW5kcykge1xuICAgICAgaWYgKCFleHByZXNzaW9uKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IG5hbWUgPSBgJHtwcmVmaXh9XyR7Y29tbWFuZH1fcG9saWN5YDtcbiAgICAgIHN0YXRlbWVudHMucHVzaChgRFJPUCBQT0xJQ1kgSUYgRVhJU1RTICR7bmFtZX0gT04gJHtzZXQudGFibGV9O2AsIHJlbmRlcihcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZXhwcmVzc2lvblxuICAgICAgKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGdWxsIG5hbWVzcGFjZSBSTFMgYm9vdHN0cmFwIHN0YXRlbWVudCBsaXN0LlxuICogQHN1bW1hcnkgSGVscGVyIGZ1bmN0aW9ucyBmb2xsb3dlZCBieSBlbmFibGUvZm9yY2UgYW5kIHBvbGljeSBEREwgZm9yIGV2ZXJ5XG4gKiB0YWJsZSBpbiB7QGxpbmsgUkxTX1BST1RFQ1RFRF9UQUJMRVN9LiBBcHBseSBhZnRlciB0aGUgbmFtZXNwYWNlIHNjaGVtYVxuICogZXhpc3RzIGFuZCBiZWZvcmUgcmVxdWVzdC1zY29wZWQgdHJhZmZpYyByZWFjaGVzIHRoZSBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJsc0Jvb3RzdHJhcFN0YXRlbWVudHMoKTogc3RyaW5nW10ge1xuICByZXR1cm4gWy4uLlJMU19GVU5DVElPTl9TVEFURU1FTlRTLCAuLi5ybHNQb2xpY3lTdGF0ZW1lbnRzKCldO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUYWJsZXMgdGFyZ2V0ZWQgYnkgdGhlIGJ1bmRsZWQgbmFtZXNwYWNlIHRlbXBsYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmxzUG9saWN5VGFibGVzKFxuICBwb2xpY3lTZXRzOiByZWFkb25seSBSbHNQb2xpY3lTZXRbXSA9IE5BTUVTUEFDRV9STFNfUE9MSUNZX1NFVFNcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBvbGljeVNldHMubWFwKChzZXQpID0+IHNldC50YWJsZSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFzc2VydHMgdGhhdCB0aGUgYnVuZGxlZCBwb2xpY3kgdGVtcGxhdGUgY292ZXJzIGV2ZXJ5IHByb3RlY3RlZFxuICogdGFibGUuIEV4cG9zZWQgZm9yIGRlcGxveW1lbnQgY2hlY2tzIGFuZCB1bml0IHRlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0UmxzVGFibGVDb3ZlcmFnZShcbiAgcG9saWN5U2V0czogcmVhZG9ubHkgUmxzUG9saWN5U2V0W10gPSBOQU1FU1BBQ0VfUkxTX1BPTElDWV9TRVRTXG4pOiB2b2lkIHtcbiAgY29uc3QgY292ZXJlZCA9IG5ldyBTZXQocmxzUG9saWN5VGFibGVzKHBvbGljeVNldHMpKTtcbiAgY29uc3QgbWlzc2luZyA9IFJMU19QUk9URUNURURfVEFCTEVTLmZpbHRlcigodGFibGUpID0+ICFjb3ZlcmVkLmhhcyh0YWJsZSkpO1xuICBpZiAobWlzc2luZy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBSTFMgdGVtcGxhdGUgaXMgbWlzc2luZyB0YWJsZXM6ICR7bWlzc2luZy5qb2luKFwiLCBcIil9YFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -6,4 +6,4 @@
6
6
  * bootstrap/session configuration shapes.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=rls.types.js.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmxzLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvcmxzL3Jscy50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25hbWVzcGFjZXMvcmxzL3R5cGVzXG4gKiBAc3VtbWFyeSBUeXBlcyBzaGFyZWQgYnkgdGhlIG5hbWVzcGFjZSByb3ctbGV2ZWwtc2VjdXJpdHkgdGVtcGxhdGUgYW5kIHNlcnZpY2VzLlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgdGhlIG1pbmltYWwgcXVlcnktZXhlY3V0b3IgY29udHJhY3QgKGNvbXBhdGlibGUgd2l0aFxuICogYHBnLkNsaWVudGAvYHBnLlBvb2xgKSwgdGhlIHBvbGljeSBkZXNjcmlwdG9yIHVzZWQgdG8gZ2VuZXJhdGUgRERMLCBhbmQgdGhlXG4gKiBib290c3RyYXAvc2Vzc2lvbiBjb25maWd1cmF0aW9uIHNoYXBlcy5cbiAqL1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNaW5pbWFsIGFzeW5jaHJvbm91cyBTUUwgZXhlY3V0b3IgcmVxdWlyZWQgYnkgdGhlIFJMUyBzZXJ2aWNlcy5cbiAqIEBzdW1tYXJ5IE1hdGNoZXMgdGhlIHNoYXBlIG9mIGBwZy5DbGllbnQucXVlcnkoKWAgd2l0aG91dCBpbXBvcnRpbmcgYHBnYCBhdFxuICogcnVudGltZS4gQ29uc3VtZXJzIGNhbiBwYXNzIGEgYHBnLkNsaWVudGAsIGEgYHBnLlBvb2xgLCBvciBhbnkgY29tcGF0aWJsZVxuICogd3JhcHBlciAoaW5jbHVkaW5nIHRlc3QgZG91YmxlcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmxzUXVlcnlFeGVjdXRvciB7XG4gIHF1ZXJ5KFxuICAgIHNxbDogc3RyaW5nLFxuICAgIHZhbHVlcz86IHVua25vd25bXVxuICApOiBQcm9taXNlPHsgcm93Q291bnQ/OiBudW1iZXIgfCBudWxsOyByb3dzPzogdW5rbm93bltdIH0+O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHNldCBvZiByb3ctbGV2ZWwtc2VjdXJpdHkgcG9saWNpZXMgZm9yIG9uZSB0YWJsZS5cbiAqIEBzdW1tYXJ5IEVhY2ggZXhwcmVzc2lvbiBpcyBhIFBvc3RncmVTUUwgYm9vbGVhbiBleHByZXNzaW9uIGV2YWx1YXRlZCBhZ2FpbnN0XG4gKiB0aGUgcm93LiBgaW5zZXJ0YCB1c2VzIGBXSVRIIENIRUNLYDsgYHVwZGF0ZWAgdXNlcyBgVVNJTkdgIGFuZCBgV0lUSCBDSEVDS2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmxzUG9saWN5U2V0IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUYWJsZSBuYW1lIChvcHRpb25hbGx5IHNjaGVtYS1xdWFsaWZpZWQpIHRvIHByb3RlY3QuXG4gICAqL1xuICB0YWJsZTogc3RyaW5nO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGBVU0lOR2AgZXhwcmVzc2lvbiBmb3IgYFNFTEVDVGA7IG9taXQgdG8gbGVhdmUgYFNFTEVDVGAgZGVuaWVkLlxuICAgKi9cbiAgc2VsZWN0Pzogc3RyaW5nO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGBXSVRIIENIRUNLYCBleHByZXNzaW9uIGZvciBgSU5TRVJUYDsgb21pdCB0byBkZW55IGluc2VydHMuXG4gICAqL1xuICBpbnNlcnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gYFVTSU5HYC9gV0lUSCBDSEVDS2AgZXhwcmVzc2lvbiBmb3IgYFVQREFURWA7IG9taXQgdG8gZGVueSB1cGRhdGVzLlxuICAgKi9cbiAgdXBkYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIGBVU0lOR2AgZXhwcmVzc2lvbiBmb3IgYERFTEVURWA7IG9taXQgdG8gZGVueSBkZWxldGVzLlxuICAgKi9cbiAgZGVsZXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gYWxzbyBlbWl0IGBFTkFCTEVgL2BGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFlgLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBlbmFibGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGFjY2VwdGVkIGJ5IHtAbGluayBSbHNCb290c3RyYXBTZXJ2aWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSbHNCb290c3RyYXBDb25maWcge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRlbWVudHMgdG8gYXBwbHkgaW5zdGVhZCBvZiB0aGUgYnVuZGxlZCBuYW1lc3BhY2UgdGVtcGxhdGUuXG4gICAqIEBzdW1tYXJ5IFVzZWZ1bCBmb3IgdGFyZ2V0ZWQgdGVzdHMgb3IgcGFydGlhbCBkZXBsb3ltZW50cy4gU3RhdGVtZW50cyBhcmVcbiAgICogZXhlY3V0ZWQgc2VxdWVudGlhbGx5IGFuZCBtdXN0IGJlIGlkZW1wb3RlbnQgd2hlbiBhcHBsaWVkIHJlcGVhdGVkbHkuXG4gICAqL1xuICBzdGF0ZW1lbnRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUG9saWN5IHNldHMgdG8gZ2VuZXJhdGUgaW5zdGVhZCBvZiB0aGUgYnVuZGxlZCBuYW1lc3BhY2UgcG9saWN5XG4gICAqIHRlbXBsYXRlLiBGdW5jdGlvbiBoZWxwZXJzIGFyZSBzdGlsbCBlbWl0dGVkIHVubGVzcyBgc3RhdGVtZW50c2AgaXMgc3VwcGxpZWQuXG4gICAqL1xuICBwb2xpY2llcz86IFJsc1BvbGljeVNldFtdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb25zIGZvciB7QGxpbmsgcnVuQXNQcmluY2lwYWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkFzUHJpbmNpcGFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiB3aGVuIHRoZSBjYWxsYmFjayBzdWNjZWVkcy5cbiAgICogQGRlZmF1bHQgZmFsc2Ug4oCUIHRoZSB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFjayB0byBrZWVwIHRlc3RzIGlzb2xhdGVkLlxuICAgKi9cbiAgY29tbWl0PzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -62,4 +62,4 @@ export function namespaceRlsSessionBinding(options = {}) {
62
62
  export function namespaceRlsTypeORMOptions(options = {}) {
63
63
  return { sessionBinding: namespaceRlsSessionBinding(options) };
64
64
  }
65
- //# sourceMappingURL=session-binding.js.map
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1iaW5kaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25hbWVzcGFjZXMvcmxzL3Nlc3Npb24tYmluZGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0NBQTZCO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsMkJBQXdCO0FBNEMvQyxTQUFTLGNBQWMsQ0FBQyxPQUFxQixFQUFFLEdBQVc7SUFDeEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxVQUE2QyxFQUFFO0lBRS9DLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLGFBQWEsQ0FBQztJQUN6RSxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsSUFBSSxNQUFNLENBQUM7SUFDMUUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFMUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2pCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFL0IsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUNmLE9BQU8sU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFeEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzlELElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQztnQkFDbEQsSUFBSSxDQUNGLGdFQUFnRSxZQUFZLENBQUMsU0FBUyxzQ0FBc0MsQ0FDN0gsQ0FBQztZQUNKLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLFVBQTZDLEVBQUU7SUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25hbWVzcGFjZXMvcmxzL3Nlc3Npb24tYmluZGluZ1xuICogQHN1bW1hcnkgTWFwcyBhbiBhdXRoZW50aWNhdGVkIHJlcXVlc3QgY29udGV4dCB0byB0aGUgUG9zdGdyZXMgc2Vzc2lvbiBzZXR0aW5ncyBjb25zdW1lZCBieSB0aGUgbmFtZXNwYWNlIFJMUyBwb2xpY2llcy5cbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHtAbGluayBuYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZ30gYW5kIHRoZVxuICogYG5hbWVzcGFjZVJsc1R5cGVPUk1PcHRpb25zKClgIGNvbnZlbmllbmNlIHdyYXBwZXI6IGEgZmFpbC1jbG9zZWQsXG4gKiBjb25maWctb25seSBzZWFtIHRoYXQgdHVybnMgdGhlIHByaW5jaXBhbCBVVUlEIGNhcnJpZWQgb24gYSBkZWNhZiBgQ29udGV4dGBcbiAqIGludG8gYSBgeyBbUkxTX1NFVFRJTkdTLlByaW5jaXBhbF06IHByaW5jaXBhbElkIH1gIHNldHRpbmdzIG1hcCB0aGUgVHlwZU9STVxuICogYWRhcHRlciBiaW5kcyB0cmFuc2FjdGlvbi1sb2NhbGx5IGFmdGVyIGBCRUdJTmAuIE5vdGhpbmcgaXMgYm91bmQgd2hlbiB0aGVcbiAqIGNvbnRleHQgY2FycmllcyBubyBVVUlELXNoYXBlZCBwcmluY2lwYWwsIHNvIFBvc3RncmVzIFJMUyBkZW5pZXNcbiAqIHByb3RlY3RlZC1yb3cgYWNjZXNzIGluc3RlYWQgb2Ygc2lsZW50bHkgc2VydmluZyBhbiBhbm9ueW1vdXMgcmVhZC5cbiAqL1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBQUklOQ0lQQUxfVVVJRF9QQVRURVJOIH0gZnJvbSBcIi4vcHJpbmNpcGFsLXJlc29sdmVyXCI7XG5pbXBvcnQgeyBSTFNfU0VUVElOR1MgfSBmcm9tIFwiLi9ybHMuY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNlc3Npb24gc2V0dGluZ3MgbWFwIGhhbmRlZCB0byB0aGUgcGVyc2lzdGVuY2UgYWRhcHRlcidzIHNlc3Npb24gYmluZGluZ1xuICogQHN1bW1hcnkgQSBwbGFpbiBgbmFtZSAtPiB2YWx1ZWAgbWFwIG9mIFBvc3RncmVzIHNlc3Npb24gdmFyaWFibGVzLiBUaGVcbiAqIGJpbmRpbmcgcHJvZHVjZWQgaGVyZSB1c2VzIGV4YWN0bHkgb25lIGtleToge0BsaW5rIFJMU19TRVRUSU5HUy5QcmluY2lwYWx9XG4gKiAoYGFwcC5wcmluY2lwYWxfaWRgKSBmcm9tIGAuL3Jscy5jb25zdGFudHNgIC0gdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGhcbiAqIGFsc28gaW50ZXJwb2xhdGVkIGJ5IGAuL3Jscy50ZW1wbGF0ZWAgaW50byB0aGUgUkxTIGhlbHBlciBmdW5jdGlvbnMgYW5kXG4gKiBwb2xpY2llcyAtIHNvIHJlbmFtaW5nIHRoZSBzZXR0aW5nIGluIG9uZSBwbGFjZSByZW5hbWVzIGl0IGV2ZXJ5d2hlcmUuXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gTmFtZXNwYWNlUmxzU2Vzc2lvblNldHRpbmdzXG4gKi9cbmV4cG9ydCB0eXBlIE5hbWVzcGFjZVJsc1Nlc3Npb25TZXR0aW5ncyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlc29sdmVyIHRoYXQgbWFwcyBhIHJlcXVlc3QgY29udGV4dCB0byBSTFMgc2Vzc2lvbiBzZXR0aW5nc1xuICogQHN1bW1hcnkgSW52b2tlZCBieSB0aGUgcGVyc2lzdGVuY2UgYWRhcHRlciBhdCB0cmFuc2FjdGlvbiBzdGFydCB3aXRoIHRoZVxuICogcmVxdWVzdCBgQ29udGV4dGAgKGlmIGFueSkuIFJldHVybnMgdGhlIHNldHRpbmdzIHRvIGJpbmRcbiAqIHRyYW5zYWN0aW9uLWxvY2FsbHksIG9yIGB1bmRlZmluZWRgIHdoZW4gbm90aGluZyBzaG91bGQgYmUgYm91bmQuIE11c3QgYmVcbiAqIHN5bmNocm9ub3VzIGFuZCBzaWRlLWVmZmVjdCBmcmVlOiB0aGUgY29uc3VtaW5nIGFkYXB0ZXIgdHJlYXRzIGEgdGhyb3cgZnJvbVxuICogdGhlIGJpbmRpbmcgYXMgXCJubyBzZXR0aW5nc1wiIGFuZCBsZWF2ZXMgdGhlIHRyYW5zYWN0aW9uIHVuYm91bmQgKGZhaWxcbiAqIGNsb3NlZCkuXG4gKiBAdHlwZWRlZiB7KGNvbnRleHQ/OiBDb250ZXh0PGFueT4pID0+IE5hbWVzcGFjZVJsc1Nlc3Npb25TZXR0aW5ncyB8IHVuZGVmaW5lZH0gTmFtZXNwYWNlUmxzU2Vzc2lvbkJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTmFtZXNwYWNlUmxzU2Vzc2lvbkJpbmRpbmcgPSAoXG4gIGNvbnRleHQ/OiBDb250ZXh0PGFueT5cbikgPT4gTmFtZXNwYWNlUmxzU2Vzc2lvblNldHRpbmdzIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb25zIGZvciB0aGUgbmFtZXNwYWNlIFJMUyBzZXNzaW9uIGJpbmRpbmdcbiAqIEBzdW1tYXJ5IExldHMgaG9zdHMgcmVsb2NhdGUgdGhlIGNvbnRleHQga2V5cyB0aGUgZGVmYXVsdCBiaW5kaW5nIHJlYWRzIGFuZFxuICogb3ZlcnJpZGUgdGhlIHdhcm5pbmcgc2luay4gVGhlIGRlZmF1bHRzIHJlYWQgYHByaW5jaXBhbElkYCAodGhlIHJlc29sdmVkXG4gKiBwcmluY2lwYWwgVVVJRCBjYXJyaWVkIG9uIHRoZSByZXF1ZXN0IGNvbnRleHQpIGFuZCBgdXNlcmAgKHRoZVxuICogYXV0aGVudGljYXRlZCBpZGVudGl0eSBtYXJrZXIpLCBhbmQgd2FybiB0aHJvdWdoIGBjb25zb2xlLndhcm5gLlxuICogQGludGVyZmFjZSBOYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcHJpbmNpcGFsQ29udGV4dEtleV0gLSBDb250ZXh0IGtleSBob2xkaW5nIHRoZSByZXNvbHZlZCBwcmluY2lwYWwgVVVJRC4gRGVmYXVsdHMgdG8gYHByaW5jaXBhbElkYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYXV0aGVudGljYXRlZENvbnRleHRLZXldIC0gQ29udGV4dCBrZXkgdGhhdCBtYXJrcyB0aGUgY29udGV4dCBhcyBhdXRoZW50aWNhdGVkOyBjb25zdWx0ZWQgb25seSB0byBkZWNpZGUgd2hldGhlciB0byB3YXJuLiBEZWZhdWx0cyB0byBgdXNlcmAuXG4gKiBAcHJvcGVydHkgeyhtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWR9IFt3YXJuXSAtIFdhcm5pbmcgc2luayBpbnZva2VkIHdoZW4gYW4gYXV0aGVudGljYXRlZCBjb250ZXh0IGhhcyBubyByZXNvbHZhYmxlIHByaW5jaXBhbC4gRGVmYXVsdHMgdG8gYGNvbnNvbGUud2FybmA7IHRoZSBtZXNzYWdlIG5ldmVyIGNvbnRhaW5zIGFueSBzZXR0aW5nIG9yIHByaW5jaXBhbCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZ09wdGlvbnMge1xuICBwcmluY2lwYWxDb250ZXh0S2V5Pzogc3RyaW5nO1xuICBhdXRoZW50aWNhdGVkQ29udGV4dEtleT86IHN0cmluZztcbiAgd2Fybj86IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIHJlYWRDb250ZXh0S2V5KGNvbnRleHQ6IENvbnRleHQ8YW55Piwga2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY29udGV4dC5nZXRPclVuZGVmaW5lZChrZXkgYXMgYW55KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCdWlsZHMgdGhlIG5hbWVzcGFjZSBSTFMgc2Vzc2lvbiBiaW5kaW5nIGZvciBhIHJlcXVlc3QgY29udGV4dFxuICogQHN1bW1hcnkgUmV0dXJucyBhIHJlc29sdmVyIHRoYXQgcmVhZHMgdGhlIGNvbmZpZ3VyZWQgcHJpbmNpcGFsIGNvbnRleHQga2V5XG4gKiAoZGVmYXVsdCBgcHJpbmNpcGFsSWRgKSwgdHJpbXMgdGhlIGNhbmRpZGF0ZSwgYW5kIC0gd2hlbiBpdCBpcyBhXG4gKiBVVUlELXNoYXBlZCBzdHJpbmcgLSBwcm9kdWNlc1xuICogYHsgW1JMU19TRVRUSU5HUy5QcmluY2lwYWxdOiBwcmluY2lwYWxJZCB9YCBmb3IgdGhlIGFkYXB0ZXIgdG8gYmluZFxuICogdHJhbnNhY3Rpb24tbG9jYWxseS4gRmFpbCBjbG9zZWQ6IGEgbWlzc2luZyBjb250ZXh0LCBhbiBhYnNlbnQsIGVtcHR5LCBvclxuICogbm9uLVVVSUQgY2FuZGlkYXRlLCBvciBhIGNvbnRleHQgbG9va3VwIGVycm9yIHlpZWxkcyBgdW5kZWZpbmVkYCwgc29cbiAqIG5vdGhpbmcgaXMgYm91bmQgYW5kIFBvc3RncmVzIFJMUyBkZW5pZXMgcHJvdGVjdGVkLXJvdyBhY2Nlc3MuIFdoZW4gdGhlXG4gKiBjb250ZXh0IGxvb2tzIGF1dGhlbnRpY2F0ZWQgKHRoZSBjb25maWd1cmVkIGF1dGhlbnRpY2F0ZWQgY29udGV4dCBrZXlcbiAqIHJlc29sdmVzKSBidXQgY2FycmllcyBubyB2YWxpZCBwcmluY2lwYWwsIHRoZSByZXNvbHZlciBlbWl0cyBhIHNpbmdsZVxuICogd2FybmluZyB0aHJvdWdoIHRoZSBjb25maWd1cmVkIGB3YXJuYCBzaW5rIChkZWZhdWx0IGBjb25zb2xlLndhcm5gKSxcbiAqIHdpdGhvdXQgbG9nZ2luZyBhbnkgc2V0dGluZyBvciBwcmluY2lwYWwgdmFsdWUuXG4gKiBAZnVuY3Rpb24gbmFtZXNwYWNlUmxzU2Vzc2lvbkJpbmRpbmdcbiAqIEBwYXJhbSB7TmFtZXNwYWNlUmxzU2Vzc2lvbkJpbmRpbmdPcHRpb25zfSBbb3B0aW9uc10gLSBPdmVycmlkZXMgZm9yIHRoZSBjb250ZXh0IGtleXMgYW5kIHRoZSB3YXJuaW5nIHNpbmsuXG4gKiBAcmV0dXJucyB7TmFtZXNwYWNlUmxzU2Vzc2lvbkJpbmRpbmd9IFRoZSBjb250ZXh0LXRvLXNldHRpbmdzIHJlc29sdmVyLlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGJpbmRpbmcgPSBuYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZygpO1xuICogY29uc3Qgc2V0dGluZ3MgPSBiaW5kaW5nKGN0eCk7IC8vIHsgXCJhcHAucHJpbmNpcGFsX2lkXCI6IFwiPHV1aWQ+XCIgfSBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZVJsc1Nlc3Npb25CaW5kaW5nKFxuICBvcHRpb25zOiBOYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZ09wdGlvbnMgPSB7fVxuKTogTmFtZXNwYWNlUmxzU2Vzc2lvbkJpbmRpbmcge1xuICBjb25zdCBwcmluY2lwYWxDb250ZXh0S2V5ID0gb3B0aW9ucy5wcmluY2lwYWxDb250ZXh0S2V5ID8/IFwicHJpbmNpcGFsSWRcIjtcbiAgY29uc3QgYXV0aGVudGljYXRlZENvbnRleHRLZXkgPSBvcHRpb25zLmF1dGhlbnRpY2F0ZWRDb250ZXh0S2V5ID8/IFwidXNlclwiO1xuICBjb25zdCB3YXJuID0gb3B0aW9ucy53YXJuID8/ICgobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSkpO1xuXG4gIHJldHVybiAoY29udGV4dCkgPT4ge1xuICAgIGlmICghY29udGV4dCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlYWRDb250ZXh0S2V5KGNvbnRleHQsIHByaW5jaXBhbENvbnRleHRLZXkpO1xuICAgIGNvbnN0IHByaW5jaXBhbElkID1cbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUgPT09IFwic3RyaW5nXCIgPyBjYW5kaWRhdGUudHJpbSgpIDogXCJcIjtcblxuICAgIGlmICghcHJpbmNpcGFsSWQgfHwgIVBSSU5DSVBBTF9VVUlEX1BBVFRFUk4udGVzdChwcmluY2lwYWxJZCkpIHtcbiAgICAgIGlmIChyZWFkQ29udGV4dEtleShjb250ZXh0LCBhdXRoZW50aWNhdGVkQ29udGV4dEtleSkpXG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgYEF1dGhlbnRpY2F0ZWQgY29udGV4dCBoYXMgbm8gcmVzb2x2YWJsZSBuYW1lc3BhY2UgcHJpbmNpcGFsOyAke1JMU19TRVRUSU5HUy5QcmluY2lwYWx9IHdpbGwgbm90IGJlIGJvdW5kIGFuZCBSTFMgd2lsbCBkZW55YFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBbUkxTX1NFVFRJTkdTLlByaW5jaXBhbF06IHByaW5jaXBhbElkIH07XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJ1aWxkcyB0aGUgYHNlc3Npb25CaW5kaW5nYCBvcHRpb24gZm9yIHRoZSBUeXBlT1JNIGFkYXB0ZXJcbiAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgdGhhdCBzcHJlYWRzIHRoZSBuYW1lc3BhY2VkIFJMUyBiaW5kaW5nIGludG8gYVxuICogVHlwZU9STSBhZGFwdGVyIGNvbmZpZ3VyYXRpb246IG1lcmdlIHRoZSByZXR1cm5lZCBvYmplY3QgaW50b1xuICogYFR5cGVPUk1BZGFwdGVyT3B0aW9uc2AgYW5kIGBUeXBlT1JNQ29udGV4dExvY2tgIGJpbmRzIHRoZSByZXNvbHZlZFxuICoge0BsaW5rIFJMU19TRVRUSU5HUy5QcmluY2lwYWx9IHRyYW5zYWN0aW9uLWxvY2FsbHkgYWZ0ZXIgYEJFR0lOYC4gVGhpcyBpc1xuICogY29uZmlndXJhdGlvbiBvbmx5IC0gbm8gc3ViY2xhc3Npbmcgb3IgbWV0aG9kIG92ZXJyaWRlcy5cbiAqIEBmdW5jdGlvbiBuYW1lc3BhY2VSbHNUeXBlT1JNT3B0aW9uc1xuICogQHBhcmFtIHtOYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZ09wdGlvbnN9IFtvcHRpb25zXSAtIE92ZXJyaWRlcyBmb3J3YXJkZWQgdG8ge0BsaW5rIG5hbWVzcGFjZVJsc1Nlc3Npb25CaW5kaW5nfS5cbiAqIEByZXR1cm5zIHt7IHNlc3Npb25CaW5kaW5nOiBOYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZyB9fSBBbiBvYmplY3QgdG8gc3ByZWFkIGludG8gdGhlIFR5cGVPUk0gYWRhcHRlciBvcHRpb25zLlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG5hbWVzcGFjZVJsc1R5cGVPUk1PcHRpb25zIH0gZnJvbSBcIkBkZWNhZi10cy9pbnRlZ3JhdGlvbnMvbmFtZXNwYWNlc1wiO1xuICogY29uc3QgYWRhcHRlciA9IG5ldyBUeXBlT1JNQWRhcHRlcih7IC4uLmRhdGFTb3VyY2VPcHRpb25zLCAuLi5uYW1lc3BhY2VSbHNUeXBlT1JNT3B0aW9ucygpIH0pO1xuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZXNwYWNlUmxzVHlwZU9STU9wdGlvbnMoXG4gIG9wdGlvbnM6IE5hbWVzcGFjZVJsc1Nlc3Npb25CaW5kaW5nT3B0aW9ucyA9IHt9XG4pOiB7IHNlc3Npb25CaW5kaW5nOiBOYW1lc3BhY2VSbHNTZXNzaW9uQmluZGluZyB9IHtcbiAgcmV0dXJuIHsgc2Vzc2lvbkJpbmRpbmc6IG5hbWVzcGFjZVJsc1Nlc3Npb25CaW5kaW5nKG9wdGlvbnMpIH07XG59XG4iXX0=