@pipeline-builder/api-core 5.2.6 → 5.2.8

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 (189) hide show
  1. package/lib/constants/ai-providers.js +1 -1
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/constants/index.js +1 -1
  4. package/lib/constants/time.js +1 -1
  5. package/lib/errors/app-errors.js +1 -1
  6. package/lib/errors/index.js +1 -1
  7. package/lib/helpers/access-helpers.d.ts +19 -0
  8. package/lib/helpers/access-helpers.js +24 -4
  9. package/lib/helpers/content-disposition.js +1 -1
  10. package/lib/helpers/crud-helpers.js +1 -1
  11. package/lib/helpers/index.d.ts +1 -1
  12. package/lib/helpers/index.js +2 -2
  13. package/lib/helpers/org-hierarchy-http.js +1 -1
  14. package/lib/helpers/org-hierarchy.js +1 -1
  15. package/lib/helpers/restore-helpers.js +1 -1
  16. package/lib/helpers/sse-helpers.js +13 -2
  17. package/lib/helpers/support-calendar.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/middleware/ask-provenance.js +1 -1
  20. package/lib/middleware/assurance.js +1 -1
  21. package/lib/middleware/auth.js +3 -2
  22. package/lib/middleware/client-version.d.ts +45 -0
  23. package/lib/middleware/client-version.js +97 -0
  24. package/lib/middleware/deferred-quota-check.js +1 -1
  25. package/lib/middleware/ecosystem-guard.js +1 -1
  26. package/lib/middleware/index.d.ts +1 -0
  27. package/lib/middleware/index.js +2 -1
  28. package/lib/middleware/jwt-verify.js +1 -1
  29. package/lib/middleware/mongo-sanitize.js +1 -1
  30. package/lib/middleware/on-behalf.js +1 -1
  31. package/lib/middleware/permission-gates.js +1 -1
  32. package/lib/middleware/quota-exempt-routes.js +1 -1
  33. package/lib/middleware/revocation.js +1 -1
  34. package/lib/middleware/route-table.js +16 -1
  35. package/lib/middleware/service-tokens.js +1 -1
  36. package/lib/middleware/step-up.js +1 -1
  37. package/lib/middleware/system-org.d.ts +18 -5
  38. package/lib/middleware/system-org.js +19 -6
  39. package/lib/openapi/extend-zod.js +1 -1
  40. package/lib/openapi/index.js +1 -1
  41. package/lib/openapi/registry.js +1 -1
  42. package/lib/openapi/routes/ask-routes.js +1 -1
  43. package/lib/openapi/routes/billing-routes.js +1 -1
  44. package/lib/openapi/routes/image-registry-routes.js +1 -1
  45. package/lib/openapi/routes/index.js +1 -1
  46. package/lib/openapi/routes/message-routes.js +1 -1
  47. package/lib/openapi/routes/pipeline-routes.js +1 -1
  48. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  49. package/lib/openapi/routes/plugin-routes.js +1 -1
  50. package/lib/openapi/routes/quota-routes.js +1 -1
  51. package/lib/openapi/schema-registry.js +1 -1
  52. package/lib/routes/health.js +1 -1
  53. package/lib/routes/index.js +1 -1
  54. package/lib/services/ai-call-weight.js +1 -1
  55. package/lib/services/alert-delivery.js +1 -1
  56. package/lib/services/api-key-exchange.d.ts +4 -2
  57. package/lib/services/api-key-exchange.js +15 -8
  58. package/lib/services/audit-context.d.ts +3 -0
  59. package/lib/services/audit-context.js +2 -1
  60. package/lib/services/audit-spool.js +1 -1
  61. package/lib/services/cache-service.js +1 -1
  62. package/lib/services/circuit-breaker.js +1 -1
  63. package/lib/services/compliance-client.js +1 -1
  64. package/lib/services/compliance-event-subscriber.js +1 -1
  65. package/lib/services/durable-event-bus.js +1 -1
  66. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  67. package/lib/services/ecosystem-notify-client.js +9 -3
  68. package/lib/services/entity-events.js +1 -1
  69. package/lib/services/env-redis.js +1 -1
  70. package/lib/services/http-client.js +19 -3
  71. package/lib/services/index.d.ts +1 -1
  72. package/lib/services/index.js +2 -2
  73. package/lib/services/jwks-cache.js +1 -1
  74. package/lib/services/leader-lock.js +1 -1
  75. package/lib/services/notification-channels.js +1 -1
  76. package/lib/services/org-ai-client.js +1 -1
  77. package/lib/services/pagerduty-inbound.js +1 -1
  78. package/lib/services/pagerduty.js +1 -1
  79. package/lib/services/quota-increment-batcher.js +1 -1
  80. package/lib/services/quota.js +1 -1
  81. package/lib/services/remote-audit-client.js +1 -1
  82. package/lib/services/retry-forever.js +1 -1
  83. package/lib/services/retry-strategy.js +1 -1
  84. package/lib/services/s3-client.js +1 -1
  85. package/lib/services/scheduler.js +1 -1
  86. package/lib/services/service-boot.js +1 -1
  87. package/lib/services/service-keys.js +2 -2
  88. package/lib/services/sse-ticket-store.js +1 -1
  89. package/lib/services/system-notification.js +1 -1
  90. package/lib/services/token-revocation.js +1 -1
  91. package/lib/services/version-vuln-policy.d.ts +11 -0
  92. package/lib/services/version-vuln-policy.js +33 -7
  93. package/lib/types/ai-catalog.js +1 -1
  94. package/lib/types/ask-proposals.d.ts +23 -0
  95. package/lib/types/ask-proposals.js +29 -1
  96. package/lib/types/audit-events.js +1 -1
  97. package/lib/types/build-catalog.d.ts +65 -0
  98. package/lib/types/build-catalog.js +95 -1
  99. package/lib/types/catalog-metadata.js +1 -1
  100. package/lib/types/common.js +1 -1
  101. package/lib/types/compliance-exemption.js +1 -1
  102. package/lib/types/ecosystem-notifications.d.ts +9 -0
  103. package/lib/types/ecosystem-notifications.js +15 -6
  104. package/lib/types/ecosystem.d.ts +1 -6
  105. package/lib/types/ecosystem.js +18 -5
  106. package/lib/types/error-codes.d.ts +3 -0
  107. package/lib/types/error-codes.js +6 -1
  108. package/lib/types/feature-flags.d.ts +17 -1
  109. package/lib/types/feature-flags.js +1 -1
  110. package/lib/types/http.js +1 -1
  111. package/lib/types/index.d.ts +3 -3
  112. package/lib/types/index.js +4 -4
  113. package/lib/types/metadata-keys.js +1 -1
  114. package/lib/types/permissions.d.ts +60 -13
  115. package/lib/types/permissions.js +63 -14
  116. package/lib/types/pipeline-template.js +1 -1
  117. package/lib/types/pipeline.js +1 -1
  118. package/lib/types/plugin-catalog.js +1 -1
  119. package/lib/types/plugin-health.js +1 -1
  120. package/lib/types/plugin-scan.d.ts +69 -0
  121. package/lib/types/plugin-scan.js +77 -1
  122. package/lib/types/quota-catalog.js +15 -2
  123. package/lib/types/quota-tiers.d.ts +27 -160
  124. package/lib/types/quota-tiers.js +47 -255
  125. package/lib/types/remote-audit-actions.d.ts +1 -1
  126. package/lib/types/remote-audit-actions.js +9 -1
  127. package/lib/types/reserved-tags.js +1 -1
  128. package/lib/types/tier-limits.d.ts +210 -0
  129. package/lib/types/tier-limits.js +254 -0
  130. package/lib/types/usage-projection.js +1 -1
  131. package/lib/types/visibility.js +1 -1
  132. package/lib/types/wire-vocabulary.d.ts +7 -0
  133. package/lib/types/wire-vocabulary.js +7 -1
  134. package/lib/utils/alias-resolver.js +1 -1
  135. package/lib/utils/api-key.js +1 -1
  136. package/lib/utils/audit.js +1 -1
  137. package/lib/utils/aws-scrub.js +1 -1
  138. package/lib/utils/compliance-attributes.js +1 -1
  139. package/lib/utils/concurrency-gate.d.ts +98 -0
  140. package/lib/utils/concurrency-gate.js +110 -0
  141. package/lib/utils/concurrency.js +1 -1
  142. package/lib/utils/crash-handlers.js +1 -1
  143. package/lib/utils/date.js +1 -1
  144. package/lib/utils/dsse.js +1 -1
  145. package/lib/utils/env.d.ts +11 -0
  146. package/lib/utils/env.js +14 -1
  147. package/lib/utils/headers.js +1 -1
  148. package/lib/utils/identity.js +1 -1
  149. package/lib/utils/index.d.ts +2 -0
  150. package/lib/utils/index.js +3 -1
  151. package/lib/utils/jwk.js +2 -2
  152. package/lib/utils/logger.js +1 -1
  153. package/lib/utils/metric-emitter.js +1 -1
  154. package/lib/utils/object.js +1 -1
  155. package/lib/utils/params.js +1 -1
  156. package/lib/utils/plugin-compliance.d.ts +9 -1
  157. package/lib/utils/plugin-compliance.js +1 -1
  158. package/lib/utils/proof-of-work.js +1 -1
  159. package/lib/utils/response.js +1 -1
  160. package/lib/utils/retention.js +1 -1
  161. package/lib/utils/safe-require.js +1 -1
  162. package/lib/utils/secret-encryption.js +1 -1
  163. package/lib/utils/secret-rotation.js +1 -1
  164. package/lib/utils/secure-compare.js +1 -1
  165. package/lib/utils/semver.d.ts +18 -0
  166. package/lib/utils/semver.js +120 -0
  167. package/lib/utils/sensitive-patterns.js +1 -1
  168. package/lib/utils/service-registry.js +1 -1
  169. package/lib/utils/ssrf.js +1 -1
  170. package/lib/validation/ai-schemas.js +1 -1
  171. package/lib/validation/common-schemas.js +1 -1
  172. package/lib/validation/dockerfile-static.js +1 -1
  173. package/lib/validation/index.d.ts +1 -1
  174. package/lib/validation/index.js +2 -2
  175. package/lib/validation/message-schemas.d.ts +73 -0
  176. package/lib/validation/message-schemas.js +63 -2
  177. package/lib/validation/middleware.js +1 -1
  178. package/lib/validation/pipeline-schemas.js +1 -1
  179. package/lib/validation/pipeline-template-schemas.js +1 -1
  180. package/lib/validation/plugin-base-images.js +1 -1
  181. package/lib/validation/plugin-catalog-detect.js +1 -1
  182. package/lib/validation/plugin-catalog-metadata.js +1 -1
  183. package/lib/validation/plugin-heuristics.js +1 -1
  184. package/lib/validation/plugin-lint.js +1 -1
  185. package/lib/validation/plugin-name-confusable.js +1 -1
  186. package/lib/validation/plugin-schemas.js +1 -1
  187. package/lib/validation/plugin-spec-schema.js +1 -1
  188. package/lib/validation/plugin-template-contract.js +1 -1
  189. package/package.json +11 -4
@@ -79,4 +79,4 @@ export function createHealthRouter(options) {
79
79
  router.get('/ready', createReadinessCheck(options));
80
80
  return router;
81
81
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy9oZWFsdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxFQUErQixNQUFNLFNBQVMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQWM3Qjs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsbUJBQW1CLENBQUMsT0FBMkI7SUFLNUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDNUQsTUFBTSxRQUFRLEdBQXdCO1FBQ3BDLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtRQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDcEQsQ0FBQztJQUNGLElBQUksT0FBTztRQUFFLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBRXhDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILFFBQVEsQ0FBQyxZQUFZLEdBQUcsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDL0QsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQ3RDLENBQUM7UUFDRixPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLFFBQVEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBMkI7SUFDM0QsT0FBTyxLQUFLLEVBQUUsSUFBYSxFQUFFLEdBQWEsRUFBaUIsRUFBRTtRQUMzRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUEyQjtJQUM5RCxPQUFPLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFpQixFQUFFO1FBQzNELE1BQU0sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5RCxPQUFPO1FBQ1QsQ0FBQztRQUNELFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBMkI7SUFDNUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgUm91dGVyLCB0eXBlIFJlcXVlc3QsIHR5cGUgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgSGVhbHRoQ2hlY2tSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBzZW5kU3VjY2Vzcywgc2VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGhlYWx0aCBjaGVjayBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja09wdGlvbnMge1xuICAvKiogU2VydmljZSBuYW1lICovXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlIHZlcnNpb24gKG9wdGlvbmFsKSAqL1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGhlYWx0aCBjaGVjayBmdW5jdGlvbiBmb3IgZGVwZW5kZW5jaWVzICovXG4gIGNoZWNrRGVwZW5kZW5jaWVzPzogKCkgPT4gUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPj47XG59XG5cbi8qKlxuICogQnVpbGQgYSBIZWFsdGhDaGVja1Jlc3BvbnNlICsgY29sbGVjdCBkZXBlbmRlbmN5IHN0YXR1cy5cbiAqIFNoYXJlZCBiZXR3ZWVuIC9oZWFsdGggKGxpdmVuZXNzKSBhbmQgL3JlYWR5IChyZWFkaW5lc3MpLlxuICovXG5hc3luYyBmdW5jdGlvbiBidWlsZEhlYWx0aFJlc3BvbnNlKG9wdGlvbnM6IEhlYWx0aENoZWNrT3B0aW9ucyk6IFByb21pc2U8e1xuICByZXNwb25zZTogSGVhbHRoQ2hlY2tSZXNwb25zZTtcbiAgaGFzRGlzY29ubmVjdGVkOiBib29sZWFuO1xuICBjaGVja0ZhaWxlZDogYm9vbGVhbjtcbn0+IHtcbiAgY29uc3QgeyBzZXJ2aWNlTmFtZSwgdmVyc2lvbiwgY2hlY2tEZXBlbmRlbmNpZXMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlc3BvbnNlOiBIZWFsdGhDaGVja1Jlc3BvbnNlID0ge1xuICAgIHN0YXR1czogJ2hlYWx0aHknLFxuICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lLFxuICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIHVwdGltZTogTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkgLyAxMDAwKSxcbiAgfTtcbiAgaWYgKHZlcnNpb24pIHJlc3BvbnNlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG4gIGlmICghY2hlY2tEZXBlbmRlbmNpZXMpIHtcbiAgICByZXR1cm4geyByZXNwb25zZSwgaGFzRGlzY29ubmVjdGVkOiBmYWxzZSwgY2hlY2tGYWlsZWQ6IGZhbHNlIH07XG4gIH1cblxuICB0cnkge1xuICAgIHJlc3BvbnNlLmRlcGVuZGVuY2llcyA9IGF3YWl0IGNoZWNrRGVwZW5kZW5jaWVzKCk7XG4gICAgY29uc3QgaGFzRGlzY29ubmVjdGVkID0gT2JqZWN0LnZhbHVlcyhyZXNwb25zZS5kZXBlbmRlbmNpZXMpLnNvbWUoXG4gICAgICAoc3RhdHVzKSA9PiBzdGF0dXMgPT09ICdkaXNjb25uZWN0ZWQnLFxuICAgICk7XG4gICAgcmV0dXJuIHsgcmVzcG9uc2UsIGhhc0Rpc2Nvbm5lY3RlZCwgY2hlY2tGYWlsZWQ6IGZhbHNlIH07XG4gIH0gY2F0Y2gge1xuICAgIHJlc3BvbnNlLmRlcGVuZGVuY2llcyA9IHsgY2hlY2s6ICdkaXNjb25uZWN0ZWQnIH07XG4gICAgcmV0dXJuIHsgcmVzcG9uc2UsIGhhc0Rpc2Nvbm5lY3RlZDogdHJ1ZSwgY2hlY2tGYWlsZWQ6IHRydWUgfTtcbiAgfVxufVxuXG4vKipcbiAqIExpdmVuZXNzIGhhbmRsZXIg4oCUIHJldHVybnMgMjAwIGFzIGxvbmcgYXMgdGhlIHByb2Nlc3MgaXMgYWxpdmUgZW5vdWdoIHRvXG4gKiByZXNwb25kLiBEZXBlbmRlbmN5IHN0YXR1cyBpcyByZXBvcnRlZCBpbiB0aGUgYm9keSBhcyBpbmZvcm1hdGlvbmFsLCBidXQgYVxuICogZGlzY29ubmVjdGVkIGRlcGVuZGVuY3kgZG9lcyBOT1QgZmFpbCB0aGUgcHJvYmUgKHVzZSAvcmVhZHkgZm9yIHRoYXQpLlxuICpcbiAqIFVzZSBhcyB0aGUgS3ViZXJuZXRlcyAvIEVDUyBMSVZFTkVTUyBwcm9iZSDigJQgaXQgc2hvdWxkIG9ubHkgZmFpbCB3aGVuIHRoZVxuICogcHJvY2VzcyBpcyBnZW51aW5lbHkgc3R1Y2sgYW5kIG5lZWRzIHRvIGJlIHJlc3RhcnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhlYWx0aENoZWNrKG9wdGlvbnM6IEhlYWx0aENoZWNrT3B0aW9ucykge1xuICByZXR1cm4gYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBhd2FpdCBidWlsZEhlYWx0aFJlc3BvbnNlKG9wdGlvbnMpO1xuICAgIHNlbmRTdWNjZXNzKHJlcywgMjAwLCByZXNwb25zZSk7XG4gIH07XG59XG5cbi8qKlxuICogUmVhZGluZXNzIGhhbmRsZXIg4oCUIHJldHVybnMgNTAzIGlmIGFueSBkZXBlbmRlbmN5IGlzIGBkaXNjb25uZWN0ZWRgIChvclxuICogdGhlIGRlcGVuZGVuY3kgY2hlY2sgaXRzZWxmIHRocmV3KS4gUmV0dXJucyAyMDAgb25seSB3aGVuIHRoZSBzZXJ2aWNlIGlzXG4gKiBmdWxseSByZWFkeSB0byBzZXJ2ZSB0cmFmZmljLlxuICpcbiAqIFVzZSBhcyB0aGUgS3ViZXJuZXRlcyAvIEVDUyBSRUFESU5FU1MgcHJvYmUg4oCUIHdoZW4gdGhpcyBmYWlscywgdGhlXG4gKiBvcmNoZXN0cmF0b3Igc3RvcHMgcm91dGluZyB0cmFmZmljIHRvIHRoaXMgcG9kIGJ1dCBkb2VzIE5PVCByZXN0YXJ0IGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVhZGluZXNzQ2hlY2sob3B0aW9uczogSGVhbHRoQ2hlY2tPcHRpb25zKSB7XG4gIHJldHVybiBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UsIGhhc0Rpc2Nvbm5lY3RlZCB9ID0gYXdhaXQgYnVpbGRIZWFsdGhSZXNwb25zZShvcHRpb25zKTtcbiAgICBpZiAoaGFzRGlzY29ubmVjdGVkKSB7XG4gICAgICByZXNwb25zZS5zdGF0dXMgPSAndW5oZWFsdGh5JztcbiAgICAgIHNlbmRFcnJvcihyZXMsIDUwMywgJ1NlcnZpY2Ugbm90IHJlYWR5JywgdW5kZWZpbmVkLCByZXNwb25zZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlbmRTdWNjZXNzKHJlcywgMjAwLCByZXNwb25zZSk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgaGVhbHRoL3JlYWRpbmVzcyByb3V0ZXIgZXhwb3Npbmc6XG4gKiAtIEdFVCAvaGVhbHRoIOKAlCBsaXZlbmVzcyAoYWx3YXlzIDIwMCB1bmxlc3MgcHJvY2VzcyBpcyBkZWFkKVxuICogLSBHRVQgL3JlYWR5ICDigJQgcmVhZGluZXNzICg1MDMgaWYgZGVwZW5kZW5jaWVzIGFyZSBkaXNjb25uZWN0ZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGFwcC51c2UoY3JlYXRlSGVhbHRoUm91dGVyKHsgc2VydmljZU5hbWU6ICdwbHVnaW4nIH0pKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGVhbHRoUm91dGVyKG9wdGlvbnM6IEhlYWx0aENoZWNrT3B0aW9ucyk6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuICByb3V0ZXIuZ2V0KCcvaGVhbHRoJywgY3JlYXRlSGVhbHRoQ2hlY2sob3B0aW9ucykpO1xuICByb3V0ZXIuZ2V0KCcvcmVhZHknLCBjcmVhdGVSZWFkaW5lc3NDaGVjayhvcHRpb25zKSk7XG4gIHJldHVybiByb3V0ZXI7XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2hlYWx0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLEVBQStCLE1BQU0sU0FBUyxDQUFDO0FBRTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBYzdCOzs7R0FHRztBQUNILEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxPQUEyQjtJQUs1RCxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM1RCxNQUFNLFFBQVEsR0FBd0I7UUFDcEMsTUFBTSxFQUFFLFNBQVM7UUFDakIsT0FBTyxFQUFFLFdBQVc7UUFDcEIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1FBQ25DLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUNwRCxDQUFDO0lBQ0YsSUFBSSxPQUFPO1FBQUUsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFFeEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsUUFBUSxDQUFDLFlBQVksR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUM7UUFDbEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUMvRCxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FDdEMsQ0FBQztRQUNGLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsUUFBUSxDQUFDLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUEyQjtJQUMzRCxPQUFPLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFpQixFQUFFO1FBQzNELE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQTJCO0lBQzlELE9BQU8sS0FBSyxFQUFFLElBQWEsRUFBRSxHQUFhLEVBQWlCLEVBQUU7UUFDM0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsR0FBRyxNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsUUFBUSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlELE9BQU87UUFDVCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUEyQjtJQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDcEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBSb3V0ZXIsIHR5cGUgUmVxdWVzdCwgdHlwZSBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHR5cGUgeyBIZWFsdGhDaGVja1Jlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IHNlbmRTdWNjZXNzLCBzZW5kRXJyb3IgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgaGVhbHRoIGNoZWNrIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aENoZWNrT3B0aW9ucyB7XG4gIC8qKiBTZXJ2aWNlIG5hbWUgKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgLyoqIFNlcnZpY2UgdmVyc2lvbiAob3B0aW9uYWwpICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gaGVhbHRoIGNoZWNrIGZ1bmN0aW9uIGZvciBkZXBlbmRlbmNpZXMgKi9cbiAgY2hlY2tEZXBlbmRlbmNpZXM/OiAoKSA9PiBQcm9taXNlPFJlY29yZDxzdHJpbmcsICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic+Pjtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIEhlYWx0aENoZWNrUmVzcG9uc2UgKyBjb2xsZWN0IGRlcGVuZGVuY3kgc3RhdHVzLlxuICogU2hhcmVkIGJldHdlZW4gL2hlYWx0aCAobGl2ZW5lc3MpIGFuZCAvcmVhZHkgKHJlYWRpbmVzcykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkSGVhbHRoUmVzcG9uc2Uob3B0aW9uczogSGVhbHRoQ2hlY2tPcHRpb25zKTogUHJvbWlzZTx7XG4gIHJlc3BvbnNlOiBIZWFsdGhDaGVja1Jlc3BvbnNlO1xuICBoYXNEaXNjb25uZWN0ZWQ6IGJvb2xlYW47XG4gIGNoZWNrRmFpbGVkOiBib29sZWFuO1xufT4ge1xuICBjb25zdCB7IHNlcnZpY2VOYW1lLCB2ZXJzaW9uLCBjaGVja0RlcGVuZGVuY2llcyB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVzcG9uc2U6IEhlYWx0aENoZWNrUmVzcG9uc2UgPSB7XG4gICAgc3RhdHVzOiAnaGVhbHRoeScsXG4gICAgc2VydmljZTogc2VydmljZU5hbWUsXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgdXB0aW1lOiBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSAvIDEwMDApLFxuICB9O1xuICBpZiAodmVyc2lvbikgcmVzcG9uc2UudmVyc2lvbiA9IHZlcnNpb247XG5cbiAgaWYgKCFjaGVja0RlcGVuZGVuY2llcykge1xuICAgIHJldHVybiB7IHJlc3BvbnNlLCBoYXNEaXNjb25uZWN0ZWQ6IGZhbHNlLCBjaGVja0ZhaWxlZDogZmFsc2UgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVzcG9uc2UuZGVwZW5kZW5jaWVzID0gYXdhaXQgY2hlY2tEZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBoYXNEaXNjb25uZWN0ZWQgPSBPYmplY3QudmFsdWVzKHJlc3BvbnNlLmRlcGVuZGVuY2llcykuc29tZShcbiAgICAgIChzdGF0dXMpID0+IHN0YXR1cyA9PT0gJ2Rpc2Nvbm5lY3RlZCcsXG4gICAgKTtcbiAgICByZXR1cm4geyByZXNwb25zZSwgaGFzRGlzY29ubmVjdGVkLCBjaGVja0ZhaWxlZDogZmFsc2UgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmVzcG9uc2UuZGVwZW5kZW5jaWVzID0geyBjaGVjazogJ2Rpc2Nvbm5lY3RlZCcgfTtcbiAgICByZXR1cm4geyByZXNwb25zZSwgaGFzRGlzY29ubmVjdGVkOiB0cnVlLCBjaGVja0ZhaWxlZDogdHJ1ZSB9O1xuICB9XG59XG5cbi8qKlxuICogTGl2ZW5lc3MgaGFuZGxlciDigJQgcmV0dXJucyAyMDAgYXMgbG9uZyBhcyB0aGUgcHJvY2VzcyBpcyBhbGl2ZSBlbm91Z2ggdG9cbiAqIHJlc3BvbmQuIERlcGVuZGVuY3kgc3RhdHVzIGlzIHJlcG9ydGVkIGluIHRoZSBib2R5IGFzIGluZm9ybWF0aW9uYWwsIGJ1dCBhXG4gKiBkaXNjb25uZWN0ZWQgZGVwZW5kZW5jeSBkb2VzIE5PVCBmYWlsIHRoZSBwcm9iZSAodXNlIC9yZWFkeSBmb3IgdGhhdCkuXG4gKlxuICogVXNlIGFzIHRoZSBLdWJlcm5ldGVzIC8gRUNTIExJVkVORVNTIHByb2JlIOKAlCBpdCBzaG91bGQgb25seSBmYWlsIHdoZW4gdGhlXG4gKiBwcm9jZXNzIGlzIGdlbnVpbmVseSBzdHVjayBhbmQgbmVlZHMgdG8gYmUgcmVzdGFydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGVhbHRoQ2hlY2sob3B0aW9uczogSGVhbHRoQ2hlY2tPcHRpb25zKSB7XG4gIHJldHVybiBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGF3YWl0IGJ1aWxkSGVhbHRoUmVzcG9uc2Uob3B0aW9ucyk7XG4gICAgc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHJlc3BvbnNlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWFkaW5lc3MgaGFuZGxlciDigJQgcmV0dXJucyA1MDMgaWYgYW55IGRlcGVuZGVuY3kgaXMgYGRpc2Nvbm5lY3RlZGAgKG9yXG4gKiB0aGUgZGVwZW5kZW5jeSBjaGVjayBpdHNlbGYgdGhyZXcpLiBSZXR1cm5zIDIwMCBvbmx5IHdoZW4gdGhlIHNlcnZpY2UgaXNcbiAqIGZ1bGx5IHJlYWR5IHRvIHNlcnZlIHRyYWZmaWMuXG4gKlxuICogVXNlIGFzIHRoZSBLdWJlcm5ldGVzIC8gRUNTIFJFQURJTkVTUyBwcm9iZSDigJQgd2hlbiB0aGlzIGZhaWxzLCB0aGVcbiAqIG9yY2hlc3RyYXRvciBzdG9wcyByb3V0aW5nIHRyYWZmaWMgdG8gdGhpcyBwb2QgYnV0IGRvZXMgTk9UIHJlc3RhcnQgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWFkaW5lc3NDaGVjayhvcHRpb25zOiBIZWFsdGhDaGVja09wdGlvbnMpIHtcbiAgcmV0dXJuIGFzeW5jIChfcmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgeyByZXNwb25zZSwgaGFzRGlzY29ubmVjdGVkIH0gPSBhd2FpdCBidWlsZEhlYWx0aFJlc3BvbnNlKG9wdGlvbnMpO1xuICAgIGlmIChoYXNEaXNjb25uZWN0ZWQpIHtcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyA9ICd1bmhlYWx0aHknO1xuICAgICAgc2VuZEVycm9yKHJlcywgNTAzLCAnU2VydmljZSBub3QgcmVhZHknLCB1bmRlZmluZWQsIHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VuZFN1Y2Nlc3MocmVzLCAyMDAsIHJlc3BvbnNlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBoZWFsdGgvcmVhZGluZXNzIHJvdXRlciBleHBvc2luZzpcbiAqIC0gR0VUIC9oZWFsdGgg4oCUIGxpdmVuZXNzIChhbHdheXMgMjAwIHVubGVzcyBwcm9jZXNzIGlzIGRlYWQpXG4gKiAtIEdFVCAvcmVhZHkgIOKAlCByZWFkaW5lc3MgKDUwMyBpZiBkZXBlbmRlbmNpZXMgYXJlIGRpc2Nvbm5lY3RlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXBwLnVzZShjcmVhdGVIZWFsdGhSb3V0ZXIoeyBzZXJ2aWNlTmFtZTogJ3BsdWdpbicgfSkpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIZWFsdGhSb3V0ZXIob3B0aW9uczogSGVhbHRoQ2hlY2tPcHRpb25zKTogUm91dGVyIHtcbiAgY29uc3Qgcm91dGVyID0gUm91dGVyKCk7XG4gIHJvdXRlci5nZXQoJy9oZWFsdGgnLCBjcmVhdGVIZWFsdGhDaGVjayhvcHRpb25zKSk7XG4gIHJvdXRlci5nZXQoJy9yZWFkeScsIGNyZWF0ZVJlYWRpbmVzc0NoZWNrKG9wdGlvbnMpKTtcbiAgcmV0dXJuIHJvdXRlcjtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  export { createHealthCheck, createReadinessCheck, createHealthRouter, } from './health.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIGNyZWF0ZUhlYWx0aENoZWNrLFxuICBjcmVhdGVSZWFkaW5lc3NDaGVjayxcbiAgY3JlYXRlSGVhbHRoUm91dGVyLFxufSBmcm9tICcuL2hlYWx0aC5qcyc7XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb3V0ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0IHtcbiAgY3JlYXRlSGVhbHRoQ2hlY2ssXG4gIGNyZWF0ZVJlYWRpbmVzc0NoZWNrLFxuICBjcmVhdGVIZWFsdGhSb3V0ZXIsXG59IGZyb20gJy4vaGVhbHRoLmpzJztcbiJdfQ==
@@ -74,4 +74,4 @@ export function aiCallWeight(selection) {
74
74
  }
75
75
  return best ? best.weight : 1;
76
76
  }
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2FsbC13ZWlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvYWktY2FsbC13ZWlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFOUMsaUdBQWlHO0FBQ2pHLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUV0Qzs7Ozs7R0FLRztBQUNILE1BQU0sZ0JBQWdCLEdBQXFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBRWxHOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBdUI7SUFDekQsTUFBTSxHQUFHLEdBQTJCLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVELElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMxQyxJQUFJLE1BQWUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUM1RSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFpQyxDQUFDLEVBQUUsQ0FBQztRQUM3RSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztZQUNyRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMxRixTQUFTO1FBQ1gsQ0FBQztRQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELElBQUksTUFBZ0YsQ0FBQztBQUVyRixTQUFTLGNBQWM7SUFDckIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRztRQUFFLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUN2RixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDeEIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxTQUFnRDtJQUMzRSxNQUFNLE9BQU8sR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNqQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xELElBQUksUUFBUSxJQUFJLE9BQU87UUFBRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUUsQ0FBQztJQUNuRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLElBQUksSUFBaUQsQ0FBQztJQUN0RCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BELElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDL0csQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBPUEVOQUlfQ09NUEFUSUJMRV9QUk9WSURFUl9JRCB9IGZyb20gJy4uL2NvbnN0YW50cy9haS1wcm92aWRlcnMuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdhaS1jYWxsLXdlaWdodCcpO1xuXG4vKiogTGFyZ2VzdCB3ZWlnaHQgb25lIG1vZGVsIG1heSBjYXJyeSDigJQgb25lIGNhbGwgY2FuIG5ldmVyIHJlc2VydmUgbW9yZSB0aGFuIHRoaXMgbWFueSB1bml0cy4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQUlfQ0FMTF9XRUlHSFQgPSAxMDA7XG5cbi8qKlxuICogQnVpbHQtaW4gd2VpZ2h0cywgdW5kZXIgd2hhdGV2ZXIgYEFJX01PREVMX1dFSUdIVFNgIHNldHMuIFRoZSBzZWxmLWhvc3RlZFxuICogT3BlbkFJLWNvbXBhdGlibGUgcHJvdmlkZXIgKHRoZSBpbi1jbHVzdGVyIGBhc2stbW9kZWxgKSBydW5zIG9uIGhhcmR3YXJlIHRoZVxuICogb3BlcmF0b3IgYWxyZWFkeSBwYXlzIGZvciwgc28gYSBjYWxsIG9uIGl0IHNwZW5kcyBOTyBgYWlDYWxsc2AgdW5pdCBieSBkZWZhdWx0O1xuICogc2V0IGB7XCJvcGVuYWktY29tcGF0aWJsZVwiOiAxfWAgdG8gbWV0ZXIgaXQgbGlrZSBhbnkgb3RoZXIgbW9kZWwuXG4gKi9cbmNvbnN0IEJVSUxUX0lOX1dFSUdIVFM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+ID0geyBbT1BFTkFJX0NPTVBBVElCTEVfUFJPVklERVJfSURdOiAwIH07XG5cbi8qKlxuICogUGFyc2UgYEFJX01PREVMX1dFSUdIVFNgIOKAlCBhIEpTT04gb2JqZWN0IG9mIGBrZXkg4oaSIGludGVnZXIgd2VpZ2h0YCDigJQgaW50b1xuICogbG93ZXItY2FzZWQgZW50cmllcy4gQSBtYWxmb3JtZWQgdmFsdWUgaXMgSUdOT1JFRCAobG9nZ2VkKSwgbmV2ZXIgZmF0YWw6IHRoZVxuICogd2VpZ2h0cyBhcmUgYW4gb3B0aW9uYWwgcHJpY2luZyBsZXZlciBhbmQgZXZlcnkgY2FsbCBzdGlsbCBtZXRlcnMgYXQgMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWlNb2RlbFdlaWdodHMocmF3OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0geyAuLi5CVUlMVF9JTl9XRUlHSFRTIH07XG4gIGlmICghcmF3IHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gb3V0O1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgfSBjYXRjaCB7XG4gICAgbG9nZ2VyLndhcm4oJ0FJX01PREVMX1dFSUdIVFMgaXMgbm90IHZhbGlkIEpTT047IGV2ZXJ5IG1vZGVsIHdlaWdocyAxJyk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgIGxvZ2dlci53YXJuKCdBSV9NT0RFTF9XRUlHSFRTIG11c3QgYmUgYSBKU09OIG9iamVjdDsgZXZlcnkgbW9kZWwgd2VpZ2hzIDEnKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX0FJX0NBTExfV0VJR0hUKSB7XG4gICAgICBsb2dnZXIud2FybignQUlfTU9ERUxfV0VJR0hUUyBlbnRyeSBpZ25vcmVkICh3ZWlnaHQgbXVzdCBiZSBhbiBpbnRlZ2VyIDAuLjEwMCknLCB7IGtleSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvdXRba2V5LnRyaW0oKS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmxldCBjYWNoZWQ6IHsgcmF3OiBzdHJpbmcgfCB1bmRlZmluZWQ7IHdlaWdodHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfSB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gY3VycmVudFdlaWdodHMoKTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LkFJX01PREVMX1dFSUdIVFM7XG4gIGlmICghY2FjaGVkIHx8IGNhY2hlZC5yYXcgIT09IHJhdykgY2FjaGVkID0geyByYXcsIHdlaWdodHM6IHBhcnNlQWlNb2RlbFdlaWdodHMocmF3KSB9O1xuICByZXR1cm4gY2FjaGVkLndlaWdodHM7XG59XG5cbi8qKlxuICogSG93IG1hbnkgYGFpQ2FsbHNgIHVuaXRzIG9uZSBjYWxsIG9uIGB7IHByb3ZpZGVyLCBtb2RlbElkIH1gIHJlc2VydmVzLlxuICpcbiAqIE1PREVMLUNMQVNTIFdFSUdIVElORyBpcyBPRkYgYnkgZGVmYXVsdDogd2l0aCBgQUlfTU9ERUxfV0VJR0hUU2AgdW5zZXQgZXZlcnlcbiAqIG1vZGVsIHdlaWdocyAxIOKAlCBleGNlcHQgdGhlIHNlbGYtaG9zdGVkIHByb3ZpZGVyLCB3aGljaCB3ZWlnaHMgMCAoc2VlXG4gKiB7QGxpbmsgQlVJTFRfSU5fV0VJR0hUU30pLiBNYXRjaGluZywgZmlyc3QgaGl0IHdpbnM6XG4gKiAgMS4gYSBrZXkgZXF1YWwgdG8gdGhlIFBST1ZJREVSIGlkIChgXCJvcGVuYWktY29tcGF0aWJsZVwiOiAwYCwgYFwiYmVkcm9ja1wiOiAyYCk7XG4gKiAgMi4gdGhlIExPTkdFU1Qga2V5IGNvbnRhaW5lZCBpbiB0aGUgbW9kZWwgaWQgKGBcIm9wdXNcIjogM2AgbWF0Y2hlc1xuICogICAgIGBjbGF1ZGUtb3B1cy00LTFgOyBgXCJzb25uZXRcIjogMWAsIGBcImhhaWt1XCI6IDFgKS5cbiAqIE5vIG1hdGNoIOKGkiAxLiBBIHdlaWdodCBvZiAwIG1lYW5zIHRoZSBjYWxsIHJlc2VydmVzIG5vdGhpbmcgKGl0IGlzIHN0aWxsXG4gKiByZWNvcmRlZCBpbiB0aGUgdXNhZ2UgbGVkZ2VyIHdpdGggaXRzIHRva2VucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhaUNhbGxXZWlnaHQoc2VsZWN0aW9uOiB7IHByb3ZpZGVyOiBzdHJpbmc7IG1vZGVsSWQ6IHN0cmluZyB9KTogbnVtYmVyIHtcbiAgY29uc3Qgd2VpZ2h0cyA9IGN1cnJlbnRXZWlnaHRzKCk7XG4gIGNvbnN0IHByb3ZpZGVyID0gc2VsZWN0aW9uLnByb3ZpZGVyLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChwcm92aWRlciBpbiB3ZWlnaHRzKSByZXR1cm4gd2VpZ2h0c1twcm92aWRlcl0hO1xuICBjb25zdCBtb2RlbCA9IHNlbGVjdGlvbi5tb2RlbElkLnRvTG93ZXJDYXNlKCk7XG4gIGxldCBiZXN0OiB7IGtleTogc3RyaW5nOyB3ZWlnaHQ6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IFtrZXksIHdlaWdodF0gb2YgT2JqZWN0LmVudHJpZXMod2VpZ2h0cykpIHtcbiAgICBpZiAoa2V5Lmxlbmd0aCA+IDAgJiYgbW9kZWwuaW5jbHVkZXMoa2V5KSAmJiAoIWJlc3QgfHwga2V5Lmxlbmd0aCA+IGJlc3Qua2V5Lmxlbmd0aCkpIGJlc3QgPSB7IGtleSwgd2VpZ2h0IH07XG4gIH1cbiAgcmV0dXJuIGJlc3QgPyBiZXN0LndlaWdodCA6IDE7XG59XG4iXX0=
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY2FsbC13ZWlnaHQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9haS1jYWxsLXdlaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU5QyxpR0FBaUc7QUFDakcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBcUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFFbEc7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUF1QjtJQUN6RCxNQUFNLEdBQUcsR0FBMkIsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDNUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQzFDLElBQUksTUFBZSxDQUFDO0lBQ3BCLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDeEUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0QsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0UsTUFBTSxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWlDLENBQUMsRUFBRSxDQUFDO1FBQzdFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUVBQW1FLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFGLFNBQVM7UUFDWCxDQUFDO1FBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsSUFBSSxNQUFnRixDQUFDO0FBRXJGLFNBQVMsY0FBYztJQUNyQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDO0lBQ3pDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHO1FBQUUsTUFBTSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3ZGLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQWdEO0lBQzNFLE1BQU0sT0FBTyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEQsSUFBSSxRQUFRLElBQUksT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBRSxDQUFDO0lBQ25ELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsSUFBSSxJQUFpRCxDQUFDO0lBQ3RELEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEQsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMvRyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IE9QRU5BSV9DT01QQVRJQkxFX1BST1ZJREVSX0lEIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FpLXByb3ZpZGVycy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2FpLWNhbGwtd2VpZ2h0Jyk7XG5cbi8qKiBMYXJnZXN0IHdlaWdodCBvbmUgbW9kZWwgbWF5IGNhcnJ5IOKAlCBvbmUgY2FsbCBjYW4gbmV2ZXIgcmVzZXJ2ZSBtb3JlIHRoYW4gdGhpcyBtYW55IHVuaXRzLiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9BSV9DQUxMX1dFSUdIVCA9IDEwMDtcblxuLyoqXG4gKiBCdWlsdC1pbiB3ZWlnaHRzLCB1bmRlciB3aGF0ZXZlciBgQUlfTU9ERUxfV0VJR0hUU2Agc2V0cy4gVGhlIHNlbGYtaG9zdGVkXG4gKiBPcGVuQUktY29tcGF0aWJsZSBwcm92aWRlciAodGhlIGluLWNsdXN0ZXIgYGFzay1tb2RlbGApIHJ1bnMgb24gaGFyZHdhcmUgdGhlXG4gKiBvcGVyYXRvciBhbHJlYWR5IHBheXMgZm9yLCBzbyBhIGNhbGwgb24gaXQgc3BlbmRzIE5PIGBhaUNhbGxzYCB1bml0IGJ5IGRlZmF1bHQ7XG4gKiBzZXQgYHtcIm9wZW5haS1jb21wYXRpYmxlXCI6IDF9YCB0byBtZXRlciBpdCBsaWtlIGFueSBvdGhlciBtb2RlbC5cbiAqL1xuY29uc3QgQlVJTFRfSU5fV0VJR0hUUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4gPSB7IFtPUEVOQUlfQ09NUEFUSUJMRV9QUk9WSURFUl9JRF06IDAgfTtcblxuLyoqXG4gKiBQYXJzZSBgQUlfTU9ERUxfV0VJR0hUU2Ag4oCUIGEgSlNPTiBvYmplY3Qgb2YgYGtleSDihpIgaW50ZWdlciB3ZWlnaHRgIOKAlCBpbnRvXG4gKiBsb3dlci1jYXNlZCBlbnRyaWVzLiBBIG1hbGZvcm1lZCB2YWx1ZSBpcyBJR05PUkVEIChsb2dnZWQpLCBuZXZlciBmYXRhbDogdGhlXG4gKiB3ZWlnaHRzIGFyZSBhbiBvcHRpb25hbCBwcmljaW5nIGxldmVyIGFuZCBldmVyeSBjYWxsIHN0aWxsIG1ldGVycyBhdCAxLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBaU1vZGVsV2VpZ2h0cyhyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7IC4uLkJVSUxUX0lOX1dFSUdIVFMgfTtcbiAgaWYgKCFyYXcgfHwgcmF3LnRyaW0oKSA9PT0gJycpIHJldHVybiBvdXQ7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICB9IGNhdGNoIHtcbiAgICBsb2dnZXIud2FybignQUlfTU9ERUxfV0VJR0hUUyBpcyBub3QgdmFsaWQgSlNPTjsgZXZlcnkgbW9kZWwgd2VpZ2hzIDEnKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG4gIGlmIChwYXJzZWQgPT09IG51bGwgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0FJX01PREVMX1dFSUdIVFMgbXVzdCBiZSBhIEpTT04gb2JqZWN0OyBldmVyeSBtb2RlbCB3ZWlnaHMgMScpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfQUlfQ0FMTF9XRUlHSFQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdBSV9NT0RFTF9XRUlHSFRTIGVudHJ5IGlnbm9yZWQgKHdlaWdodCBtdXN0IGJlIGFuIGludGVnZXIgMC4uMTAwKScsIHsga2V5IH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIG91dFtrZXkudHJpbSgpLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxubGV0IGNhY2hlZDogeyByYXc6IHN0cmluZyB8IHVuZGVmaW5lZDsgd2VpZ2h0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB9IHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBjdXJyZW50V2VpZ2h0cygpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnYuQUlfTU9ERUxfV0VJR0hUUztcbiAgaWYgKCFjYWNoZWQgfHwgY2FjaGVkLnJhdyAhPT0gcmF3KSBjYWNoZWQgPSB7IHJhdywgd2VpZ2h0czogcGFyc2VBaU1vZGVsV2VpZ2h0cyhyYXcpIH07XG4gIHJldHVybiBjYWNoZWQud2VpZ2h0cztcbn1cblxuLyoqXG4gKiBIb3cgbWFueSBgYWlDYWxsc2AgdW5pdHMgb25lIGNhbGwgb24gYHsgcHJvdmlkZXIsIG1vZGVsSWQgfWAgcmVzZXJ2ZXMuXG4gKlxuICogTU9ERUwtQ0xBU1MgV0VJR0hUSU5HIGlzIE9GRiBieSBkZWZhdWx0OiB3aXRoIGBBSV9NT0RFTF9XRUlHSFRTYCB1bnNldCBldmVyeVxuICogbW9kZWwgd2VpZ2hzIDEg4oCUIGV4Y2VwdCB0aGUgc2VsZi1ob3N0ZWQgcHJvdmlkZXIsIHdoaWNoIHdlaWdocyAwIChzZWVcbiAqIHtAbGluayBCVUlMVF9JTl9XRUlHSFRTfSkuIE1hdGNoaW5nLCBmaXJzdCBoaXQgd2luczpcbiAqICAxLiBhIGtleSBlcXVhbCB0byB0aGUgUFJPVklERVIgaWQgKGBcIm9wZW5haS1jb21wYXRpYmxlXCI6IDBgLCBgXCJiZWRyb2NrXCI6IDJgKTtcbiAqICAyLiB0aGUgTE9OR0VTVCBrZXkgY29udGFpbmVkIGluIHRoZSBtb2RlbCBpZCAoYFwib3B1c1wiOiAzYCBtYXRjaGVzXG4gKiAgICAgYGNsYXVkZS1vcHVzLTQtMWA7IGBcInNvbm5ldFwiOiAxYCwgYFwiaGFpa3VcIjogMWApLlxuICogTm8gbWF0Y2gg4oaSIDEuIEEgd2VpZ2h0IG9mIDAgbWVhbnMgdGhlIGNhbGwgcmVzZXJ2ZXMgbm90aGluZyAoaXQgaXMgc3RpbGxcbiAqIHJlY29yZGVkIGluIHRoZSB1c2FnZSBsZWRnZXIgd2l0aCBpdHMgdG9rZW5zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFpQ2FsbFdlaWdodChzZWxlY3Rpb246IHsgcHJvdmlkZXI6IHN0cmluZzsgbW9kZWxJZDogc3RyaW5nIH0pOiBudW1iZXIge1xuICBjb25zdCB3ZWlnaHRzID0gY3VycmVudFdlaWdodHMoKTtcbiAgY29uc3QgcHJvdmlkZXIgPSBzZWxlY3Rpb24ucHJvdmlkZXIudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHByb3ZpZGVyIGluIHdlaWdodHMpIHJldHVybiB3ZWlnaHRzW3Byb3ZpZGVyXSE7XG4gIGNvbnN0IG1vZGVsID0gc2VsZWN0aW9uLm1vZGVsSWQudG9Mb3dlckNhc2UoKTtcbiAgbGV0IGJlc3Q6IHsga2V5OiBzdHJpbmc7IHdlaWdodDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgW2tleSwgd2VpZ2h0XSBvZiBPYmplY3QuZW50cmllcyh3ZWlnaHRzKSkge1xuICAgIGlmIChrZXkubGVuZ3RoID4gMCAmJiBtb2RlbC5pbmNsdWRlcyhrZXkpICYmICghYmVzdCB8fCBrZXkubGVuZ3RoID4gYmVzdC5rZXkubGVuZ3RoKSkgYmVzdCA9IHsga2V5LCB3ZWlnaHQgfTtcbiAgfVxuICByZXR1cm4gYmVzdCA/IGJlc3Qud2VpZ2h0IDogMTtcbn1cbiJdfQ==
@@ -129,4 +129,4 @@ export function stopDeadmanHeartbeat() {
129
129
  clearInterval(deadmanTimer);
130
130
  deadmanTimer = undefined;
131
131
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtZGVsaXZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvYWxlcnQtZGVsaXZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBK0I5QyxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU87UUFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQztRQUMvQyxVQUFVLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQztLQUN0RCxDQUFDO0FBQ0osQ0FBQztBQVFELGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBd0I7SUFDekQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7SUFDN0IsT0FBTztRQUNMLEtBQUssRUFBRSxpQkFBaUIsRUFB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LFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEcsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGlFQUFpRTtZQUNqRSxXQUFXLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBQ0YsOEVBQThFO0lBQzlFLHlFQUF5RTtJQUN6RSx1QkFBdUI7SUFDdkIsWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5RCxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNaLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsb0JBQW9CO0lBQ2xDLElBQUksWUFBWTtRQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGVyZSBhIHBsYXRmb3JtLXdpZGUgYWxlcnQgaXMgbWVhbnQgdG8gR08sIGFzIGRlY2xhcmVkIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVHdvIGRlc3RpbmF0aW9ucywgd2l0aCBkaWZmZXJlbnQgam9icy4gVGhlIG9wcy10ZWFtIFNsYWNrIGNoYW5uZWxzIGFyZSB0aGVcbiAqIGJhc2VsaW5lOiBldmVyeXRoaW5nIGNyaXRpY2FsIG9yIHdhcm5pbmcgbGFuZHMgdGhlcmUgYW5kIHRoYXQgaXMgd2hlcmUgdGhlXG4gKiB0aHJlYWQsIHRoZSBjb250ZXh0IGFuZCB0aGUgaGFuZG92ZXIgbGl2ZS4gVGhlIHBhZ2VyIGlzIGFkZGl0aXZlIGFuZCBuYXJyb3cg4oCUXG4gKiBvbmx5IGBzZXZlcml0eTogY3JpdGljYWxgICsgYGNvbXBvbmVudDogc3VwcG9ydGAsIGJlY2F1c2UgdGhhdCBpcyB0aGUgb25lXG4gKiBhbGVydCBiYWNraW5nIGEgY29udHJhY3R1YWwgb3V0LW9mLWhvdXJzIHByb21pc2UuXG4gKlxuICogV0hBVCBUSElTIE1PRFVMRSBDQU4gQU5EIENBTk5PVCBETywgYmVjYXVzZSB0aGUgbGltaXQgaXMgbm90IG9idmlvdXMuXG4gKiBgY29uZmlnL2FsZXJ0bWFuYWdlci9hbGVydG1hbmFnZXIueW1sYCBpcyBpbiB0aGUgZGVwbG95IGNvbnRyYWN0J3NcbiAqIFJFUVVJUkVEX0lERU5USUNBTCBzZXQgYW5kIGFzc2VydGVkIGJ5dGUtaWRlbnRpY2FsIGFjcm9zcyB0YXJnZXRzLCBhbmRcbiAqIEFsZXJ0bWFuYWdlciBoYXMgbm8gdGVtcGxhdGluZy4gU28gTk9USElORyBoZXJlIHJlbW92ZXMgYSByZWNlaXZlciBvciBhIHJvdXRlXG4gKiDigJQgdGhlIHJvdXRlcyBhcmUgYWx3YXlzIHByZXNlbnQuIFdoYXQgdGhlc2UgZmxhZ3MgZG8gaXM6XG4gKlxuICogIC0gZGVjbGFyZSBJTlRFTlQsIHNvIFwid2UgZG8gbm90IHVzZSBTbGFja1wiIGlzIGEgc3RhdGVkIGRlY2lzaW9uIHJhdGhlciB0aGFuXG4gKiAgICBzb21ldGhpbmcgaW5mZXJyZWQgZnJvbSB0d28gZW1wdHkgVVJMcyB0aGF0IGxvb2sgbGlrZSBhbiBvdmVyc2lnaHQ7XG4gKiAgLSBnYXRlIHRoZSBkZXBsb3ktdGltZSBjaGVjayAoYHBiX2NoZWNrX2FsZXJ0X2RlbGl2ZXJ5YCksIHdoaWNoIGlzIHdoYXQgdHVybnNcbiAqICAgIGEgaGFsZi1jb25maWd1cmVkIGNoYW5uZWwgaW50byBhIHJlZnVzZWQgZGVwbG95IGluc3RlYWQgb2YgYSAzYW0gc3VycHJpc2U7XG4gKiAgLSBkcml2ZSB0aGUgcG9zdHVyZSBnYXVnZXMgYmVsb3csIHNvIGEgZGFzaGJvYXJkIGNhbiBhbnN3ZXIgXCJpcyBhbnlvbmVcbiAqICAgIGFjdHVhbGx5IGdvaW5nIHRvIGhlYXIgdGhpc1wiIHdpdGhvdXQgcmVhZGluZyBmb3VyIFlBTUwgZmlsZXMuXG4gKlxuICogVGhlIFVSTFMgVEhFTVNFTFZFUyBBUkUgTk9UIEhFUkUsIGFuZCB0aGF0IGlzIGRlbGliZXJhdGUuIEEgU2xhY2sgd2ViaG9vayBVUkxcbiAqIGlzIGEgYmVhcmVyIGNyZWRlbnRpYWw6IGFueW9uZSBob2xkaW5nIGl0IGNhbiBwb3N0IHRvIHRoZSBjaGFubmVsLiBBbGVydG1hbmFnZXJcbiAqIHJlYWRzIHRoZW0gZnJvbSBhIG1vdW50ZWQgU2VjcmV0IHZpYSBgYXBpX3VybF9maWxlYCwgcGVyIG5vdGlmaWNhdGlvbiwgc28gdGhleVxuICogbmV2ZXIgZW50ZXIgYSBDb25maWdNYXAgYW5kIG5ldmVyIGVudGVyIHRoaXMgcHJvY2Vzcy4gUGxhdGZvcm0ga25vd3MgV0hFVEhFUlxuICogU2xhY2sgZGVsaXZlcnkgaXMgZGVjbGFyZWQgb247IGl0IGRvZXMgbm90IGtub3csIGFuZCBkb2VzIG5vdCBuZWVkLCB3aGVyZSB0by5cbiAqIFRoZSBwYWdlcidzIHJvdXRpbmcga2V5IGlzIGRpZmZlcmVudCDigJQgdGhhdCBvbmUgSVMgY29uc3VtZWQgYnkgdGhpcyBwcm9jZXNzLCBzb1xuICogaXQgbGl2ZXMgaW4gYHBhZ2VyRHV0eUNvbmZpZygpYC5cbiAqL1xuXG5pbXBvcnQgeyBwYWdlckR1dHlDb25maWcgfSBmcm9tICcuL3BhZ2VyZHV0eS5qcyc7XG5pbXBvcnQgeyBlbnZCb29sLCBlbnZJbnQsIGVudlN0ciB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIsIGVtaXRHYXVnZSB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IHNhZmVGZXRjaCB9IGZyb20gJy4uL3V0aWxzL3NzcmYuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2FsZXJ0LWRlbGl2ZXJ5Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2xhY2tBbGVydHNDb25maWcge1xuICAvKipcbiAgICogV2hldGhlciBvcHMtdGVhbSBTbGFjayBkZWxpdmVyeSBpcyBERUNMQVJFRCBvbi5cbiAgICpcbiAgICogRGVmYXVsdHMgRkFMU0UsIG1hdGNoaW5nIGBPTkNBTExfRU5BQkxFRGA6IGJvdGggZGVzdGluYXRpb25zIGFyZSBvcHQtaW4sIHNvXG4gICAqIGEgZGVwbG95bWVudCBzdGF0ZXMgd2hhdCBpdCB3YW50cyByYXRoZXIgdGhhbiBpbmhlcml0aW5nIGEgY2hhbm5lbCBpdCBtYXlcbiAgICogbm90IGhhdmUuIE5vdGUgd2hhdCB0aGlzIGZsYWcgZG9lcyBOT1QgZG8g4oCUIGl0IGNhbm5vdCByZW1vdmUgdGhlIFNsYWNrXG4gICAqIHJlY2VpdmVycywgYmVjYXVzZSBgYWxlcnRtYW5hZ2VyLnltbGAgaXMgYXNzZXJ0ZWQgYnl0ZS1pZGVudGljYWwgYWNyb3NzXG4gICAqIHRhcmdldHMgYW5kIEFsZXJ0bWFuYWdlciBoYXMgbm8gdGVtcGxhdGluZy4gQSBkZXBsb3ltZW50IHdpdGggdGhlIGZsYWcgb2ZmXG4gICAqIGFuZCByZWFsIFVSTHMgaW4gaXRzIFNlY3JldCBzdGlsbCBkZWxpdmVycyB0byBTbGFjay5cbiAgICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIFNsYWNrIGRlbGl2ZXJ5IENBTiBoYXBwZW4g4oCUIGkuZS4gdGhlIHdlYmhvb2sgVVJMcyBhcmUgbm9uLWVtcHR5LlxuICAgKlxuICAgKiBEZXJpdmVkIGF0IGRlcGxveSB0aW1lIChgcGJfY2hlY2tfYWxlcnRfZGVsaXZlcnlgIHdyaXRlcyBpdCkgYmVjYXVzZSB0aGVcbiAgICogVVJMcyBsaXZlIGluIEFsZXJ0bWFuYWdlcidzIFNlY3JldCBhbmQgbmV2ZXIgZW50ZXIgdGhpcyBwcm9jZXNzOiBhIFNsYWNrXG4gICAqIHdlYmhvb2sgVVJMIGlzIGEgYmVhcmVyIGNyZWRlbnRpYWwsIHJlYWQgcGVyIG5vdGlmaWNhdGlvbiB2aWFcbiAgICogYGFwaV91cmxfZmlsZWAuIFBsYXRmb3JtIHRoZXJlZm9yZSBjYW5ub3QgaW5zcGVjdCB0aGVtIGFuZCBtdXN0IGJlIHRvbGQuXG4gICAqXG4gICAqIFNFUEFSQVRFIEZST00gYGVuYWJsZWRgIGZvciB0aGUgc2FtZSByZWFzb24gdGhlIHBhZ2VyIHNwbGl0cyB0aGUgdHdvLCBhbmRcbiAgICogdGhlIGRpc3RpbmN0aW9uIGlzIHdoYXQga2VlcHMgYEFsZXJ0RGVsaXZlcnlEaXNhYmxlZGAgaG9uZXN0LiBLZXlpbmcgdGhhdFxuICAgKiBhbGVydCBvbiB0aGUgREVDTEFSQVRJT04gd291bGQgcGFnZSBldmVyeSBkZXBsb3ltZW50IHRoYXQgbGVmdCB0aGUgZmxhZyBhdFxuICAgKiBpdHMgZGVmYXVsdCB3aGlsZSBTbGFjayB3YXMgcXVpZXRseSB3b3JraW5nIOKAlCBhIGZhbHNlIGFsYXJtIG9uIGEgaGVhbHRoeVxuICAgKiBzeXN0ZW0sIHdoaWNoIGlzIHRoZSBmYXN0ZXN0IHdheSB0byB0ZWFjaCBwZW9wbGUgdG8gaWdub3JlIGFuIGFsZXJ0LlxuICAgKi9cbiAgY29uZmlndXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsYWNrQWxlcnRzQ29uZmlnKCk6IFNsYWNrQWxlcnRzQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBlbmFibGVkOiBlbnZCb29sKCdTTEFDS19BTEVSVFNfRU5BQkxFRCcsIGZhbHNlKSxcbiAgICBjb25maWd1cmVkOiBlbnZCb29sKCdTTEFDS19BTEVSVFNfQ09ORklHVVJFRCcsIGZhbHNlKSxcbiAgfTtcbn1cblxuLyoqIEJvdGggZGVzdGluYXRpb25zLCByZXNvbHZlZCB0b2dldGhlciDigJQgd2hhdCBgcmVwb3J0QWxlcnREZWxpdmVyeVBvc3R1cmVgIHJlYWRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbGVydERlbGl2ZXJ5Q29uZmlnIHtcbiAgc2xhY2s6IFNsYWNrQWxlcnRzQ29uZmlnO1xuICBwYWdlcjogeyBlbmFibGVkOiBib29sZWFuOyBjb25maWd1cmVkOiBib29sZWFuIH07XG59XG5cbi8qKiBXaGV0aGVyIEFOWSBkZXN0aW5hdGlvbiBjb3VsZCBhY3R1YWxseSBkZWxpdmVyIOKAlCByZWFsaXR5LCBub3QgZGVjbGFyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY2FuRGVsaXZlckFueXdoZXJlKGNmZzogQWxlcnREZWxpdmVyeUNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2ZnLnNsYWNrLmNvbmZpZ3VyZWQgfHwgKGNmZy5wYWdlci5lbmFibGVkICYmIGNmZy5wYWdlci5jb25maWd1cmVkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsZXJ0RGVsaXZlcnlDb25maWcoKTogQWxlcnREZWxpdmVyeUNvbmZpZyB7XG4gIGNvbnN0IHBkID0gcGFnZXJEdXR5Q29uZmlnKCk7XG4gIHJldHVybiB7XG4gICAgc2xhY2s6IHNsYWNrQWxlcnRzQ29uZmlnKCksXG4gICAgLy8gYGNvbmZpZ3VyZWRgIHNlcGFyYXRlbHkgZnJvbSBgZW5hYmxlZGA6IGVuYWJsZWQtd2l0aG91dC1hLWtleSBpcyB0aGVcbiAgICAvLyBoYWxmLWNvbmZpZ3VyZWQgc3RhdGUgd29ydGggc2VlaW5nLCBhbmQgaXQgaXMgaW52aXNpYmxlIGlmIHRoZSB0d28gYXJlXG4gICAgLy8gY29sbGFwc2VkIGludG8gb25lIGJvb2xlYW4uXG4gICAgcGFnZXI6IHsgZW5hYmxlZDogcGQuZW5hYmxlZCwgY29uZmlndXJlZDogcGQucm91dGluZ0tleS5sZW5ndGggPiAwIH0sXG4gIH07XG59XG5cbi8qKlxuICogUHVibGlzaCB0aGUgZGVsaXZlcnkgcG9zdHVyZSBhcyBnYXVnZXMsIGFuZCBzaG91dCBpZiBpdCBpcyBpbmNvaGVyZW50LlxuICpcbiAqIENhbGxlZCBvbmNlIGF0IGJvb3QuIEdhdWdlcyByYXRoZXIgdGhhbiBjb3VudGVycyBiZWNhdXNlIHRoZXNlIGFyZSBTVEFURVMgb2ZcbiAqIHRoZSBkZXBsb3ltZW50IOKAlCBhbiBvcGVyYXRvciB3YW50cyBcIndpbGwgYW55b25lIGhlYXIgYW4gYWxlcnQgcmlnaHQgbm93XCIsIG5vdFxuICogaG93IG1hbnkgdGltZXMgYSBwcm9jZXNzIHN0YXJ0ZWQgYW5kIHdvbmRlcmVkLlxuICpcbiAqIFRoZSB2YWx1ZSBvZiBoYXZpbmcgdGhpcyBhdCBhbGw6IGJlZm9yZSBpdCwgYW5zd2VyaW5nIFwiZG9lcyB0aGlzIGRlcGxveW1lbnRcbiAqIHBhZ2UgYW55b25lP1wiIG1lYW50IHJlYWRpbmcgYC5lbnZgLCB0d28gU2VjcmV0cyBhbmQgZm91ciBjb3BpZXMgb2ZcbiAqIGBhbGVydG1hbmFnZXIueW1sYC4gQSBkZXBsb3ltZW50IGNhbiBub3cgYWxlcnQgb24gaXRzIG93biBpbmFiaWxpdHkgdG8gYWxlcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnRBbGVydERlbGl2ZXJ5UG9zdHVyZShjZmc6IEFsZXJ0RGVsaXZlcnlDb25maWcgPSBhbGVydERlbGl2ZXJ5Q29uZmlnKCkpOiB2b2lkIHtcbiAgZW1pdEdhdWdlKCdhbGVydF9kZWxpdmVyeV9lbmFibGVkJywgeyBjaGFubmVsOiAnc2xhY2snIH0sIGNmZy5zbGFjay5lbmFibGVkID8gMSA6IDApO1xuICBlbWl0R2F1Z2UoJ2FsZXJ0X2RlbGl2ZXJ5X2VuYWJsZWQnLCB7IGNoYW5uZWw6ICdwYWdlcicgfSwgY2ZnLnBhZ2VyLmVuYWJsZWQgPyAxIDogMCk7XG4gIGVtaXRHYXVnZSgnYWxlcnRfZGVsaXZlcnlfY29uZmlndXJlZCcsIHsgY2hhbm5lbDogJ3NsYWNrJyB9LCBjZmcuc2xhY2suY29uZmlndXJlZCA/IDEgOiAwKTtcbiAgZW1pdEdhdWdlKCdhbGVydF9kZWxpdmVyeV9jb25maWd1cmVkJywgeyBjaGFubmVsOiAncGFnZXInIH0sIGNmZy5wYWdlci5jb25maWd1cmVkID8gMSA6IDApO1xuXG4gIC8vIEVuYWJsZWQgd2l0aCBubyBjcmVkZW50aWFsOiBzb21lYm9keSBhc2tlZCBmb3IgcGFnaW5nIGFuZCBpcyBub3QgZ2V0dGluZyBpdC5cbiAgLy8gVGhlIGRlcGxveSBjaGVjayByZWZ1c2VzIHRoaXMgY29tYmluYXRpb24sIHNvIHJlYWNoaW5nIGhlcmUgbWVhbnMgaXQgd2FzXG4gIC8vIGNoYW5nZWQgYWZ0ZXIgcHJvdmlzaW9uaW5nIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoZW4gbm9ib2R5IGlzIGxvb2tpbmcuXG4gIGlmIChjZmcucGFnZXIuZW5hYmxlZCAmJiAhY2ZnLnBhZ2VyLmNvbmZpZ3VyZWQpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ09OQ0FMTF9FTkFCTEVEIGlzIHRydWUgYnV0IG5vIFBBR0VSRFVUWV9ST1VUSU5HX0tFWSBpcyBzZXQg4oCUIHN1cHBvcnQgY3JpdGljYWxzIHdpbGwgbm90IHBhZ2UnKTtcbiAgfVxuICAvLyBOb3RoaW5nIENBTiBkZWxpdmVyLiBLZXllZCBvbiByZWFjaGFiaWxpdHkgcmF0aGVyIHRoYW4gb24gdGhlIHR3byBmbGFncyxcbiAgLy8gYmVjYXVzZSB0aGUgZmxhZ3MgYXJlIGRlY2xhcmF0aW9uczogYSBkZXBsb3ltZW50IHRoYXQgbGVmdCBib3RoIGF0IHRoZWlyXG4gIC8vIChmYWxzZSkgZGVmYXVsdHMgd2hpbGUgcmVhbCBTbGFjayBVUkxzIHNpdCBpbiBpdHMgU2VjcmV0IGlzIGRlbGl2ZXJpbmdcbiAgLy8gZmluZSwgYW5kIHdhcm5pbmcgaXQgd291bGQgYmUgYSBsaWUuXG4gIGlmICghY2FuRGVsaXZlckFueXdoZXJlKGNmZykpIHtcbiAgICBsb2dnZXIud2FybignTm8gcGxhdGZvcm0gYWxlcnQgZGVzdGluYXRpb24gaXMgZW5hYmxlZCDigJQgYWxlcnRzIHdpbGwgcmVhY2ggQWxlcnRtYW5hZ2VyIGFuZCBnbyBubyBmdXJ0aGVyJywge1xuICAgICAgaGludDogJ1NMQUNLX0FMRVJUU19FTkFCTEVEIC8gT05DQUxMX0VOQUJMRUQnLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGRlYWQtbWFuIHN3aXRjaDogYSBoZWFydGJlYXQgd2hvc2UgQUJTRU5DRSBpcyB0aGUgYWxlcnQuXG4gKlxuICogRXZlcnkgb3RoZXIgYWxlcnQgaW4gdGhpcyBzeXN0ZW0gZGVwZW5kcyBvbiBzb21ldGhpbmcgaW5zaWRlIGl0IHN0aWxsIHdvcmtpbmcuXG4gKiBUaGlzIG9uZSBpbnZlcnRzIHRoYXQg4oCUIGFuIGV4dGVybmFsIHNlcnZpY2UgZXhwZWN0cyBhIFBPU1Qgb24gYSBzY2hlZHVsZSBhbmRcbiAqIHJhaXNlcyBhbiBpbmNpZGVudCB3aGVuIG9uZSBkb2VzIG5vdCBhcnJpdmUsIHNvIGEgcGxhdGZvcm0gdGhhdCBpcyB3ZWRnZWQsXG4gKiBjcmFzaGVkLCBwYXJ0aXRpb25lZCBvciBuZXZlciBzdGFydGVkIGlzIHJlcG9ydGVkIEJZIElUUyBTSUxFTkNFLiBOb3RoaW5nXG4gKiBpbnNpZGUgYSBicm9rZW4gZGVwbG95bWVudCBoYXMgdG8gbm90aWNlIGl0cyBvd24gYnJva2VubmVzcy5cbiAqXG4gKiBXSFkgSVQgSVMgQlVJTFQgSEVSRSBSQVRIRVIgVEhBTiBCT1VHSFQsIHdoZW4gdGhlIHJlc3Qgb2Ygb24tY2FsbCBkZWxpYmVyYXRlbHlcbiAqIGlzIG5vdDogUGFnZXJEdXR5J3MgaGVhcnRiZWF0IG1vbml0b3JpbmcgaXMgYW4gRXZlbnQgT3JjaGVzdHJhdGlvbiBwYXR0ZXJuIGFuZFxuICogZG9jdW1lbnRlZCBhcyBBSU9wcy1wb3dlcmVkLCBzbyBpdCBtYXkgc2l0IGJlaGluZCBhIHRpZXIgYW5kIGlzIG5vdCBwYXJ0IG9mXG4gKiBFdmVudHMgdjIuIE1vcmUgaW1wb3J0YW50bHkgYSBkZWFkLW1hbiBzd2l0Y2ggaXMgYSBDTE9DSywgbm90IGEgdGVsZWNvbVxuICogcHJvYmxlbSDigJQgdGhlIHRoaW5nIHRoYXQgbWFkZSB0aGUgbGFzdCBtaWxlIHdvcnRoIGJ1eWluZyAoY2FycmllciByZXRyaWVzLFxuICogZGVsaXZlcnkgcmVjZWlwdHMsIGEgM2FtIGZhaWx1cmUgYnVkZ2V0KSBzaW1wbHkgZG9lcyBub3QgYXBwbHkgdG8gc2VuZGluZyBvbmVcbiAqIHJlcXVlc3Qgb24gYW4gaW50ZXJ2YWwuIGBPTkNBTExfREVBRE1BTl9VUkxgIHRoZXJlZm9yZSBwb2ludHMgd2hlcmV2ZXIgdGhlXG4gKiBvcGVyYXRvciBsaWtlczogUGFnZXJEdXR5J3Mgb3JjaGVzdHJhdGlvbiBlbmRwb2ludCwgYSBwdXJwb3NlLWJ1aWx0IGRlYWQtbWFuXG4gKiBzZXJ2aWNlLCBvciBhbiB1cHRpbWUgbW9uaXRvci5cbiAqXG4gKiBUV08gUFJPUEVSVElFUyBXT1JUSCBTVEFUSU5HLCBiZWNhdXNlIHRoZXkgYXJlIHRoZSByZWFzb24gdGhpcyBpcyBzYWZlOlxuICpcbiAqICAtIEl0IGlzIE5PVCBsZWFkZXItbG9ja2VkLiBBIGhlYXJ0YmVhdCBpcyBwZXItcHJvY2VzcyBvbiBwdXJwb3NlOiB3aXRoIHRocmVlXG4gKiAgICByZXBsaWNhcywgdGhlIGV4dGVybmFsIHNlcnZpY2UgaGVhcnMgZnJvbSB3aGljaGV2ZXIgYXJlIGFsaXZlLCBhbmQgc2lsZW5jZVxuICogICAgbWVhbnMgQUxMIG9mIHRoZW0gc3RvcHBlZC4gTGVhZGVyLWxvY2tpbmcgaXQgd291bGQgbWFrZSB0aGUgc3dpdGNoIHJlcG9ydFxuICogICAgdGhlIGxlYWRlcidzIGhlYWx0aCByYXRoZXIgdGhhbiB0aGUgZGVwbG95bWVudCdzIOKAlCBhbmQgd291bGQgbWFrZSBhIFJlZGlzXG4gKiAgICBvdXRhZ2UgbG9vayBpZGVudGljYWwgdG8gYSB0b3RhbCBvdXRhZ2UuXG4gKiAgLSBJdCBmYWlscyBTSUxFTlRMWSBvbiBpdHMgb3duIGVycm9ycywgZGVsaWJlcmF0ZWx5LiBBIGhlYXJ0YmVhdCB0aGF0IGxvZ2dlZFxuICogICAgYW4gZXJyb3IgZXZlcnkgaW50ZXJ2YWwgZHVyaW5nIGEgbmV0d29yayBibGlwIHdvdWxkIGJlIGl0cyBvd24gbm9pc2VcbiAqICAgIHNvdXJjZSwgYW5kIHRoZSBjb25zZXF1ZW5jZSBvZiBhIG1pc3NlZCBiZWF0IGlzIGFscmVhZHkgaGFuZGxlZDogdGhlXG4gKiAgICBleHRlcm5hbCBzZXJ2aWNlIGFsZXJ0cy4gVGhlIG9ubHkgdGhpbmcgaXQgbXVzdCBuZXZlciBkbyBpcyByZXBvcnQgc3VjY2Vzc1xuICogICAgaXQgZGlkIG5vdCBhY2hpZXZlLCB3aGljaCBpcyB3aHkgbm90aGluZyBoZXJlIHN3YWxsb3dzIGEgbm9uLTJ4eC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWFkbWFuQ29uZmlnIHtcbiAgdXJsOiBzdHJpbmc7XG4gIGludGVydmFsTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYWRtYW5Db25maWcoKTogRGVhZG1hbkNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgdXJsOiBlbnZTdHIoJ09OQ0FMTF9ERUFETUFOX1VSTCcsICcnKSxcbiAgICBpbnRlcnZhbE1zOiBlbnZJbnQoJ09OQ0FMTF9ERUFETUFOX0lOVEVSVkFMX01TJywgNjBfMDAwLCB7IG1pbjogMTAwMCB9KSxcbiAgfTtcbn1cblxubGV0IGRlYWRtYW5UaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogU3RhcnQgYmVhdGluZy4gTm8tb3Agd2hlbiBgT05DQUxMX0RFQURNQU5fVVJMYCBpcyB1bnNldCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQ6XG4gKiBhbiB1bmNvbmZpZ3VyZWQgZGVhZC1tYW4gc3dpdGNoIG11c3Qgbm90IGJlYXQgYWdhaW5zdCBub3RoaW5nLCBhbmQgbXVzdCBub3RcbiAqIHByZXRlbmQgaXQgaXMgY292ZXJpbmcgdGhlIGRlcGxveW1lbnQuXG4gKlxuICogUmV0dXJucyB0cnVlIHdoZW4gYSB0aW1lciB3YXMgc3RhcnRlZCwgc28gYSBjYWxsZXIgY2FuIGxvZyB0aGUgcG9zdHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0RGVhZG1hbkhlYXJ0YmVhdChjZmc6IERlYWRtYW5Db25maWcgPSBkZWFkbWFuQ29uZmlnKCkpOiBib29sZWFuIHtcbiAgaWYgKGRlYWRtYW5UaW1lciB8fCAhY2ZnLnVybCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBiZWF0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwID0gYXdhaXQgc2FmZUZldGNoKGNmZy51cmwsIHsgbWV0aG9kOiAnUE9TVCcsIHRpbWVvdXRNczogNTAwMCwgYm9keTogJ3t9JywgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0gfSk7XG4gICAgICBlbWl0Q291bnRlcignb25jYWxsX2RlYWRtYW5fdG90YWwnLCB7IG91dGNvbWU6IHJlc3Aub2sgJiYgIXJlc3AucmVkaXJlY3RlZCA/ICdzZW50JyA6ICdmYWlsZWQnIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ291bnRlZCwgbmV2ZXIgbG9nZ2VkIHBlci1iZWF0IOKAlCBzZWUgdGhlIG1vZHVsZSBub3RlIG9uIG5vaXNlLlxuICAgICAgZW1pdENvdW50ZXIoJ29uY2FsbF9kZWFkbWFuX3RvdGFsJywgeyBvdXRjb21lOiAnZmFpbGVkJyB9KTtcbiAgICB9XG4gIH07XG4gIC8vIGB1bnJlZmAgc28gYSBwZW5kaW5nIGJlYXQgY2Fubm90IGhvbGQgdGhlIHByb2Nlc3Mgb3BlbiBkdXJpbmcgc2h1dGRvd246IHRoZVxuICAvLyBzd2l0Y2ggZXhpc3RzIHRvIHJlcG9ydCB0aGF0IHRoZSBwcm9jZXNzIFNUT1BQRUQsIGFuZCBkZWxheWluZyB0aGF0IGlzXG4gIC8vIHByZWNpc2VseSBiYWNrd2FyZHMuXG4gIGRlYWRtYW5UaW1lciA9IHNldEludGVydmFsKCgpID0+IHZvaWQgYmVhdCgpLCBjZmcuaW50ZXJ2YWxNcyk7XG4gIGRlYWRtYW5UaW1lci51bnJlZigpO1xuICB2b2lkIGJlYXQoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBTdG9wIGJlYXRpbmcg4oCUIGNhbGxlZCBmcm9tIHRoZSB1bmlmaWVkIHNodXRkb3duIHBhdGgsIG5vdCBhIHNpZ25hbCBoYW5kbGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3BEZWFkbWFuSGVhcnRiZWF0KCk6IHZvaWQge1xuICBpZiAoZGVhZG1hblRpbWVyKSBjbGVhckludGVydmFsKGRlYWRtYW5UaW1lcik7XG4gIGRlYWRtYW5UaW1lciA9IHVuZGVmaW5lZDtcbn1cbiJdfQ==
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtZGVsaXZlcnkuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hbGVydC1kZWxpdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFN0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUErQjlDLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDO1FBQy9DLFVBQVUsRUFBRSxPQUFPLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDO0tBQ3RELENBQUM7QUFDSixDQUFDO0FBUUQsaUZBQWlGO0FBQ2pGLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUF3QjtJQUN6RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUM3QixPQUFPO1FBQ0wsS0FBSyxFQUFFLGlCQUFpQixFQUFFO1FBQzFCLHVFQUF1RTtR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Q0FBQztRQUNwRyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsaUVBQWlFO1lBQ2pFLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDLENBQUM7SUFDRiw4RUFBOEU7SUFDOUUseUVBQXlFO0lBQ3pFLHVCQUF1QjtJQUN2QixZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNyQixLQUFLLElBQUksRUFBRSxDQUFDO0lBQ1osT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxvQkFBb0I7SUFDbEMsSUFBSSxZQUFZO1FBQUUsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLFlBQVksR0FBRyxTQUFTLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoZXJlIGEgcGxhdGZvcm0td2lkZSBhbGVydCBpcyBtZWFudCB0byBHTywgYXMgZGVjbGFyZWQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUd28gZGVzdGluYXRpb25zLCB3aXRoIGRpZmZlcmVudCBqb2JzLiBUaGUgb3BzLXRlYW0gU2xhY2sgY2hhbm5lbHMgYXJlIHRoZVxuICogYmFzZWxpbmU6IGV2ZXJ5dGhpbmcgY3JpdGljYWwgb3Igd2FybmluZyBsYW5kcyB0aGVyZSBhbmQgdGhhdCBpcyB3aGVyZSB0aGVcbiAqIHRocmVhZCwgdGhlIGNvbnRleHQgYW5kIHRoZSBoYW5kb3ZlciBsaXZlLiBUaGUgcGFnZXIgaXMgYWRkaXRpdmUgYW5kIG5hcnJvdyDigJRcbiAqIG9ubHkgYHNldmVyaXR5OiBjcml0aWNhbGAgKyBgY29tcG9uZW50OiBzdXBwb3J0YCwgYmVjYXVzZSB0aGF0IGlzIHRoZSBvbmVcbiAqIGFsZXJ0IGJhY2tpbmcgYSBjb250cmFjdHVhbCBvdXQtb2YtaG91cnMgcHJvbWlzZS5cbiAqXG4gKiBXSEFUIFRISVMgTU9EVUxFIENBTiBBTkQgQ0FOTk9UIERPLCBiZWNhdXNlIHRoZSBsaW1pdCBpcyBub3Qgb2J2aW91cy5cbiAqIGBjb25maWcvYWxlcnRtYW5hZ2VyL2FsZXJ0bWFuYWdlci55bWxgIGlzIGluIHRoZSBkZXBsb3kgY29udHJhY3Qnc1xuICogUkVRVUlSRURfSURFTlRJQ0FMIHNldCBhbmQgYXNzZXJ0ZWQgYnl0ZS1pZGVudGljYWwgYWNyb3NzIHRhcmdldHMsIGFuZFxuICogQWxlcnRtYW5hZ2VyIGhhcyBubyB0ZW1wbGF0aW5nLiBTbyBOT1RISU5HIGhlcmUgcmVtb3ZlcyBhIHJlY2VpdmVyIG9yIGEgcm91dGVcbiAqIOKAlCB0aGUgcm91dGVzIGFyZSBhbHdheXMgcHJlc2VudC4gV2hhdCB0aGVzZSBmbGFncyBkbyBpczpcbiAqXG4gKiAgLSBkZWNsYXJlIElOVEVOVCwgc28gXCJ3ZSBkbyBub3QgdXNlIFNsYWNrXCIgaXMgYSBzdGF0ZWQgZGVjaXNpb24gcmF0aGVyIHRoYW5cbiAqICAgIHNvbWV0aGluZyBpbmZlcnJlZCBmcm9tIHR3byBlbXB0eSBVUkxzIHRoYXQgbG9vayBsaWtlIGFuIG92ZXJzaWdodDtcbiAqICAtIGdhdGUgdGhlIGRlcGxveS10aW1lIGNoZWNrIChgcGJfY2hlY2tfYWxlcnRfZGVsaXZlcnlgKSwgd2hpY2ggaXMgd2hhdCB0dXJuc1xuICogICAgYSBoYWxmLWNvbmZpZ3VyZWQgY2hhbm5lbCBpbnRvIGEgcmVmdXNlZCBkZXBsb3kgaW5zdGVhZCBvZiBhIDNhbSBzdXJwcmlzZTtcbiAqICAtIGRyaXZlIHRoZSBwb3N0dXJlIGdhdWdlcyBiZWxvdywgc28gYSBkYXNoYm9hcmQgY2FuIGFuc3dlciBcImlzIGFueW9uZVxuICogICAgYWN0dWFsbHkgZ29pbmcgdG8gaGVhciB0aGlzXCIgd2l0aG91dCByZWFkaW5nIGZvdXIgWUFNTCBmaWxlcy5cbiAqXG4gKiBUaGUgVVJMUyBUSEVNU0VMVkVTIEFSRSBOT1QgSEVSRSwgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZS4gQSBTbGFjayB3ZWJob29rIFVSTFxuICogaXMgYSBiZWFyZXIgY3JlZGVudGlhbDogYW55b25lIGhvbGRpbmcgaXQgY2FuIHBvc3QgdG8gdGhlIGNoYW5uZWwuIEFsZXJ0bWFuYWdlclxuICogcmVhZHMgdGhlbSBmcm9tIGEgbW91bnRlZCBTZWNyZXQgdmlhIGBhcGlfdXJsX2ZpbGVgLCBwZXIgbm90aWZpY2F0aW9uLCBzbyB0aGV5XG4gKiBuZXZlciBlbnRlciBhIENvbmZpZ01hcCBhbmQgbmV2ZXIgZW50ZXIgdGhpcyBwcm9jZXNzLiBQbGF0Zm9ybSBrbm93cyBXSEVUSEVSXG4gKiBTbGFjayBkZWxpdmVyeSBpcyBkZWNsYXJlZCBvbjsgaXQgZG9lcyBub3Qga25vdywgYW5kIGRvZXMgbm90IG5lZWQsIHdoZXJlIHRvLlxuICogVGhlIHBhZ2VyJ3Mgcm91dGluZyBrZXkgaXMgZGlmZmVyZW50IOKAlCB0aGF0IG9uZSBJUyBjb25zdW1lZCBieSB0aGlzIHByb2Nlc3MsIHNvXG4gKiBpdCBsaXZlcyBpbiBgcGFnZXJEdXR5Q29uZmlnKClgLlxuICovXG5cbmltcG9ydCB7IHBhZ2VyRHV0eUNvbmZpZyB9IGZyb20gJy4vcGFnZXJkdXR5LmpzJztcbmltcG9ydCB7IGVudkJvb2wsIGVudkludCwgZW52U3RyIH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciwgZW1pdEdhdWdlIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgc2FmZUZldGNoIH0gZnJvbSAnLi4vdXRpbHMvc3NyZi5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYWxlcnQtZGVsaXZlcnknKTtcblxuZXhwb3J0IGludGVyZmFjZSBTbGFja0FsZXJ0c0NvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9wcy10ZWFtIFNsYWNrIGRlbGl2ZXJ5IGlzIERFQ0xBUkVEIG9uLlxuICAgKlxuICAgKiBEZWZhdWx0cyBGQUxTRSwgbWF0Y2hpbmcgYE9OQ0FMTF9FTkFCTEVEYDogYm90aCBkZXN0aW5hdGlvbnMgYXJlIG9wdC1pbiwgc29cbiAgICogYSBkZXBsb3ltZW50IHN0YXRlcyB3aGF0IGl0IHdhbnRzIHJhdGhlciB0aGFuIGluaGVyaXRpbmcgYSBjaGFubmVsIGl0IG1heVxuICAgKiBub3QgaGF2ZS4gTm90ZSB3aGF0IHRoaXMgZmxhZyBkb2VzIE5PVCBkbyDigJQgaXQgY2Fubm90IHJlbW92ZSB0aGUgU2xhY2tcbiAgICogcmVjZWl2ZXJzLCBiZWNhdXNlIGBhbGVydG1hbmFnZXIueW1sYCBpcyBhc3NlcnRlZCBieXRlLWlkZW50aWNhbCBhY3Jvc3NcbiAgICogdGFyZ2V0cyBhbmQgQWxlcnRtYW5hZ2VyIGhhcyBubyB0ZW1wbGF0aW5nLiBBIGRlcGxveW1lbnQgd2l0aCB0aGUgZmxhZyBvZmZcbiAgICogYW5kIHJlYWwgVVJMcyBpbiBpdHMgU2VjcmV0IHN0aWxsIGRlbGl2ZXJzIHRvIFNsYWNrLlxuICAgKi9cbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgU2xhY2sgZGVsaXZlcnkgQ0FOIGhhcHBlbiDigJQgaS5lLiB0aGUgd2ViaG9vayBVUkxzIGFyZSBub24tZW1wdHkuXG4gICAqXG4gICAqIERlcml2ZWQgYXQgZGVwbG95IHRpbWUgKGBwYl9jaGVja19hbGVydF9kZWxpdmVyeWAgd3JpdGVzIGl0KSBiZWNhdXNlIHRoZVxuICAgKiBVUkxzIGxpdmUgaW4gQWxlcnRtYW5hZ2VyJ3MgU2VjcmV0IGFuZCBuZXZlciBlbnRlciB0aGlzIHByb2Nlc3M6IGEgU2xhY2tcbiAgICogd2ViaG9vayBVUkwgaXMgYSBiZWFyZXIgY3JlZGVudGlhbCwgcmVhZCBwZXIgbm90aWZpY2F0aW9uIHZpYVxuICAgKiBgYXBpX3VybF9maWxlYC4gUGxhdGZvcm0gdGhlcmVmb3JlIGNhbm5vdCBpbnNwZWN0IHRoZW0gYW5kIG11c3QgYmUgdG9sZC5cbiAgICpcbiAgICogU0VQQVJBVEUgRlJPTSBgZW5hYmxlZGAgZm9yIHRoZSBzYW1lIHJlYXNvbiB0aGUgcGFnZXIgc3BsaXRzIHRoZSB0d28sIGFuZFxuICAgKiB0aGUgZGlzdGluY3Rpb24gaXMgd2hhdCBrZWVwcyBgQWxlcnREZWxpdmVyeURpc2FibGVkYCBob25lc3QuIEtleWluZyB0aGF0XG4gICAqIGFsZXJ0IG9uIHRoZSBERUNMQVJBVElPTiB3b3VsZCBwYWdlIGV2ZXJ5IGRlcGxveW1lbnQgdGhhdCBsZWZ0IHRoZSBmbGFnIGF0XG4gICAqIGl0cyBkZWZhdWx0IHdoaWxlIFNsYWNrIHdhcyBxdWlldGx5IHdvcmtpbmcg4oCUIGEgZmFsc2UgYWxhcm0gb24gYSBoZWFsdGh5XG4gICAqIHN5c3RlbSwgd2hpY2ggaXMgdGhlIGZhc3Rlc3Qgd2F5IHRvIHRlYWNoIHBlb3BsZSB0byBpZ25vcmUgYW4gYWxlcnQuXG4gICAqL1xuICBjb25maWd1cmVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xhY2tBbGVydHNDb25maWcoKTogU2xhY2tBbGVydHNDb25maWcge1xuICByZXR1cm4ge1xuICAgIGVuYWJsZWQ6IGVudkJvb2woJ1NMQUNLX0FMRVJUU19FTkFCTEVEJywgZmFsc2UpLFxuICAgIGNvbmZpZ3VyZWQ6IGVudkJvb2woJ1NMQUNLX0FMRVJUU19DT05GSUdVUkVEJywgZmFsc2UpLFxuICB9O1xufVxuXG4vKiogQm90aCBkZXN0aW5hdGlvbnMsIHJlc29sdmVkIHRvZ2V0aGVyIOKAlCB3aGF0IGByZXBvcnRBbGVydERlbGl2ZXJ5UG9zdHVyZWAgcmVhZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsZXJ0RGVsaXZlcnlDb25maWcge1xuICBzbGFjazogU2xhY2tBbGVydHNDb25maWc7XG4gIHBhZ2VyOiB7IGVuYWJsZWQ6IGJvb2xlYW47IGNvbmZpZ3VyZWQ6IGJvb2xlYW4gfTtcbn1cblxuLyoqIFdoZXRoZXIgQU5ZIGRlc3RpbmF0aW9uIGNvdWxkIGFjdHVhbGx5IGRlbGl2ZXIg4oCUIHJlYWxpdHksIG5vdCBkZWNsYXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYW5EZWxpdmVyQW55d2hlcmUoY2ZnOiBBbGVydERlbGl2ZXJ5Q29uZmlnKTogYm9vbGVhbiB7XG4gIHJldHVybiBjZmcuc2xhY2suY29uZmlndXJlZCB8fCAoY2ZnLnBhZ2VyLmVuYWJsZWQgJiYgY2ZnLnBhZ2VyLmNvbmZpZ3VyZWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxlcnREZWxpdmVyeUNvbmZpZygpOiBBbGVydERlbGl2ZXJ5Q29uZmlnIHtcbiAgY29uc3QgcGQgPSBwYWdlckR1dHlDb25maWcoKTtcbiAgcmV0dXJuIHtcbiAgICBzbGFjazogc2xhY2tBbGVydHNDb25maWcoKSxcbiAgICAvLyBgY29uZmlndXJlZGAgc2VwYXJhdGVseSBmcm9tIGBlbmFibGVkYDogZW5hYmxlZC13aXRob3V0LWEta2V5IGlzIHRoZVxuICAgIC8vIGhhbGYtY29uZmlndXJlZCBzdGF0ZSB3b3J0aCBzZWVpbmcsIGFuZCBpdCBpcyBpbnZpc2libGUgaWYgdGhlIHR3byBhcmVcbiAgICAvLyBjb2xsYXBzZWQgaW50byBvbmUgYm9vbGVhbi5cbiAgICBwYWdlcjogeyBlbmFibGVkOiBwZC5lbmFibGVkLCBjb25maWd1cmVkOiBwZC5yb3V0aW5nS2V5Lmxlbmd0aCA+IDAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQdWJsaXNoIHRoZSBkZWxpdmVyeSBwb3N0dXJlIGFzIGdhdWdlcywgYW5kIHNob3V0IGlmIGl0IGlzIGluY29oZXJlbnQuXG4gKlxuICogQ2FsbGVkIG9uY2UgYXQgYm9vdC4gR2F1Z2VzIHJhdGhlciB0aGFuIGNvdW50ZXJzIGJlY2F1c2UgdGhlc2UgYXJlIFNUQVRFUyBvZlxuICogdGhlIGRlcGxveW1lbnQg4oCUIGFuIG9wZXJhdG9yIHdhbnRzIFwid2lsbCBhbnlvbmUgaGVhciBhbiBhbGVydCByaWdodCBub3dcIiwgbm90XG4gKiBob3cgbWFueSB0aW1lcyBhIHByb2Nlc3Mgc3RhcnRlZCBhbmQgd29uZGVyZWQuXG4gKlxuICogVGhlIHZhbHVlIG9mIGhhdmluZyB0aGlzIGF0IGFsbDogYmVmb3JlIGl0LCBhbnN3ZXJpbmcgXCJkb2VzIHRoaXMgZGVwbG95bWVudFxuICogcGFnZSBhbnlvbmU/XCIgbWVhbnQgcmVhZGluZyBgLmVudmAsIHR3byBTZWNyZXRzIGFuZCBmb3VyIGNvcGllcyBvZlxuICogYGFsZXJ0bWFuYWdlci55bWxgLiBBIGRlcGxveW1lbnQgY2FuIG5vdyBhbGVydCBvbiBpdHMgb3duIGluYWJpbGl0eSB0byBhbGVydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydEFsZXJ0RGVsaXZlcnlQb3N0dXJlKGNmZzogQWxlcnREZWxpdmVyeUNvbmZpZyA9IGFsZXJ0RGVsaXZlcnlDb25maWcoKSk6IHZvaWQge1xuICBlbWl0R2F1Z2UoJ2FsZXJ0X2RlbGl2ZXJ5X2VuYWJsZWQnLCB7IGNoYW5uZWw6ICdzbGFjaycgfSwgY2ZnLnNsYWNrLmVuYWJsZWQgPyAxIDogMCk7XG4gIGVtaXRHYXVnZSgnYWxlcnRfZGVsaXZlcnlfZW5hYmxlZCcsIHsgY2hhbm5lbDogJ3BhZ2VyJyB9LCBjZmcucGFnZXIuZW5hYmxlZCA/IDEgOiAwKTtcbiAgZW1pdEdhdWdlKCdhbGVydF9kZWxpdmVyeV9jb25maWd1cmVkJywgeyBjaGFubmVsOiAnc2xhY2snIH0sIGNmZy5zbGFjay5jb25maWd1cmVkID8gMSA6IDApO1xuICBlbWl0R2F1Z2UoJ2FsZXJ0X2RlbGl2ZXJ5X2NvbmZpZ3VyZWQnLCB7IGNoYW5uZWw6ICdwYWdlcicgfSwgY2ZnLnBhZ2VyLmNvbmZpZ3VyZWQgPyAxIDogMCk7XG5cbiAgLy8gRW5hYmxlZCB3aXRoIG5vIGNyZWRlbnRpYWw6IHNvbWVib2R5IGFza2VkIGZvciBwYWdpbmcgYW5kIGlzIG5vdCBnZXR0aW5nIGl0LlxuICAvLyBUaGUgZGVwbG95IGNoZWNrIHJlZnVzZXMgdGhpcyBjb21iaW5hdGlvbiwgc28gcmVhY2hpbmcgaGVyZSBtZWFucyBpdCB3YXNcbiAgLy8gY2hhbmdlZCBhZnRlciBwcm92aXNpb25pbmcg4oCUIHdoaWNoIGlzIGV4YWN0bHkgd2hlbiBub2JvZHkgaXMgbG9va2luZy5cbiAgaWYgKGNmZy5wYWdlci5lbmFibGVkICYmICFjZmcucGFnZXIuY29uZmlndXJlZCkge1xuICAgIGxvZ2dlci5lcnJvcignT05DQUxMX0VOQUJMRUQgaXMgdHJ1ZSBidXQgbm8gUEFHRVJEVVRZX1JPVVRJTkdfS0VZIGlzIHNldCDigJQgc3VwcG9ydCBjcml0aWNhbHMgd2lsbCBub3QgcGFnZScpO1xuICB9XG4gIC8vIE5vdGhpbmcgQ0FOIGRlbGl2ZXIuIEtleWVkIG9uIHJlYWNoYWJpbGl0eSByYXRoZXIgdGhhbiBvbiB0aGUgdHdvIGZsYWdzLFxuICAvLyBiZWNhdXNlIHRoZSBmbGFncyBhcmUgZGVjbGFyYXRpb25zOiBhIGRlcGxveW1lbnQgdGhhdCBsZWZ0IGJvdGggYXQgdGhlaXJcbiAgLy8gKGZhbHNlKSBkZWZhdWx0cyB3aGlsZSByZWFsIFNsYWNrIFVSTHMgc2l0IGluIGl0cyBTZWNyZXQgaXMgZGVsaXZlcmluZ1xuICAvLyBmaW5lLCBhbmQgd2FybmluZyBpdCB3b3VsZCBiZSBhIGxpZS5cbiAgaWYgKCFjYW5EZWxpdmVyQW55d2hlcmUoY2ZnKSkge1xuICAgIGxvZ2dlci53YXJuKCdObyBwbGF0Zm9ybSBhbGVydCBkZXN0aW5hdGlvbiBpcyBlbmFibGVkIOKAlCBhbGVydHMgd2lsbCByZWFjaCBBbGVydG1hbmFnZXIgYW5kIGdvIG5vIGZ1cnRoZXInLCB7XG4gICAgICBoaW50OiAnU0xBQ0tfQUxFUlRTX0VOQUJMRUQgLyBPTkNBTExfRU5BQkxFRCcsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGVhZC1tYW4gc3dpdGNoOiBhIGhlYXJ0YmVhdCB3aG9zZSBBQlNFTkNFIGlzIHRoZSBhbGVydC5cbiAqXG4gKiBFdmVyeSBvdGhlciBhbGVydCBpbiB0aGlzIHN5c3RlbSBkZXBlbmRzIG9uIHNvbWV0aGluZyBpbnNpZGUgaXQgc3RpbGwgd29ya2luZy5cbiAqIFRoaXMgb25lIGludmVydHMgdGhhdCDigJQgYW4gZXh0ZXJuYWwgc2VydmljZSBleHBlY3RzIGEgUE9TVCBvbiBhIHNjaGVkdWxlIGFuZFxuICogcmFpc2VzIGFuIGluY2lkZW50IHdoZW4gb25lIGRvZXMgbm90IGFycml2ZSwgc28gYSBwbGF0Zm9ybSB0aGF0IGlzIHdlZGdlZCxcbiAqIGNyYXNoZWQsIHBhcnRpdGlvbmVkIG9yIG5ldmVyIHN0YXJ0ZWQgaXMgcmVwb3J0ZWQgQlkgSVRTIFNJTEVOQ0UuIE5vdGhpbmdcbiAqIGluc2lkZSBhIGJyb2tlbiBkZXBsb3ltZW50IGhhcyB0byBub3RpY2UgaXRzIG93biBicm9rZW5uZXNzLlxuICpcbiAqIFdIWSBJVCBJUyBCVUlMVCBIRVJFIFJBVEhFUiBUSEFOIEJPVUdIVCwgd2hlbiB0aGUgcmVzdCBvZiBvbi1jYWxsIGRlbGliZXJhdGVseVxuICogaXMgbm90OiBQYWdlckR1dHkncyBoZWFydGJlYXQgbW9uaXRvcmluZyBpcyBhbiBFdmVudCBPcmNoZXN0cmF0aW9uIHBhdHRlcm4gYW5kXG4gKiBkb2N1bWVudGVkIGFzIEFJT3BzLXBvd2VyZWQsIHNvIGl0IG1heSBzaXQgYmVoaW5kIGEgdGllciBhbmQgaXMgbm90IHBhcnQgb2ZcbiAqIEV2ZW50cyB2Mi4gTW9yZSBpbXBvcnRhbnRseSBhIGRlYWQtbWFuIHN3aXRjaCBpcyBhIENMT0NLLCBub3QgYSB0ZWxlY29tXG4gKiBwcm9ibGVtIOKAlCB0aGUgdGhpbmcgdGhhdCBtYWRlIHRoZSBsYXN0IG1pbGUgd29ydGggYnV5aW5nIChjYXJyaWVyIHJldHJpZXMsXG4gKiBkZWxpdmVyeSByZWNlaXB0cywgYSAzYW0gZmFpbHVyZSBidWRnZXQpIHNpbXBseSBkb2VzIG5vdCBhcHBseSB0byBzZW5kaW5nIG9uZVxuICogcmVxdWVzdCBvbiBhbiBpbnRlcnZhbC4gYE9OQ0FMTF9ERUFETUFOX1VSTGAgdGhlcmVmb3JlIHBvaW50cyB3aGVyZXZlciB0aGVcbiAqIG9wZXJhdG9yIGxpa2VzOiBQYWdlckR1dHkncyBvcmNoZXN0cmF0aW9uIGVuZHBvaW50LCBhIHB1cnBvc2UtYnVpbHQgZGVhZC1tYW5cbiAqIHNlcnZpY2UsIG9yIGFuIHVwdGltZSBtb25pdG9yLlxuICpcbiAqIFRXTyBQUk9QRVJUSUVTIFdPUlRIIFNUQVRJTkcsIGJlY2F1c2UgdGhleSBhcmUgdGhlIHJlYXNvbiB0aGlzIGlzIHNhZmU6XG4gKlxuICogIC0gSXQgaXMgTk9UIGxlYWRlci1sb2NrZWQuIEEgaGVhcnRiZWF0IGlzIHBlci1wcm9jZXNzIG9uIHB1cnBvc2U6IHdpdGggdGhyZWVcbiAqICAgIHJlcGxpY2FzLCB0aGUgZXh0ZXJuYWwgc2VydmljZSBoZWFycyBmcm9tIHdoaWNoZXZlciBhcmUgYWxpdmUsIGFuZCBzaWxlbmNlXG4gKiAgICBtZWFucyBBTEwgb2YgdGhlbSBzdG9wcGVkLiBMZWFkZXItbG9ja2luZyBpdCB3b3VsZCBtYWtlIHRoZSBzd2l0Y2ggcmVwb3J0XG4gKiAgICB0aGUgbGVhZGVyJ3MgaGVhbHRoIHJhdGhlciB0aGFuIHRoZSBkZXBsb3ltZW50J3Mg4oCUIGFuZCB3b3VsZCBtYWtlIGEgUmVkaXNcbiAqICAgIG91dGFnZSBsb29rIGlkZW50aWNhbCB0byBhIHRvdGFsIG91dGFnZS5cbiAqICAtIEl0IGZhaWxzIFNJTEVOVExZIG9uIGl0cyBvd24gZXJyb3JzLCBkZWxpYmVyYXRlbHkuIEEgaGVhcnRiZWF0IHRoYXQgbG9nZ2VkXG4gKiAgICBhbiBlcnJvciBldmVyeSBpbnRlcnZhbCBkdXJpbmcgYSBuZXR3b3JrIGJsaXAgd291bGQgYmUgaXRzIG93biBub2lzZVxuICogICAgc291cmNlLCBhbmQgdGhlIGNvbnNlcXVlbmNlIG9mIGEgbWlzc2VkIGJlYXQgaXMgYWxyZWFkeSBoYW5kbGVkOiB0aGVcbiAqICAgIGV4dGVybmFsIHNlcnZpY2UgYWxlcnRzLiBUaGUgb25seSB0aGluZyBpdCBtdXN0IG5ldmVyIGRvIGlzIHJlcG9ydCBzdWNjZXNzXG4gKiAgICBpdCBkaWQgbm90IGFjaGlldmUsIHdoaWNoIGlzIHdoeSBub3RoaW5nIGhlcmUgc3dhbGxvd3MgYSBub24tMnh4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYWRtYW5Db25maWcge1xuICB1cmw6IHN0cmluZztcbiAgaW50ZXJ2YWxNczogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVhZG1hbkNvbmZpZygpOiBEZWFkbWFuQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICB1cmw6IGVudlN0cignT05DQUxMX0RFQURNQU5fVVJMJywgJycpLFxuICAgIGludGVydmFsTXM6IGVudkludCgnT05DQUxMX0RFQURNQU5fSU5URVJWQUxfTVMnLCA2MF8wMDAsIHsgbWluOiAxMDAwIH0pLFxuICB9O1xufVxuXG5sZXQgZGVhZG1hblRpbWVyOiBOb2RlSlMuVGltZW91dCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBTdGFydCBiZWF0aW5nLiBOby1vcCB3aGVuIGBPTkNBTExfREVBRE1BTl9VUkxgIGlzIHVuc2V0LCB3aGljaCBpcyB0aGUgZGVmYXVsdDpcbiAqIGFuIHVuY29uZmlndXJlZCBkZWFkLW1hbiBzd2l0Y2ggbXVzdCBub3QgYmVhdCBhZ2FpbnN0IG5vdGhpbmcsIGFuZCBtdXN0IG5vdFxuICogcHJldGVuZCBpdCBpcyBjb3ZlcmluZyB0aGUgZGVwbG95bWVudC5cbiAqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBhIHRpbWVyIHdhcyBzdGFydGVkLCBzbyBhIGNhbGxlciBjYW4gbG9nIHRoZSBwb3N0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnREZWFkbWFuSGVhcnRiZWF0KGNmZzogRGVhZG1hbkNvbmZpZyA9IGRlYWRtYW5Db25maWcoKSk6IGJvb2xlYW4ge1xuICBpZiAoZGVhZG1hblRpbWVyIHx8ICFjZmcudXJsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGJlYXQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBzYWZlRmV0Y2goY2ZnLnVybCwgeyBtZXRob2Q6ICdQT1NUJywgdGltZW91dE1zOiA1MDAwLCBib2R5OiAne30nLCBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSB9KTtcbiAgICAgIGVtaXRDb3VudGVyKCdvbmNhbGxfZGVhZG1hbl90b3RhbCcsIHsgb3V0Y29tZTogcmVzcC5vayAmJiAhcmVzcC5yZWRpcmVjdGVkID8gJ3NlbnQnIDogJ2ZhaWxlZCcgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDb3VudGVkLCBuZXZlciBsb2dnZWQgcGVyLWJlYXQg4oCUIHNlZSB0aGUgbW9kdWxlIG5vdGUgb24gbm9pc2UuXG4gICAgICBlbWl0Q291bnRlcignb25jYWxsX2RlYWRtYW5fdG90YWwnLCB7IG91dGNvbWU6ICdmYWlsZWQnIH0pO1xuICAgIH1cbiAgfTtcbiAgLy8gYHVucmVmYCBzbyBhIHBlbmRpbmcgYmVhdCBjYW5ub3QgaG9sZCB0aGUgcHJvY2VzcyBvcGVuIGR1cmluZyBzaHV0ZG93bjogdGhlXG4gIC8vIHN3aXRjaCBleGlzdHMgdG8gcmVwb3J0IHRoYXQgdGhlIHByb2Nlc3MgU1RPUFBFRCwgYW5kIGRlbGF5aW5nIHRoYXQgaXNcbiAgLy8gcHJlY2lzZWx5IGJhY2t3YXJkcy5cbiAgZGVhZG1hblRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdm9pZCBiZWF0KCksIGNmZy5pbnRlcnZhbE1zKTtcbiAgZGVhZG1hblRpbWVyLnVucmVmKCk7XG4gIHZvaWQgYmVhdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFN0b3AgYmVhdGluZyDigJQgY2FsbGVkIGZyb20gdGhlIHVuaWZpZWQgc2h1dGRvd24gcGF0aCwgbm90IGEgc2lnbmFsIGhhbmRsZXIuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcERlYWRtYW5IZWFydGJlYXQoKTogdm9pZCB7XG4gIGlmIChkZWFkbWFuVGltZXIpIGNsZWFySW50ZXJ2YWwoZGVhZG1hblRpbWVyKTtcbiAgZGVhZG1hblRpbWVyID0gdW5kZWZpbmVkO1xufVxuIl19
@@ -15,9 +15,11 @@ export declare function setApiKeyExchangeServiceName(name: string): void;
15
15
  /**
16
16
  * The JWT for `key`, from cache when possible. Throws {@link ApiKeyRejectedError}
17
17
  * when platform refused the key and {@link ApiKeyExchangeUnavailableError} when
18
- * it could not be asked.
18
+ * it could not be asked. `clientVersion` is the presenting request's
19
+ * `X-Pb-Client-Version` (already validated — see `clientVersionOf`), forwarded
20
+ * so platform can record which CLI the key is used with.
19
21
  */
20
- export declare function exchangeApiKey(key: string): Promise<string>;
22
+ export declare function exchangeApiKey(key: string, clientVersion?: string): Promise<string>;
21
23
  /**
22
24
  * Drop every cached exchange. For tests and for a process that wants to force
23
25
  * re-validation; production relies on the TTLs above.
@@ -31,6 +31,7 @@
31
31
  * pod's exchanges would otherwise share one bucket) and names the caller in
32
32
  * platform's audit trail.
33
33
  */
34
+ import { CLIENT_VERSION_HEADER } from '../middleware/client-version.js';
34
35
  import { getServiceAuthHeader } from '../middleware/service-tokens.js';
35
36
  import { SYSTEM_ORG_ID } from '../middleware/system-org.js';
36
37
  import { InternalHttpClient } from '../services/http-client.js';
@@ -115,7 +116,7 @@ function evictIfFull() {
115
116
  }
116
117
  }
117
118
  /** One real round-trip to platform. Throws the two typed errors above. */
118
- async function performExchange(key, hash) {
119
+ async function performExchange(key, hash, clientVersion) {
119
120
  const client = platformClient();
120
121
  let status;
121
122
  let body;
@@ -123,6 +124,10 @@ async function performExchange(key, hash) {
123
124
  const res = await client.post('/auth/token/exchange', { key }, {
124
125
  headers: {
125
126
  Authorization: getServiceAuthHeader({ serviceName, role: 'member', orgId: SYSTEM_ORG_ID }),
127
+ // The CLI version the key's holder is calling with (validated by the
128
+ // caller), so platform can stamp it on the key ("last CLI version") for
129
+ // org admins. Absent → platform keeps the version it already has.
130
+ ...(clientVersion ? { [CLIENT_VERSION_HEADER]: clientVersion } : {}),
126
131
  },
127
132
  // The exchange is a pure read of the key record plus a token mint — safe to
128
133
  // retry, and a lost retry only costs one extra mint.
@@ -169,20 +174,22 @@ async function performExchange(key, hash) {
169
174
  return entry;
170
175
  }
171
176
  /** Exchange, sharing a single in-flight round-trip per key. */
172
- function exchangeOnce(key, hash) {
177
+ function exchangeOnce(key, hash, clientVersion) {
173
178
  const pending = inFlight.get(hash);
174
179
  if (pending)
175
180
  return pending;
176
- const promise = performExchange(key, hash).finally(() => inFlight.delete(hash));
181
+ const promise = performExchange(key, hash, clientVersion).finally(() => inFlight.delete(hash));
177
182
  inFlight.set(hash, promise);
178
183
  return promise;
179
184
  }
180
185
  /**
181
186
  * The JWT for `key`, from cache when possible. Throws {@link ApiKeyRejectedError}
182
187
  * when platform refused the key and {@link ApiKeyExchangeUnavailableError} when
183
- * it could not be asked.
188
+ * it could not be asked. `clientVersion` is the presenting request's
189
+ * `X-Pb-Client-Version` (already validated — see `clientVersionOf`), forwarded
190
+ * so platform can record which CLI the key is used with.
184
191
  */
185
- export async function exchangeApiKey(key) {
192
+ export async function exchangeApiKey(key, clientVersion) {
186
193
  const hash = hashApiKey(key);
187
194
  const now = Date.now();
188
195
  const rejectedUntil = rejectionCache.get(hash);
@@ -200,7 +207,7 @@ export async function exchangeApiKey(key) {
200
207
  // background refresh is not this request's problem — the cached token is
201
208
  // still valid, and the next request past expiry exchanges inline.
202
209
  emitCounter('api_key_exchange_cache_total', { result: 'refresh' });
203
- void exchangeOnce(key, hash).catch(() => { });
210
+ void exchangeOnce(key, hash, clientVersion).catch(() => { });
204
211
  }
205
212
  else {
206
213
  emitCounter('api_key_exchange_cache_total', { result: 'hit' });
@@ -208,7 +215,7 @@ export async function exchangeApiKey(key) {
208
215
  return cached.token;
209
216
  }
210
217
  emitCounter('api_key_exchange_cache_total', { result: 'miss' });
211
- return (await exchangeOnce(key, hash)).token;
218
+ return (await exchangeOnce(key, hash, clientVersion)).token;
212
219
  }
213
220
  /**
214
221
  * Drop every cached exchange. For tests and for a process that wants to force
@@ -219,4 +226,4 @@ export function resetApiKeyExchangeCache() {
219
226
  rejectionCache.clear();
220
227
  inFlight.clear();
221
228
  }
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hcGkta2V5LWV4Y2hhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVoRCx1RkFBdUY7QUFDdkYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBRTdCLHdEQUF3RDtBQUN4RCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFFL0Isa0ZBQWtGO0FBQ2xGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDOzsyREFFMkQ7QUFDM0QsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFFcEMsaUZBQWlGO0FBQ2pGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksT0FBTyxHQUFHLDJDQUEyQztRQUMvRCxL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QUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkQsMkVBQTJFO1lBQzNFLHlFQUF5RTtZQUN6RSxrRUFBa0U7WUFDbEUsV0FBVyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkUsS0FBSyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBNkMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRSxPQUFPLENBQUMsTUFBTSxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQixjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBUcmFkZSBhbiBvcGFxdWUgYWNjZXNzIGtleSBmb3IgYSBzaG9ydC1saXZlZCBKV1QsIG9uY2UsIGFuZCBjYWNoZSBpdC5cbiAqXG4gKiBPbmx5IHBsYXRmb3JtLCBiaWxsaW5nIGFuZCBxdW90YSBoYXZlIE1vbmdvREIsIHNvIHRoZSBzdGF0ZWxlc3Mgc2VydmljZXNcbiAqIGNhbm5vdCBsb29rIHVwIGEga2V5IGhhc2gg4oCUIGFuZCBhc2tpbmcgcGxhdGZvcm0gdG8gdmFsaWRhdGUgRVZFUlkgcmVxdWVzdFxuICogd291bGQgcHV0IGl0IG9uIHRoZSBob3QgcGF0aCBvZiB0aGUgd2hvbGUgZmxlZXQuIEluc3RlYWQgdGhpcyBtb2R1bGUgZG9lcyB0aGVcbiAqIGV4Y2hhbmdlIG9uY2UgcGVyIGtleSAoYFBPU1QgL2F1dGgvdG9rZW4vZXhjaGFuZ2VgKSBhbmQgY2FjaGVzIHRoZSByZXR1cm5lZFxuICogSldUIGluLXByb2Nlc3MgdW50aWwgaXQgZXhwaXJlcywgc28gYHJlcXVpcmVBdXRoYCBvbmx5IGV2ZXIgdmVyaWZpZXMgYSBKV1QuXG4gKlxuICogUHJvcGVydGllcyB0aGF0IG1hdHRlcjpcbiAqXG4gKiAtICoqUmV2b2NhdGlvbiBsYXRlbmN5IGlzIGJvdW5kZWQgYnkgdGhlIHRva2VuIFRUTCoqICg1IG1pbnV0ZXMpLiBBIHJldm9rZWRcbiAqICAga2V5IGNhbiBubyBsb25nZXIgYmUgZXhjaGFuZ2VkLCBhbmQgdGhlIGNhY2hlZCB0b2tlbiBpdCBhbHJlYWR5IHByb2R1Y2VkXG4gKiAgIGRpZXMgb24gaXRzIG93bi5cbiAqIC0gKipFYXJseSwgaml0dGVyZWQgcmVmcmVzaC4qKiBUaGUgY2FjaGVkIHRva2VuIGlzIHJlLWV4Y2hhbmdlZCBpbiB0aGVcbiAqICAgYmFja2dyb3VuZCBhdCB+NzUlIG9mIGl0cyBsaWZlICjCsTIwJSBqaXR0ZXIpIHNvIG5vIHJlcXVlc3QgZXZlciBibG9ja3Mgb25cbiAqICAgdGhlIGV4Y2hhbmdlLCBhbmQgYSBmbGVldCBvZiBwb2RzIGhvbGRpbmcgdGhlIHNhbWUga2V5IGRvZXNuJ3Qgc3RhbXBlZGVcbiAqICAgcGxhdGZvcm0gYXQgdGhlIHNhbWUgaW5zdGFudC5cbiAqIC0gKipPbmUgaW4tZmxpZ2h0IGV4Y2hhbmdlIHBlciBrZXkuKiogQ29uY3VycmVudCByZXF1ZXN0cyBzaGFyZSBhIHByb21pc2UuXG4gKiAtICoqU2hvcnQgbmVnYXRpdmUgY2FjaGUuKiogQSBrZXkgcGxhdGZvcm0gcmVqZWN0ZWQgaXMgcmVtZW1iZXJlZCBmb3IgMzBzLCBzb1xuICogICBhIG1pc2NvbmZpZ3VyZWQgY2xpZW50IChvciBhIHNjYW5uZXIpIGNhbid0IHR1cm4gZXZlcnkgcmVxdWVzdCBpbnRvIGFcbiAqICAgcGxhdGZvcm0gcm91bmQtdHJpcC5cbiAqIC0gKipQbGF0Zm9ybSBkb3duIGlzIGEgNTAzLCBuZXZlciBhIDIwMC4qKiBUaGUgY2FsbGVyIG1hcHNcbiAqICAge0BsaW5rIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcn0gdG8gXCJ0cnkgYWdhaW5cIiwgd2l0aCBhIG1ldHJpYyDigJQgaXQgaXNcbiAqICAgZGVsaWJlcmF0ZWx5IE5PVCBmYWlsLW9wZW46IGFuIHVudmVyaWZpYWJsZSBjcmVkZW50aWFsIGlzIG5vdCBhbiBpZGVudGl0eS5cbiAqXG4gKiBUaGUgZXhjaGFuZ2UgcmVxdWVzdCBpdHNlbGYgY2FycmllcyB0aGlzIHNlcnZpY2UncyBvd24gc2lnbmVkIHNlcnZpY2UgdG9rZW4sXG4gKiB3aGljaCBpcyB3aGF0IGV4ZW1wdHMgaXQgZnJvbSBwbGF0Zm9ybSdzIElQLWtleWVkIGAvYXV0aGAgcmF0ZSBsaW1pdGVyIChldmVyeVxuICogcG9kJ3MgZXhjaGFuZ2VzIHdvdWxkIG90aGVyd2lzZSBzaGFyZSBvbmUgYnVja2V0KSBhbmQgbmFtZXMgdGhlIGNhbGxlciBpblxuICogcGxhdGZvcm0ncyBhdWRpdCB0cmFpbC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBoYXNoQXBpS2V5IH0gZnJvbSAnLi4vdXRpbHMvYXBpLWtleS5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXBpLWtleS1leGNoYW5nZScpO1xuXG4vKiogTW9zdCBkaXN0aW5jdCBrZXlzIGhlbGQgaW4gdGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSBiZWZvcmUgdGhlIG9sZGVzdCBhcmUgZHJvcHBlZC4gKi9cbmNvbnN0IE1BWF9DQUNIRURfS0VZUyA9IDEwMDA7XG5cbi8qKiBIb3cgbG9uZyBhIHBsYXRmb3JtIFJFSkVDVElPTiBpcyByZW1lbWJlcmVkIChtcykuICovXG5jb25zdCBORUdBVElWRV9UVExfTVMgPSAzMF8wMDA7XG5cbi8qKiBGcmFjdGlvbiBvZiBhIHRva2VuJ3MgbGlmZSBhZnRlciB3aGljaCBhIGJhY2tncm91bmQgcmUtZXhjaGFuZ2UgaXMgc3RhcnRlZC4gKi9cbmNvbnN0IFJFRlJFU0hfQVRfRlJBQ1RJT04gPSAwLjc1O1xuXG4vKiogwrEgaml0dGVyIGFwcGxpZWQgdG8gdGhlIHJlZnJlc2ggcG9pbnQsIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRva2VuJ3MgbGlmZS5cbiAqICBXaWRlIGVub3VnaCB0byBkZS1zeW5jaHJvbml6ZSBhIGZsZWV0LCBuYXJyb3cgZW5vdWdoIHRvIGxlYXZlIGEgY2xlYXIgdGFpbCBvZlxuICogIHN0aWxsLXZhbGlkIHRva2VuIGFmdGVyIHRoZSBsYXRlc3QgcG9zc2libGUgcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfSklUVEVSX0ZSQUNUSU9OID0gMC4xO1xuXG4vKiogVGhlIGtleSB3YXMgcHJlc2VudGVkIHRvIHBsYXRmb3JtIGFuZCByZWZ1c2VkICh1bmtub3duLCByZXZva2VkLCBleHBpcmVkKS4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlSZWplY3RlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2VzcyBrZXkgaXMgaW52YWxpZCwgcmV2b2tlZCBvciBleHBpcmVkJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlSZWplY3RlZEVycm9yJztcbiAgfVxufVxuXG4vKiogUGxhdGZvcm0gY291bGQgbm90IGJlIHJlYWNoZWQgKG9yIGFuc3dlcmVkIDV4eCkg4oCUIHRoZSBrZXkncyB2YWxpZGl0eSBpcyB1bmtub3duLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBY2Nlc3Mta2V5IHZlcmlmaWNhdGlvbiBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yJztcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIC8qKiBUaGUgZXhjaGFuZ2VkIEpXVC4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIGF0IHdoaWNoIHRoZSBKV1Qgc3RvcHMgYmVpbmcgdXNhYmxlLiAqL1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgLyoqIEVwb2NoIG1zIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBzaG91bGQgYmUgc3RhcnRlZC4gKi9cbiAgcmVmcmVzaEF0OiBudW1iZXI7XG59XG5cbi8qKiBDYWNoZSBvZiBzdWNjZXNzZnVsIGV4Y2hhbmdlcywga2V5ZWQgYnkgYHNoYTI1NihrZXkpYCDigJQgbmV2ZXIgYnkgdGhlIGtleSBpdHNlbGYuICovXG5jb25zdCB0b2tlbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG4vKiogQ2FjaGUgb2YgcmVqZWN0aW9ucywga2V5ZWQgdGhlIHNhbWUgd2F5OyB2YWx1ZSBpcyB0aGUgZXBvY2ggbXMgaXQgZXhwaXJlcy4gKi9cbmNvbnN0IHJlamVjdGlvbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbi8qKiBJbi1mbGlnaHQgZXhjaGFuZ2VzLCBzbyBjb25jdXJyZW50IHJlcXVlc3RzIGZvciBvbmUga2V5IHNoYXJlIGEgcm91bmQtdHJpcC4gKi9cbmNvbnN0IGluRmxpZ2h0ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8Q2FjaGVFbnRyeT4+KCk7XG5cbi8qKiBUaGUgc2VydmljZSBuYW1lIG1pbnRlZCBpbnRvIHRoZSBleGNoYW5nZSBjYWxsJ3Mgb3duIHNlcnZpY2UgdG9rZW4uICovXG5sZXQgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIE5hbWUgdGhpcyBwcm9jZXNzIGluIHRoZSBleGNoYW5nZSBjYWxsJ3Mgc2VydmljZSB0b2tlbi4gQ2FsbGVkIGZyb21cbiAqIGB3aXJlU2VydmljZVNlY3VyaXR5YCBhdCBib290IChhbmQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlLCB3aGljaCB3aXJlcyBpdHNcbiAqIGJvb3Qgc2VjdXJpdHkgYnkgaGFuZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcGlLZXlFeGNoYW5nZVNlcnZpY2VOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBzZXJ2aWNlTmFtZSA9IG5hbWU7XG59XG5cbi8qKiBQbGF0Zm9ybSdzIGluLWNsdXN0ZXIgYWRkcmVzcyDigJQgdGhlIHNhbWUgZW52IHBhaXIgZXZlcnkgb3RoZXIgY2FsbGVyIHVzZXMuICovXG5mdW5jdGlvbiBwbGF0Zm9ybUNsaWVudCgpOiBJbnRlcm5hbEh0dHBDbGllbnQge1xuICByZXR1cm4gbmV3IEludGVybmFsSHR0cENsaWVudCh7XG4gICAgLi4uc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLFxuICAgIHRpbWVvdXQ6IGVudkludCgnQVBJX0tFWV9FWENIQU5HRV9USU1FT1VUX01TJywgMzAwMCwgeyBtaW46IDEgfSksXG4gIH0pO1xufVxuXG4vKiogVGhlIGVwb2NoIG1zIGF0IHdoaWNoIGEgdG9rZW4gd2l0aCBgdHRsU2Vjb25kc2Agb2YgbGlmZSBzaG91bGQgYmUgcmVmcmVzaGVkIGVhcmx5LiAqL1xuZnVuY3Rpb24gaml0dGVyZWRSZWZyZXNoQXQoaXNzdWVkQXQ6IG51bWJlciwgdHRsU2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbGlmZU1zID0gdHRsU2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IGppdHRlciA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogUkVGUkVTSF9KSVRURVJfRlJBQ1RJT047XG4gIC8vIENsYW1wIGludG8gKDAsIDEpIHNvIHRoZSByZWZyZXNoIHBvaW50IGlzIGFsd2F5cyBiZWZvcmUgZXhwaXJ5IGFuZCBuZXZlciBpblxuICAvLyB0aGUgcGFzdCwgd2hhdGV2ZXIgVFRMIHBsYXRmb3JtIHJldHVybnMuXG4gIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5taW4oMC45NSwgTWF0aC5tYXgoMC4xLCBSRUZSRVNIX0FUX0ZSQUNUSU9OICsgaml0dGVyKSk7XG4gIHJldHVybiBpc3N1ZWRBdCArIGxpZmVNcyAqIGZyYWN0aW9uO1xufVxuXG4vKiogRHJvcCB0aGUgb2xkZXN0IGVudHJpZXMgb25jZSB0aGUgY2FjaGUgaXMgb3ZlciBpdHMgY2FwIChrZXlzIGFyZSBsb25nLWxpdmVkLCB0b2tlbnMgYXJlIG5vdCkuICovXG5mdW5jdGlvbiBldmljdElmRnVsbCgpOiB2b2lkIHtcbiAgaWYgKHRva2VuQ2FjaGUuc2l6ZSA8PSBNQVhfQ0FDSEVEX0tFWVMpIHJldHVybjtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbaGFzaCwgZW50cnldIG9mIHRva2VuQ2FjaGUpIHtcbiAgICBpZiAoZW50cnkuZXhwaXJlc0F0IDw9IG5vdykgdG9rZW5DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cbiAgLy8gTWFwIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIg4oCUIGRyb3AgZnJvbSB0aGUgZnJvbnQgdW50aWwgYmFjayB1bmRlciB0aGUgY2FwLlxuICB3aGlsZSAodG9rZW5DYWNoZS5zaXplID4gTUFYX0NBQ0hFRF9LRVlTKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gdG9rZW5DYWNoZS5rZXlzKCkubmV4dCgpO1xuICAgIGlmIChvbGRlc3QuZG9uZSkgYnJlYWs7XG4gICAgdG9rZW5DYWNoZS5kZWxldGUob2xkZXN0LnZhbHVlKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkYXRhPzogeyBhY2Nlc3NUb2tlbj86IHN0cmluZzsgZXhwaXJlc0luPzogbnVtYmVyIH07XG59XG5cbi8qKiBPbmUgcmVhbCByb3VuZC10cmlwIHRvIHBsYXRmb3JtLiBUaHJvd3MgdGhlIHR3byB0eXBlZCBlcnJvcnMgYWJvdmUuICovXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtRXhjaGFuZ2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBjbGllbnQgPSBwbGF0Zm9ybUNsaWVudCgpO1xuICBsZXQgc3RhdHVzOiBudW1iZXI7XG4gIGxldCBib2R5OiBFeGNoYW5nZVJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PEV4Y2hhbmdlUmVzcG9uc2U+KCcvYXV0aC90b2tlbi9leGNoYW5nZScsIHsga2V5IH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZSwgcm9sZTogJ21lbWJlcicsIG9yZ0lkOiBTWVNURU1fT1JHX0lEIH0pLFxuICAgICAgfSxcbiAgICAgIC8vIFRoZSBleGNoYW5nZSBpcyBhIHB1cmUgcmVhZCBvZiB0aGUga2V5IHJlY29yZCBwbHVzIGEgdG9rZW4gbWludCDigJQgc2FmZSB0b1xuICAgICAgLy8gcmV0cnksIGFuZCBhIGxvc3QgcmV0cnkgb25seSBjb3N0cyBvbmUgZXh0cmEgbWludC5cbiAgICAgIGlkZW1wb3RlbnQ6IHRydWUsXG4gICAgfSk7XG4gICAgc3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgYm9keSA9IHJlcy5ib2R5O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgbG9nZ2VyLndhcm4oJ0FjY2Vzcy1rZXkgZXhjaGFuZ2UgZmFpbGVkIHRvIHJlYWNoIHBsYXRmb3JtJywge1xuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuXG4gIGlmIChzdGF0dXMgPT09IDQwMSB8fCBzdGF0dXMgPT09IDQwMyB8fCBzdGF0dXMgPT09IDQwMCB8fCBzdGF0dXMgPT09IDQwNCkge1xuICAgIHJlamVjdGlvbkNhY2hlLnNldChoYXNoLCBEYXRlLm5vdygpICsgTkVHQVRJVkVfVFRMX01TKTtcbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAncmVqZWN0ZWQnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246ICdyZWplY3RlZCcgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleVJlamVjdGVkRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gYm9keT8uZGF0YT8uYWNjZXNzVG9rZW47XG4gIGlmIChzdGF0dXMgPj0gNDAwIHx8IHR5cGVvZiBhY2Nlc3NUb2tlbiAhPT0gJ3N0cmluZycgfHwgYWNjZXNzVG9rZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gNDI5IGFuZCA1eHggbGFuZCBoZXJlOiBwbGF0Zm9ybSBpcyB1cCBidXQgY2FuJ3QgYW5zd2VyIHJpZ2h0IG5vdywgd2hpY2ggaXNcbiAgICAvLyBcInVua25vd25cIiwgbm90IFwiaW52YWxpZFwiIOKAlCBuZXZlciBjYWNoZSBpdCBhcyBhIHJlamVjdGlvbi5cbiAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAndW5hdmFpbGFibGUnIH0pO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2ZhaWx1cmVzX3RvdGFsJywgeyByZWFzb246IHN0YXR1cyA9PT0gNDI5ID8gJ3Rocm90dGxlZCcgOiAnc2VydmVyX2Vycm9yJyB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yKCk7XG4gIH1cblxuICBjb25zdCB0dGxTZWNvbmRzID0gdHlwZW9mIGJvZHk/LmRhdGE/LmV4cGlyZXNJbiA9PT0gJ251bWJlcicgJiYgYm9keS5kYXRhLmV4cGlyZXNJbiA+IDBcbiAgICA/IGJvZHkuZGF0YS5leHBpcmVzSW5cbiAgICA6IDYwO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlbnRyeTogQ2FjaGVFbnRyeSA9IHtcbiAgICB0b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgZXhwaXJlc0F0OiBub3cgKyB0dGxTZWNvbmRzICogMTAwMCxcbiAgICByZWZyZXNoQXQ6IGppdHRlcmVkUmVmcmVzaEF0KG5vdywgdHRsU2Vjb25kcyksXG4gIH07XG4gIHRva2VuQ2FjaGUuc2V0KGhhc2gsIGVudHJ5KTtcbiAgcmVqZWN0aW9uQ2FjaGUuZGVsZXRlKGhhc2gpO1xuICBldmljdElmRnVsbCgpO1xuICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV90b3RhbCcsIHsgcmVzdWx0OiAnc3VjY2VzcycgfSk7XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIEV4Y2hhbmdlLCBzaGFyaW5nIGEgc2luZ2xlIGluLWZsaWdodCByb3VuZC10cmlwIHBlciBrZXkuICovXG5mdW5jdGlvbiBleGNoYW5nZU9uY2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBwZW5kaW5nID0gaW5GbGlnaHQuZ2V0KGhhc2gpO1xuICBpZiAocGVuZGluZykgcmV0dXJuIHBlbmRpbmc7XG4gIGNvbnN0IHByb21pc2UgPSBwZXJmb3JtRXhjaGFuZ2Uoa2V5LCBoYXNoKS5maW5hbGx5KCgpID0+IGluRmxpZ2h0LmRlbGV0ZShoYXNoKSk7XG4gIGluRmxpZ2h0LnNldChoYXNoLCBwcm9taXNlKTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8qKlxuICogVGhlIEpXVCBmb3IgYGtleWAsIGZyb20gY2FjaGUgd2hlbiBwb3NzaWJsZS4gVGhyb3dzIHtAbGluayBBcGlLZXlSZWplY3RlZEVycm9yfVxuICogd2hlbiBwbGF0Zm9ybSByZWZ1c2VkIHRoZSBrZXkgYW5kIHtAbGluayBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3J9IHdoZW5cbiAqIGl0IGNvdWxkIG5vdCBiZSBhc2tlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4Y2hhbmdlQXBpS2V5KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGFzaCA9IGhhc2hBcGlLZXkoa2V5KTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICBjb25zdCByZWplY3RlZFVudGlsID0gcmVqZWN0aW9uQ2FjaGUuZ2V0KGhhc2gpO1xuICBpZiAocmVqZWN0ZWRVbnRpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHJlamVjdGVkVW50aWwgPiBub3cpIHtcbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWplY3RlZCcgfSk7XG4gICAgICB0aHJvdyBuZXcgQXBpS2V5UmVqZWN0ZWRFcnJvcigpO1xuICAgIH1cbiAgICByZWplY3Rpb25DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cblxuICBjb25zdCBjYWNoZWQgPSB0b2tlbkNhY2hlLmdldChoYXNoKTtcbiAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuZXhwaXJlc0F0ID4gbm93KSB7XG4gICAgaWYgKGNhY2hlZC5yZWZyZXNoQXQgPD0gbm93ICYmICFpbkZsaWdodC5oYXMoaGFzaCkpIHtcbiAgICAgIC8vIEVhcmx5IHJlZnJlc2g6IHdhcm0gdGhlIGNhY2hlIFdJVEhPVVQgbWFraW5nIHRoaXMgcmVxdWVzdCB3YWl0LiBBIGZhaWxlZFxuICAgICAgLy8gYmFja2dyb3VuZCByZWZyZXNoIGlzIG5vdCB0aGlzIHJlcXVlc3QncyBwcm9ibGVtIOKAlCB0aGUgY2FjaGVkIHRva2VuIGlzXG4gICAgICAvLyBzdGlsbCB2YWxpZCwgYW5kIHRoZSBuZXh0IHJlcXVlc3QgcGFzdCBleHBpcnkgZXhjaGFuZ2VzIGlubGluZS5cbiAgICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWZyZXNoJyB9KTtcbiAgICAgIHZvaWQgZXhjaGFuZ2VPbmNlKGtleSwgaGFzaCkuY2F0Y2goKCkgPT4geyAvKiBsb2dnZWQgKyBjb3VudGVkIGluIHBlcmZvcm1FeGNoYW5nZSAqLyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ2hpdCcgfSk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWQudG9rZW47XG4gIH1cblxuICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAnbWlzcycgfSk7XG4gIHJldHVybiAoYXdhaXQgZXhjaGFuZ2VPbmNlKGtleSwgaGFzaCkpLnRva2VuO1xufVxuXG4vKipcbiAqIERyb3AgZXZlcnkgY2FjaGVkIGV4Y2hhbmdlLiBGb3IgdGVzdHMgYW5kIGZvciBhIHByb2Nlc3MgdGhhdCB3YW50cyB0byBmb3JjZVxuICogcmUtdmFsaWRhdGlvbjsgcHJvZHVjdGlvbiByZWxpZXMgb24gdGhlIFRUTHMgYWJvdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEFwaUtleUV4Y2hhbmdlQ2FjaGUoKTogdm9pZCB7XG4gIHRva2VuQ2FjaGUuY2xlYXIoKTtcbiAgcmVqZWN0aW9uQ2FjaGUuY2xlYXIoKTtcbiAgaW5GbGlnaHQuY2xlYXIoKTtcbn1cbiJdfQ==
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1leGNoYW5nZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2FwaS1rZXktZXhjaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRWhELHVGQUF1RjtBQUN2RixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFFN0Isd0RBQXdEO0FBQ3hELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQztBQUUvQixrRkFBa0Y7QUFDbEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFakM7OzJEQUUyRDtBQUMzRCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUVwQyxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFDNUMs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QUM7SUFDbkIsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVHJhZGUgYW4gb3BhcXVlIGFjY2VzcyBrZXkgZm9yIGEgc2hvcnQtbGl2ZWQgSldULCBvbmNlLCBhbmQgY2FjaGUgaXQuXG4gKlxuICogT25seSBwbGF0Zm9ybSwgYmlsbGluZyBhbmQgcXVvdGEgaGF2ZSBNb25nb0RCLCBzbyB0aGUgc3RhdGVsZXNzIHNlcnZpY2VzXG4gKiBjYW5ub3QgbG9vayB1cCBhIGtleSBoYXNoIOKAlCBhbmQgYXNraW5nIHBsYXRmb3JtIHRvIHZhbGlkYXRlIEVWRVJZIHJlcXVlc3RcbiAqIHdvdWxkIHB1dCBpdCBvbiB0aGUgaG90IHBhdGggb2YgdGhlIHdob2xlIGZsZWV0LiBJbnN0ZWFkIHRoaXMgbW9kdWxlIGRvZXMgdGhlXG4gKiBleGNoYW5nZSBvbmNlIHBlciBrZXkgKGBQT1NUIC9hdXRoL3Rva2VuL2V4Y2hhbmdlYCkgYW5kIGNhY2hlcyB0aGUgcmV0dXJuZWRcbiAqIEpXVCBpbi1wcm9jZXNzIHVudGlsIGl0IGV4cGlyZXMsIHNvIGByZXF1aXJlQXV0aGAgb25seSBldmVyIHZlcmlmaWVzIGEgSldULlxuICpcbiAqIFByb3BlcnRpZXMgdGhhdCBtYXR0ZXI6XG4gKlxuICogLSAqKlJldm9jYXRpb24gbGF0ZW5jeSBpcyBib3VuZGVkIGJ5IHRoZSB0b2tlbiBUVEwqKiAoNSBtaW51dGVzKS4gQSByZXZva2VkXG4gKiAgIGtleSBjYW4gbm8gbG9uZ2VyIGJlIGV4Y2hhbmdlZCwgYW5kIHRoZSBjYWNoZWQgdG9rZW4gaXQgYWxyZWFkeSBwcm9kdWNlZFxuICogICBkaWVzIG9uIGl0cyBvd24uXG4gKiAtICoqRWFybHksIGppdHRlcmVkIHJlZnJlc2guKiogVGhlIGNhY2hlZCB0b2tlbiBpcyByZS1leGNoYW5nZWQgaW4gdGhlXG4gKiAgIGJhY2tncm91bmQgYXQgfjc1JSBvZiBpdHMgbGlmZSAowrEyMCUgaml0dGVyKSBzbyBubyByZXF1ZXN0IGV2ZXIgYmxvY2tzIG9uXG4gKiAgIHRoZSBleGNoYW5nZSwgYW5kIGEgZmxlZXQgb2YgcG9kcyBob2xkaW5nIHRoZSBzYW1lIGtleSBkb2Vzbid0IHN0YW1wZWRlXG4gKiAgIHBsYXRmb3JtIGF0IHRoZSBzYW1lIGluc3RhbnQuXG4gKiAtICoqT25lIGluLWZsaWdodCBleGNoYW5nZSBwZXIga2V5LioqIENvbmN1cnJlbnQgcmVxdWVzdHMgc2hhcmUgYSBwcm9taXNlLlxuICogLSAqKlNob3J0IG5lZ2F0aXZlIGNhY2hlLioqIEEga2V5IHBsYXRmb3JtIHJlamVjdGVkIGlzIHJlbWVtYmVyZWQgZm9yIDMwcywgc29cbiAqICAgYSBtaXNjb25maWd1cmVkIGNsaWVudCAob3IgYSBzY2FubmVyKSBjYW4ndCB0dXJuIGV2ZXJ5IHJlcXVlc3QgaW50byBhXG4gKiAgIHBsYXRmb3JtIHJvdW5kLXRyaXAuXG4gKiAtICoqUGxhdGZvcm0gZG93biBpcyBhIDUwMywgbmV2ZXIgYSAyMDAuKiogVGhlIGNhbGxlciBtYXBzXG4gKiAgIHtAbGluayBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3J9IHRvIFwidHJ5IGFnYWluXCIsIHdpdGggYSBtZXRyaWMg4oCUIGl0IGlzXG4gKiAgIGRlbGliZXJhdGVseSBOT1QgZmFpbC1vcGVuOiBhbiB1bnZlcmlmaWFibGUgY3JlZGVudGlhbCBpcyBub3QgYW4gaWRlbnRpdHkuXG4gKlxuICogVGhlIGV4Y2hhbmdlIHJlcXVlc3QgaXRzZWxmIGNhcnJpZXMgdGhpcyBzZXJ2aWNlJ3Mgb3duIHNpZ25lZCBzZXJ2aWNlIHRva2VuLFxuICogd2hpY2ggaXMgd2hhdCBleGVtcHRzIGl0IGZyb20gcGxhdGZvcm0ncyBJUC1rZXllZCBgL2F1dGhgIHJhdGUgbGltaXRlciAoZXZlcnlcbiAqIHBvZCdzIGV4Y2hhbmdlcyB3b3VsZCBvdGhlcndpc2Ugc2hhcmUgb25lIGJ1Y2tldCkgYW5kIG5hbWVzIHRoZSBjYWxsZXIgaW5cbiAqIHBsYXRmb3JtJ3MgYXVkaXQgdHJhaWwuXG4gKi9cblxuaW1wb3J0IHsgQ0xJRU5UX1ZFUlNJT05fSEVBREVSIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9jbGllbnQtdmVyc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHsgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvc3lzdGVtLW9yZy5qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBoYXNoQXBpS2V5IH0gZnJvbSAnLi4vdXRpbHMvYXBpLWtleS5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignYXBpLWtleS1leGNoYW5nZScpO1xuXG4vKiogTW9zdCBkaXN0aW5jdCBrZXlzIGhlbGQgaW4gdGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSBiZWZvcmUgdGhlIG9sZGVzdCBhcmUgZHJvcHBlZC4gKi9cbmNvbnN0IE1BWF9DQUNIRURfS0VZUyA9IDEwMDA7XG5cbi8qKiBIb3cgbG9uZyBhIHBsYXRmb3JtIFJFSkVDVElPTiBpcyByZW1lbWJlcmVkIChtcykuICovXG5jb25zdCBORUdBVElWRV9UVExfTVMgPSAzMF8wMDA7XG5cbi8qKiBGcmFjdGlvbiBvZiBhIHRva2VuJ3MgbGlmZSBhZnRlciB3aGljaCBhIGJhY2tncm91bmQgcmUtZXhjaGFuZ2UgaXMgc3RhcnRlZC4gKi9cbmNvbnN0IFJFRlJFU0hfQVRfRlJBQ1RJT04gPSAwLjc1O1xuXG4vKiogwrEgaml0dGVyIGFwcGxpZWQgdG8gdGhlIHJlZnJlc2ggcG9pbnQsIGFzIGEgZnJhY3Rpb24gb2YgdGhlIHRva2VuJ3MgbGlmZS5cbiAqICBXaWRlIGVub3VnaCB0byBkZS1zeW5jaHJvbml6ZSBhIGZsZWV0LCBuYXJyb3cgZW5vdWdoIHRvIGxlYXZlIGEgY2xlYXIgdGFpbCBvZlxuICogIHN0aWxsLXZhbGlkIHRva2VuIGFmdGVyIHRoZSBsYXRlc3QgcG9zc2libGUgcmVmcmVzaC4gKi9cbmNvbnN0IFJFRlJFU0hfSklUVEVSX0ZSQUNUSU9OID0gMC4xO1xuXG4vKiogVGhlIGtleSB3YXMgcHJlc2VudGVkIHRvIHBsYXRmb3JtIGFuZCByZWZ1c2VkICh1bmtub3duLCByZXZva2VkLCBleHBpcmVkKS4gKi9cbmV4cG9ydCBjbGFzcyBBcGlLZXlSZWplY3RlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gJ0FjY2VzcyBrZXkgaXMgaW52YWxpZCwgcmV2b2tlZCBvciBleHBpcmVkJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcGlLZXlSZWplY3RlZEVycm9yJztcbiAgfVxufVxuXG4vKiogUGxhdGZvcm0gY291bGQgbm90IGJlIHJlYWNoZWQgKG9yIGFuc3dlcmVkIDV4eCkg4oCUIHRoZSBrZXkncyB2YWxpZGl0eSBpcyB1bmtub3duLiAqL1xuZXhwb3J0IGNsYXNzIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdBY2Nlc3Mta2V5IHZlcmlmaWNhdGlvbiBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yJztcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIC8qKiBUaGUgZXhjaGFuZ2VkIEpXVC4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIEVwb2NoIG1zIGF0IHdoaWNoIHRoZSBKV1Qgc3RvcHMgYmVpbmcgdXNhYmxlLiAqL1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgLyoqIEVwb2NoIG1zIGFmdGVyIHdoaWNoIGEgYmFja2dyb3VuZCByZS1leGNoYW5nZSBzaG91bGQgYmUgc3RhcnRlZC4gKi9cbiAgcmVmcmVzaEF0OiBudW1iZXI7XG59XG5cbi8qKiBDYWNoZSBvZiBzdWNjZXNzZnVsIGV4Y2hhbmdlcywga2V5ZWQgYnkgYHNoYTI1NihrZXkpYCDigJQgbmV2ZXIgYnkgdGhlIGtleSBpdHNlbGYuICovXG5jb25zdCB0b2tlbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG4vKiogQ2FjaGUgb2YgcmVqZWN0aW9ucywga2V5ZWQgdGhlIHNhbWUgd2F5OyB2YWx1ZSBpcyB0aGUgZXBvY2ggbXMgaXQgZXhwaXJlcy4gKi9cbmNvbnN0IHJlamVjdGlvbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbi8qKiBJbi1mbGlnaHQgZXhjaGFuZ2VzLCBzbyBjb25jdXJyZW50IHJlcXVlc3RzIGZvciBvbmUga2V5IHNoYXJlIGEgcm91bmQtdHJpcC4gKi9cbmNvbnN0IGluRmxpZ2h0ID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8Q2FjaGVFbnRyeT4+KCk7XG5cbi8qKiBUaGUgc2VydmljZSBuYW1lIG1pbnRlZCBpbnRvIHRoZSBleGNoYW5nZSBjYWxsJ3Mgb3duIHNlcnZpY2UgdG9rZW4uICovXG5sZXQgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ3Vua25vd24nO1xuXG4vKipcbiAqIE5hbWUgdGhpcyBwcm9jZXNzIGluIHRoZSBleGNoYW5nZSBjYWxsJ3Mgc2VydmljZSB0b2tlbi4gQ2FsbGVkIGZyb21cbiAqIGB3aXJlU2VydmljZVNlY3VyaXR5YCBhdCBib290IChhbmQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlLCB3aGljaCB3aXJlcyBpdHNcbiAqIGJvb3Qgc2VjdXJpdHkgYnkgaGFuZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcGlLZXlFeGNoYW5nZVNlcnZpY2VOYW1lKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBzZXJ2aWNlTmFtZSA9IG5hbWU7XG59XG5cbi8qKiBQbGF0Zm9ybSdzIGluLWNsdXN0ZXIgYWRkcmVzcyDigJQgdGhlIHNhbWUgZW52IHBhaXIgZXZlcnkgb3RoZXIgY2FsbGVyIHVzZXMuICovXG5mdW5jdGlvbiBwbGF0Zm9ybUNsaWVudCgpOiBJbnRlcm5hbEh0dHBDbGllbnQge1xuICByZXR1cm4gbmV3IEludGVybmFsSHR0cENsaWVudCh7XG4gICAgLi4uc2VydmljZUVuZHBvaW50KCdwbGF0Zm9ybScpLFxuICAgIHRpbWVvdXQ6IGVudkludCgnQVBJX0tFWV9FWENIQU5HRV9USU1FT1VUX01TJywgMzAwMCwgeyBtaW46IDEgfSksXG4gIH0pO1xufVxuXG4vKiogVGhlIGVwb2NoIG1zIGF0IHdoaWNoIGEgdG9rZW4gd2l0aCBgdHRsU2Vjb25kc2Agb2YgbGlmZSBzaG91bGQgYmUgcmVmcmVzaGVkIGVhcmx5LiAqL1xuZnVuY3Rpb24gaml0dGVyZWRSZWZyZXNoQXQoaXNzdWVkQXQ6IG51bWJlciwgdHRsU2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbGlmZU1zID0gdHRsU2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IGppdHRlciA9IChNYXRoLnJhbmRvbSgpICogMiAtIDEpICogUkVGUkVTSF9KSVRURVJfRlJBQ1RJT047XG4gIC8vIENsYW1wIGludG8gKDAsIDEpIHNvIHRoZSByZWZyZXNoIHBvaW50IGlzIGFsd2F5cyBiZWZvcmUgZXhwaXJ5IGFuZCBuZXZlciBpblxuICAvLyB0aGUgcGFzdCwgd2hhdGV2ZXIgVFRMIHBsYXRmb3JtIHJldHVybnMuXG4gIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5taW4oMC45NSwgTWF0aC5tYXgoMC4xLCBSRUZSRVNIX0FUX0ZSQUNUSU9OICsgaml0dGVyKSk7XG4gIHJldHVybiBpc3N1ZWRBdCArIGxpZmVNcyAqIGZyYWN0aW9uO1xufVxuXG4vKiogRHJvcCB0aGUgb2xkZXN0IGVudHJpZXMgb25jZSB0aGUgY2FjaGUgaXMgb3ZlciBpdHMgY2FwIChrZXlzIGFyZSBsb25nLWxpdmVkLCB0b2tlbnMgYXJlIG5vdCkuICovXG5mdW5jdGlvbiBldmljdElmRnVsbCgpOiB2b2lkIHtcbiAgaWYgKHRva2VuQ2FjaGUuc2l6ZSA8PSBNQVhfQ0FDSEVEX0tFWVMpIHJldHVybjtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBbaGFzaCwgZW50cnldIG9mIHRva2VuQ2FjaGUpIHtcbiAgICBpZiAoZW50cnkuZXhwaXJlc0F0IDw9IG5vdykgdG9rZW5DYWNoZS5kZWxldGUoaGFzaCk7XG4gIH1cbiAgLy8gTWFwIHByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIg4oCUIGRyb3AgZnJvbSB0aGUgZnJvbnQgdW50aWwgYmFjayB1bmRlciB0aGUgY2FwLlxuICB3aGlsZSAodG9rZW5DYWNoZS5zaXplID4gTUFYX0NBQ0hFRF9LRVlTKSB7XG4gICAgY29uc3Qgb2xkZXN0ID0gdG9rZW5DYWNoZS5rZXlzKCkubmV4dCgpO1xuICAgIGlmIChvbGRlc3QuZG9uZSkgYnJlYWs7XG4gICAgdG9rZW5DYWNoZS5kZWxldGUob2xkZXN0LnZhbHVlKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRXhjaGFuZ2VSZXNwb25zZSB7XG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICBkYXRhPzogeyBhY2Nlc3NUb2tlbj86IHN0cmluZzsgZXhwaXJlc0luPzogbnVtYmVyIH07XG59XG5cbi8qKiBPbmUgcmVhbCByb3VuZC10cmlwIHRvIHBsYXRmb3JtLiBUaHJvd3MgdGhlIHR3byB0eXBlZCBlcnJvcnMgYWJvdmUuICovXG5hc3luYyBmdW5jdGlvbiBwZXJmb3JtRXhjaGFuZ2Uoa2V5OiBzdHJpbmcsIGhhc2g6IHN0cmluZywgY2xpZW50VmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeT4ge1xuICBjb25zdCBjbGllbnQgPSBwbGF0Zm9ybUNsaWVudCgpO1xuICBsZXQgc3RhdHVzOiBudW1iZXI7XG4gIGxldCBib2R5OiBFeGNoYW5nZVJlc3BvbnNlO1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wb3N0PEV4Y2hhbmdlUmVzcG9uc2U+KCcvYXV0aC90b2tlbi9leGNoYW5nZScsIHsga2V5IH0sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoeyBzZXJ2aWNlTmFtZSwgcm9sZTogJ21lbWJlcicsIG9yZ0lkOiBTWVNURU1fT1JHX0lEIH0pLFxuICAgICAgICAvLyBUaGUgQ0xJIHZlcnNpb24gdGhlIGtleSdzIGhvbGRlciBpcyBjYWxsaW5nIHdpdGggKHZhbGlkYXRlZCBieSB0aGVcbiAgICAgICAgLy8gY2FsbGVyKSwgc28gcGxhdGZvcm0gY2FuIHN0YW1wIGl0IG9uIHRoZSBrZXkgKFwibGFzdCBDTEkgdmVyc2lvblwiKSBmb3JcbiAgICAgICAgLy8gb3JnIGFkbWlucy4gQWJzZW50IOKGkiBwbGF0Zm9ybSBrZWVwcyB0aGUgdmVyc2lvbiBpdCBhbHJlYWR5IGhhcy5cbiAgICAgICAgLi4uKGNsaWVudFZlcnNpb24gPyB7IFtDTElFTlRfVkVSU0lPTl9IRUFERVJdOiBjbGllbnRWZXJzaW9uIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgLy8gVGhlIGV4Y2hhbmdlIGlzIGEgcHVyZSByZWFkIG9mIHRoZSBrZXkgcmVjb3JkIHBsdXMgYSB0b2tlbiBtaW50IOKAlCBzYWZlIHRvXG4gICAgICAvLyByZXRyeSwgYW5kIGEgbG9zdCByZXRyeSBvbmx5IGNvc3RzIG9uZSBleHRyYSBtaW50LlxuICAgICAgaWRlbXBvdGVudDogdHJ1ZSxcbiAgICB9KTtcbiAgICBzdGF0dXMgPSByZXMuc3RhdHVzQ29kZTtcbiAgICBib2R5ID0gcmVzLmJvZHk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ3VuYXZhaWxhYmxlJyB9KTtcbiAgICBsb2dnZXIud2FybignQWNjZXNzLWtleSBleGNoYW5nZSBmYWlsZWQgdG8gcmVhY2ggcGxhdGZvcm0nLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcigpO1xuICB9XG5cbiAgaWYgKHN0YXR1cyA9PT0gNDAxIHx8IHN0YXR1cyA9PT0gNDAzIHx8IHN0YXR1cyA9PT0gNDAwIHx8IHN0YXR1cyA9PT0gNDA0KSB7XG4gICAgcmVqZWN0aW9uQ2FjaGUuc2V0KGhhc2gsIERhdGUubm93KCkgKyBORUdBVElWRV9UVExfTVMpO1xuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICdyZWplY3RlZCcgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogJ3JlamVjdGVkJyB9KTtcbiAgICB0aHJvdyBuZXcgQXBpS2V5UmVqZWN0ZWRFcnJvcigpO1xuICB9XG5cbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBib2R5Py5kYXRhPy5hY2Nlc3NUb2tlbjtcbiAgaWYgKHN0YXR1cyA+PSA0MDAgfHwgdHlwZW9mIGFjY2Vzc1Rva2VuICE9PSAnc3RyaW5nJyB8fCBhY2Nlc3NUb2tlbi5sZW5ndGggPT09IDApIHtcbiAgICAvLyA0MjkgYW5kIDV4eCBsYW5kIGhlcmU6IHBsYXRmb3JtIGlzIHVwIGJ1dCBjYW4ndCBhbnN3ZXIgcmlnaHQgbm93LCB3aGljaCBpc1xuICAgIC8vIFwidW5rbm93blwiLCBub3QgXCJpbnZhbGlkXCIg4oCUIG5ldmVyIGNhY2hlIGl0IGFzIGEgcmVqZWN0aW9uLlxuICAgIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICd1bmF2YWlsYWJsZScgfSk7XG4gICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfZmFpbHVyZXNfdG90YWwnLCB7IHJlYXNvbjogc3RhdHVzID09PSA0MjkgPyAndGhyb3R0bGVkJyA6ICdzZXJ2ZXJfZXJyb3InIH0pO1xuICAgIHRocm93IG5ldyBBcGlLZXlFeGNoYW5nZVVuYXZhaWxhYmxlRXJyb3IoKTtcbiAgfVxuXG4gIGNvbnN0IHR0bFNlY29uZHMgPSB0eXBlb2YgYm9keT8uZGF0YT8uZXhwaXJlc0luID09PSAnbnVtYmVyJyAmJiBib2R5LmRhdGEuZXhwaXJlc0luID4gMFxuICAgID8gYm9keS5kYXRhLmV4cGlyZXNJblxuICAgIDogNjA7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0ge1xuICAgIHRva2VuOiBhY2Nlc3NUb2tlbixcbiAgICBleHBpcmVzQXQ6IG5vdyArIHR0bFNlY29uZHMgKiAxMDAwLFxuICAgIHJlZnJlc2hBdDogaml0dGVyZWRSZWZyZXNoQXQobm93LCB0dGxTZWNvbmRzKSxcbiAgfTtcbiAgdG9rZW5DYWNoZS5zZXQoaGFzaCwgZW50cnkpO1xuICByZWplY3Rpb25DYWNoZS5kZWxldGUoaGFzaCk7XG4gIGV2aWN0SWZGdWxsKCk7XG4gIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX3RvdGFsJywgeyByZXN1bHQ6ICdzdWNjZXNzJyB9KTtcbiAgcmV0dXJuIGVudHJ5O1xufVxuXG4vKiogRXhjaGFuZ2UsIHNoYXJpbmcgYSBzaW5nbGUgaW4tZmxpZ2h0IHJvdW5kLXRyaXAgcGVyIGtleS4gKi9cbmZ1bmN0aW9uIGV4Y2hhbmdlT25jZShrZXk6IHN0cmluZywgaGFzaDogc3RyaW5nLCBjbGllbnRWZXJzaW9uPzogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUVudHJ5PiB7XG4gIGNvbnN0IHBlbmRpbmcgPSBpbkZsaWdodC5nZXQoaGFzaCk7XG4gIGlmIChwZW5kaW5nKSByZXR1cm4gcGVuZGluZztcbiAgY29uc3QgcHJvbWlzZSA9IHBlcmZvcm1FeGNoYW5nZShrZXksIGhhc2gsIGNsaWVudFZlcnNpb24pLmZpbmFsbHkoKCkgPT4gaW5GbGlnaHQuZGVsZXRlKGhhc2gpKTtcbiAgaW5GbGlnaHQuc2V0KGhhc2gsIHByb21pc2UpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLyoqXG4gKiBUaGUgSldUIGZvciBga2V5YCwgZnJvbSBjYWNoZSB3aGVuIHBvc3NpYmxlLiBUaHJvd3Mge0BsaW5rIEFwaUtleVJlamVjdGVkRXJyb3J9XG4gKiB3aGVuIHBsYXRmb3JtIHJlZnVzZWQgdGhlIGtleSBhbmQge0BsaW5rIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcn0gd2hlblxuICogaXQgY291bGQgbm90IGJlIGFza2VkLiBgY2xpZW50VmVyc2lvbmAgaXMgdGhlIHByZXNlbnRpbmcgcmVxdWVzdCdzXG4gKiBgWC1QYi1DbGllbnQtVmVyc2lvbmAgKGFscmVhZHkgdmFsaWRhdGVkIOKAlCBzZWUgYGNsaWVudFZlcnNpb25PZmApLCBmb3J3YXJkZWRcbiAqIHNvIHBsYXRmb3JtIGNhbiByZWNvcmQgd2hpY2ggQ0xJIHRoZSBrZXkgaXMgdXNlZCB3aXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhjaGFuZ2VBcGlLZXkoa2V5OiBzdHJpbmcsIGNsaWVudFZlcnNpb24/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoYXNoID0gaGFzaEFwaUtleShrZXkpO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gIGNvbnN0IHJlamVjdGVkVW50aWwgPSByZWplY3Rpb25DYWNoZS5nZXQoaGFzaCk7XG4gIGlmIChyZWplY3RlZFVudGlsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocmVqZWN0ZWRVbnRpbCA+IG5vdykge1xuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ3JlamVjdGVkJyB9KTtcbiAgICAgIHRocm93IG5ldyBBcGlLZXlSZWplY3RlZEVycm9yKCk7XG4gICAgfVxuICAgIHJlamVjdGlvbkNhY2hlLmRlbGV0ZShoYXNoKTtcbiAgfVxuXG4gIGNvbnN0IGNhY2hlZCA9IHRva2VuQ2FjaGUuZ2V0KGhhc2gpO1xuICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHBpcmVzQXQgPiBub3cpIHtcbiAgICBpZiAoY2FjaGVkLnJlZnJlc2hBdCA8PSBub3cgJiYgIWluRmxpZ2h0LmhhcyhoYXNoKSkge1xuICAgICAgLy8gRWFybHkgcmVmcmVzaDogd2FybSB0aGUgY2FjaGUgV0lUSE9VVCBtYWtpbmcgdGhpcyByZXF1ZXN0IHdhaXQuIEEgZmFpbGVkXG4gICAgICAvLyBiYWNrZ3JvdW5kIHJlZnJlc2ggaXMgbm90IHRoaXMgcmVxdWVzdCdzIHByb2JsZW0g4oCUIHRoZSBjYWNoZWQgdG9rZW4gaXNcbiAgICAgIC8vIHN0aWxsIHZhbGlkLCBhbmQgdGhlIG5leHQgcmVxdWVzdCBwYXN0IGV4cGlyeSBleGNoYW5nZXMgaW5saW5lLlxuICAgICAgZW1pdENvdW50ZXIoJ2FwaV9rZXlfZXhjaGFuZ2VfY2FjaGVfdG90YWwnLCB7IHJlc3VsdDogJ3JlZnJlc2gnIH0pO1xuICAgICAgdm9pZCBleGNoYW5nZU9uY2Uoa2V5LCBoYXNoLCBjbGllbnRWZXJzaW9uKS5jYXRjaCgoKSA9PiB7IC8qIGxvZ2dlZCArIGNvdW50ZWQgaW4gcGVyZm9ybUV4Y2hhbmdlICovIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0Q291bnRlcignYXBpX2tleV9leGNoYW5nZV9jYWNoZV90b3RhbCcsIHsgcmVzdWx0OiAnaGl0JyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZC50b2tlbjtcbiAgfVxuXG4gIGVtaXRDb3VudGVyKCdhcGlfa2V5X2V4Y2hhbmdlX2NhY2hlX3RvdGFsJywgeyByZXN1bHQ6ICdtaXNzJyB9KTtcbiAgcmV0dXJuIChhd2FpdCBleGNoYW5nZU9uY2Uoa2V5LCBoYXNoLCBjbGllbnRWZXJzaW9uKSkudG9rZW47XG59XG5cbi8qKlxuICogRHJvcCBldmVyeSBjYWNoZWQgZXhjaGFuZ2UuIEZvciB0ZXN0cyBhbmQgZm9yIGEgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIGZvcmNlXG4gKiByZS12YWxpZGF0aW9uOyBwcm9kdWN0aW9uIHJlbGllcyBvbiB0aGUgVFRMcyBhYm92ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0QXBpS2V5RXhjaGFuZ2VDYWNoZSgpOiB2b2lkIHtcbiAgdG9rZW5DYWNoZS5jbGVhcigpO1xuICByZWplY3Rpb25DYWNoZS5jbGVhcigpO1xuICBpbkZsaWdodC5jbGVhcigpO1xufVxuIl19
@@ -8,6 +8,8 @@ export interface AuditCorrelation {
8
8
  codebuildBuildId?: string;
9
9
  /** `X-Source-Event-Id` — the upstream event (EventBridge / webhook) being handled. */
10
10
  sourceEventId?: string;
11
+ /** `X-Pb-Client-Version` — the pipeline-manager CLI version that made the call. */
12
+ clientVersion?: string;
11
13
  }
12
14
  /** Background-work identity for events recorded outside any request. */
13
15
  export interface AuditJobContext {
@@ -76,6 +78,7 @@ export declare const AUDIT_CORRELATION_HEADERS: {
76
78
  readonly pipelineExecutionId: 'x-pipeline-execution-id';
77
79
  readonly codebuildBuildId: 'x-codebuild-build-id';
78
80
  readonly sourceEventId: 'x-source-event-id';
81
+ readonly clientVersion: 'x-pb-client-version';
79
82
  };
80
83
  /**
81
84
  * Validate an inbound correlation id (`X-Request-Id`, `X-CodeBuild-Build-Id`, …):
@@ -38,6 +38,7 @@ export const AUDIT_CORRELATION_HEADERS = {
38
38
  pipelineExecutionId: 'x-pipeline-execution-id',
39
39
  codebuildBuildId: 'x-codebuild-build-id',
40
40
  sourceEventId: 'x-source-event-id',
41
+ clientVersion: 'x-pb-client-version',
41
42
  };
42
43
  /** Max length of a stored correlation id / request id. */
43
44
  const MAX_CORRELATION_LEN = 128;
@@ -131,4 +132,4 @@ export function auditAuthBlock(user) {
131
132
  }
132
133
  return Object.keys(block).length > 0 ? block : undefined;
133
134
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hdWRpdC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFzRTVELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQWlCLEVBQWdCLENBQUM7QUFFdEQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBSSxHQUFpQixFQUFFLEVBQVc7SUFDbkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFpQixLQUFLO1FBQ2hDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2xJLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDUixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQsbUVBQW1FO0FBQ25F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QUFxRTtRQUNyRSxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoSCxDQUFDO0lBQ0YsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBZ0MsRUFBRSxDQUFDO1FBQ3BFLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBBbWJpZW50IGF1ZGl0IGNvbnRleHQ6IHRoZSByZXF1ZXN0L2pvYiBmYWN0cyBldmVyeSBhdWRpdCBldmVudCBzaG91bGQgY2FycnlcbiAqIChyZXF1ZXN0IGlkLCB0cmFjZSBpZCwgY2xpZW50IGlwIC8gdXNlciBhZ2VudCwgdGhlIHZlcmlmaWVkIHByaW5jaXBhbCdzXG4gKiBjcmVkZW50aWFsLCBpbmJvdW5kIGNvcnJlbGF0aW9uIGlkcykgd2l0aG91dCBlYWNoIG9mIHRoZSB+MTUwIGByZWNvcmRBdWRpdGBcbiAqIGNhbGwgc2l0ZXMgdGhyZWFkaW5nIHRoZW0gdGhyb3VnaCBieSBoYW5kLlxuICpcbiAqIGFwaS1zZXJ2ZXIncyByZXF1ZXN0IHBpcGVsaW5lIG9wZW5zIGEgc2NvcGUgcGVyIGluYm91bmQgcmVxdWVzdFxuICogKGBhdWRpdENvbnRleHRGcm9tUmVxdWVzdGAgKyBgcnVuV2l0aEF1ZGl0Q29udGV4dGApOyBiYWNrZ3JvdW5kIHdvcmsgb3BlbnMgaXRzXG4gKiBvd24gd2l0aCBgcnVuV2l0aEF1ZGl0Q29udGV4dCh7IGpvYjogeyBqb2JJZCwgcnVuSWQsIHRyaWdnZXIgfSB9LCBmbilgLiBUaGVcbiAqIHJlbW90ZS1hdWRpdCBjbGllbnQgcmVhZHMgdGhlIHNjb3BlIHdoZW4gYW4gZXZlbnQgaXMgUkVDT1JERUQgYW5kIHN0YW1wcyB0aGVcbiAqIHJlc3VsdCBvbnRvIHRoZSBldmVudCBpdHNlbGYsIHNvIGEgc3Bvb2xlZCByZS1kZWxpdmVyeSBtaW51dGVzIGxhdGVyIHN0aWxsXG4gKiBjYXJyaWVzIHRoZSBjb250ZXh0IG9mIHRoZSBtb21lbnQgaXQgaGFwcGVuZWQuXG4gKi9cblxuaW1wb3J0IHsgQXN5bmNMb2NhbFN0b3JhZ2UgfSBmcm9tICdhc3luY19ob29rcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IHNlcnZpY2VOYW1lT2YgfSBmcm9tICcuLi9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB7IGlzU3lzdGVtT3JnSWQgfSBmcm9tICcuLi9taWRkbGV3YXJlL3N5c3RlbS1vcmcuanMnO1xuaW1wb3J0IHR5cGUgeyBKd3RQYXlsb2FkIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcblxuLyoqIEluYm91bmQgY29ycmVsYXRpb24gaWRzIGEgY2FsbGVyIChDTEksIExhbWJkYSwgQ29kZUJ1aWxkKSBtYXkgZm9yd2FyZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRDb3JyZWxhdGlvbiB7XG4gIC8qKiBgWC1QaXBlbGluZS1FeGVjdXRpb24tSWRgIOKAlCB0aGUgQ29kZVBpcGVsaW5lIGV4ZWN1dGlvbiB0aGF0IG1hZGUgdGhlIGNhbGwuICovXG4gIHBpcGVsaW5lRXhlY3V0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKiBgWC1Db2RlQnVpbGQtQnVpbGQtSWRgIOKAlCB0aGUgQ29kZUJ1aWxkIGJ1aWxkIHRoYXQgbWFkZSB0aGUgY2FsbC4gKi9cbiAgY29kZWJ1aWxkQnVpbGRJZD86IHN0cmluZztcbiAgLyoqIGBYLVNvdXJjZS1FdmVudC1JZGAg4oCUIHRoZSB1cHN0cmVhbSBldmVudCAoRXZlbnRCcmlkZ2UgLyB3ZWJob29rKSBiZWluZyBoYW5kbGVkLiAqL1xuICBzb3VyY2VFdmVudElkPzogc3RyaW5nO1xufVxuXG4vKiogQmFja2dyb3VuZC13b3JrIGlkZW50aXR5IGZvciBldmVudHMgcmVjb3JkZWQgb3V0c2lkZSBhbnkgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRKb2JDb250ZXh0IHtcbiAgLyoqIFN0YWJsZSBqb2IgbmFtZSAoZS5nLiBgcmVnaXN0cnktZ2NgLCBgdnVsbi1yZXNjYW5gKS4gKi9cbiAgam9iSWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIHJ1bidzIGlkIChhIEJ1bGxNUSBqb2IgaWQsIGEgc3dlZXAncyB1dWlkKS4gKi9cbiAgcnVuSWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGF0IHN0YXJ0ZWQgaXQ6IGBzY2hlZHVsZWAsIGBxdWV1ZWAsIGBzdGFydHVwYCwgYG1hbnVhbGAsIOKApiAqL1xuICB0cmlnZ2VyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29udGV4dCB7XG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgdHJhY2VJZD86IHN0cmluZztcbiAgaXA/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgY29ycmVsYXRpb24/OiBBdWRpdENvcnJlbGF0aW9uO1xuICBqb2I/OiBBdWRpdEpvYkNvbnRleHQ7XG4gIC8qKlxuICAgKiBUaGUgVkVSSUZJRUQgcHJpbmNpcGFsIG9mIHRoZSBpbmJvdW5kIHJlcXVlc3QuIEEgZ2V0dGVyLCBub3QgYSB2YWx1ZTogdGhlXG4gICAqIHNjb3BlIG9wZW5zIGJlZm9yZSBgcmVxdWlyZUF1dGhgIHJ1bnMsIHNvIGByZXEudXNlcmAgaXMgcmVhZCBhdCB0aGUgbW9tZW50XG4gICAqIGFuIGV2ZW50IGlzIHJlY29yZGVkLlxuICAgKi9cbiAgcHJpbmNpcGFsPzogKCkgPT4gSnd0UGF5bG9hZCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgY3JlZGVudGlhbCBiZWhpbmQgYW4gYXVkaXRlZCBhY3Rpb24g4oCUIHJlc2VydmVkIGBkZXRhaWxzLl9hdXRoYCwgc28gaXQgaXNcbiAqIGNvdmVyZWQgYnkgdGhlIGF1ZGl0IGhhc2ggY2hhaW4gKHdoaWNoIGhhc2hlcyBgZGV0YWlsc2ApLiBCdWlsdCBvbmx5IGZyb20gYVxuICogdmVyaWZpZWQgdG9rZW4sIG5ldmVyIGZyb20gY2FsbGVyIGlucHV0OyB0aGUgcmVtb3RlLWF1ZGl0IGNsaWVudCBvdmVyd3JpdGVzXG4gKiBhbnkgYF9hdXRoYCBhIGNhbGwgc2l0ZSBwdXQgaW4gYGRldGFpbHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0QXV0aEJsb2NrIHtcbiAgcHJpbmNpcGFsVHlwZT86IHN0cmluZztcbiAgLyoqIFRoZSBpbnRlcm5hbCBzZXJ2aWNlLCB3aGVuIHRoZSBwcmluY2lwYWwgaXMgYSBzZXJ2aWNlIHRva2VuLiAqL1xuICBzZXJ2aWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJldm9jYWJsZSBjcmVkZW50aWFsOiB0aGUgYWNjZXNzIGtleSAoUEFUIC8gc2VydmljZS1hY2NvdW50IGtleSkgdGhlXG4gICAqIHRva2VuIGRlcml2ZXMgZnJvbSAoYHBhcmVudEtleUlkYCksIGVsc2UgdGhlIHRva2VuJ3Mgb3duIGBqdGlgIChhbiBleGNoYW5nZWRcbiAgICoga2V5IHRva2VuJ3Mga2V5IGlkLCBhbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24gaWQsIGEgc2VydmljZSBtaW50IGlkKS5cbiAgICovXG4gIGtleUlkPzogc3RyaW5nO1xuICAvKiogUmVmcmVzaC1zZXNzaW9uIHNsb3QgdGhlIHRva2VuIHdhcyBtaW50ZWQgb24uICovXG4gIHNpZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuVXNlPzogc3RyaW5nO1xuICAvKiogVGhlIHRva2VuJ3MgcGVybWlzc2lvbnMgd2VyZSBuYXJyb3dlZCB0byBhIHN1YnNldCBhdCBjcmVkZW50aWFsIGNyZWF0aW9uLiAqL1xuICBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ/OiB0cnVlO1xuICAvKiogVGhlIHByaW5jaXBhbCBpcyBhIHBsYXRmb3JtIHN1cGVyYWRtaW4uICovXG4gIHN1cGVyQWRtaW4/OiB0cnVlO1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCdzIGFjdGl2ZSBvcmcgaXMgdGhlIHN5c3RlbSBvcmcgKHZlbmRvciBzdGFmZiBhY3RpbmcgdGhyb3VnaCBhXG4gICAqIHN5c3RlbS1vcmcgam9iIFJvbGUpLiBXaXRoIGBzdXBlckFkbWluYCwgdGhpcyBpcyB3aGF0IGxldHMgdGhlIHJlbW90ZS1hdWRpdFxuICAgKiBjbGllbnQgY2xhaW0gYSBjcm9zcy1vcmcgYGFmZmVjdGVkT3JnSWRgIChzZWUgYGF1ZGl0Q3Jvc3NPcmdgKS5cbiAgICovXG4gIHN5c3RlbU9yZz86IHRydWU7XG59XG5cbmNvbnN0IHN0b3JhZ2UgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8QXVkaXRDb250ZXh0PigpO1xuXG4vKipcbiAqIFJ1biBgZm5gIGluc2lkZSBhbiBhdWRpdC1jb250ZXh0IHNjb3BlLiBOZXN0ZWQgc2NvcGVzIE1FUkdFIG9udG8gdGhlIG91dGVyXG4gKiBvbmUgKGEgam9iIHN0YXJ0ZWQgaW5zaWRlIGEgcmVxdWVzdCBrZWVwcyB0aGUgcmVxdWVzdCdzIGlkKSwgd2l0aCB0aGUgaW5uZXJcbiAqIGZpZWxkcyB3aW5uaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aEF1ZGl0Q29udGV4dDxUPihjdHg6IEF1ZGl0Q29udGV4dCwgZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3Qgb3V0ZXIgPSBzdG9yYWdlLmdldFN0b3JlKCk7XG4gIGNvbnN0IG1lcmdlZDogQXVkaXRDb250ZXh0ID0gb3V0ZXJcbiAgICA/IHsgLi4ub3V0ZXIsIC4uLmN0eCwgY29ycmVsYXRpb246IGN0eC5jb3JyZWxhdGlvbiA/PyBvdXRlci5jb3JyZWxhdGlvbiwgam9iOiBjdHguam9iID8geyAuLi5vdXRlci5qb2IsIC4uLmN0eC5qb2IgfSA6IG91dGVyLmpvYiB9XG4gICAgOiBjdHg7XG4gIHJldHVybiBzdG9yYWdlLnJ1bihtZXJnZWQsIGZuKTtcbn1cblxuLyoqIFRoZSBhY3RpdmUgYXVkaXQgY29udGV4dCwgb3IgdW5kZWZpbmVkIG91dHNpZGUgYW55IHNjb3BlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRBdWRpdENvbnRleHQoKTogQXVkaXRDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0b3JhZ2UuZ2V0U3RvcmUoKTtcbn1cblxuLyoqIEluYm91bmQgY29ycmVsYXRpb24gaGVhZGVycyByZWNvcmRlZCBpbnRvIHRoZSBhdWRpdCBjb250ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IEFVRElUX0NPUlJFTEFUSU9OX0hFQURFUlMgPSB7XG4gIHBpcGVsaW5lRXhlY3V0aW9uSWQ6ICd4LXBpcGVsaW5lLWV4ZWN1dGlvbi1pZCcsXG4gIGNvZGVidWlsZEJ1aWxkSWQ6ICd4LWNvZGVidWlsZC1idWlsZC1pZCcsXG4gIHNvdXJjZUV2ZW50SWQ6ICd4LXNvdXJjZS1ldmVudC1pZCcsXG59IGFzIGNvbnN0O1xuXG4vKiogTWF4IGxlbmd0aCBvZiBhIHN0b3JlZCBjb3JyZWxhdGlvbiBpZCAvIHJlcXVlc3QgaWQuICovXG5jb25zdCBNQVhfQ09SUkVMQVRJT05fTEVOID0gMTI4O1xuLyoqIElkcyBhcmUgb3BhcXVlIHRva2VuczogdXVpZHMsIGBwcm9qZWN0OnV1aWRgIGJ1aWxkIGlkcywgVUxJRHMuIE5vdGhpbmcgZWxzZSBpcyBzdG9yZWQuICovXG5jb25zdCBDT1JSRUxBVElPTl9JRCA9IC9eW0EtWmEtejAtOS5fOi9AKz0tXSskLztcbi8qKiBBIGJhcmUgQVdTIGFjY291bnQgaWQuICovXG5jb25zdCBCQVJFX0FDQ09VTlRfSUQgPSAvXlxcZHsxMn0kLztcblxuLyoqIE1heCBzdG9yZWQgVXNlci1BZ2VudCBsZW5ndGgg4oCUIGEgaG9zdGlsZSBoZWFkZXIgbXVzdCBub3QgYmxvYXQgYXVkaXQgcm93cy4gKi9cbmNvbnN0IE1BWF9VU0VSX0FHRU5UX0xFTiA9IDUxMjtcbi8qKiBDMCArIERFTCArIEMxIGNvbnRyb2wgY2hhcmFjdGVycywgcmVwbGFjZWQgc28gYSBVQSBjYW4ndCBpbmplY3QgaW50byB0aGUgVUkvQ1NWIGV4cG9ydC4gKi9cbmNvbnN0IENPTlRST0xfQ0hBUlMgPSBuZXcgUmVnRXhwKCdbXFxcXHUwMDAwLVxcXFx1MDAxZlxcXFx1MDA3Zi1cXFxcdTAwOWZdJywgJ2cnKTtcblxuZnVuY3Rpb24gZmlyc3RIZWFkZXIocmF3OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHJhdykgPyByYXdbMF0gOiByYXc7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4gaW5ib3VuZCBjb3JyZWxhdGlvbiBpZCAoYFgtUmVxdWVzdC1JZGAsIGBYLUNvZGVCdWlsZC1CdWlsZC1JZGAsIOKApik6XG4gKiBhIGJvdW5kZWQgb3BhcXVlIHRva2VuLCBlbHNlIGB1bmRlZmluZWRgIOKAlCBhbiBpbnZhbGlkIHZhbHVlIGlzIGRyb3BwZWQsIG5ldmVyXG4gKiB0cnVuY2F0ZWQgaW50byBzb21ldGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgZGlmZmVyZW50IGlkLlxuICpcbiAqIE5vIEFXUyBhY2NvdW50IGlkIGlzIGV2ZXIgc3RvcmVkOiBhbiBBUk4gKGEgQ29kZUJ1aWxkIGJ1aWxkIEFSTiwgc2F5KSBoYXMgaXRzXG4gKiBhY2NvdW50IHNlZ21lbnQgZW1wdGllZCwgYW5kIGEgYmFyZSAxMi1kaWdpdCB2YWx1ZSBpcyByZWZ1c2VkLiBUaGUgZ2VuZXJpY1xuICogMTItZGlnaXQtcnVuIHNjcnViIGlzIE5PVCB1c2VkIGhlcmUg4oCUIGl0IHdvdWxkIHJlZGFjdCB0aGUgYWxsLWRpZ2l0IGZpbmFsXG4gKiBncm91cCBvZiByb3VnaGx5IG9uZSB1dWlkIGluIHRocmVlIGh1bmRyZWQsIGNvcnJ1cHRpbmcgdGhlIGlkIGl0IGV4aXN0cyB0b1xuICogY29ycmVsYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVDb3JyZWxhdGlvbklkKHJhdzogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdmFsdWUgPSByYXcudHJpbSgpO1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwIHx8IHZhbHVlLmxlbmd0aCA+IE1BWF9DT1JSRUxBVElPTl9MRU4gfHwgIUNPUlJFTEFUSU9OX0lELnRlc3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoQkFSRV9BQ0NPVU5UX0lELnRlc3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoL15hcm46L2kudGVzdCh2YWx1ZSkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDQpIHBhcnRzWzRdID0gJyc7XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJzonKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBTdHJpcCBjb250cm9sIGNoYXJhY3RlcnMgZnJvbSBhIFVzZXItQWdlbnQgYW5kIGNhcCBpdHMgbGVuZ3RoOyB1bmRlZmluZWQgd2hlbiBlbXB0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZVVzZXJBZ2VudChyYXc6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHJhdyAhPT0gJ3N0cmluZycgfHwgcmF3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgY2xlYW5lZCA9IHJhdy5yZXBsYWNlKENPTlRST0xfQ0hBUlMsICcgJykudHJpbSgpO1xuICByZXR1cm4gY2xlYW5lZC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBjbGVhbmVkLnNsaWNlKDAsIE1BWF9VU0VSX0FHRU5UX0xFTik7XG59XG5cbi8qKlxuICogVGhlIGF1ZGl0IGNvbnRleHQgZm9yIGFuIGluYm91bmQgcmVxdWVzdC4gYHJlcXVlc3RJZGAgaXMgdGhlIGlkIHRoZVxuICogcmVxdWVzdC1pZCBtaWRkbGV3YXJlIHJlc29sdmVkICh2YWxpZGF0ZWQgaW5ib3VuZCBgWC1SZXF1ZXN0LUlkYCwgZWxzZSBhIGZyZXNoXG4gKiB1dWlkKTsgdGhlIHByaW5jaXBhbCBpcyByZWFkIGxhemlseSBmcm9tIGByZXEudXNlcmAgKGF1dGggcnVucyBsYXRlciBpbiB0aGVcbiAqIGNoYWluKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0Q29udGV4dEZyb21SZXF1ZXN0KHJlcTogUmVxdWVzdCwgaWRzOiB7IHJlcXVlc3RJZD86IHN0cmluZzsgdHJhY2VJZD86IHN0cmluZyB9ID0ge30pOiBBdWRpdENvbnRleHQge1xuICBjb25zdCBjb3JyZWxhdGlvbjogQXVkaXRDb3JyZWxhdGlvbiA9IHt9O1xuICBmb3IgKGNvbnN0IFtmaWVsZCwgaGVhZGVyXSBvZiBPYmplY3QuZW50cmllcyhBVURJVF9DT1JSRUxBVElPTl9IRUFERVJTKSBhcyBBcnJheTxba2V5b2YgQXVkaXRDb3JyZWxhdGlvbiwgc3RyaW5nXT4pIHtcbiAgICBjb25zdCB2YWx1ZSA9IHNhbml0aXplQ29ycmVsYXRpb25JZChmaXJzdEhlYWRlcihyZXEuaGVhZGVyc1toZWFkZXJdKSk7XG4gICAgaWYgKHZhbHVlKSBjb3JyZWxhdGlvbltmaWVsZF0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlcXVlc3RJZDogaWRzLnJlcXVlc3RJZCxcbiAgICB0cmFjZUlkOiBpZHMudHJhY2VJZCxcbiAgICBpcDogcmVxLmlwLFxuICAgIHVzZXJBZ2VudDogc2FuaXRpemVVc2VyQWdlbnQoZmlyc3RIZWFkZXIocmVxLmhlYWRlcnNbJ3VzZXItYWdlbnQnXSkpLFxuICAgIGNvcnJlbGF0aW9uOiBPYmplY3Qua2V5cyhjb3JyZWxhdGlvbikubGVuZ3RoID4gMCA/IGNvcnJlbGF0aW9uIDogdW5kZWZpbmVkLFxuICAgIHByaW5jaXBhbDogKCkgPT4gcmVxLnVzZXIsXG4gIH07XG59XG5cbi8qKiBUaGUgYF9hdXRoYCBibG9jayBmb3IgYSB2ZXJpZmllZCBwcmluY2lwYWwgKHVuZGVmaW5lZCB3aGVuIHRoZXJlIGlzIG5vbmUpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0QXV0aEJsb2NrKHVzZXI6IEp3dFBheWxvYWQgfCB1bmRlZmluZWQpOiBBdWRpdEF1dGhCbG9jayB8IHVuZGVmaW5lZCB7XG4gIGlmICghdXNlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYmxvY2s6IEF1ZGl0QXV0aEJsb2NrID0ge1xuICAgIHByaW5jaXBhbFR5cGU6IHVzZXIucHJpbmNpcGFsVHlwZSxcbiAgICBzZXJ2aWNlOiBzZXJ2aWNlTmFtZU9mKHVzZXIpLFxuICAgIGtleUlkOiB1c2VyLnBhcmVudEtleUlkID8/IHVzZXIuanRpLFxuICAgIHNpZDogdXNlci5zaWQsXG4gICAgc2NvcGU6IHVzZXIuc2NvcGUsXG4gICAgdG9rZW5Vc2U6IHVzZXIudG9rZW5fdXNlLFxuICAgIC4uLih1c2VyLnBlcm1pc3Npb25zUmVzdHJpY3RlZCA9PT0gdHJ1ZSA/IHsgcGVybWlzc2lvbnNSZXN0cmljdGVkOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gICAgLi4uKHVzZXIuaXNTdXBlckFkbWluID09PSB0cnVlID8geyBzdXBlckFkbWluOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gICAgLy8gQSBTRVJWSUNFIHRva2VuIGluIHRoZSBzeXN0ZW0gb3JnIGlzIHRoZSBwbGF0Zm9ybSdzIG93biBwbHVtYmluZywgbm90IHN0YWZmXG4gICAgLy8gYWN0aW5nIG9uIGEgdGVuYW50OyBvbmx5IGh1bWFuIC8gc2VydmljZS1hY2NvdW50IHByaW5jaXBhbHMgY291bnQuXG4gICAgLi4uKHVzZXIucHJpbmNpcGFsVHlwZSAhPT0gJ3NlcnZpY2UnICYmIGlzU3lzdGVtT3JnSWQodXNlci5vcmdhbml6YXRpb25JZCkgPyB7IHN5c3RlbU9yZzogdHJ1ZSBhcyBjb25zdCB9IDoge30pLFxuICB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhibG9jaykgYXMgQXJyYXk8a2V5b2YgQXVkaXRBdXRoQmxvY2s+KSB7XG4gICAgaWYgKGJsb2NrW2tleV0gPT09IHVuZGVmaW5lZCkgZGVsZXRlIGJsb2NrW2tleV07XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKGJsb2NrKS5sZW5ndGggPiAwID8gYmxvY2sgOiB1bmRlZmluZWQ7XG59XG4iXX0=
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2F1ZGl0LWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQXdFNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsRUFBZ0IsQ0FBQztBQUV0RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFJLEdBQWlCLEVBQUUsRUFBVztJQUNuRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQWlCLEtBQUs7UUFDaEMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDbEksQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNSLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzVCLENBQUM7QUFFRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0s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QUM5RSxxRUFBcUU7UUFDckUsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDaEgsQ0FBQztJQUNGLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQWdDLEVBQUUsQ0FBQztRQUNwRSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQW1iaWVudCBhdWRpdCBjb250ZXh0OiB0aGUgcmVxdWVzdC9qb2IgZmFjdHMgZXZlcnkgYXVkaXQgZXZlbnQgc2hvdWxkIGNhcnJ5XG4gKiAocmVxdWVzdCBpZCwgdHJhY2UgaWQsIGNsaWVudCBpcCAvIHVzZXIgYWdlbnQsIHRoZSB2ZXJpZmllZCBwcmluY2lwYWwnc1xuICogY3JlZGVudGlhbCwgaW5ib3VuZCBjb3JyZWxhdGlvbiBpZHMpIHdpdGhvdXQgZWFjaCBvZiB0aGUgfjE1MCBgcmVjb3JkQXVkaXRgXG4gKiBjYWxsIHNpdGVzIHRocmVhZGluZyB0aGVtIHRocm91Z2ggYnkgaGFuZC5cbiAqXG4gKiBhcGktc2VydmVyJ3MgcmVxdWVzdCBwaXBlbGluZSBvcGVucyBhIHNjb3BlIHBlciBpbmJvdW5kIHJlcXVlc3RcbiAqIChgYXVkaXRDb250ZXh0RnJvbVJlcXVlc3RgICsgYHJ1bldpdGhBdWRpdENvbnRleHRgKTsgYmFja2dyb3VuZCB3b3JrIG9wZW5zIGl0c1xuICogb3duIHdpdGggYHJ1bldpdGhBdWRpdENvbnRleHQoeyBqb2I6IHsgam9iSWQsIHJ1bklkLCB0cmlnZ2VyIH0gfSwgZm4pYC4gVGhlXG4gKiByZW1vdGUtYXVkaXQgY2xpZW50IHJlYWRzIHRoZSBzY29wZSB3aGVuIGFuIGV2ZW50IGlzIFJFQ09SREVEIGFuZCBzdGFtcHMgdGhlXG4gKiByZXN1bHQgb250byB0aGUgZXZlbnQgaXRzZWxmLCBzbyBhIHNwb29sZWQgcmUtZGVsaXZlcnkgbWludXRlcyBsYXRlciBzdGlsbFxuICogY2FycmllcyB0aGUgY29udGV4dCBvZiB0aGUgbW9tZW50IGl0IGhhcHBlbmVkLlxuICovXG5cbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSAnYXN5bmNfaG9va3MnO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBzZXJ2aWNlTmFtZU9mIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zZXJ2aWNlLXRva2Vucy5qcyc7XG5pbXBvcnQgeyBpc1N5c3RlbU9yZ0lkIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9zeXN0ZW0tb3JnLmpzJztcbmltcG9ydCB0eXBlIHsgSnd0UGF5bG9hZCB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5cbi8qKiBJbmJvdW5kIGNvcnJlbGF0aW9uIGlkcyBhIGNhbGxlciAoQ0xJLCBMYW1iZGEsIENvZGVCdWlsZCkgbWF5IGZvcndhcmQuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29ycmVsYXRpb24ge1xuICAvKiogYFgtUGlwZWxpbmUtRXhlY3V0aW9uLUlkYCDigJQgdGhlIENvZGVQaXBlbGluZSBleGVjdXRpb24gdGhhdCBtYWRlIHRoZSBjYWxsLiAqL1xuICBwaXBlbGluZUV4ZWN1dGlvbklkPzogc3RyaW5nO1xuICAvKiogYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCDigJQgdGhlIENvZGVCdWlsZCBidWlsZCB0aGF0IG1hZGUgdGhlIGNhbGwuICovXG4gIGNvZGVidWlsZEJ1aWxkSWQ/OiBzdHJpbmc7XG4gIC8qKiBgWC1Tb3VyY2UtRXZlbnQtSWRgIOKAlCB0aGUgdXBzdHJlYW0gZXZlbnQgKEV2ZW50QnJpZGdlIC8gd2ViaG9vaykgYmVpbmcgaGFuZGxlZC4gKi9cbiAgc291cmNlRXZlbnRJZD86IHN0cmluZztcbiAgLyoqIGBYLVBiLUNsaWVudC1WZXJzaW9uYCDigJQgdGhlIHBpcGVsaW5lLW1hbmFnZXIgQ0xJIHZlcnNpb24gdGhhdCBtYWRlIHRoZSBjYWxsLiAqL1xuICBjbGllbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKiogQmFja2dyb3VuZC13b3JrIGlkZW50aXR5IGZvciBldmVudHMgcmVjb3JkZWQgb3V0c2lkZSBhbnkgcmVxdWVzdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRKb2JDb250ZXh0IHtcbiAgLyoqIFN0YWJsZSBqb2IgbmFtZSAoZS5nLiBgcmVnaXN0cnktZ2NgLCBgdnVsbi1yZXNjYW5gKS4gKi9cbiAgam9iSWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGlzIHJ1bidzIGlkIChhIEJ1bGxNUSBqb2IgaWQsIGEgc3dlZXAncyB1dWlkKS4gKi9cbiAgcnVuSWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGF0IHN0YXJ0ZWQgaXQ6IGBzY2hlZHVsZWAsIGBxdWV1ZWAsIGBzdGFydHVwYCwgYG1hbnVhbGAsIOKApiAqL1xuICB0cmlnZ2VyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29udGV4dCB7XG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgdHJhY2VJZD86IHN0cmluZztcbiAgaXA/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgY29ycmVsYXRpb24/OiBBdWRpdENvcnJlbGF0aW9uO1xuICBqb2I/OiBBdWRpdEpvYkNvbnRleHQ7XG4gIC8qKlxuICAgKiBUaGUgVkVSSUZJRUQgcHJpbmNpcGFsIG9mIHRoZSBpbmJvdW5kIHJlcXVlc3QuIEEgZ2V0dGVyLCBub3QgYSB2YWx1ZTogdGhlXG4gICAqIHNjb3BlIG9wZW5zIGJlZm9yZSBgcmVxdWlyZUF1dGhgIHJ1bnMsIHNvIGByZXEudXNlcmAgaXMgcmVhZCBhdCB0aGUgbW9tZW50XG4gICAqIGFuIGV2ZW50IGlzIHJlY29yZGVkLlxuICAgKi9cbiAgcHJpbmNpcGFsPzogKCkgPT4gSnd0UGF5bG9hZCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBUaGUgY3JlZGVudGlhbCBiZWhpbmQgYW4gYXVkaXRlZCBhY3Rpb24g4oCUIHJlc2VydmVkIGBkZXRhaWxzLl9hdXRoYCwgc28gaXQgaXNcbiAqIGNvdmVyZWQgYnkgdGhlIGF1ZGl0IGhhc2ggY2hhaW4gKHdoaWNoIGhhc2hlcyBgZGV0YWlsc2ApLiBCdWlsdCBvbmx5IGZyb20gYVxuICogdmVyaWZpZWQgdG9rZW4sIG5ldmVyIGZyb20gY2FsbGVyIGlucHV0OyB0aGUgcmVtb3RlLWF1ZGl0IGNsaWVudCBvdmVyd3JpdGVzXG4gKiBhbnkgYF9hdXRoYCBhIGNhbGwgc2l0ZSBwdXQgaW4gYGRldGFpbHNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0QXV0aEJsb2NrIHtcbiAgcHJpbmNpcGFsVHlwZT86IHN0cmluZztcbiAgLyoqIFRoZSBpbnRlcm5hbCBzZXJ2aWNlLCB3aGVuIHRoZSBwcmluY2lwYWwgaXMgYSBzZXJ2aWNlIHRva2VuLiAqL1xuICBzZXJ2aWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJldm9jYWJsZSBjcmVkZW50aWFsOiB0aGUgYWNjZXNzIGtleSAoUEFUIC8gc2VydmljZS1hY2NvdW50IGtleSkgdGhlXG4gICAqIHRva2VuIGRlcml2ZXMgZnJvbSAoYHBhcmVudEtleUlkYCksIGVsc2UgdGhlIHRva2VuJ3Mgb3duIGBqdGlgIChhbiBleGNoYW5nZWRcbiAgICoga2V5IHRva2VuJ3Mga2V5IGlkLCBhbiBpbXBlcnNvbmF0aW9uIHNlc3Npb24gaWQsIGEgc2VydmljZSBtaW50IGlkKS5cbiAgICovXG4gIGtleUlkPzogc3RyaW5nO1xuICAvKiogUmVmcmVzaC1zZXNzaW9uIHNsb3QgdGhlIHRva2VuIHdhcyBtaW50ZWQgb24uICovXG4gIHNpZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuVXNlPzogc3RyaW5nO1xuICAvKiogVGhlIHRva2VuJ3MgcGVybWlzc2lvbnMgd2VyZSBuYXJyb3dlZCB0byBhIHN1YnNldCBhdCBjcmVkZW50aWFsIGNyZWF0aW9uLiAqL1xuICBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ/OiB0cnVlO1xuICAvKiogVGhlIHByaW5jaXBhbCBpcyBhIHBsYXRmb3JtIHN1cGVyYWRtaW4uICovXG4gIHN1cGVyQWRtaW4/OiB0cnVlO1xuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCdzIGFjdGl2ZSBvcmcgaXMgdGhlIHN5c3RlbSBvcmcgKHZlbmRvciBzdGFmZiBhY3RpbmcgdGhyb3VnaCBhXG4gICAqIHN5c3RlbS1vcmcgam9iIFJvbGUpLiBXaXRoIGBzdXBlckFkbWluYCwgdGhpcyBpcyB3aGF0IGxldHMgdGhlIHJlbW90ZS1hdWRpdFxuICAgKiBjbGllbnQgY2xhaW0gYSBjcm9zcy1vcmcgYGFmZmVjdGVkT3JnSWRgIChzZWUgYGF1ZGl0Q3Jvc3NPcmdgKS5cbiAgICovXG4gIHN5c3RlbU9yZz86IHRydWU7XG59XG5cbmNvbnN0IHN0b3JhZ2UgPSBuZXcgQXN5bmNMb2NhbFN0b3JhZ2U8QXVkaXRDb250ZXh0PigpO1xuXG4vKipcbiAqIFJ1biBgZm5gIGluc2lkZSBhbiBhdWRpdC1jb250ZXh0IHNjb3BlLiBOZXN0ZWQgc2NvcGVzIE1FUkdFIG9udG8gdGhlIG91dGVyXG4gKiBvbmUgKGEgam9iIHN0YXJ0ZWQgaW5zaWRlIGEgcmVxdWVzdCBrZWVwcyB0aGUgcmVxdWVzdCdzIGlkKSwgd2l0aCB0aGUgaW5uZXJcbiAqIGZpZWxkcyB3aW5uaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuV2l0aEF1ZGl0Q29udGV4dDxUPihjdHg6IEF1ZGl0Q29udGV4dCwgZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3Qgb3V0ZXIgPSBzdG9yYWdlLmdldFN0b3JlKCk7XG4gIGNvbnN0IG1lcmdlZDogQXVkaXRDb250ZXh0ID0gb3V0ZXJcbiAgICA/IHsgLi4ub3V0ZXIsIC4uLmN0eCwgY29ycmVsYXRpb246IGN0eC5jb3JyZWxhdGlvbiA/PyBvdXRlci5jb3JyZWxhdGlvbiwgam9iOiBjdHguam9iID8geyAuLi5vdXRlci5qb2IsIC4uLmN0eC5qb2IgfSA6IG91dGVyLmpvYiB9XG4gICAgOiBjdHg7XG4gIHJldHVybiBzdG9yYWdlLnJ1bihtZXJnZWQsIGZuKTtcbn1cblxuLyoqIFRoZSBhY3RpdmUgYXVkaXQgY29udGV4dCwgb3IgdW5kZWZpbmVkIG91dHNpZGUgYW55IHNjb3BlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnRBdWRpdENvbnRleHQoKTogQXVkaXRDb250ZXh0IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHN0b3JhZ2UuZ2V0U3RvcmUoKTtcbn1cblxuLyoqIEluYm91bmQgY29ycmVsYXRpb24gaGVhZGVycyByZWNvcmRlZCBpbnRvIHRoZSBhdWRpdCBjb250ZXh0LiAqL1xuZXhwb3J0IGNvbnN0IEFVRElUX0NPUlJFTEFUSU9OX0hFQURFUlMgPSB7XG4gIHBpcGVsaW5lRXhlY3V0aW9uSWQ6ICd4LXBpcGVsaW5lLWV4ZWN1dGlvbi1pZCcsXG4gIGNvZGVidWlsZEJ1aWxkSWQ6ICd4LWNvZGVidWlsZC1idWlsZC1pZCcsXG4gIHNvdXJjZUV2ZW50SWQ6ICd4LXNvdXJjZS1ldmVudC1pZCcsXG4gIGNsaWVudFZlcnNpb246ICd4LXBiLWNsaWVudC12ZXJzaW9uJyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBNYXggbGVuZ3RoIG9mIGEgc3RvcmVkIGNvcnJlbGF0aW9uIGlkIC8gcmVxdWVzdCBpZC4gKi9cbmNvbnN0IE1BWF9DT1JSRUxBVElPTl9MRU4gPSAxMjg7XG4vKiogSWRzIGFyZSBvcGFxdWUgdG9rZW5zOiB1dWlkcywgYHByb2plY3Q6dXVpZGAgYnVpbGQgaWRzLCBVTElEcy4gTm90aGluZyBlbHNlIGlzIHN0b3JlZC4gKi9cbmNvbnN0IENPUlJFTEFUSU9OX0lEID0gL15bQS1aYS16MC05Ll86L0ArPS1dKyQvO1xuLyoqIEEgYmFyZSBBV1MgYWNjb3VudCBpZC4gKi9cbmNvbnN0IEJBUkVfQUNDT1VOVF9JRCA9IC9eXFxkezEyfSQvO1xuXG4vKiogTWF4IHN0b3JlZCBVc2VyLUFnZW50IGxlbmd0aCDigJQgYSBob3N0aWxlIGhlYWRlciBtdXN0IG5vdCBibG9hdCBhdWRpdCByb3dzLiAqL1xuY29uc3QgTUFYX1VTRVJfQUdFTlRfTEVOID0gNTEyO1xuLyoqIEMwICsgREVMICsgQzEgY29udHJvbCBjaGFyYWN0ZXJzLCByZXBsYWNlZCBzbyBhIFVBIGNhbid0IGluamVjdCBpbnRvIHRoZSBVSS9DU1YgZXhwb3J0LiAqL1xuY29uc3QgQ09OVFJPTF9DSEFSUyA9IG5ldyBSZWdFeHAoJ1tcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5Zl0nLCAnZycpO1xuXG5mdW5jdGlvbiBmaXJzdEhlYWRlcihyYXc6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmF3KSA/IHJhd1swXSA6IHJhdztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBpbmJvdW5kIGNvcnJlbGF0aW9uIGlkIChgWC1SZXF1ZXN0LUlkYCwgYFgtQ29kZUJ1aWxkLUJ1aWxkLUlkYCwg4oCmKTpcbiAqIGEgYm91bmRlZCBvcGFxdWUgdG9rZW4sIGVsc2UgYHVuZGVmaW5lZGAg4oCUIGFuIGludmFsaWQgdmFsdWUgaXMgZHJvcHBlZCwgbmV2ZXJcbiAqIHRydW5jYXRlZCBpbnRvIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBkaWZmZXJlbnQgaWQuXG4gKlxuICogTm8gQVdTIGFjY291bnQgaWQgaXMgZXZlciBzdG9yZWQ6IGFuIEFSTiAoYSBDb2RlQnVpbGQgYnVpbGQgQVJOLCBzYXkpIGhhcyBpdHNcbiAqIGFjY291bnQgc2VnbWVudCBlbXB0aWVkLCBhbmQgYSBiYXJlIDEyLWRpZ2l0IHZhbHVlIGlzIHJlZnVzZWQuIFRoZSBnZW5lcmljXG4gKiAxMi1kaWdpdC1ydW4gc2NydWIgaXMgTk9UIHVzZWQgaGVyZSDigJQgaXQgd291bGQgcmVkYWN0IHRoZSBhbGwtZGlnaXQgZmluYWxcbiAqIGdyb3VwIG9mIHJvdWdobHkgb25lIHV1aWQgaW4gdGhyZWUgaHVuZHJlZCwgY29ycnVwdGluZyB0aGUgaWQgaXQgZXhpc3RzIHRvXG4gKiBjb3JyZWxhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQocmF3OiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IHJhdy50cmltKCk7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgdmFsdWUubGVuZ3RoID4gTUFYX0NPUlJFTEFUSU9OX0xFTiB8fCAhQ09SUkVMQVRJT05fSUQudGVzdCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChCQVJFX0FDQ09VTlRfSUQudGVzdCh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICgvXmFybjovaS50ZXN0KHZhbHVlKSkge1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gNCkgcGFydHNbNF0gPSAnJztcbiAgICByZXR1cm4gcGFydHMuam9pbignOicpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIFN0cmlwIGNvbnRyb2wgY2hhcmFjdGVycyBmcm9tIGEgVXNlci1BZ2VudCBhbmQgY2FwIGl0cyBsZW5ndGg7IHVuZGVmaW5lZCB3aGVuIGVtcHR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplVXNlckFnZW50KHJhdzogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAnc3RyaW5nJyB8fCByYXcubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjbGVhbmVkID0gcmF3LnJlcGxhY2UoQ09OVFJPTF9DSEFSUywgJyAnKS50cmltKCk7XG4gIHJldHVybiBjbGVhbmVkLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGNsZWFuZWQuc2xpY2UoMCwgTUFYX1VTRVJfQUdFTlRfTEVOKTtcbn1cblxuLyoqXG4gKiBUaGUgYXVkaXQgY29udGV4dCBmb3IgYW4gaW5ib3VuZCByZXF1ZXN0LiBgcmVxdWVzdElkYCBpcyB0aGUgaWQgdGhlXG4gKiByZXF1ZXN0LWlkIG1pZGRsZXdhcmUgcmVzb2x2ZWQgKHZhbGlkYXRlZCBpbmJvdW5kIGBYLVJlcXVlc3QtSWRgLCBlbHNlIGEgZnJlc2hcbiAqIHV1aWQpOyB0aGUgcHJpbmNpcGFsIGlzIHJlYWQgbGF6aWx5IGZyb20gYHJlcS51c2VyYCAoYXV0aCBydW5zIGxhdGVyIGluIHRoZVxuICogY2hhaW4pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRDb250ZXh0RnJvbVJlcXVlc3QocmVxOiBSZXF1ZXN0LCBpZHM6IHsgcmVxdWVzdElkPzogc3RyaW5nOyB0cmFjZUlkPzogc3RyaW5nIH0gPSB7fSk6IEF1ZGl0Q29udGV4dCB7XG4gIGNvbnN0IGNvcnJlbGF0aW9uOiBBdWRpdENvcnJlbGF0aW9uID0ge307XG4gIGZvciAoY29uc3QgW2ZpZWxkLCBoZWFkZXJdIG9mIE9iamVjdC5lbnRyaWVzKEFVRElUX0NPUlJFTEFUSU9OX0hFQURFUlMpIGFzIEFycmF5PFtrZXlvZiBBdWRpdENvcnJlbGF0aW9uLCBzdHJpbmddPikge1xuICAgIGNvbnN0IHZhbHVlID0gc2FuaXRpemVDb3JyZWxhdGlvbklkKGZpcnN0SGVhZGVyKHJlcS5oZWFkZXJzW2hlYWRlcl0pKTtcbiAgICBpZiAodmFsdWUpIGNvcnJlbGF0aW9uW2ZpZWxkXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdElkOiBpZHMucmVxdWVzdElkLFxuICAgIHRyYWNlSWQ6IGlkcy50cmFjZUlkLFxuICAgIGlwOiByZXEuaXAsXG4gICAgdXNlckFnZW50OiBzYW5pdGl6ZVVzZXJBZ2VudChmaXJzdEhlYWRlcihyZXEuaGVhZGVyc1sndXNlci1hZ2VudCddKSksXG4gICAgY29ycmVsYXRpb246IE9iamVjdC5rZXlzKGNvcnJlbGF0aW9uKS5sZW5ndGggPiAwID8gY29ycmVsYXRpb24gOiB1bmRlZmluZWQsXG4gICAgcHJpbmNpcGFsOiAoKSA9PiByZXEudXNlcixcbiAgfTtcbn1cblxuLyoqIFRoZSBgX2F1dGhgIGJsb2NrIGZvciBhIHZlcmlmaWVkIHByaW5jaXBhbCAodW5kZWZpbmVkIHdoZW4gdGhlcmUgaXMgbm9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRBdXRoQmxvY2sodXNlcjogSnd0UGF5bG9hZCB8IHVuZGVmaW5lZCk6IEF1ZGl0QXV0aEJsb2NrIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF1c2VyKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBibG9jazogQXVkaXRBdXRoQmxvY2sgPSB7XG4gICAgcHJpbmNpcGFsVHlwZTogdXNlci5wcmluY2lwYWxUeXBlLFxuICAgIHNlcnZpY2U6IHNlcnZpY2VOYW1lT2YodXNlciksXG4gICAga2V5SWQ6IHVzZXIucGFyZW50S2V5SWQgPz8gdXNlci5qdGksXG4gICAgc2lkOiB1c2VyLnNpZCxcbiAgICBzY29wZTogdXNlci5zY29wZSxcbiAgICB0b2tlblVzZTogdXNlci50b2tlbl91c2UsXG4gICAgLi4uKHVzZXIucGVybWlzc2lvbnNSZXN0cmljdGVkID09PSB0cnVlID8geyBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ6IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgICAuLi4odXNlci5pc1N1cGVyQWRtaW4gPT09IHRydWUgPyB7IHN1cGVyQWRtaW46IHRydWUgYXMgY29uc3QgfSA6IHt9KSxcbiAgICAvLyBBIFNFUlZJQ0UgdG9rZW4gaW4gdGhlIHN5c3RlbSBvcmcgaXMgdGhlIHBsYXRmb3JtJ3Mgb3duIHBsdW1iaW5nLCBub3Qgc3RhZmZcbiAgICAvLyBhY3Rpbmcgb24gYSB0ZW5hbnQ7IG9ubHkgaHVtYW4gLyBzZXJ2aWNlLWFjY291bnQgcHJpbmNpcGFscyBjb3VudC5cbiAgICAuLi4odXNlci5wcmluY2lwYWxUeXBlICE9PSAnc2VydmljZScgJiYgaXNTeXN0ZW1PcmdJZCh1c2VyLm9yZ2FuaXphdGlvbklkKSA/IHsgc3lzdGVtT3JnOiB0cnVlIGFzIGNvbnN0IH0gOiB7fSksXG4gIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGJsb2NrKSBhcyBBcnJheTxrZXlvZiBBdWRpdEF1dGhCbG9jaz4pIHtcbiAgICBpZiAoYmxvY2tba2V5XSA9PT0gdW5kZWZpbmVkKSBkZWxldGUgYmxvY2tba2V5XTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMoYmxvY2spLmxlbmd0aCA+IDAgPyBibG9jayA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==