@pipeline-builder/api-core 5.2.5 → 5.2.7

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 (181) 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 +1 -1
  22. package/lib/middleware/deferred-quota-check.js +1 -1
  23. package/lib/middleware/ecosystem-guard.js +1 -1
  24. package/lib/middleware/index.js +1 -1
  25. package/lib/middleware/jwt-verify.js +1 -1
  26. package/lib/middleware/mongo-sanitize.js +1 -1
  27. package/lib/middleware/on-behalf.js +1 -1
  28. package/lib/middleware/permission-gates.js +1 -1
  29. package/lib/middleware/quota-exempt-routes.js +1 -1
  30. package/lib/middleware/revocation.js +1 -1
  31. package/lib/middleware/route-table.js +16 -1
  32. package/lib/middleware/service-tokens.js +1 -1
  33. package/lib/middleware/step-up.js +1 -1
  34. package/lib/middleware/system-org.d.ts +18 -5
  35. package/lib/middleware/system-org.js +19 -6
  36. package/lib/openapi/extend-zod.js +1 -1
  37. package/lib/openapi/index.js +1 -1
  38. package/lib/openapi/registry.js +1 -1
  39. package/lib/openapi/routes/ask-routes.js +1 -1
  40. package/lib/openapi/routes/billing-routes.js +1 -1
  41. package/lib/openapi/routes/image-registry-routes.js +1 -1
  42. package/lib/openapi/routes/index.js +1 -1
  43. package/lib/openapi/routes/message-routes.js +1 -1
  44. package/lib/openapi/routes/pipeline-routes.js +1 -1
  45. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  46. package/lib/openapi/routes/plugin-routes.js +1 -1
  47. package/lib/openapi/routes/quota-routes.js +1 -1
  48. package/lib/openapi/schema-registry.js +1 -1
  49. package/lib/routes/health.js +1 -1
  50. package/lib/routes/index.js +1 -1
  51. package/lib/services/ai-call-weight.js +1 -1
  52. package/lib/services/alert-delivery.js +1 -1
  53. package/lib/services/api-key-exchange.js +1 -1
  54. package/lib/services/audit-context.js +1 -1
  55. package/lib/services/audit-spool.js +1 -1
  56. package/lib/services/cache-service.js +1 -1
  57. package/lib/services/circuit-breaker.js +1 -1
  58. package/lib/services/compliance-client.js +1 -1
  59. package/lib/services/compliance-event-subscriber.js +1 -1
  60. package/lib/services/durable-event-bus.js +1 -1
  61. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  62. package/lib/services/ecosystem-notify-client.js +9 -3
  63. package/lib/services/entity-events.js +1 -1
  64. package/lib/services/env-redis.js +1 -1
  65. package/lib/services/http-client.js +19 -3
  66. package/lib/services/index.d.ts +1 -1
  67. package/lib/services/index.js +2 -2
  68. package/lib/services/jwks-cache.js +1 -1
  69. package/lib/services/leader-lock.js +1 -1
  70. package/lib/services/notification-channels.js +1 -1
  71. package/lib/services/org-ai-client.js +1 -1
  72. package/lib/services/pagerduty-inbound.js +1 -1
  73. package/lib/services/pagerduty.js +1 -1
  74. package/lib/services/quota-increment-batcher.js +1 -1
  75. package/lib/services/quota.js +1 -1
  76. package/lib/services/remote-audit-client.js +1 -1
  77. package/lib/services/retry-forever.js +1 -1
  78. package/lib/services/retry-strategy.js +1 -1
  79. package/lib/services/s3-client.js +1 -1
  80. package/lib/services/scheduler.js +1 -1
  81. package/lib/services/service-boot.js +1 -1
  82. package/lib/services/service-keys.js +2 -2
  83. package/lib/services/sse-ticket-store.js +1 -1
  84. package/lib/services/system-notification.js +1 -1
  85. package/lib/services/token-revocation.js +1 -1
  86. package/lib/services/version-vuln-policy.d.ts +11 -0
  87. package/lib/services/version-vuln-policy.js +33 -7
  88. package/lib/types/ai-catalog.js +1 -1
  89. package/lib/types/ask-proposals.d.ts +23 -0
  90. package/lib/types/ask-proposals.js +29 -1
  91. package/lib/types/audit-events.js +1 -1
  92. package/lib/types/build-catalog.d.ts +65 -0
  93. package/lib/types/build-catalog.js +95 -1
  94. package/lib/types/catalog-metadata.js +1 -1
  95. package/lib/types/common.js +1 -1
  96. package/lib/types/compliance-exemption.js +1 -1
  97. package/lib/types/ecosystem-notifications.d.ts +9 -0
  98. package/lib/types/ecosystem-notifications.js +15 -6
  99. package/lib/types/ecosystem.d.ts +1 -6
  100. package/lib/types/ecosystem.js +18 -5
  101. package/lib/types/error-codes.js +1 -1
  102. package/lib/types/feature-flags.d.ts +17 -1
  103. package/lib/types/feature-flags.js +1 -1
  104. package/lib/types/http.js +1 -1
  105. package/lib/types/index.d.ts +3 -3
  106. package/lib/types/index.js +4 -4
  107. package/lib/types/metadata-keys.js +1 -1
  108. package/lib/types/permissions.d.ts +60 -13
  109. package/lib/types/permissions.js +63 -14
  110. package/lib/types/pipeline-template.js +1 -1
  111. package/lib/types/pipeline.js +1 -1
  112. package/lib/types/plugin-catalog.js +1 -1
  113. package/lib/types/plugin-health.js +1 -1
  114. package/lib/types/plugin-scan.d.ts +69 -0
  115. package/lib/types/plugin-scan.js +77 -1
  116. package/lib/types/quota-catalog.js +15 -2
  117. package/lib/types/quota-tiers.d.ts +27 -160
  118. package/lib/types/quota-tiers.js +47 -255
  119. package/lib/types/remote-audit-actions.d.ts +1 -1
  120. package/lib/types/remote-audit-actions.js +9 -1
  121. package/lib/types/reserved-tags.js +1 -1
  122. package/lib/types/tier-limits.d.ts +210 -0
  123. package/lib/types/tier-limits.js +254 -0
  124. package/lib/types/usage-projection.js +1 -1
  125. package/lib/types/visibility.js +1 -1
  126. package/lib/types/wire-vocabulary.d.ts +7 -0
  127. package/lib/types/wire-vocabulary.js +7 -1
  128. package/lib/utils/alias-resolver.js +1 -1
  129. package/lib/utils/api-key.js +1 -1
  130. package/lib/utils/audit.js +1 -1
  131. package/lib/utils/aws-scrub.js +3 -3
  132. package/lib/utils/compliance-attributes.js +1 -1
  133. package/lib/utils/concurrency-gate.d.ts +98 -0
  134. package/lib/utils/concurrency-gate.js +110 -0
  135. package/lib/utils/concurrency.js +1 -1
  136. package/lib/utils/crash-handlers.js +1 -1
  137. package/lib/utils/date.js +1 -1
  138. package/lib/utils/dsse.js +1 -1
  139. package/lib/utils/env.d.ts +11 -0
  140. package/lib/utils/env.js +14 -1
  141. package/lib/utils/headers.js +1 -1
  142. package/lib/utils/identity.js +1 -1
  143. package/lib/utils/index.d.ts +1 -0
  144. package/lib/utils/index.js +2 -1
  145. package/lib/utils/jwk.js +2 -2
  146. package/lib/utils/logger.js +1 -1
  147. package/lib/utils/metric-emitter.js +1 -1
  148. package/lib/utils/object.js +1 -1
  149. package/lib/utils/params.js +1 -1
  150. package/lib/utils/plugin-compliance.d.ts +9 -1
  151. package/lib/utils/plugin-compliance.js +1 -1
  152. package/lib/utils/proof-of-work.js +1 -1
  153. package/lib/utils/response.js +1 -1
  154. package/lib/utils/retention.js +1 -1
  155. package/lib/utils/safe-require.js +1 -1
  156. package/lib/utils/secret-encryption.js +1 -1
  157. package/lib/utils/secret-rotation.js +1 -1
  158. package/lib/utils/secure-compare.js +1 -1
  159. package/lib/utils/sensitive-patterns.js +1 -1
  160. package/lib/utils/service-registry.js +1 -1
  161. package/lib/utils/ssrf.js +1 -1
  162. package/lib/validation/ai-schemas.js +1 -1
  163. package/lib/validation/common-schemas.js +1 -1
  164. package/lib/validation/dockerfile-static.js +1 -1
  165. package/lib/validation/index.d.ts +1 -1
  166. package/lib/validation/index.js +2 -2
  167. package/lib/validation/message-schemas.d.ts +73 -0
  168. package/lib/validation/message-schemas.js +63 -2
  169. package/lib/validation/middleware.js +1 -1
  170. package/lib/validation/pipeline-schemas.js +1 -1
  171. package/lib/validation/pipeline-template-schemas.js +1 -1
  172. package/lib/validation/plugin-base-images.js +1 -1
  173. package/lib/validation/plugin-catalog-detect.js +1 -1
  174. package/lib/validation/plugin-catalog-metadata.js +1 -1
  175. package/lib/validation/plugin-heuristics.js +1 -1
  176. package/lib/validation/plugin-lint.js +1 -1
  177. package/lib/validation/plugin-name-confusable.js +1 -1
  178. package/lib/validation/plugin-schemas.js +1 -1
  179. package/lib/validation/plugin-spec-schema.js +1 -1
  180. package/lib/validation/plugin-template-contract.js +1 -1
  181. package/package.json +11 -4
@@ -51,7 +51,7 @@
51
51
  * counted, because in a real deployment it means this service's peers will
52
52
  * reject everything it sends.
53
53
  */
54
- import crypto, {} from 'crypto';
54
+ import crypto from 'crypto';
55
55
  import { readFileSync, statSync } from 'fs';
56
56
  import jwt from 'jsonwebtoken';
57
57
  import { compactJws, encodeJwsSigningInput, publicJwkFrom, publicKeyFromJwk } from '../utils/jwk.js';
@@ -340,4 +340,4 @@ export function _resetServiceKeysForTests() {
340
340
  ephemeralKeys = undefined;
341
341
  ephemeralWarned = false;
342
342
  }
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NlcnZpY2Uta2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERztBQUVILE9BQU8sTUFBTSxFQUFFLEVBQWtCLE1BQU0sUUFBUSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzVDLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFNUMsdUVBQXVFO0FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztBQUUvQyx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsVUFBVSxDQUFDO0FBRWpELGlGQUFpRjtBQUNqRixNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxDQUFDLFlBQVk7QUFvQnhELDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBQ3hDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7Q0FD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c291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGVyLXNlcnZpY2Ugc2lnbmluZyBrZXlzIGZvciBJTlRFUk5BTCBzZXJ2aWNlLXRvLXNlcnZpY2UgdG9rZW5zLlxuICpcbiAqIEJlZm9yZSB0aGlzLCBldmVyeSBzZXJ2aWNlIGhlbGQgb25lIHNoYXJlZCBgSldUX1NFQ1JFVGAsIHNvIGFueSBzZXJ2aWNlIGNvdWxkXG4gKiBtaW50IGEgdG9rZW4gbmFtaW5nIGFueSBPVEhFUiBzZXJ2aWNlIOKAlCBcImJpbGxpbmcgc2FpZCBzb1wiIHdhcyB1bmZhbHNpZmlhYmxlLFxuICogYW5kIGEgc2luZ2xlIGNvbXByb21pc2VkIHdvcmtsb2FkIGNvdWxkIHNwZWFrIGZvciB0aGUgd2hvbGUgZmxlZXQuIE5vdyBlYWNoXG4gKiBzZXJ2aWNlIHNpZ25zIHdpdGggaXRzIE9XTiBFUzI1NiAoRUMgUC0yNTYpIGtleSBhbmQgY29uc3VtZXJzIHZlcmlmeSBhZ2FpbnN0XG4gKiB0aGUgcHVibGljIGhhbHZlcy4gVGhlIGBraWRgIGlzIGJvdW5kIHRvIHRoZSBzaWduZXIncyBOQU1FLCBzbyBhIHRva2VuIHdob3NlXG4gKiBgc3ViYCBzYXlzIGBzZXJ2aWNlOmJpbGxpbmdgIGJ1dCB3YXMgc2lnbmVkIHdpdGggY29tcGxpYW5jZSdzIGtleSBpcyBhXG4gKiBmb3JnZXJ5LCBub3QgYSB2YWxpZCB0b2tlbiB3aXRoIGEgY29uZnVzaW5nIHN1YmplY3QuXG4gKlxuICogIyMgV2h5IHB1YmxpYyBrZXlzIGFyZSBkaXN0cmlidXRlZCBieSBDT05GSUcsIG5vdCBieSBwZXItc2VydmljZSBKV0tTIGVuZHBvaW50c1xuICpcbiAqIFRoZSB1c2VyIGNoYWluIGZldGNoZXMgcGxhdGZvcm0ncyBKV0tTIG92ZXIgSFRUUCBiZWNhdXNlIHRoZXJlIGlzIGV4YWN0bHlcbiAqIG9uZSBzaWduZXIgYW5kIGl0IGlzIHRoZSBvbmUgc2VydmljZSB0aGF0IG11c3QgYmUgdXAgZm9yIGFueWJvZHkgdG8gc2lnbiBpbi5cbiAqIFRoZSBzZXJ2aWNlIGNoYWluIGlzIHRoZSBvcHBvc2l0ZSBzaGFwZSwgYW5kIHRocmVlIHByb3BlcnRpZXMgZGVjaWRlZCBpdDpcbiAqXG4gKiAgMS4gKipgdmVyaWZ5U2VydmljZVByaW5jaXBhbGAgbXVzdCBzdGF5IHN5bmNocm9ub3VzLioqIFRoZSBnbG9iYWwgcmF0ZVxuICogICAgIGxpbWl0ZXIncyBgc2tpcGAgYW5kIGFwcC1mYWN0b3J5J3MgYC93YXJtdXBgIGd1YXJkIHZlcmlmeSBhIHNlcnZpY2UgdG9rZW5cbiAqICAgICBCRUZPUkUgYHJlcXVpcmVBdXRoYCBydW5zLCBpbiBzeW5jaHJvbm91cyBFeHByZXNzIGNhbGxiYWNrcy4gQW4gSFRUUCBKV0tTXG4gKiAgICAgZmV0Y2ggd291bGQgZm9yY2UgdGhvc2UgYXN5bmMg4oCUIGEgY2hhbmdlIHRoYXQgcmVhY2hlcyBpbnRvIGV2ZXJ5XG4gKiAgICAgc2VydmljZSdzIGxpbWl0ZXIgd2lyaW5nLlxuICogIDIuICoqTm8gYXZhaWxhYmlsaXR5IGNvdXBsaW5nLioqIFdpdGggcGVyLXNlcnZpY2UgSldLUyBlbmRwb2ludHMsIHZlcmlmeWluZyBhXG4gKiAgICAgdG9rZW4gbWludGVkIGJ5IGBiaWxsaW5nYCBuZWVkcyBgYmlsbGluZ2AgdG8gYmUgcmVhY2hhYmxlIOKAlCBzbyBiaWxsaW5nXG4gKiAgICAgYmVpbmcgZG93biB3b3VsZCBzdG9wIHBsYXRmb3JtIGZyb20gYWNjZXB0aW5nIGJpbGxpbmcncyBpbi1mbGlnaHQgY2FsbHMsXG4gKiAgICAgdHVybmluZyBvbmUgb3V0YWdlIGludG8gc2V2ZXJhbC4gQSBtb3VudGVkIGZpbGUgaGFzIG5vIHN1Y2ggZWRnZS5cbiAqICAzLiAqKk5vIE7Dl04gYWRkcmVzcyBjb25maWcuKiogMTAgc2VydmljZXMgd291bGQgZWFjaCBuZWVkIGV2ZXJ5IHBlZXInc1xuICogICAgIGhvc3QvcG9ydCAoYW5kIGNvbXBvc2UsIHdoaWNoIGhhcyBubyBtZXNoLCB3b3VsZCBuZWVkIHRoZW0gdG9vKS5cbiAqXG4gKiBTbyB0aGUgZGVwbG95IGdlbmVyYXRlcyBvbmUga2V5cGFpciBwZXIgc2VydmljZSwgbW91bnRzIGVhY2ggcHJpdmF0ZSBrZXkgT05MWVxuICogaW50byBpdHMgb3duIHNlcnZpY2UsIGFuZCBtb3VudHMgT05FIHB1YmxpYyBidW5kbGUgKHJlYWQtb25seSkgZXZlcnl3aGVyZTpcbiAqXG4gKiAgIGBTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEVgICB0aGlzIHNlcnZpY2UncyBFQyBQLTI1NiBwcml2YXRlIGtleSAoUEtDUyM4IFBFTSlcbiAqICAgYFNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFYCAgIGB7IFwic2VydmljZXNcIjogeyBcIjxuYW1lPlwiOiB7IFwia2V5c1wiOiBbPGp3az7igKZdIH0gfSB9YFxuICpcbiAqIFJvdGF0aW9uIGlzIGJ5IGBraWRgLCBpbiB0aGUgc2FtZSBzaGFwZSBhcyB0aGUgdXNlciBjaGFpbjogYWRkIHRoZSBuZXcgcHVibGljXG4gKiBrZXkgdG8gdGhlIGJ1bmRsZSAodGhlIHNlcnZpY2Ugbm93IHB1Ymxpc2hlcyB0d28pLCByb2xsIHRoZSBidW5kbGUgb3V0LCBzd2FwXG4gKiB0aGF0IHNlcnZpY2UncyBwcml2YXRlIGtleSwgdGhlbiBkcm9wIHRoZSByZXRpcmVkIHB1YmxpYyBrZXkuIFRoZSBidW5kbGUgaXNcbiAqIHJlLXJlYWQgb24gYW4gaW50ZXJ2YWwgQU5EIG9uIGFuIG10aW1lIGNoYW5nZSwgc28gYSByb3RhdGlvbiBuZWVkcyBubyByZXN0YXJ0LlxuICogYGRlcGxveS9iaW4vc2VydmljZS1zaWduaW5nLWtleXMuc2hgIGdlbmVyYXRlcyBhbmQgcm90YXRlcyBib3RoIGhhbHZlcy5cbiAqXG4gKiAjIyBFcGhlbWVyYWwgbW9kZVxuICpcbiAqIFdpdGggbm8gYFNFUlZJQ0VfU0lHTklOR19LRVlfRklMRWAgY29uZmlndXJlZCwgYSBrZXlwYWlyIGlzIGdlbmVyYXRlZFxuICogSU4tUFJPQ0VTUyBwZXIgcmVxdWVzdGVkIHNlcnZpY2UgbmFtZSBhbmQgcmVnaXN0ZXJlZCBpbiB0aGUgaW4tbWVtb3J5IGJ1bmRsZS5cbiAqIFRoYXQga2VlcHMgc2luZ2xlLXByb2Nlc3Mgc3VpdGVzIGFuZCBsb2NhbCBvbmUtb2ZmIHNjcmlwdHMgd29ya2luZyB3aXRoIG5vIGtleVxuICogbWF0ZXJpYWwsIGFuZCBpdCBjYW4gbmV2ZXIgd2lkZW4gdHJ1c3Q6IHRoZSBvbmx5IHZlcmlmaWVyIHRoYXQgYWNjZXB0cyBzdWNoIGFcbiAqIHRva2VuIGlzIHRoZSBwcm9jZXNzIHRoYXQgbWludGVkIGl0LiBJdCBpcyBsb2dnZWQgb25jZSBhdCB3YXJuIGxldmVsLCBhbmRcbiAqIGNvdW50ZWQsIGJlY2F1c2UgaW4gYSByZWFsIGRlcGxveW1lbnQgaXQgbWVhbnMgdGhpcyBzZXJ2aWNlJ3MgcGVlcnMgd2lsbFxuICogcmVqZWN0IGV2ZXJ5dGhpbmcgaXQgc2VuZHMuXG4gKi9cblxuaW1wb3J0IGNyeXB0bywgeyB0eXBlIEtleU9iamVjdCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IGp3dCBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IHsgY29tcGFjdEp3cywgZW5jb2RlSndzU2lnbmluZ0lucHV0LCBwdWJsaWNKd2tGcm9tLCBwdWJsaWNLZXlGcm9tSndrLCB0eXBlIFB1YmxpY0p3ayB9IGZyb20gJy4uL3V0aWxzL2p3ay5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc2VydmljZS1rZXlzJyk7XG5cbi8qKiBUaGUgT05MWSBhbGdvcml0aG0gYW4gaW50ZXJuYWwgc2VydmljZSB0b2tlbiBtYXkgYmUgc2lnbmVkIHdpdGguICovXG5leHBvcnQgY29uc3QgU0VSVklDRV9UT0tFTl9BTEdPUklUSE0gPSAnRVMyNTYnO1xuXG4vKiogU3ViamVjdCBwcmVmaXggbmFtaW5nIHRoZSBjYWxsaW5nIHNlcnZpY2Ugb24gYSBzZXJ2aWNlIHRva2VuIChgc2VydmljZTo8bmFtZT5gKS4gKi9cbmV4cG9ydCBjb25zdCBTRVJWSUNFX1NVQkpFQ1RfUFJFRklYID0gJ3NlcnZpY2U6JztcblxuLyoqIEhvdyBsb25nIGEgbG9hZGVkIGJ1bmRsZSBpcyBzZXJ2ZWQgYmVmb3JlIGl0IGlzIHJlLXJlYWQgKHJvdGF0aW9uIHBpY2t1cCkuICovXG5jb25zdCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUyA9IDMwMF8wMDA7IC8vIDUgbWludXRlc1xuXG4vKiogT25lIHNlcnZpY2UncyBwdWJsaXNoZWQgdmVyaWZpY2F0aW9uIGtleXMsIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBidW5kbGUgZmlsZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUtleUVudHJ5IHtcbiAga2V5czogUHVibGljSndrW107XG59XG5cbi8qKiBUaGUgZG9jdW1lbnQgYFNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFYCBob2xkczogZXZlcnkgc2VydmljZSdzIHB1YmxpYyBrZXlzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlS2V5QnVuZGxlIHtcbiAgc2VydmljZXM6IFJlY29yZDxzdHJpbmcsIFNlcnZpY2VLZXlFbnRyeT47XG59XG5cbi8qKiBBIHNpZ25pbmcga2V5IHRoaXMgcHJvY2VzcyBob2xkcywgaW4gdGhlIGZvcm1zIHNpZ25pbmcgbmVlZHMuICovXG5pbnRlcmZhY2UgTG9jYWxTaWduaW5nS2V5IHtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAga2lkOiBzdHJpbmc7XG4gIHByaXZhdGVLZXk6IEtleU9iamVjdDtcbiAgcHVibGljSndrOiBQdWJsaWNKd2s7XG59XG5cbi8qKiBUaGUgYnVuZGxlIGNvdWxkIG5vdCBiZSBsb2FkZWQgb3IgZG9lcyBub3Qga25vdyB0aGUga2V5IGEgdG9rZW4gbmFtZXMuICovXG5leHBvcnQgY2xhc3MgU2VydmljZUtleUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnU2VydmljZUtleUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcHJvY2VzcydzIHNlcnZpY2UgaWRlbnRpdHkg4oCUIHRoZSBgPG5hbWU+YCBpbiBgc2VydmljZTo8bmFtZT5gIGFuZCB0aGVcbiAqIG5hbWUgaXRzIGtleSBpcyBwdWJsaXNoZWQgdW5kZXIuIGBTRVJWSUNFX05BTUVgIGlzIGFscmVhZHkgc2V0IHBlciBzZXJ2aWNlIGluXG4gKiBldmVyeSBkZXBsb3kgdGFyZ2V0IChjb21wb3NlLCBtaW5pa3ViZSwgZWMyLCBla3MpLCBhbmQgaXMgdGhlIHNhbWUgdmFsdWUgdGhlXG4gKiBhdWRpdCBhbmQgbWV0cmljIGxhYmVscyB1c2UsIHNvIHRoZXJlIGlzIG9uZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIFwid2hvIGFtIElcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZpY2VJZGVudGl0eSgpOiBzdHJpbmcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICdhcGknO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvY2FsIHNpZ25pbmcga2V5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGxvY2FsS2V5OiBMb2NhbFNpZ25pbmdLZXkgfCB1bmRlZmluZWQ7XG5sZXQgZXBoZW1lcmFsS2V5czogTWFwPHN0cmluZywgTG9jYWxTaWduaW5nS2V5PiB8IHVuZGVmaW5lZDtcbmxldCBlcGhlbWVyYWxXYXJuZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGU6IHN0cmluZyk6IExvY2FsU2lnbmluZ0tleSB7XG4gIGNvbnN0IHNlcnZpY2VOYW1lID0gc2VydmljZUlkZW50aXR5KCk7XG4gIGxldCBwcml2YXRlS2V5OiBLZXlPYmplY3Q7XG4gIHRyeSB7XG4gICAgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGBDb3VsZCBub3QgcmVhZCB0aGUgc2VydmljZSBzaWduaW5nIGtleSBhdCAke2ZpbGV9OiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgLy8gcHVibGljSndrRnJvbSByZWplY3RzIGFueXRoaW5nIGJ1dCBhbiBFQyBQLTI1NiBrZXksIHNvIGEgc2VydmljZSBjb25maWd1cmVkXG4gIC8vIHdpdGggKHNheSkgYW4gUlNBIGtleSBmYWlscyBIRVJFIHJhdGhlciB0aGFuIG1pbnRpbmcgdG9rZW5zIG5vYm9keSB2ZXJpZmllcy5cbiAgY29uc3QgcHVibGljSndrID0gcHVibGljSndrRnJvbShjcnlwdG8uY3JlYXRlUHVibGljS2V5KHByaXZhdGVLZXkpKTtcbiAgcmV0dXJuIHsgc2VydmljZU5hbWUsIGtpZDogcHVibGljSndrLmtpZCwgcHJpdmF0ZUtleSwgcHVibGljSndrIH07XG59XG5cbi8qKlxuICogVGhlIGluLXByb2Nlc3Mga2V5IGZvciBgc2VydmljZU5hbWVgIGluIGVwaGVtZXJhbCBtb2RlLCBnZW5lcmF0ZWQgb24gZmlyc3RcbiAqIHVzZSBhbmQgcmVnaXN0ZXJlZCBpbiB0aGUgaW4tbWVtb3J5IGJ1bmRsZSBzbyB0aGlzIHByb2Nlc3MgY2FuIHZlcmlmeSBpdHMgb3duXG4gKiB0b2tlbnMuIEtleWVkIGJ5IE5BTUUgKG5vdCBqdXN0IG9uZSBrZXkpIHNvIGEgc2luZ2xlLXByb2Nlc3Mgc3VpdGUgY2FuIG1pbnRcbiAqIHRva2VucyBmb3Igc2V2ZXJhbCBzZXJ2aWNlcywgYXMgdGhlIHJlYWwgZmxlZXQgZG9lcyBhY3Jvc3MgcHJvY2Vzc2VzLlxuICovXG5mdW5jdGlvbiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBlcGhlbWVyYWxLZXlzID8/PSBuZXcgTWFwKCk7XG4gIGNvbnN0IGV4aXN0aW5nID0gZXBoZW1lcmFsS2V5cy5nZXQoc2VydmljZU5hbWUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICBpZiAoIWVwaGVtZXJhbFdhcm5lZCkge1xuICAgIGVwaGVtZXJhbFdhcm5lZCA9IHRydWU7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2Vfc2lnbmluZ19lcGhlbWVyYWxfa2V5X3RvdGFsJywgeyBzZXJ2aWNlOiBzZXJ2aWNlSWRlbnRpdHkoKSB9KTtcbiAgICBsb2dnZXIud2FybignU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFIGlzIG5vdCBzZXQg4oCUIG1pbnRpbmcgaW50ZXJuYWwgc2VydmljZSB0b2tlbnMgd2l0aCBhbiBFUEhFTUVSQUwga2V5LiBPbmx5IHRoaXMgcHJvY2VzcyB3aWxsIGFjY2VwdCB0aGVtOyBldmVyeSBwZWVyIHdpbGwgcmVqZWN0IHRoZW0uIFNldCBTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEUgKyBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRSAoZGVwbG95L2Jpbi9zZXJ2aWNlLXNpZ25pbmcta2V5cy5zaCkuJyk7XG4gIH1cbiAgY29uc3QgeyBwcml2YXRlS2V5LCBwdWJsaWNLZXkgfSA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKCdlYycsIHsgbmFtZWRDdXJ2ZTogJ3ByaW1lMjU2djEnIH0pO1xuICBjb25zdCBwdWJsaWNKd2sgPSBwdWJsaWNKd2tGcm9tKHB1YmxpY0tleSk7XG4gIGNvbnN0IGdlbmVyYXRlZDogTG9jYWxTaWduaW5nS2V5ID0geyBzZXJ2aWNlTmFtZSwga2lkOiBwdWJsaWNKd2sua2lkLCBwcml2YXRlS2V5LCBwdWJsaWNKd2sgfTtcbiAgZXBoZW1lcmFsS2V5cy5zZXQoc2VydmljZU5hbWUsIGdlbmVyYXRlZCk7XG4gIHJldHVybiBnZW5lcmF0ZWQ7XG59XG5cbi8qKlxuICogVGhlIGtleSBgc2VydmljZU5hbWVgIG11c3QgYmUgc2lnbmVkIHdpdGguXG4gKlxuICogSW4gYGNvbmZpZ3VyZWRgIG1vZGUgdGhlcmUgaXMgZXhhY3RseSBPTkUga2V5IOKAlCB0aGlzIHNlcnZpY2UncyDigJQgc28gYSByZXF1ZXN0XG4gKiB0byBzaWduIGFzIHNvbWUgT1RIRVIgc2VydmljZSBpcyBhIGJ1ZyBhbmQgdGhyb3dzOiBzdWNoIGEgdG9rZW4gd291bGQgYmVcbiAqIHVudmVyaWZpYWJsZSBldmVyeXdoZXJlIChpdHMgYGtpZGAgbmFtZXMgdGhpcyBzZXJ2aWNlLCBpdHMgYHN1YmAgYW5vdGhlcikuXG4gKiBGYWlsaW5nIGF0IHRoZSBtaW50IG1ha2VzIHRoYXQgYW4gaW1tZWRpYXRlLCBvYnZpb3VzIGVycm9yIGluc3RlYWQgb2YgYVxuICogcnVudGltZSA0MDEuXG4gKi9cbmZ1bmN0aW9uIHNpZ25pbmdLZXlGb3Ioc2VydmljZU5hbWU6IHN0cmluZyk6IExvY2FsU2lnbmluZ0tleSB7XG4gIGNvbnN0IGZpbGUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEU7XG4gIGlmICghZmlsZSkgcmV0dXJuIGVwaGVtZXJhbFNpZ25pbmdLZXkoc2VydmljZU5hbWUpO1xuXG4gIGlmICghbG9jYWxLZXkgfHwgbG9jYWxLZXkuc2VydmljZU5hbWUgIT09IHNlcnZpY2VJZGVudGl0eSgpKSB7XG4gICAgbG9jYWxLZXkgPSBsb2FkQ29uZmlndXJlZFNpZ25pbmdLZXkoZmlsZSk7XG4gIH1cbiAgaWYgKHNlcnZpY2VOYW1lICE9PSBsb2NhbEtleS5zZXJ2aWNlTmFtZSkge1xuICAgIHRocm93IG5ldyBTZXJ2aWNlS2V5RXJyb3IoXG4gICAgICBgVGhpcyBwcm9jZXNzIGlzICcke2xvY2FsS2V5LnNlcnZpY2VOYW1lfScgYW5kIGhvbGRzIG9ubHkgaXRzIG93biBzaWduaW5nIGtleSwgc28gaXQgY2Fubm90IG1pbnQgYSB0b2tlbiBmb3IgJyR7c2VydmljZU5hbWV9Jy4gYFxuICAgICAgKyAnTmFtZSB0aGUgY2FsbGluZyBzZXJ2aWNlIGNvcnJlY3RseSwgb3IgZ2l2ZSB0aGUgY2FsbGVyIGl0cyBvd24ga2V5LicsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbG9jYWxLZXk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmVyaWZpY2F0aW9uIGJ1bmRsZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBMb2FkZWRCdW5kbGUge1xuICAvKiogYGtpZGAg4oaSIHRoZSBzZXJ2aWNlIHRoYXQgcHVibGlzaGVkIGl0LCBwbHVzIHRoZSB2ZXJpZmljYXRpb24ga2V5LiAqL1xuICBieUtpZDogTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PjtcbiAgbG9hZGVkQXQ6IG51bWJlcjtcbiAgbXRpbWVNczogbnVtYmVyO1xufVxuXG5sZXQgYnVuZGxlOiBMb2FkZWRCdW5kbGUgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIHBhcnNlQnVuZGxlKHJhdzogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+IHtcbiAgbGV0IGRvY3VtZW50OiB1bmtub3duO1xuICB0cnkge1xuICAgIGRvY3VtZW50ID0gSlNPTi5wYXJzZShyYXcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBTZXJ2aWNlS2V5RXJyb3IoYCR7ZmlsZX0gaXMgbm90IHZhbGlkIEpTT046ICR7ZXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgfVxuICBjb25zdCBzZXJ2aWNlcyA9IChkb2N1bWVudCBhcyBQYXJ0aWFsPFNlcnZpY2VLZXlCdW5kbGU+KT8uc2VydmljZXM7XG4gIGlmICghc2VydmljZXMgfHwgdHlwZW9mIHNlcnZpY2VzICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBTZXJ2aWNlS2V5RXJyb3IoYCR7ZmlsZX0gaGFzIG5vIFwic2VydmljZXNcIiBvYmplY3RgKTtcbiAgfVxuICBjb25zdCBieUtpZCA9IG5ldyBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+KCk7XG4gIGZvciAoY29uc3QgW3NlcnZpY2VOYW1lLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoc2VydmljZXMpKSB7XG4gICAgZm9yIChjb25zdCBqd2sgb2YgZW50cnk/LmtleXMgPz8gW10pIHtcbiAgICAgIGlmICghandrPy5raWQpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYnlLaWQuc2V0KGp3ay5raWQsIHsgc2VydmljZU5hbWUsIGtleTogcHVibGljS2V5RnJvbUp3ayhqd2spIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gT25lIHVudXNhYmxlIGVudHJ5IG11c3Qgbm90IGRpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIGJ1bmRsZSDigJQgdGhlIHNhbWVcbiAgICAgICAgLy8gcnVsZSB0aGUgSldLUyBjYWNoZSBhcHBsaWVzIHRvIHBsYXRmb3JtJ3MgcHVibGlzaGVkIHNldC5cbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NraXBwaW5nIHVudXNhYmxlIHNlcnZpY2Uga2V5JywgeyBzZXJ2aWNlTmFtZSwga2lkOiBqd2sua2lkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGJ5S2lkLnNpemUgPT09IDApIHRocm93IG5ldyBTZXJ2aWNlS2V5RXJyb3IoYCR7ZmlsZX0gY29udGFpbmVkIG5vIHVzYWJsZSBzZXJ2aWNlIGtleXNgKTtcbiAgcmV0dXJuIGJ5S2lkO1xufVxuXG4vKipcbiAqIFRoZSBga2lkYCDihpIgc2VydmljZSBtYXAsIHJlLXJlYWQgd2hlbiB0aGUgcmVmcmVzaCBpbnRlcnZhbCBoYXMgcGFzc2VkIG9yIHRoZVxuICogZmlsZSdzIG10aW1lIGNoYW5nZWQgKHNvIGEgcm90YXRpb24gaXMgcGlja2VkIHVwIHdpdGhvdXQgYSByZXN0YXJ0KS5cbiAqXG4gKiBJbiBlcGhlbWVyYWwgbW9kZSB0aGUgXCJidW5kbGVcIiBpcyB3aGF0ZXZlciB0aGlzIHByb2Nlc3MgZ2VuZXJhdGVkIGZvciBpdHNlbGYuXG4gKiBOZXZlciB0aHJvd3MgZm9yIGEgbWlzc2luZyBmaWxlIGluIHRoYXQgbW9kZSDigJQgaXQganVzdCBob2xkcyB0aG9zZSBrZXlzLlxuICovXG5mdW5jdGlvbiB2ZXJpZmljYXRpb25LZXlzKCk6IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT4ge1xuICBjb25zdCBmaWxlID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9LRVlfQlVORExFX0ZJTEU7XG4gIGlmICghZmlsZSkge1xuICAgIGNvbnN0IGxvY2FsID0gbmV3IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBlcGhlbWVyYWxLZXlzPy52YWx1ZXMoKSA/PyBbXSkge1xuICAgICAgbG9jYWwuc2V0KGtleS5raWQsIHsgc2VydmljZU5hbWU6IGtleS5zZXJ2aWNlTmFtZSwga2V5OiBjcnlwdG8uY3JlYXRlUHVibGljS2V5KGtleS5wcml2YXRlS2V5KSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsO1xuICB9XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgbGV0IG10aW1lTXMgPSAwO1xuICB0cnkge1xuICAgIG10aW1lTXMgPSBzdGF0U3luYyhmaWxlKS5tdGltZU1zO1xuICB9IGNhdGNoIHtcbiAgICAvLyBVbnJlYWRhYmxlIG5vdzoga2VlcCBzZXJ2aW5nIGEgYnVuZGxlIGFscmVhZHkgaW4gaGFuZCAocHVibGljIGtleXMgZG9uJ3RcbiAgICAvLyBleHBpcmUsIGFuZCByZWZ1c2luZyBldmVyeSBpbnRlcm5hbCBjYWxsIGJlY2F1c2UgYSBtb3VudCBibGlwcGVkIHdvdWxkIGJlXG4gICAgLy8gYSBzZWxmLWluZmxpY3RlZCBvdXRhZ2UpLiBXaXRoIG5vdGhpbmcgaW4gaGFuZCwgZmFpbCBjbG9zZWQgYmVsb3cuXG4gICAgaWYgKGJ1bmRsZSkgcmV0dXJuIGJ1bmRsZS5ieUtpZDtcbiAgfVxuICBpZiAoYnVuZGxlICYmIGJ1bmRsZS5tdGltZU1zID09PSBtdGltZU1zICYmIG5vdyAtIGJ1bmRsZS5sb2FkZWRBdCA8IEJVTkRMRV9SRUZSRVNIX0lOVEVSVkFMX01TKSB7XG4gICAgcmV0dXJuIGJ1bmRsZS5ieUtpZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgYnlLaWQgPSBwYXJzZUJ1bmRsZShyZWFkRmlsZVN5bmMoZmlsZSwgJ3V0ZjgnKSwgZmlsZSk7XG4gICAgYnVuZGxlID0geyBieUtpZCwgbG9hZGVkQXQ6IG5vdywgbXRpbWVNcyB9O1xuICAgIHJldHVybiBieUtpZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoYnVuZGxlKSB7XG4gICAgICBsb2dnZXIud2FybignU2VydmljZSBrZXkgYnVuZGxlIHJlbG9hZCBmYWlsZWQ7IGNvbnRpbnVpbmcgb24gdGhlIGxvYWRlZCBjb3B5JywgeyBmaWxlLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yIGluc3RhbmNlb2YgU2VydmljZUtleUVycm9yID8gZXJyb3IgOiBuZXcgU2VydmljZUtleUVycm9yKFN0cmluZyhlcnJvcikpO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciBga2lkYCBiZWxvbmdzIHRvIGFuIGludGVybmFsIFNFUlZJQ0Uga2V5LiBUaGlzIGlzIGhvdyBhIGJlYXJlciB0b2tlblxuICogaXMgcm91dGVkIGJldHdlZW4gdGhlIHR3byBFUzI1NiBjaGFpbnM6IGJvdGggdXNlciBhbmQgc2VydmljZSB0b2tlbnMgYXJlXG4gKiBFUzI1NiB3aXRoIGEgYGtpZGAsIGFuZCBga2lkYCBpcyBhbiBSRkMgNzYzOCB0aHVtYnByaW50LCBzbyBvd25lcnNoaXAgb2YgdGhlXG4gKiBpZCDigJQgbm90IGEgY2xhaW0gaW5zaWRlIHRoZSB0b2tlbiDigJQgZGVjaWRlcyB3aGljaCBrZXkgc2V0IG1heSB2ZXJpZnkgaXQuXG4gKiBSZXR1cm5zIGBmYWxzZWAgKG5ldmVyIHRocm93cykgd2hlbiBubyBidW5kbGUgY2FuIGJlIHJlYWQ7IHRoZSB0b2tlbiB0aGVuXG4gKiB0YWtlcyB0aGUgdXNlciBjaGFpbiBhbmQgaXMgcmVqZWN0ZWQgdGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlcnZpY2VLaWQoa2lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdmVyaWZpY2F0aW9uS2V5cygpLmhhcyhraWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNpZ24gLyB2ZXJpZnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFNpZ24gYGNsYWltc2AgYXMgdGhpcyBzZXJ2aWNlJ3MgaW50ZXJuYWwgdG9rZW46IEVTMjU2LCBga2lkYCA9IHRoZSBzaWduZXInc1xuICogdGh1bWJwcmludCwgYHN1YmAgPSBgc2VydmljZTo8c2VydmljZU5hbWU+YC4gYGlhdGAvYGV4cGAgYW5kIHRoZSBvcHRpb25hbFxuICogaXNzdWVyL2F1ZGllbmNlIGFyZSBzdGFtcGVkIGhlcmUgc28gdGhlcmUgaXMgb25lIHBsYWNlIHRoYXQgZGVjaWRlcyB3aGF0IGFcbiAqIHNlcnZpY2UgdG9rZW4gc2F5cy5cbiAqXG4gKiBIYW5kLXJvbGxlZCAocmF0aGVyIHRoYW4gYGp3dC5zaWduYCkgb25seSBzbyB0aGUgaGVhZGVyIGNhcnJpZXMgdGhlIGBraWRgIGluXG4gKiB0aGUgc2FtZSBzaGFwZSBwbGF0Zm9ybSdzIHNpZ25lciBwcm9kdWNlcyDigJQgYGNyeXB0by5zaWduYCBpcyBzeW5jaHJvbm91cywgc29cbiAqIHVubGlrZSB0aGUgS01TIHBhdGggdGhpcyBjb3N0cyBub3RoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblNlcnZpY2VKd3QoXG4gIGNsYWltczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdGlvbnM6IHsgc2VydmljZU5hbWU6IHN0cmluZzsgZXhwaXJlc0luU2Vjb25kczogbnVtYmVyOyBpc3N1ZXI/OiBzdHJpbmc7IGF1ZGllbmNlPzogc3RyaW5nIH0sXG4pOiBzdHJpbmcge1xuICBjb25zdCBrZXkgPSBzaWduaW5nS2V5Rm9yKG9wdGlvbnMuc2VydmljZU5hbWUpO1xuICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgY29uc3QgYm9keSA9IHtcbiAgICAuLi5jbGFpbXMsXG4gICAgc3ViOiBgJHtTRVJWSUNFX1NVQkpFQ1RfUFJFRklYfSR7b3B0aW9ucy5zZXJ2aWNlTmFtZX1gLFxuICAgIGlhdDogbm93LFxuICAgIGV4cDogbm93ICsgb3B0aW9ucy5leHBpcmVzSW5TZWNvbmRzLFxuICAgIC4uLihvcHRpb25zLmlzc3VlciA/IHsgaXNzOiBvcHRpb25zLmlzc3VlciB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLmF1ZGllbmNlID8geyBhdWQ6IG9wdGlvbnMuYXVkaWVuY2UgfSA6IHt9KSxcbiAgfTtcbiAgY29uc3Qgc2lnbmluZ0lucHV0ID0gZW5jb2RlSndzU2lnbmluZ0lucHV0KGtleS5raWQsIGJvZHkpO1xuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbignc2hhMjU2JywgQnVmZmVyLmZyb20oc2lnbmluZ0lucHV0LCAndXRmLTgnKSwge1xuICAgIGtleToga2V5LnByaXZhdGVLZXksXG4gICAgZHNhRW5jb2Rpbmc6ICdpZWVlLXAxMzYzJyxcbiAgfSk7XG4gIHJldHVybiBjb21wYWN0SndzKHNpZ25pbmdJbnB1dCwgc2lnbmF0dXJlKTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYW4gaW50ZXJuYWwgc2VydmljZSB0b2tlbiwgU1lOQ0hST05PVVNMWSwgYW5kIHJldHVybiBpdHMgY2xhaW1zLlxuICpcbiAqIFRoZSBzZWN1cml0eSBwcm9wZXJ0eSB0aGlzIGZ1bmN0aW9uIGV4aXN0cyBmb3I6IHRoZSBga2lkYCBzZWxlY3RzIHRoZSBrZXlcbiAqIEFORCBuYW1lcyB0aGUgc2lnbmVyLCBhbmQgdGhlIHRva2VuJ3MgYHN1YmAgbXVzdCBhZ3JlZS4gU28gYGJpbGxpbmdgIGNhbm5vdFxuICogYmUgaW1wZXJzb25hdGVkIGJ5IGFueSBvdGhlciBzZXJ2aWNlIOKAlCBub3QgZXZlbiBvbmUgdGhhdCBob2xkcyBhIHZhbGlkIGtleSBvZlxuICogaXRzIG93biDigJQgYSBndWFyYW50ZWUgbm8gc2hhcmVkIHNlY3JldCBjYW4gZ2l2ZS5cbiAqXG4gKiBAdGhyb3dzIHtqd3QuSnNvbldlYlRva2VuRXJyb3J9IHVua25vd24gYGtpZGAsIHdyb25nIGFsZ29yaXRobSwgYmFkXG4gKiAgICAgICAgIHNpZ25hdHVyZSwgZXhwaXJlZCwgb3IgYSBgc3ViYCB0aGF0IGRpc2FncmVlcyB3aXRoIHRoZSBzaWduaW5nIGtleS5cbiAqIEB0aHJvd3Mge1NlcnZpY2VLZXlFcnJvcn0gbm8gdmVyaWZpY2F0aW9uIGJ1bmRsZSBjb3VsZCBiZSByZWFkIGF0IGFsbCDigJQgdGhlXG4gKiAgICAgICAgIHRva2VuJ3MgdmFsaWRpdHkgaXMgVU5LTk9XTiBhbmQgdGhlIGNhbGxlciBtdXN0IG5vdCB0cmVhdCBpdCBhcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNlcnZpY2VKd3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdG9rZW46IHN0cmluZyxcbiAgb3B0aW9uczogeyBraWQ6IHN0cmluZzsgaXNzdWVyPzogc3RyaW5nOyBhdWRpZW5jZT86IHN0cmluZyB9LFxuKTogVCB7XG4gIGNvbnN0IGVudHJ5ID0gdmVyaWZpY2F0aW9uS2V5cygpLmdldChvcHRpb25zLmtpZCk7XG4gIC8vIEVWRVJZIGVtaXNzaW9uIG9mIHRoaXMgY291bnRlciBjYXJyaWVzIHRoZSBzYW1lIGxhYmVsIEtFWVMuIFRoZSBQcm9tZXRoZXVzXG4gIC8vIGNvdW50ZXIgaXMgcmVnaXN0ZXJlZCBsYXppbHkgd2l0aCB3aGF0ZXZlciBrZXlzIGl0cyBmaXJzdCBlbWlzc2lvbiB1c2VkLFxuICAvLyBhbmQgYW4gaW5jcmVtZW50IHdpdGggYSBkaWZmZXJlbnQgc2V0IHRocm93cyDigJQgd2hpY2ggYGVtaXRDb3VudGVyYFxuICAvLyBzd2FsbG93cy4gU28gd2hlbiB0aGUgZmlyc3QgdG9rZW4gYSBwb2QgdmVyaWZpZWQgd2FzIGJhZCAoYHsgcmVzdWx0IH1gXG4gIC8vIGFsb25lKSwgZXZlcnkgbGF0ZXIgYG9rYCBhbmQgYHN1YmplY3RfbWlzbWF0Y2hgIChgeyByZXN1bHQsIHNlcnZpY2UgfWApIHdhc1xuICAvLyBzaWxlbnRseSBkcm9wcGVkIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2VzczogdGhlIG1ldHJpYyB0aGF0IHRlbGxzIHlvdVxuICAvLyBzZXJ2aWNlLXRvLXNlcnZpY2UgYXV0aCBpcyBoZWFsdGh5IHdlbnQgcXVpZXQgZXhhY3RseSB3aGVuIGl0IG1hdHRlcmVkLlxuICBpZiAoIWVudHJ5KSB7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICd1bmtub3duX2tpZCcsIHNlcnZpY2U6ICd1bmtub3duJyB9KTtcbiAgICB0aHJvdyBuZXcgand0Lkpzb25XZWJUb2tlbkVycm9yKGBObyBwdWJsaXNoZWQgc2VydmljZSBrZXkgZm9yIGtpZCAke29wdGlvbnMua2lkfWApO1xuICB9XG4gIGxldCBjbGFpbXM6IFQgJiB7IHN1Yj86IHVua25vd24gfTtcbiAgdHJ5IHtcbiAgICBjbGFpbXMgPSBqd3QudmVyaWZ5KHRva2VuLCBlbnRyeS5rZXksIHtcbiAgICAgIGFsZ29yaXRobXM6IFtTRVJWSUNFX1RPS0VOX0FMR09SSVRITV0sXG4gICAgICAuLi4ob3B0aW9ucy5pc3N1ZXIgPyB7IGlzc3Vlcjogb3B0aW9ucy5pc3N1ZXIgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRpb25zLmF1ZGllbmNlID8geyBhdWRpZW5jZTogb3B0aW9ucy5hdWRpZW5jZSB9IDoge30pLFxuICAgIH0pIGFzIFQgJiB7IHN1Yj86IHVua25vd24gfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ2ludmFsaWQnLCBzZXJ2aWNlOiBlbnRyeS5zZXJ2aWNlTmFtZSB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBpZiAoY2xhaW1zLnN1YiAhPT0gYCR7U0VSVklDRV9TVUJKRUNUX1BSRUZJWH0ke2VudHJ5LnNlcnZpY2VOYW1lfWApIHtcbiAgICAvLyBBIHZhbGlkIHNpZ25hdHVyZSBieSB0aGUgV1JPTkcgc2VydmljZTogdGhlIGtleSBiZWxvbmdzIHRvIGBlbnRyeS5zZXJ2aWNlTmFtZWBcbiAgICAvLyBidXQgdGhlIHRva2VuIHNwZWFrcyBmb3Igc29tZW9uZSBlbHNlOiBhIGNyb3NzLXNlcnZpY2UgZm9yZ2VyeS5cbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ3N1YmplY3RfbWlzbWF0Y2gnLCBzZXJ2aWNlOiBlbnRyeS5zZXJ2aWNlTmFtZSB9KTtcbiAgICB0aHJvdyBuZXcgand0Lkpzb25XZWJUb2tlbkVycm9yKGBTZXJ2aWNlIHRva2VuIHN1YmplY3QgJHtTdHJpbmcoY2xhaW1zLnN1Yil9IHdhcyBzaWduZWQgYnkgJHtlbnRyeS5zZXJ2aWNlTmFtZX1gKTtcbiAgfVxuICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ29rJywgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gIHJldHVybiBjbGFpbXM7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGlsZSB0aGlzIHNlcnZpY2Ugc3RpbGwgcHVibGlzaGVzIG1vcmUgdGhhbiBvbmUgdmVyaWZpY2F0aW9uIGtleSDigJQgaS5lLlxuICogYSBzaWduaW5nLWtleSByb3RhdGlvbiBpcyBvcGVuIGFuZCB0aGUgcmV0aXJpbmcga2V5IGlzIHN0aWxsIHRydXN0ZWQuIEZlZWRzXG4gKiB0aGUgYHNlY3JldF9yb3RhdGlvbl9wcmV2aW91c19zZXR7c2VjcmV0PVwiU0VSVklDRV9TSUdOSU5HX0tFWVwifWAgZ2F1Z2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JldGlyaW5nU2VydmljZUtleVB1Ymxpc2hlZCgpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBtZSA9IHNlcnZpY2VJZGVudGl0eSgpO1xuICAgIHJldHVybiBbLi4udmVyaWZpY2F0aW9uS2V5cygpLnZhbHVlcygpXS5maWx0ZXIoKHYpID0+IHYuc2VydmljZU5hbWUgPT09IG1lKS5sZW5ndGggPiAxO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUZXN0IHNlYW06IGRyb3AgdGhlIGxvYWRlZCBzaWduaW5nIGtleSwgdGhlIGJ1bmRsZSBhbmQgYW55IGVwaGVtZXJhbCBrZXlzIHNvXG4gKiB0aGUgbmV4dCBzaWduL3ZlcmlmeSByZS1yZWFkcyB0aGUgZW52aXJvbm1lbnQuIERvbid0IGNhbGwgZnJvbSBwcm9kdWN0aW9uIGNvZGVcbiAqIOKAlCByb3RhdGlvbiBpcyBwaWNrZWQgdXAgYnkgdGhlIHJlZnJlc2ggaW50ZXJ2YWwgYW5kIHRoZSBtdGltZSBjaGVjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFNlcnZpY2VLZXlzRm9yVGVzdHMoKTogdm9pZCB7XG4gIGxvY2FsS2V5ID0gdW5kZWZpbmVkO1xuICBidW5kbGUgPSB1bmRlZmluZWQ7XG4gIGVwaGVtZXJhbEtleXMgPSB1bmRlZmluZWQ7XG4gIGVwaGVtZXJhbFdhcm5lZCA9IGZhbHNlO1xufVxuIl19
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1rZXlzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvc2VydmljZS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBRUgsT0FBTyxNQUEwQixNQUFNLFFBQVEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTVDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUM7QUFFL0MsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztBQUVqRCxpRkFBaUY7QUFDakYsTUFBTSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsQ0FBQyxZQUFZO0FBb0J4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0s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aWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBlci1zZXJ2aWNlIHNpZ25pbmcga2V5cyBmb3IgSU5URVJOQUwgc2VydmljZS10by1zZXJ2aWNlIHRva2Vucy5cbiAqXG4gKiBCZWZvcmUgdGhpcywgZXZlcnkgc2VydmljZSBoZWxkIG9uZSBzaGFyZWQgYEpXVF9TRUNSRVRgLCBzbyBhbnkgc2VydmljZSBjb3VsZFxuICogbWludCBhIHRva2VuIG5hbWluZyBhbnkgT1RIRVIgc2VydmljZSDigJQgXCJiaWxsaW5nIHNhaWQgc29cIiB3YXMgdW5mYWxzaWZpYWJsZSxcbiAqIGFuZCBhIHNpbmdsZSBjb21wcm9taXNlZCB3b3JrbG9hZCBjb3VsZCBzcGVhayBmb3IgdGhlIHdob2xlIGZsZWV0LiBOb3cgZWFjaFxuICogc2VydmljZSBzaWducyB3aXRoIGl0cyBPV04gRVMyNTYgKEVDIFAtMjU2KSBrZXkgYW5kIGNvbnN1bWVycyB2ZXJpZnkgYWdhaW5zdFxuICogdGhlIHB1YmxpYyBoYWx2ZXMuIFRoZSBga2lkYCBpcyBib3VuZCB0byB0aGUgc2lnbmVyJ3MgTkFNRSwgc28gYSB0b2tlbiB3aG9zZVxuICogYHN1YmAgc2F5cyBgc2VydmljZTpiaWxsaW5nYCBidXQgd2FzIHNpZ25lZCB3aXRoIGNvbXBsaWFuY2UncyBrZXkgaXMgYVxuICogZm9yZ2VyeSwgbm90IGEgdmFsaWQgdG9rZW4gd2l0aCBhIGNvbmZ1c2luZyBzdWJqZWN0LlxuICpcbiAqICMjIFdoeSBwdWJsaWMga2V5cyBhcmUgZGlzdHJpYnV0ZWQgYnkgQ09ORklHLCBub3QgYnkgcGVyLXNlcnZpY2UgSldLUyBlbmRwb2ludHNcbiAqXG4gKiBUaGUgdXNlciBjaGFpbiBmZXRjaGVzIHBsYXRmb3JtJ3MgSldLUyBvdmVyIEhUVFAgYmVjYXVzZSB0aGVyZSBpcyBleGFjdGx5XG4gKiBvbmUgc2lnbmVyIGFuZCBpdCBpcyB0aGUgb25lIHNlcnZpY2UgdGhhdCBtdXN0IGJlIHVwIGZvciBhbnlib2R5IHRvIHNpZ24gaW4uXG4gKiBUaGUgc2VydmljZSBjaGFpbiBpcyB0aGUgb3Bwb3NpdGUgc2hhcGUsIGFuZCB0aHJlZSBwcm9wZXJ0aWVzIGRlY2lkZWQgaXQ6XG4gKlxuICogIDEuICoqYHZlcmlmeVNlcnZpY2VQcmluY2lwYWxgIG11c3Qgc3RheSBzeW5jaHJvbm91cy4qKiBUaGUgZ2xvYmFsIHJhdGVcbiAqICAgICBsaW1pdGVyJ3MgYHNraXBgIGFuZCBhcHAtZmFjdG9yeSdzIGAvd2FybXVwYCBndWFyZCB2ZXJpZnkgYSBzZXJ2aWNlIHRva2VuXG4gKiAgICAgQkVGT1JFIGByZXF1aXJlQXV0aGAgcnVucywgaW4gc3luY2hyb25vdXMgRXhwcmVzcyBjYWxsYmFja3MuIEFuIEhUVFAgSldLU1xuICogICAgIGZldGNoIHdvdWxkIGZvcmNlIHRob3NlIGFzeW5jIOKAlCBhIGNoYW5nZSB0aGF0IHJlYWNoZXMgaW50byBldmVyeVxuICogICAgIHNlcnZpY2UncyBsaW1pdGVyIHdpcmluZy5cbiAqICAyLiAqKk5vIGF2YWlsYWJpbGl0eSBjb3VwbGluZy4qKiBXaXRoIHBlci1zZXJ2aWNlIEpXS1MgZW5kcG9pbnRzLCB2ZXJpZnlpbmcgYVxuICogICAgIHRva2VuIG1pbnRlZCBieSBgYmlsbGluZ2AgbmVlZHMgYGJpbGxpbmdgIHRvIGJlIHJlYWNoYWJsZSDigJQgc28gYmlsbGluZ1xuICogICAgIGJlaW5nIGRvd24gd291bGQgc3RvcCBwbGF0Zm9ybSBmcm9tIGFjY2VwdGluZyBiaWxsaW5nJ3MgaW4tZmxpZ2h0IGNhbGxzLFxuICogICAgIHR1cm5pbmcgb25lIG91dGFnZSBpbnRvIHNldmVyYWwuIEEgbW91bnRlZCBmaWxlIGhhcyBubyBzdWNoIGVkZ2UuXG4gKiAgMy4gKipObyBOw5dOIGFkZHJlc3MgY29uZmlnLioqIDEwIHNlcnZpY2VzIHdvdWxkIGVhY2ggbmVlZCBldmVyeSBwZWVyJ3NcbiAqICAgICBob3N0L3BvcnQgKGFuZCBjb21wb3NlLCB3aGljaCBoYXMgbm8gbWVzaCwgd291bGQgbmVlZCB0aGVtIHRvbykuXG4gKlxuICogU28gdGhlIGRlcGxveSBnZW5lcmF0ZXMgb25lIGtleXBhaXIgcGVyIHNlcnZpY2UsIG1vdW50cyBlYWNoIHByaXZhdGUga2V5IE9OTFlcbiAqIGludG8gaXRzIG93biBzZXJ2aWNlLCBhbmQgbW91bnRzIE9ORSBwdWJsaWMgYnVuZGxlIChyZWFkLW9ubHkpIGV2ZXJ5d2hlcmU6XG4gKlxuICogICBgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFYCAgdGhpcyBzZXJ2aWNlJ3MgRUMgUC0yNTYgcHJpdmF0ZSBrZXkgKFBLQ1MjOCBQRU0pXG4gKiAgIGBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRWAgICBgeyBcInNlcnZpY2VzXCI6IHsgXCI8bmFtZT5cIjogeyBcImtleXNcIjogWzxqd2s+4oCmXSB9IH0gfWBcbiAqXG4gKiBSb3RhdGlvbiBpcyBieSBga2lkYCwgaW4gdGhlIHNhbWUgc2hhcGUgYXMgdGhlIHVzZXIgY2hhaW46IGFkZCB0aGUgbmV3IHB1YmxpY1xuICoga2V5IHRvIHRoZSBidW5kbGUgKHRoZSBzZXJ2aWNlIG5vdyBwdWJsaXNoZXMgdHdvKSwgcm9sbCB0aGUgYnVuZGxlIG91dCwgc3dhcFxuICogdGhhdCBzZXJ2aWNlJ3MgcHJpdmF0ZSBrZXksIHRoZW4gZHJvcCB0aGUgcmV0aXJlZCBwdWJsaWMga2V5LiBUaGUgYnVuZGxlIGlzXG4gKiByZS1yZWFkIG9uIGFuIGludGVydmFsIEFORCBvbiBhbiBtdGltZSBjaGFuZ2UsIHNvIGEgcm90YXRpb24gbmVlZHMgbm8gcmVzdGFydC5cbiAqIGBkZXBsb3kvYmluL3NlcnZpY2Utc2lnbmluZy1rZXlzLnNoYCBnZW5lcmF0ZXMgYW5kIHJvdGF0ZXMgYm90aCBoYWx2ZXMuXG4gKlxuICogIyMgRXBoZW1lcmFsIG1vZGVcbiAqXG4gKiBXaXRoIG5vIGBTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEVgIGNvbmZpZ3VyZWQsIGEga2V5cGFpciBpcyBnZW5lcmF0ZWRcbiAqIElOLVBST0NFU1MgcGVyIHJlcXVlc3RlZCBzZXJ2aWNlIG5hbWUgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIGluLW1lbW9yeSBidW5kbGUuXG4gKiBUaGF0IGtlZXBzIHNpbmdsZS1wcm9jZXNzIHN1aXRlcyBhbmQgbG9jYWwgb25lLW9mZiBzY3JpcHRzIHdvcmtpbmcgd2l0aCBubyBrZXlcbiAqIG1hdGVyaWFsLCBhbmQgaXQgY2FuIG5ldmVyIHdpZGVuIHRydXN0OiB0aGUgb25seSB2ZXJpZmllciB0aGF0IGFjY2VwdHMgc3VjaCBhXG4gKiB0b2tlbiBpcyB0aGUgcHJvY2VzcyB0aGF0IG1pbnRlZCBpdC4gSXQgaXMgbG9nZ2VkIG9uY2UgYXQgd2FybiBsZXZlbCwgYW5kXG4gKiBjb3VudGVkLCBiZWNhdXNlIGluIGEgcmVhbCBkZXBsb3ltZW50IGl0IG1lYW5zIHRoaXMgc2VydmljZSdzIHBlZXJzIHdpbGxcbiAqIHJlamVjdCBldmVyeXRoaW5nIGl0IHNlbmRzLlxuICovXG5cbmltcG9ydCBjcnlwdG8sIHsgdHlwZSBLZXlPYmplY3QgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBzdGF0U3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcbmltcG9ydCB7IGNvbXBhY3RKd3MsIGVuY29kZUp3c1NpZ25pbmdJbnB1dCwgcHVibGljSndrRnJvbSwgcHVibGljS2V5RnJvbUp3aywgdHlwZSBQdWJsaWNKd2sgfSBmcm9tICcuLi91dGlscy9qd2suanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3NlcnZpY2Uta2V5cycpO1xuXG4vKiogVGhlIE9OTFkgYWxnb3JpdGhtIGFuIGludGVybmFsIHNlcnZpY2UgdG9rZW4gbWF5IGJlIHNpZ25lZCB3aXRoLiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfVE9LRU5fQUxHT1JJVEhNID0gJ0VTMjU2JztcblxuLyoqIFN1YmplY3QgcHJlZml4IG5hbWluZyB0aGUgY2FsbGluZyBzZXJ2aWNlIG9uIGEgc2VydmljZSB0b2tlbiAoYHNlcnZpY2U6PG5hbWU+YCkuICovXG5leHBvcnQgY29uc3QgU0VSVklDRV9TVUJKRUNUX1BSRUZJWCA9ICdzZXJ2aWNlOic7XG5cbi8qKiBIb3cgbG9uZyBhIGxvYWRlZCBidW5kbGUgaXMgc2VydmVkIGJlZm9yZSBpdCBpcyByZS1yZWFkIChyb3RhdGlvbiBwaWNrdXApLiAqL1xuY29uc3QgQlVORExFX1JFRlJFU0hfSU5URVJWQUxfTVMgPSAzMDBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuLyoqIE9uZSBzZXJ2aWNlJ3MgcHVibGlzaGVkIHZlcmlmaWNhdGlvbiBrZXlzLCBhcyB0aGV5IGFwcGVhciBpbiB0aGUgYnVuZGxlIGZpbGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VLZXlFbnRyeSB7XG4gIGtleXM6IFB1YmxpY0p3a1tdO1xufVxuXG4vKiogVGhlIGRvY3VtZW50IGBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRWAgaG9sZHM6IGV2ZXJ5IHNlcnZpY2UncyBwdWJsaWMga2V5cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUtleUJ1bmRsZSB7XG4gIHNlcnZpY2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXJ2aWNlS2V5RW50cnk+O1xufVxuXG4vKiogQSBzaWduaW5nIGtleSB0aGlzIHByb2Nlc3MgaG9sZHMsIGluIHRoZSBmb3JtcyBzaWduaW5nIG5lZWRzLiAqL1xuaW50ZXJmYWNlIExvY2FsU2lnbmluZ0tleSB7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGtpZDogc3RyaW5nO1xuICBwcml2YXRlS2V5OiBLZXlPYmplY3Q7XG4gIHB1YmxpY0p3azogUHVibGljSndrO1xufVxuXG4vKiogVGhlIGJ1bmRsZSBjb3VsZCBub3QgYmUgbG9hZGVkIG9yIGRvZXMgbm90IGtub3cgdGhlIGtleSBhIHRva2VuIG5hbWVzLiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZpY2VLZXlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcnZpY2VLZXlFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHByb2Nlc3MncyBzZXJ2aWNlIGlkZW50aXR5IOKAlCB0aGUgYDxuYW1lPmAgaW4gYHNlcnZpY2U6PG5hbWU+YCBhbmQgdGhlXG4gKiBuYW1lIGl0cyBrZXkgaXMgcHVibGlzaGVkIHVuZGVyLiBgU0VSVklDRV9OQU1FYCBpcyBhbHJlYWR5IHNldCBwZXIgc2VydmljZSBpblxuICogZXZlcnkgZGVwbG95IHRhcmdldCAoY29tcG9zZSwgbWluaWt1YmUsIGVjMiwgZWtzKSwgYW5kIGlzIHRoZSBzYW1lIHZhbHVlIHRoZVxuICogYXVkaXQgYW5kIG1ldHJpYyBsYWJlbHMgdXNlLCBzbyB0aGVyZSBpcyBvbmUgc291cmNlIG9mIHRydXRoIGZvciBcIndobyBhbSBJXCIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlSWRlbnRpdHkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2NhbCBzaWduaW5nIGtleVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBsb2NhbEtleTogTG9jYWxTaWduaW5nS2V5IHwgdW5kZWZpbmVkO1xubGV0IGVwaGVtZXJhbEtleXM6IE1hcDxzdHJpbmcsIExvY2FsU2lnbmluZ0tleT4gfCB1bmRlZmluZWQ7XG5sZXQgZXBoZW1lcmFsV2FybmVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGxvYWRDb25maWd1cmVkU2lnbmluZ0tleShmaWxlOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VJZGVudGl0eSgpO1xuICBsZXQgcHJpdmF0ZUtleTogS2V5T2JqZWN0O1xuICB0cnkge1xuICAgIHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleShyZWFkRmlsZVN5bmMoZmlsZSwgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VLZXlFcnJvcihgQ291bGQgbm90IHJlYWQgdGhlIHNlcnZpY2Ugc2lnbmluZyBrZXkgYXQgJHtmaWxlfTogJHtlcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICB9XG4gIC8vIHB1YmxpY0p3a0Zyb20gcmVqZWN0cyBhbnl0aGluZyBidXQgYW4gRUMgUC0yNTYga2V5LCBzbyBhIHNlcnZpY2UgY29uZmlndXJlZFxuICAvLyB3aXRoIChzYXkpIGFuIFJTQSBrZXkgZmFpbHMgSEVSRSByYXRoZXIgdGhhbiBtaW50aW5nIHRva2VucyBub2JvZHkgdmVyaWZpZXMuXG4gIGNvbnN0IHB1YmxpY0p3ayA9IHB1YmxpY0p3a0Zyb20oY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShwcml2YXRlS2V5KSk7XG4gIHJldHVybiB7IHNlcnZpY2VOYW1lLCBraWQ6IHB1YmxpY0p3ay5raWQsIHByaXZhdGVLZXksIHB1YmxpY0p3ayB9O1xufVxuXG4vKipcbiAqIFRoZSBpbi1wcm9jZXNzIGtleSBmb3IgYHNlcnZpY2VOYW1lYCBpbiBlcGhlbWVyYWwgbW9kZSwgZ2VuZXJhdGVkIG9uIGZpcnN0XG4gKiB1c2UgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIGluLW1lbW9yeSBidW5kbGUgc28gdGhpcyBwcm9jZXNzIGNhbiB2ZXJpZnkgaXRzIG93blxuICogdG9rZW5zLiBLZXllZCBieSBOQU1FIChub3QganVzdCBvbmUga2V5KSBzbyBhIHNpbmdsZS1wcm9jZXNzIHN1aXRlIGNhbiBtaW50XG4gKiB0b2tlbnMgZm9yIHNldmVyYWwgc2VydmljZXMsIGFzIHRoZSByZWFsIGZsZWV0IGRvZXMgYWNyb3NzIHByb2Nlc3Nlcy5cbiAqL1xuZnVuY3Rpb24gZXBoZW1lcmFsU2lnbmluZ0tleShzZXJ2aWNlTmFtZTogc3RyaW5nKTogTG9jYWxTaWduaW5nS2V5IHtcbiAgZXBoZW1lcmFsS2V5cyA/Pz0gbmV3IE1hcCgpO1xuICBjb25zdCBleGlzdGluZyA9IGVwaGVtZXJhbEtleXMuZ2V0KHNlcnZpY2VOYW1lKTtcbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG5cbiAgaWYgKCFlcGhlbWVyYWxXYXJuZWQpIHtcbiAgICBlcGhlbWVyYWxXYXJuZWQgPSB0cnVlO1xuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3NpZ25pbmdfZXBoZW1lcmFsX2tleV90b3RhbCcsIHsgc2VydmljZTogc2VydmljZUlkZW50aXR5KCkgfSk7XG4gICAgbG9nZ2VyLndhcm4oJ1NFUlZJQ0VfU0lHTklOR19LRVlfRklMRSBpcyBub3Qgc2V0IOKAlCBtaW50aW5nIGludGVybmFsIHNlcnZpY2UgdG9rZW5zIHdpdGggYW4gRVBIRU1FUkFMIGtleS4gT25seSB0aGlzIHByb2Nlc3Mgd2lsbCBhY2NlcHQgdGhlbTsgZXZlcnkgcGVlciB3aWxsIHJlamVjdCB0aGVtLiBTZXQgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFICsgU0VSVklDRV9LRVlfQlVORExFX0ZJTEUgKGRlcGxveS9iaW4vc2VydmljZS1zaWduaW5nLWtleXMuc2gpLicpO1xuICB9XG4gIGNvbnN0IHsgcHJpdmF0ZUtleSwgcHVibGljS2V5IH0gPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYygnZWMnLCB7IG5hbWVkQ3VydmU6ICdwcmltZTI1NnYxJyB9KTtcbiAgY29uc3QgcHVibGljSndrID0gcHVibGljSndrRnJvbShwdWJsaWNLZXkpO1xuICBjb25zdCBnZW5lcmF0ZWQ6IExvY2FsU2lnbmluZ0tleSA9IHsgc2VydmljZU5hbWUsIGtpZDogcHVibGljSndrLmtpZCwgcHJpdmF0ZUtleSwgcHVibGljSndrIH07XG4gIGVwaGVtZXJhbEtleXMuc2V0KHNlcnZpY2VOYW1lLCBnZW5lcmF0ZWQpO1xuICByZXR1cm4gZ2VuZXJhdGVkO1xufVxuXG4vKipcbiAqIFRoZSBrZXkgYHNlcnZpY2VOYW1lYCBtdXN0IGJlIHNpZ25lZCB3aXRoLlxuICpcbiAqIEluIGBjb25maWd1cmVkYCBtb2RlIHRoZXJlIGlzIGV4YWN0bHkgT05FIGtleSDigJQgdGhpcyBzZXJ2aWNlJ3Mg4oCUIHNvIGEgcmVxdWVzdFxuICogdG8gc2lnbiBhcyBzb21lIE9USEVSIHNlcnZpY2UgaXMgYSBidWcgYW5kIHRocm93czogc3VjaCBhIHRva2VuIHdvdWxkIGJlXG4gKiB1bnZlcmlmaWFibGUgZXZlcnl3aGVyZSAoaXRzIGBraWRgIG5hbWVzIHRoaXMgc2VydmljZSwgaXRzIGBzdWJgIGFub3RoZXIpLlxuICogRmFpbGluZyBhdCB0aGUgbWludCBtYWtlcyB0aGF0IGFuIGltbWVkaWF0ZSwgb2J2aW91cyBlcnJvciBpbnN0ZWFkIG9mIGFcbiAqIHJ1bnRpbWUgNDAxLlxuICovXG5mdW5jdGlvbiBzaWduaW5nS2V5Rm9yKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBjb25zdCBmaWxlID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFO1xuICBpZiAoIWZpbGUpIHJldHVybiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lKTtcblxuICBpZiAoIWxvY2FsS2V5IHx8IGxvY2FsS2V5LnNlcnZpY2VOYW1lICE9PSBzZXJ2aWNlSWRlbnRpdHkoKSkge1xuICAgIGxvY2FsS2V5ID0gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGUpO1xuICB9XG4gIGlmIChzZXJ2aWNlTmFtZSAhPT0gbG9jYWxLZXkuc2VydmljZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKFxuICAgICAgYFRoaXMgcHJvY2VzcyBpcyAnJHtsb2NhbEtleS5zZXJ2aWNlTmFtZX0nIGFuZCBob2xkcyBvbmx5IGl0cyBvd24gc2lnbmluZyBrZXksIHNvIGl0IGNhbm5vdCBtaW50IGEgdG9rZW4gZm9yICcke3NlcnZpY2VOYW1lfScuIGBcbiAgICAgICsgJ05hbWUgdGhlIGNhbGxpbmcgc2VydmljZSBjb3JyZWN0bHksIG9yIGdpdmUgdGhlIGNhbGxlciBpdHMgb3duIGtleS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGxvY2FsS2V5O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZlcmlmaWNhdGlvbiBidW5kbGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgTG9hZGVkQnVuZGxlIHtcbiAgLyoqIGBraWRgIOKGkiB0aGUgc2VydmljZSB0aGF0IHB1Ymxpc2hlZCBpdCwgcGx1cyB0aGUgdmVyaWZpY2F0aW9uIGtleS4gKi9cbiAgYnlLaWQ6IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT47XG4gIGxvYWRlZEF0OiBudW1iZXI7XG4gIG10aW1lTXM6IG51bWJlcjtcbn1cblxubGV0IGJ1bmRsZTogTG9hZGVkQnVuZGxlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBwYXJzZUJ1bmRsZShyYXc6IHN0cmluZywgZmlsZTogc3RyaW5nKTogTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PiB7XG4gIGxldCBkb2N1bWVudDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudCA9IEpTT04ucGFyc2UocmF3KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGlzIG5vdCB2YWxpZCBKU09OOiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgY29uc3Qgc2VydmljZXMgPSAoZG9jdW1lbnQgYXMgUGFydGlhbDxTZXJ2aWNlS2V5QnVuZGxlPik/LnNlcnZpY2VzO1xuICBpZiAoIXNlcnZpY2VzIHx8IHR5cGVvZiBzZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGhhcyBubyBcInNlcnZpY2VzXCIgb2JqZWN0YCk7XG4gIH1cbiAgY29uc3QgYnlLaWQgPSBuZXcgTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PigpO1xuICBmb3IgKGNvbnN0IFtzZXJ2aWNlTmFtZSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2VzKSkge1xuICAgIGZvciAoY29uc3QgandrIG9mIGVudHJ5Py5rZXlzID8/IFtdKSB7XG4gICAgICBpZiAoIWp3az8ua2lkKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ5S2lkLnNldChqd2sua2lkLCB7IHNlcnZpY2VOYW1lLCBrZXk6IHB1YmxpY0tleUZyb21Kd2soandrKSB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uZSB1bnVzYWJsZSBlbnRyeSBtdXN0IG5vdCBkaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBidW5kbGUg4oCUIHRoZSBzYW1lXG4gICAgICAgIC8vIHJ1bGUgdGhlIEpXS1MgY2FjaGUgYXBwbGllcyB0byBwbGF0Zm9ybSdzIHB1Ymxpc2hlZCBzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyB1bnVzYWJsZSBzZXJ2aWNlIGtleScsIHsgc2VydmljZU5hbWUsIGtpZDogandrLmtpZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChieUtpZC5zaXplID09PSAwKSB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGNvbnRhaW5lZCBubyB1c2FibGUgc2VydmljZSBrZXlzYCk7XG4gIHJldHVybiBieUtpZDtcbn1cblxuLyoqXG4gKiBUaGUgYGtpZGAg4oaSIHNlcnZpY2UgbWFwLCByZS1yZWFkIHdoZW4gdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaGFzIHBhc3NlZCBvciB0aGVcbiAqIGZpbGUncyBtdGltZSBjaGFuZ2VkIChzbyBhIHJvdGF0aW9uIGlzIHBpY2tlZCB1cCB3aXRob3V0IGEgcmVzdGFydCkuXG4gKlxuICogSW4gZXBoZW1lcmFsIG1vZGUgdGhlIFwiYnVuZGxlXCIgaXMgd2hhdGV2ZXIgdGhpcyBwcm9jZXNzIGdlbmVyYXRlZCBmb3IgaXRzZWxmLlxuICogTmV2ZXIgdGhyb3dzIGZvciBhIG1pc3NpbmcgZmlsZSBpbiB0aGF0IG1vZGUg4oCUIGl0IGp1c3QgaG9sZHMgdGhvc2Uga2V5cy5cbiAqL1xuZnVuY3Rpb24gdmVyaWZpY2F0aW9uS2V5cygpOiBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+IHtcbiAgY29uc3QgZmlsZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFO1xuICBpZiAoIWZpbGUpIHtcbiAgICBjb25zdCBsb2NhbCA9IG5ldyBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+KCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZXBoZW1lcmFsS2V5cz8udmFsdWVzKCkgPz8gW10pIHtcbiAgICAgIGxvY2FsLnNldChrZXkua2lkLCB7IHNlcnZpY2VOYW1lOiBrZXkuc2VydmljZU5hbWUsIGtleTogY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShrZXkucHJpdmF0ZUtleSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbDtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGxldCBtdGltZU1zID0gMDtcbiAgdHJ5IHtcbiAgICBtdGltZU1zID0gc3RhdFN5bmMoZmlsZSkubXRpbWVNcztcbiAgfSBjYXRjaCB7XG4gICAgLy8gVW5yZWFkYWJsZSBub3c6IGtlZXAgc2VydmluZyBhIGJ1bmRsZSBhbHJlYWR5IGluIGhhbmQgKHB1YmxpYyBrZXlzIGRvbid0XG4gICAgLy8gZXhwaXJlLCBhbmQgcmVmdXNpbmcgZXZlcnkgaW50ZXJuYWwgY2FsbCBiZWNhdXNlIGEgbW91bnQgYmxpcHBlZCB3b3VsZCBiZVxuICAgIC8vIGEgc2VsZi1pbmZsaWN0ZWQgb3V0YWdlKS4gV2l0aCBub3RoaW5nIGluIGhhbmQsIGZhaWwgY2xvc2VkIGJlbG93LlxuICAgIGlmIChidW5kbGUpIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cbiAgaWYgKGJ1bmRsZSAmJiBidW5kbGUubXRpbWVNcyA9PT0gbXRpbWVNcyAmJiBub3cgLSBidW5kbGUubG9hZGVkQXQgPCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUykge1xuICAgIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGJ5S2lkID0gcGFyc2VCdW5kbGUocmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JyksIGZpbGUpO1xuICAgIGJ1bmRsZSA9IHsgYnlLaWQsIGxvYWRlZEF0OiBub3csIG10aW1lTXMgfTtcbiAgICByZXR1cm4gYnlLaWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZpY2Uga2V5IGJ1bmRsZSByZWxvYWQgZmFpbGVkOyBjb250aW51aW5nIG9uIHRoZSBsb2FkZWQgY29weScsIHsgZmlsZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICByZXR1cm4gYnVuZGxlLmJ5S2lkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIFNlcnZpY2VLZXlFcnJvciA/IGVycm9yIDogbmV3IFNlcnZpY2VLZXlFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYGtpZGAgYmVsb25ncyB0byBhbiBpbnRlcm5hbCBTRVJWSUNFIGtleS4gVGhpcyBpcyBob3cgYSBiZWFyZXIgdG9rZW5cbiAqIGlzIHJvdXRlZCBiZXR3ZWVuIHRoZSB0d28gRVMyNTYgY2hhaW5zOiBib3RoIHVzZXIgYW5kIHNlcnZpY2UgdG9rZW5zIGFyZVxuICogRVMyNTYgd2l0aCBhIGBraWRgLCBhbmQgYGtpZGAgaXMgYW4gUkZDIDc2MzggdGh1bWJwcmludCwgc28gb3duZXJzaGlwIG9mIHRoZVxuICogaWQg4oCUIG5vdCBhIGNsYWltIGluc2lkZSB0aGUgdG9rZW4g4oCUIGRlY2lkZXMgd2hpY2gga2V5IHNldCBtYXkgdmVyaWZ5IGl0LlxuICogUmV0dXJucyBgZmFsc2VgIChuZXZlciB0aHJvd3MpIHdoZW4gbm8gYnVuZGxlIGNhbiBiZSByZWFkOyB0aGUgdG9rZW4gdGhlblxuICogdGFrZXMgdGhlIHVzZXIgY2hhaW4gYW5kIGlzIHJlamVjdGVkIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlS2lkKGtpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHZlcmlmaWNhdGlvbktleXMoKS5oYXMoa2lkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaWduIC8gdmVyaWZ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTaWduIGBjbGFpbXNgIGFzIHRoaXMgc2VydmljZSdzIGludGVybmFsIHRva2VuOiBFUzI1NiwgYGtpZGAgPSB0aGUgc2lnbmVyJ3NcbiAqIHRodW1icHJpbnQsIGBzdWJgID0gYHNlcnZpY2U6PHNlcnZpY2VOYW1lPmAuIGBpYXRgL2BleHBgIGFuZCB0aGUgb3B0aW9uYWxcbiAqIGlzc3Vlci9hdWRpZW5jZSBhcmUgc3RhbXBlZCBoZXJlIHNvIHRoZXJlIGlzIG9uZSBwbGFjZSB0aGF0IGRlY2lkZXMgd2hhdCBhXG4gKiBzZXJ2aWNlIHRva2VuIHNheXMuXG4gKlxuICogSGFuZC1yb2xsZWQgKHJhdGhlciB0aGFuIGBqd3Quc2lnbmApIG9ubHkgc28gdGhlIGhlYWRlciBjYXJyaWVzIHRoZSBga2lkYCBpblxuICogdGhlIHNhbWUgc2hhcGUgcGxhdGZvcm0ncyBzaWduZXIgcHJvZHVjZXMg4oCUIGBjcnlwdG8uc2lnbmAgaXMgc3luY2hyb25vdXMsIHNvXG4gKiB1bmxpa2UgdGhlIEtNUyBwYXRoIHRoaXMgY29zdHMgbm90aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25TZXJ2aWNlSnd0KFxuICBjbGFpbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGV4cGlyZXNJblNlY29uZHM6IG51bWJlcjsgaXNzdWVyPzogc3RyaW5nOyBhdWRpZW5jZT86IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qga2V5ID0gc2lnbmluZ0tleUZvcihvcHRpb25zLnNlcnZpY2VOYW1lKTtcbiAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgLi4uY2xhaW1zLFxuICAgIHN1YjogYCR7U0VSVklDRV9TVUJKRUNUX1BSRUZJWH0ke29wdGlvbnMuc2VydmljZU5hbWV9YCxcbiAgICBpYXQ6IG5vdyxcbiAgICBleHA6IG5vdyArIG9wdGlvbnMuZXhwaXJlc0luU2Vjb25kcyxcbiAgICAuLi4ob3B0aW9ucy5pc3N1ZXIgPyB7IGlzczogb3B0aW9ucy5pc3N1ZXIgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5hdWRpZW5jZSA/IHsgYXVkOiBvcHRpb25zLmF1ZGllbmNlIH0gOiB7fSksXG4gIH07XG4gIGNvbnN0IHNpZ25pbmdJbnB1dCA9IGVuY29kZUp3c1NpZ25pbmdJbnB1dChrZXkua2lkLCBib2R5KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24oJ3NoYTI1NicsIEJ1ZmZlci5mcm9tKHNpZ25pbmdJbnB1dCwgJ3V0Zi04JyksIHtcbiAgICBrZXk6IGtleS5wcml2YXRlS2V5LFxuICAgIGRzYUVuY29kaW5nOiAnaWVlZS1wMTM2MycsXG4gIH0pO1xuICByZXR1cm4gY29tcGFjdEp3cyhzaWduaW5nSW5wdXQsIHNpZ25hdHVyZSk7XG59XG5cbi8qKlxuICogVmVyaWZ5IGFuIGludGVybmFsIHNlcnZpY2UgdG9rZW4sIFNZTkNIUk9OT1VTTFksIGFuZCByZXR1cm4gaXRzIGNsYWltcy5cbiAqXG4gKiBUaGUgc2VjdXJpdHkgcHJvcGVydHkgdGhpcyBmdW5jdGlvbiBleGlzdHMgZm9yOiB0aGUgYGtpZGAgc2VsZWN0cyB0aGUga2V5XG4gKiBBTkQgbmFtZXMgdGhlIHNpZ25lciwgYW5kIHRoZSB0b2tlbidzIGBzdWJgIG11c3QgYWdyZWUuIFNvIGBiaWxsaW5nYCBjYW5ub3RcbiAqIGJlIGltcGVyc29uYXRlZCBieSBhbnkgb3RoZXIgc2VydmljZSDigJQgbm90IGV2ZW4gb25lIHRoYXQgaG9sZHMgYSB2YWxpZCBrZXkgb2ZcbiAqIGl0cyBvd24g4oCUIGEgZ3VhcmFudGVlIG5vIHNoYXJlZCBzZWNyZXQgY2FuIGdpdmUuXG4gKlxuICogQHRocm93cyB7and0Lkpzb25XZWJUb2tlbkVycm9yfSB1bmtub3duIGBraWRgLCB3cm9uZyBhbGdvcml0aG0sIGJhZFxuICogICAgICAgICBzaWduYXR1cmUsIGV4cGlyZWQsIG9yIGEgYHN1YmAgdGhhdCBkaXNhZ3JlZXMgd2l0aCB0aGUgc2lnbmluZyBrZXkuXG4gKiBAdGhyb3dzIHtTZXJ2aWNlS2V5RXJyb3J9IG5vIHZlcmlmaWNhdGlvbiBidW5kbGUgY291bGQgYmUgcmVhZCBhdCBhbGwg4oCUIHRoZVxuICogICAgICAgICB0b2tlbidzIHZhbGlkaXR5IGlzIFVOS05PV04gYW5kIHRoZSBjYWxsZXIgbXVzdCBub3QgdHJlYXQgaXQgYXMgdmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTZXJ2aWNlSnd0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHRva2VuOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsga2lkOiBzdHJpbmc7IGlzc3Vlcj86IHN0cmluZzsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IFQge1xuICBjb25zdCBlbnRyeSA9IHZlcmlmaWNhdGlvbktleXMoKS5nZXQob3B0aW9ucy5raWQpO1xuICAvLyBFVkVSWSBlbWlzc2lvbiBvZiB0aGlzIGNvdW50ZXIgY2FycmllcyB0aGUgc2FtZSBsYWJlbCBLRVlTLiBUaGUgUHJvbWV0aGV1c1xuICAvLyBjb3VudGVyIGlzIHJlZ2lzdGVyZWQgbGF6aWx5IHdpdGggd2hhdGV2ZXIga2V5cyBpdHMgZmlyc3QgZW1pc3Npb24gdXNlZCxcbiAgLy8gYW5kIGFuIGluY3JlbWVudCB3aXRoIGEgZGlmZmVyZW50IHNldCB0aHJvd3Mg4oCUIHdoaWNoIGBlbWl0Q291bnRlcmBcbiAgLy8gc3dhbGxvd3MuIFNvIHdoZW4gdGhlIGZpcnN0IHRva2VuIGEgcG9kIHZlcmlmaWVkIHdhcyBiYWQgKGB7IHJlc3VsdCB9YFxuICAvLyBhbG9uZSksIGV2ZXJ5IGxhdGVyIGBva2AgYW5kIGBzdWJqZWN0X21pc21hdGNoYCAoYHsgcmVzdWx0LCBzZXJ2aWNlIH1gKSB3YXNcbiAgLy8gc2lsZW50bHkgZHJvcHBlZCBmb3IgdGhlIGxpZmUgb2YgdGhlIHByb2Nlc3M6IHRoZSBtZXRyaWMgdGhhdCB0ZWxscyB5b3VcbiAgLy8gc2VydmljZS10by1zZXJ2aWNlIGF1dGggaXMgaGVhbHRoeSB3ZW50IHF1aWV0IGV4YWN0bHkgd2hlbiBpdCBtYXR0ZXJlZC5cbiAgaWYgKCFlbnRyeSkge1xuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX3ZlcmlmeV90b3RhbCcsIHsgcmVzdWx0OiAndW5rbm93bl9raWQnLCBzZXJ2aWNlOiAndW5rbm93bicgfSk7XG4gICAgdGhyb3cgbmV3IGp3dC5Kc29uV2ViVG9rZW5FcnJvcihgTm8gcHVibGlzaGVkIHNlcnZpY2Uga2V5IGZvciBraWQgJHtvcHRpb25zLmtpZH1gKTtcbiAgfVxuICBsZXQgY2xhaW1zOiBUICYgeyBzdWI/OiB1bmtub3duIH07XG4gIHRyeSB7XG4gICAgY2xhaW1zID0gand0LnZlcmlmeSh0b2tlbiwgZW50cnkua2V5LCB7XG4gICAgICBhbGdvcml0aG1zOiBbU0VSVklDRV9UT0tFTl9BTEdPUklUSE1dLFxuICAgICAgLi4uKG9wdGlvbnMuaXNzdWVyID8geyBpc3N1ZXI6IG9wdGlvbnMuaXNzdWVyIH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5hdWRpZW5jZSA/IHsgYXVkaWVuY2U6IG9wdGlvbnMuYXVkaWVuY2UgfSA6IHt9KSxcbiAgICB9KSBhcyBUICYgeyBzdWI/OiB1bmtub3duIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdpbnZhbGlkJywgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKGNsYWltcy5zdWIgIT09IGAke1NFUlZJQ0VfU1VCSkVDVF9QUkVGSVh9JHtlbnRyeS5zZXJ2aWNlTmFtZX1gKSB7XG4gICAgLy8gQSB2YWxpZCBzaWduYXR1cmUgYnkgdGhlIFdST05HIHNlcnZpY2U6IHRoZSBrZXkgYmVsb25ncyB0byBgZW50cnkuc2VydmljZU5hbWVgXG4gICAgLy8gYnV0IHRoZSB0b2tlbiBzcGVha3MgZm9yIHNvbWVvbmUgZWxzZTogYSBjcm9zcy1zZXJ2aWNlIGZvcmdlcnkuXG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdzdWJqZWN0X21pc21hdGNoJywgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gICAgdGhyb3cgbmV3IGp3dC5Kc29uV2ViVG9rZW5FcnJvcihgU2VydmljZSB0b2tlbiBzdWJqZWN0ICR7U3RyaW5nKGNsYWltcy5zdWIpfSB3YXMgc2lnbmVkIGJ5ICR7ZW50cnkuc2VydmljZU5hbWV9YCk7XG4gIH1cbiAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdvaycsIHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICByZXR1cm4gY2xhaW1zO1xufVxuXG4vKipcbiAqIFRydWUgd2hpbGUgdGhpcyBzZXJ2aWNlIHN0aWxsIHB1Ymxpc2hlcyBtb3JlIHRoYW4gb25lIHZlcmlmaWNhdGlvbiBrZXkg4oCUIGkuZS5cbiAqIGEgc2lnbmluZy1rZXkgcm90YXRpb24gaXMgb3BlbiBhbmQgdGhlIHJldGlyaW5nIGtleSBpcyBzdGlsbCB0cnVzdGVkLiBGZWVkc1xuICogdGhlIGBzZWNyZXRfcm90YXRpb25fcHJldmlvdXNfc2V0e3NlY3JldD1cIlNFUlZJQ0VfU0lHTklOR19LRVlcIn1gIGdhdWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRpcmluZ1NlcnZpY2VLZXlQdWJsaXNoZWQoKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWUgPSBzZXJ2aWNlSWRlbnRpdHkoKTtcbiAgICByZXR1cm4gWy4uLnZlcmlmaWNhdGlvbktleXMoKS52YWx1ZXMoKV0uZmlsdGVyKCh2KSA9PiB2LnNlcnZpY2VOYW1lID09PSBtZSkubGVuZ3RoID4gMTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCBzZWFtOiBkcm9wIHRoZSBsb2FkZWQgc2lnbmluZyBrZXksIHRoZSBidW5kbGUgYW5kIGFueSBlcGhlbWVyYWwga2V5cyBzb1xuICogdGhlIG5leHQgc2lnbi92ZXJpZnkgcmUtcmVhZHMgdGhlIGVudmlyb25tZW50LiBEb24ndCBjYWxsIGZyb20gcHJvZHVjdGlvbiBjb2RlXG4gKiDigJQgcm90YXRpb24gaXMgcGlja2VkIHVwIGJ5IHRoZSByZWZyZXNoIGludGVydmFsIGFuZCB0aGUgbXRpbWUgY2hlY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRTZXJ2aWNlS2V5c0ZvclRlc3RzKCk6IHZvaWQge1xuICBsb2NhbEtleSA9IHVuZGVmaW5lZDtcbiAgYnVuZGxlID0gdW5kZWZpbmVkO1xuICBlcGhlbWVyYWxLZXlzID0gdW5kZWZpbmVkO1xuICBlcGhlbWVyYWxXYXJuZWQgPSBmYWxzZTtcbn1cbiJdfQ==
@@ -186,4 +186,4 @@ export function createEnvSseTicketStore(options) {
186
186
  logger.info('SSE ticket store: in-memory backend (single-process fallback)', { keyPrefix: config.keyPrefix });
187
187
  return createMemorySseTicketStore(config);
188
188
  }
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NlLXRpY2tldC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9zc2UtdGlja2V0LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQTZEaEQsU0FBUyxXQUFXO0lBQ2xCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBNEI7SUFFckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWdELENBQUM7SUFFdkUsTUFBTSxLQUFLLEdBQUcsR0FBUyxFQUFFO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTztZQUFFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxTQUFTO2dCQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJ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Q0FBQywrREFBK0QsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5RyxPQUFPLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0NsaWVudCwgY3JlYXRlUmVkaXNSZWFkeUdhdGUsIHR5cGUgUmVhZHlBd2FyZVJlZGlzIH0gZnJvbSAnLi9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHsgZW52SW50IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc3NlLXRpY2tldC1zdG9yZScpO1xuXG4vKiogV2hhdCBhIHRpY2tldCBhdXRob3JpemVzOiB0aGUgb3duaW5nIG9yZyBhbmQsIGZvciBzdWJqZWN0LWJvdW5kIGNoYW5uZWxzLCB0aGUgc3RyZWFtIHN1YmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFNzZVRpY2tldFJlY29yZCB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBTdHJlYW0gc3ViamVjdCB0aGUgdGlja2V0IGlzIGJvdW5kIHRvIChlLmcuIGEgYnVpbGQtbG9nIHJlcXVlc3RJZCkuIEFic2VudCBmb3Igb3JnLWtleWVkIGNoYW5uZWxzLiAqL1xuICBzdWJqZWN0Pzogc3RyaW5nO1xufVxuXG4vKiogUmVzdWx0IG9mIHtAbGluayBTc2VUaWNrZXRTdG9yZS5pc3N1ZX0uICovXG5leHBvcnQgdHlwZSBTc2VUaWNrZXRJc3N1ZVJlc3VsdCA9XG4gIHwgeyBvazogdHJ1ZTsgdGlja2V0OiBzdHJpbmcgfVxuICB8IHsgb2s6IGZhbHNlOyByZWFzb246ICd0b3RhbCcgfCAnb3JnJyB9O1xuXG4vKipcbiAqIFRoZSBPTkUgc3RvcmUgZm9yIHNob3J0LWxpdmVkLCBzaW5nbGUtdXNlIFNTRSBhdXRoIHRpY2tldHMsIHBsdXMgdGhlXG4gKiBzdHJlYW0tb3duZXJzaGlwIGJpbmRpbmdzIHN1YmplY3QtYm91bmQgY2hhbm5lbHMgbmVlZC5cbiAqXG4gKiBBIGNsaWVudCBleGNoYW5nZXMgaXRzIEpXVCBmb3IgYSB0aWNrZXQgKHNvIHRoZSB0b2tlbiBuZXZlciBsYW5kcyBpbiBhblxuICogRXZlbnRTb3VyY2UgcXVlcnkgc3RyaW5nIC8gYWNjZXNzIGxvZyksIHRoZW4gcmVkZWVtcyBpdCBvbiB0aGUgU1NFIGBHRVRgLlxuICpcbiAqIC0gKipUaWNrZXRzKiogYXJlIHNpbmdsZS11c2UgYWNyb3NzIHBvZHM6IHRoZSBSZWRpcyBiYWNrZW5kIHJlZGVlbXMgd2l0aFxuICogICBgR0VUREVMYCwgc28gdHdvIHBvZHMgY2FuIG5ldmVyIGJvdGggc3BlbmQgb25lIHRpY2tldC5cbiAqIC0gKipDYXBzIGNvdW50IExJVkUgdGlja2V0cyoqIChpc3N1ZWQsIG5vdCB5ZXQgcmVkZWVtZWQsIG5vdCBleHBpcmVkKSDigJQgcGVyIG9yZ1xuICogICBhbmQgaW4gdG90YWwuIEEgcmVkZWVtZWQgb3IgZXhwaXJlZCB0aWNrZXQgZnJlZXMgaXRzIHNsb3QgaW1tZWRpYXRlbHkuXG4gKiAtICoqT3duZXJzaGlwKiogcmVjb3JkcyB3aGljaCBvcmcgb3ducyBhIHN0cmVhbSBzdWJqZWN0LCBzbyBhIHN1YmplY3QtYm91bmRcbiAqICAgY2hhbm5lbCBjYW4gcmVmdXNlIHRvIG1pbnQgYSB0aWNrZXQgZm9yIGFub3RoZXIgb3JnJ3Mgc3RyZWFtLlxuICpcbiAqIEJvdGggYmFja2VuZHMgc2hhcmUgdGhlc2Ugc2VtYW50aWNzOyB0aGUgaW4tbWVtb3J5IG9uZSBpcyBjb3JyZWN0IGZvciBhXG4gKiBzaW5nbGUgcHJvY2VzcyBvbmx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNzZVRpY2tldFN0b3JlIHtcbiAgLyoqIE1pbnQgYSB0aWNrZXQgZm9yIGBvcmdJZGAgKG9wdGlvbmFsbHkgYm91bmQgdG8gYHN1YmplY3RgKSwgb3IgcmVqZWN0IHdoZW4gYSBsaXZlLXRpY2tldCBjYXAgaXMgcmVhY2hlZC4gKi9cbiAgaXNzdWUob3JnSWQ6IHN0cmluZywgc3ViamVjdD86IHN0cmluZyk6IFByb21pc2U8U3NlVGlja2V0SXNzdWVSZXN1bHQ+O1xuICAvKiogUmVkZWVtIGEgdGlja2V0IGV4YWN0bHkgb25jZTsgbnVsbCB3aGVuIHVua25vd24sIGV4cGlyZWQgb3IgYWxyZWFkeSBzcGVudC4gKi9cbiAgY29uc3VtZSh0aWNrZXRJZDogc3RyaW5nKTogUHJvbWlzZTxTc2VUaWNrZXRSZWNvcmQgfCBudWxsPjtcbiAgLyoqIFJlY29yZCB0aGUgb3JnIHRoYXQgb3ducyBgc3ViamVjdGAgZm9yIGB0dGxNc2AuICovXG4gIGJpbmRPd25lcihzdWJqZWN0OiBzdHJpbmcsIG9yZ0lkOiBzdHJpbmcsIHR0bE1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xuICAvKiogVGhlIG9yZyB0aGF0IG93bnMgYHN1YmplY3RgLCBvciBudWxsIHdoZW4gbm9uZSBpcyBib3VuZC4gVGhyb3dzIHdoZW4gdGhlIGJhY2tlbmQgY2FuJ3QgYW5zd2VyLiAqL1xuICBnZXRPd25lcihzdWJqZWN0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICAvKiogUmVsZWFzZSB0aW1lcnMvcmVzb3VyY2VzLiBJbi1tZW1vcnkgY2xlYXJzIGl0cyBzd2VlcCBpbnRlcnZhbDsgUmVkaXMgaXMgYSBuby1vcC4gKi9cbiAgc3RvcCgpOiB2b2lkO1xufVxuXG4vKiogQ2FwcyArIFRUTCBmb3IgdGhlIHRpY2tldCBzdG9yZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NlVGlja2V0U3RvcmVDb25maWcge1xuICAvKiogVGlja2V0IGxpZmV0aW1lIOKAlCBsb25nIGVub3VnaCBmb3IgdGhlIGNsaWVudCB0byBvcGVuIHRoZSBFdmVudFNvdXJjZS4gKi9cbiAgdHRsTXM6IG51bWJlcjtcbiAgLyoqIENhcCBvbiBMSVZFIHRpY2tldHMgYWNyb3NzIGFsbCBvcmdzIChhYnVzZSAvIG1lbW9yeSBib3VuZCkuICovXG4gIG1heFRvdGFsOiBudW1iZXI7XG4gIC8qKiBDYXAgb24gTElWRSB0aWNrZXRzIHBlciBvcmcgKHNpbmdsZS10ZW5hbnQgZmFpcm5lc3MgYm91bmQpLiAqL1xuICBtYXhQZXJPcmc6IG51bWJlcjtcbiAgLyoqXG4gICAqIEtleSBuYW1lc3BhY2Ugc28gaW5kZXBlbmRlbnQgY2hhbm5lbHMgKG1lc3NhZ2Ugbm90aWZpY2F0aW9ucywgcmVwb3J0aW5nXG4gICAqIGV4ZWN1dGlvbi1zdGF0dXMsIGEgc2VydmljZSdzIGJ1aWxkLWxvZyBzdHJlYW0pIG5ldmVyIHNoYXJlIHRpY2tldHMsIGNhcHNcbiAgICogb3Igb3duZXJzaGlwIGJpbmRpbmdzIOKAlCBhIHRpY2tldCBtaW50ZWQgZm9yIG9uZSBjaGFubmVsIG11c3Qgbm90IGJlXG4gICAqIHJlZGVlbWFibGUgb24gYW5vdGhlci4gT21pdCBmb3IgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLlxuICAgKi9cbiAga2V5UHJlZml4Pzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBuZXdUaWNrZXRJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDI0KS50b1N0cmluZygnYmFzZTY0dXJsJyk7XG59XG5cbi8qKiBJbi1tZW1vcnkgYmFja2VuZCDigJQgc2luZ2xlLXByb2Nlc3MgZmFsbGJhY2sgd2hlbiBSZWRpcyBpc24ndCBjb25maWd1cmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeVNzZVRpY2tldFN0b3JlKGNvbmZpZzogU3NlVGlja2V0U3RvcmVDb25maWcpOiBTc2VUaWNrZXRTdG9yZSB7XG4gIGludGVyZmFjZSBFbnRyeSBleHRlbmRzIFNzZVRpY2tldFJlY29yZCB7IGV4cGlyZXNBdDogbnVtYmVyIH1cbiAgY29uc3QgdGlja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBFbnRyeT4oKTtcbiAgY29uc3Qgb3duZXJzID0gbmV3IE1hcDxzdHJpbmcsIHsgb3JnSWQ6IHN0cmluZzsgZXhwaXJlc0F0OiBudW1iZXIgfT4oKTtcblxuICBjb25zdCBzd2VlcCA9ICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGZvciAoY29uc3QgW2lkLCB0XSBvZiB0aWNrZXRzKSBpZiAobm93ID49IHQuZXhwaXJlc0F0KSB0aWNrZXRzLmRlbGV0ZShpZCk7XG4gICAgZm9yIChjb25zdCBbaWQsIG9dIG9mIG93bmVycykgaWYgKG5vdyA+PSBvLmV4cGlyZXNBdCkgb3duZXJzLmRlbGV0ZShpZCk7XG4gIH07XG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoc3dlZXAsIE1hdGgubWF4KDFfMDAwLCBjb25maWcudHRsTXMpKTtcbiAgdGltZXIudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGlzc3VlKG9yZ0lkLCBzdWJqZWN0KSB7XG4gICAgICBzd2VlcCgpO1xuICAgICAgaWYgKHRpY2tldHMuc2l6ZSA+PSBjb25maWcubWF4VG90YWwpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiAndG90YWwnIH07XG4gICAgICBsZXQgZm9yT3JnID0gMDtcbiAgICAgIGZvciAoY29uc3QgdCBvZiB0aWNrZXRzLnZhbHVlcygpKSBpZiAodC5vcmdJZCA9PT0gb3JnSWQpIGZvck9yZysrO1xuICAgICAgaWYgKGZvck9yZyA+PSBjb25maWcubWF4UGVyT3JnKSByZXR1cm4geyBvazogZmFsc2UsIHJlYXNvbjogJ29yZycgfTtcbiAgICAgIGNvbnN0IHRpY2tldCA9IG5ld1RpY2tldElkKCk7XG4gICAgICB0aWNrZXRzLnNldCh0aWNrZXQsIHsgb3JnSWQsIC4uLihzdWJqZWN0ICE9PSB1bmRlZmluZWQgJiYgeyBzdWJqZWN0IH0pLCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyBjb25maWcudHRsTXMgfSk7XG4gICAgICByZXR1cm4geyBvazogdHJ1ZSwgdGlja2V0IH07XG4gICAgfSxcbiAgICBhc3luYyBjb25zdW1lKHRpY2tldElkKSB7XG4gICAgICBjb25zdCB0ID0gdGlja2V0cy5nZXQodGlja2V0SWQpO1xuICAgICAgdGlja2V0cy5kZWxldGUodGlja2V0SWQpOyAvLyBzaW5nbGUtdXNlIOKAlCBnb25lIHdoZXRoZXIgb3Igbm90IGl0IHdhcyB2YWxpZFxuICAgICAgaWYgKCF0IHx8IERhdGUubm93KCkgPj0gdC5leHBpcmVzQXQpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHsgb3JnSWQ6IHQub3JnSWQsIC4uLih0LnN1YmplY3QgIT09IHVuZGVmaW5lZCAmJiB7IHN1YmplY3Q6IHQuc3ViamVjdCB9KSB9O1xuICAgIH0sXG4gICAgYXN5bmMgYmluZE93bmVyKHN1YmplY3QsIG9yZ0lkLCB0dGxNcykge1xuICAgICAgb3duZXJzLnNldChzdWJqZWN0LCB7IG9yZ0lkLCBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxNcyB9KTtcbiAgICB9LFxuICAgIGFzeW5jIGdldE93bmVyKHN1YmplY3QpIHtcbiAgICAgIGNvbnN0IG8gPSBvd25lcnMuZ2V0KHN1YmplY3QpO1xuICAgICAgaWYgKCFvKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChEYXRlLm5vdygpID49IG8uZXhwaXJlc0F0KSB7IG93bmVycy5kZWxldGUoc3ViamVjdCk7IHJldHVybiBudWxsOyB9XG4gICAgICByZXR1cm4gby5vcmdJZDtcbiAgICB9LFxuICAgIHN0b3AoKSB7IGNsZWFySW50ZXJ2YWwodGltZXIpOyB9LFxuICB9O1xufVxuXG4vKiogTWluaW1hbCBpb3JlZGlzIHN1cmZhY2UgdGhlIFJlZGlzIGJhY2tlbmQgbmVlZHMgKEdFVERFTCByZXF1aXJlcyBSZWRpcyDiiaUgNi4yKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NlVGlja2V0UmVkaXMgZXh0ZW5kcyBSZWFkeUF3YXJlUmVkaXMge1xuICBldmFsKHNjcmlwdDogc3RyaW5nLCBudW1LZXlzOiBudW1iZXIsIC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHVua25vd24+O1xuICBnZXRkZWwoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICB6cmVtKGtleTogc3RyaW5nLCAuLi5tZW1iZXJzOiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPjtcbiAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCAuLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbn1cblxuLyoqXG4gKiBBdG9taWMgbGl2ZS1jb3VudCBpc3N1ZS4gUHJ1bmVzIGV4cGlyZWQgbWVtYmVycyBmcm9tIGJvdGggY2FwIHNldHMsIGNoZWNrcyB0aGVcbiAqIHRvdGFsIHRoZW4gdGhlIHBlci1vcmcgY2FwLCBhbmQgb25seSB0aGVuIHN0b3JlcyB0aGUgdGlja2V0IGFuZCByZWNvcmRzIGl0IGluXG4gKiBib3RoIHNldHMg4oCUIHNvIGNvbmN1cnJlbnQgbWludHMgY2FuJ3Qgb3ZlcnNob290IGEgY2FwIGFuZCBhIGNhcCBjYW4gbmV2ZXJcbiAqIHN0aWNrIChldmVyeSBtZW1iZXIgY2FycmllcyBpdHMgb3duIGV4cGlyeSBzY29yZSBhbmQgZXZlcnkga2V5IGEgVFRMKS5cbiAqXG4gKiBLRVlTOiB0b3RhbCB6c2V0LCBvcmcgenNldCwgdGlja2V0IGtleS5cbiAqIEFSR1Y6IHR0bE1zLCBtYXhUb3RhbCwgbWF4UGVyT3JnLCB0aWNrZXRJZCwgcmVjb3JkIEpTT04uXG4gKiBVc2VzIHRoZSBzZXJ2ZXIgY2xvY2sgc28gZXZlcnkgcG9kIGFncmVlcyBvbiBcImV4cGlyZWRcIi5cbiAqL1xuY29uc3QgSVNTVUVfU0NSSVBUID0gYFxubG9jYWwgdCA9IHJlZGlzLmNhbGwoJ1RJTUUnKVxubG9jYWwgbm93ID0gdG9udW1iZXIodFsxXSkgKiAxMDAwICsgbWF0aC5mbG9vcih0b251bWJlcih0WzJdKSAvIDEwMDApXG5sb2NhbCB0dGwgPSB0b251bWJlcihBUkdWWzFdKVxucmVkaXMuY2FsbCgnWlJFTVJBTkdFQllTQ09SRScsIEtFWVNbMV0sICctaW5mJywgbm93KVxucmVkaXMuY2FsbCgnWlJFTVJBTkdFQllTQ09SRScsIEtFWVNbMl0sICctaW5mJywgbm93KVxuaWYgcmVkaXMuY2FsbCgnWkNBUkQnLCBLRVlTWzFdKSA+PSB0b251bWJlcihBUkdWWzJdKSB0aGVuIHJldHVybiAndG90YWwnIGVuZFxuaWYgcmVkaXMuY2FsbCgnWkNBUkQnLCBLRVlTWzJdKSA+PSB0b251bWJlcihBUkdWWzNdKSB0aGVuIHJldHVybiAnb3JnJyBlbmRcbnJlZGlzLmNhbGwoJ1NFVCcsIEtFWVNbM10sIEFSR1ZbNV0sICdQWCcsIHR0bClcbnJlZGlzLmNhbGwoJ1pBREQnLCBLRVlTWzFdLCBub3cgKyB0dGwsIEFSR1ZbNF0pXG5yZWRpcy5jYWxsKCdaQUREJywgS0VZU1syXSwgbm93ICsgdHRsLCBBUkdWWzRdKVxucmVkaXMuY2FsbCgnUEVYUElSRScsIEtFWVNbMV0sIHR0bClcbnJlZGlzLmNhbGwoJ1BFWFBJUkUnLCBLRVlTWzJdLCB0dGwpXG5yZXR1cm4gJ29rJ2A7XG5cbi8qKlxuICogUmVkaXMgYmFja2VuZCDigJQgbXVsdGktcmVwbGljYSBzYWZlLlxuICpcbiAqIEZhaWwtQ0xPU0VEOiBhIFJlZGlzIGVycm9yIG1ha2VzIGBpc3N1ZWAgcmVqZWN0IChgdG90YWxgKSwgYGNvbnN1bWVgIHJldHVyblxuICogbnVsbCBhbmQgYGdldE93bmVyYCB0aHJvdywgc28gYW4gb3V0YWdlIGRlZ3JhZGVzIHRvIFwibm8gbGl2ZSBzdHJlYW1cIiByYXRoZXJcbiAqIHRoYW4gaGFuZGluZyBvdXQgb3IgYWNjZXB0aW5nIHVudmFsaWRhdGVkIHRpY2tldHMuIGBiaW5kT3duZXJgIGlzIGJlc3QtZWZmb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkaXNTc2VUaWNrZXRTdG9yZShyZWRpczogU3NlVGlja2V0UmVkaXMsIGNvbmZpZzogU3NlVGlja2V0U3RvcmVDb25maWcpOiBTc2VUaWNrZXRTdG9yZSB7XG4gIGNvbnN0IG5zID0gY29uZmlnLmtleVByZWZpeCA/IGAke2NvbmZpZy5rZXlQcmVmaXh9OmAgOiAnJztcbiAgY29uc3QgdGlja2V0S2V5ID0gKHQ6IHN0cmluZykgPT4gYCR7bnN9c3NlOnRrOiR7dH1gO1xuICBjb25zdCBvcmdTZXRLZXkgPSAobzogc3RyaW5nKSA9PiBgJHtuc31zc2U6dGt6Om9yZzoke299YDtcbiAgY29uc3QgdG90YWxTZXRLZXkgPSBgJHtuc31zc2U6dGt6OmFsbGA7XG4gIGNvbnN0IG93bmVyS2V5ID0gKHM6IHN0cmluZykgPT4gYCR7bnN9c3NlOm93bmVyOiR7c31gO1xuICBjb25zdCB0dGxNcyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChjb25maWcudHRsTXMpKTtcbiAgLy8gVGhlIGVudiBjbGllbnQgaGFzIG5vIG9mZmxpbmUgcXVldWU6IHdhaXQgKGJvdW5kZWQpIGZvciB0aGUgZmlyc3QgY29ubmVjdGlvblxuICAvLyBzbyB0aGUgZmlyc3QgbWludC9yZWRlZW0gYWZ0ZXIgYm9vdCBpc24ndCByZWplY3RlZCBvdXRyaWdodC5cbiAgY29uc3QgcmVhZHkgPSBjcmVhdGVSZWRpc1JlYWR5R2F0ZShyZWRpcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBpc3N1ZShvcmdJZCwgc3ViamVjdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcmVhZHkoKTtcbiAgICAgICAgY29uc3QgdGlja2V0ID0gbmV3VGlja2V0SWQoKTtcbiAgICAgICAgY29uc3QgcmVjb3JkOiBTc2VUaWNrZXRSZWNvcmQgPSB7IG9yZ0lkLCAuLi4oc3ViamVjdCAhPT0gdW5kZWZpbmVkICYmIHsgc3ViamVjdCB9KSB9O1xuICAgICAgICBjb25zdCBvdXRjb21lID0gYXdhaXQgcmVkaXMuZXZhbChcbiAgICAgICAgICBJU1NVRV9TQ1JJUFQsIDMsIHRvdGFsU2V0S2V5LCBvcmdTZXRLZXkob3JnSWQpLCB0aWNrZXRLZXkodGlja2V0KSxcbiAgICAgICAgICB0dGxNcywgY29uZmlnLm1heFRvdGFsLCBjb25maWcubWF4UGVyT3JnLCB0aWNrZXQsIEpTT04uc3RyaW5naWZ5KHJlY29yZCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvdXRjb21lID09PSAnb2snKSByZXR1cm4geyBvazogdHJ1ZSwgdGlja2V0IH07XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiBvdXRjb21lID09PSAnb3JnJyA/ICdvcmcnIDogJ3RvdGFsJyB9O1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTU0UgdGlja2V0IGlzc3VlIGZhaWxlZCAoZmFpbC1jbG9zZWQpJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiAndG90YWwnIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBjb25zdW1lKHRpY2tldElkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZWFkeSgpO1xuICAgICAgICBjb25zdCByYXcgPSBhd2FpdCByZWRpcy5nZXRkZWwodGlja2V0S2V5KHRpY2tldElkKSk7XG4gICAgICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcmVjID0gSlNPTi5wYXJzZShyYXcpIGFzIFNzZVRpY2tldFJlY29yZDtcbiAgICAgICAgaWYgKHR5cGVvZiByZWM/Lm9yZ0lkICE9PSAnc3RyaW5nJykgcmV0dXJuIG51bGw7XG4gICAgICAgIC8vIEZyZWUgdGhlIGxpdmUtY291bnQgc2xvdHMgbm93IHJhdGhlciB0aGFuIGF0IGV4cGlyeS4gQmVzdC1lZmZvcnQ6IGFcbiAgICAgICAgLy8gZmFpbHVyZSBoZXJlIG9ubHkgZGVsYXlzIHRoZSBzbG90IHVudGlsIHRoZSBtZW1iZXIncyBleHBpcnkgc2NvcmUuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtyZWRpcy56cmVtKG9yZ1NldEtleShyZWMub3JnSWQpLCB0aWNrZXRJZCksIHJlZGlzLnpyZW0odG90YWxTZXRLZXksIHRpY2tldElkKV0pXG4gICAgICAgICAgLmNhdGNoKChlcnI6IHVua25vd24pID0+IGxvZ2dlci5kZWJ1ZygnU1NFIHRpY2tldCBzbG90IHJlbGVhc2UgZmFpbGVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSkpO1xuICAgICAgICByZXR1cm4gcmVjO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTU0UgdGlja2V0IGNvbnN1bWUgZmFpbGVkIChmYWlsLWNsb3NlZCknLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBiaW5kT3duZXIoc3ViamVjdCwgb3JnSWQsIG93bmVyVHRsTXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJlYWR5KCk7XG4gICAgICAgIGF3YWl0IHJlZGlzLnNldChvd25lcktleShzdWJqZWN0KSwgb3JnSWQsICdQWCcsIE1hdGgubWF4KDEsIE1hdGguY2VpbChvd25lclR0bE1zKSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTU0Ugc3RyZWFtLW93bmVyIGJpbmQgZmFpbGVkJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBnZXRPd25lcihzdWJqZWN0KSB7XG4gICAgICBhd2FpdCByZWFkeSgpO1xuICAgICAgcmV0dXJuIHJlZGlzLmdldChvd25lcktleShzdWJqZWN0KSk7XG4gICAgfSxcbiAgICBzdG9wKCkgeyAvKiBrZXlzIGV4cGlyZSBvbiB0aGVpciBvd24gVFRMICovIH0sXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGRlcGxveS13aWRlIHRpY2tldCBjYXBzOiBgU1NFX01BWF9UT1RBTF9USUNLRVRTYCAoZGVmYXVsdCAxMDAwKSBhbmRcbiAqIGBTU0VfTUFYX1RJQ0tFVFNfUEVSX09SR2AgKGRlZmF1bHQgMTApLiBPbmUgcmVhZGVyIHNvIGV2ZXJ5IGNoYW5uZWwgcGFyc2VzXG4gKiB0aGVtIHRoZSBzYW1lIHdheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudlNzZVRpY2tldENhcHMoKTogUGljazxTc2VUaWNrZXRTdG9yZUNvbmZpZywgJ21heFRvdGFsJyB8ICdtYXhQZXJPcmcnPiB7XG4gIHJldHVybiB7XG4gICAgbWF4VG90YWw6IGVudkludCgnU1NFX01BWF9UT1RBTF9USUNLRVRTJywgMTAwMCwgeyBtaW46IDEgfSksXG4gICAgbWF4UGVyT3JnOiBlbnZJbnQoJ1NTRV9NQVhfVElDS0VUU19QRVJfT1JHJywgMTAsIHsgbWluOiAxIH0pLFxuICB9O1xufVxuXG4vKioge0BsaW5rIGNyZWF0ZUVudlNzZVRpY2tldFN0b3JlfSBjb25maWc6IHRoZSBjYXBzIGRlZmF1bHQgdG8ge0BsaW5rIGVudlNzZVRpY2tldENhcHN9LiAqL1xuZXhwb3J0IHR5cGUgRW52U3NlVGlja2V0U3RvcmVDb25maWcgPSBPbWl0PFNzZVRpY2tldFN0b3JlQ29uZmlnLCAnbWF4VG90YWwnIHwgJ21heFBlck9yZyc+XG4gICYgUGFydGlhbDxQaWNrPFNzZVRpY2tldFN0b3JlQ29uZmlnLCAnbWF4VG90YWwnIHwgJ21heFBlck9yZyc+PjtcblxuLyoqXG4gKiBCdWlsZCBhbiB7QGxpbmsgU3NlVGlja2V0U3RvcmV9IGZyb20gdGhlIHN0YW5kYXJkIFJlZGlzIGVudiAoYFJFRElTX1VSTGAgb3JcbiAqIGBSRURJU19TRU5USU5FTFNgKTogdGhlIFJlZGlzIGJhY2tlbmQgd2hlbiBjb25maWd1cmVkIChtdWx0aS1yZXBsaWNhIHNhZmUpLFxuICogb3RoZXJ3aXNlIHRoZSBpbi1tZW1vcnkgc2luZ2xlLXByb2Nlc3MgYmFja2VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudlNzZVRpY2tldFN0b3JlKG9wdGlvbnM6IEVudlNzZVRpY2tldFN0b3JlQ29uZmlnKTogU3NlVGlja2V0U3RvcmUge1xuICBjb25zdCBjYXBzID0gZW52U3NlVGlja2V0Q2FwcygpO1xuICBjb25zdCBjb25maWc6IFNzZVRpY2tldFN0b3JlQ29uZmlnID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbWF4VG90YWw6IG9wdGlvbnMubWF4VG90YWwgPz8gY2Fwcy5tYXhUb3RhbCxcbiAgICBtYXhQZXJPcmc6IG9wdGlvbnMubWF4UGVyT3JnID8/IGNhcHMubWF4UGVyT3JnLFxuICB9O1xuICBjb25zdCByZWRpcyA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PFNzZVRpY2tldFJlZGlzPignc3NlLXRpY2tldCcpO1xuICBpZiAocmVkaXMpIHtcbiAgICBsb2dnZXIuaW5mbygnU1NFIHRpY2tldCBzdG9yZTogUmVkaXMgYmFja2VuZCAobXVsdGktcmVwbGljYSknLCB7IGtleVByZWZpeDogY29uZmlnLmtleVByZWZpeCB9KTtcbiAgICByZXR1cm4gY3JlYXRlUmVkaXNTc2VUaWNrZXRTdG9yZShyZWRpcywgY29uZmlnKTtcbiAgfVxuICBsb2dnZXIuaW5mbygnU1NFIHRpY2tldCBzdG9yZTogaW4tbWVtb3J5IGJhY2tlbmQgKHNpbmdsZS1wcm9jZXNzIGZhbGxiYWNrKScsIHsga2V5UHJlZml4OiBjb25maWcua2V5UHJlZml4IH0pO1xuICByZXR1cm4gY3JlYXRlTWVtb3J5U3NlVGlja2V0U3RvcmUoY29uZmlnKTtcbn1cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NlLXRpY2tldC1zdG9yZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NzZS10aWNrZXQtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBNkRoRCxTQUFTLFdBQVc7SUFDbEIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxNQUE0QjtJQUVyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBZ0QsQ0FBQztJQUV2RSxNQUFNLEtBQUssR0FBRyxHQUFTLEVBQUU7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTTtZQUFFLElB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LEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzlHLE9BQU8sMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50LCBjcmVhdGVSZWRpc1JlYWR5R2F0ZSwgdHlwZSBSZWFkeUF3YXJlUmVkaXMgfSBmcm9tICcuL2Vudi1yZWRpcy5qcyc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzc2UtdGlja2V0LXN0b3JlJyk7XG5cbi8qKiBXaGF0IGEgdGlja2V0IGF1dGhvcml6ZXM6IHRoZSBvd25pbmcgb3JnIGFuZCwgZm9yIHN1YmplY3QtYm91bmQgY2hhbm5lbHMsIHRoZSBzdHJlYW0gc3ViamVjdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NlVGlja2V0UmVjb3JkIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgLyoqIFN0cmVhbSBzdWJqZWN0IHRoZSB0aWNrZXQgaXMgYm91bmQgdG8gKGUuZy4gYSBidWlsZC1sb2cgcmVxdWVzdElkKS4gQWJzZW50IGZvciBvcmcta2V5ZWQgY2hhbm5lbHMuICovXG4gIHN1YmplY3Q/OiBzdHJpbmc7XG59XG5cbi8qKiBSZXN1bHQgb2Yge0BsaW5rIFNzZVRpY2tldFN0b3JlLmlzc3VlfS4gKi9cbmV4cG9ydCB0eXBlIFNzZVRpY2tldElzc3VlUmVzdWx0ID1cbiAgfCB7IG9rOiB0cnVlOyB0aWNrZXQ6IHN0cmluZyB9XG4gIHwgeyBvazogZmFsc2U7IHJlYXNvbjogJ3RvdGFsJyB8ICdvcmcnIH07XG5cbi8qKlxuICogVGhlIE9ORSBzdG9yZSBmb3Igc2hvcnQtbGl2ZWQsIHNpbmdsZS11c2UgU1NFIGF1dGggdGlja2V0cywgcGx1cyB0aGVcbiAqIHN0cmVhbS1vd25lcnNoaXAgYmluZGluZ3Mgc3ViamVjdC1ib3VuZCBjaGFubmVscyBuZWVkLlxuICpcbiAqIEEgY2xpZW50IGV4Y2hhbmdlcyBpdHMgSldUIGZvciBhIHRpY2tldCAoc28gdGhlIHRva2VuIG5ldmVyIGxhbmRzIGluIGFuXG4gKiBFdmVudFNvdXJjZSBxdWVyeSBzdHJpbmcgLyBhY2Nlc3MgbG9nKSwgdGhlbiByZWRlZW1zIGl0IG9uIHRoZSBTU0UgYEdFVGAuXG4gKlxuICogLSAqKlRpY2tldHMqKiBhcmUgc2luZ2xlLXVzZSBhY3Jvc3MgcG9kczogdGhlIFJlZGlzIGJhY2tlbmQgcmVkZWVtcyB3aXRoXG4gKiAgIGBHRVRERUxgLCBzbyB0d28gcG9kcyBjYW4gbmV2ZXIgYm90aCBzcGVuZCBvbmUgdGlja2V0LlxuICogLSAqKkNhcHMgY291bnQgTElWRSB0aWNrZXRzKiogKGlzc3VlZCwgbm90IHlldCByZWRlZW1lZCwgbm90IGV4cGlyZWQpIOKAlCBwZXIgb3JnXG4gKiAgIGFuZCBpbiB0b3RhbC4gQSByZWRlZW1lZCBvciBleHBpcmVkIHRpY2tldCBmcmVlcyBpdHMgc2xvdCBpbW1lZGlhdGVseS5cbiAqIC0gKipPd25lcnNoaXAqKiByZWNvcmRzIHdoaWNoIG9yZyBvd25zIGEgc3RyZWFtIHN1YmplY3QsIHNvIGEgc3ViamVjdC1ib3VuZFxuICogICBjaGFubmVsIGNhbiByZWZ1c2UgdG8gbWludCBhIHRpY2tldCBmb3IgYW5vdGhlciBvcmcncyBzdHJlYW0uXG4gKlxuICogQm90aCBiYWNrZW5kcyBzaGFyZSB0aGVzZSBzZW1hbnRpY3M7IHRoZSBpbi1tZW1vcnkgb25lIGlzIGNvcnJlY3QgZm9yIGFcbiAqIHNpbmdsZSBwcm9jZXNzIG9ubHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3NlVGlja2V0U3RvcmUge1xuICAvKiogTWludCBhIHRpY2tldCBmb3IgYG9yZ0lkYCAob3B0aW9uYWxseSBib3VuZCB0byBgc3ViamVjdGApLCBvciByZWplY3Qgd2hlbiBhIGxpdmUtdGlja2V0IGNhcCBpcyByZWFjaGVkLiAqL1xuICBpc3N1ZShvcmdJZDogc3RyaW5nLCBzdWJqZWN0Pzogc3RyaW5nKTogUHJvbWlzZTxTc2VUaWNrZXRJc3N1ZVJlc3VsdD47XG4gIC8qKiBSZWRlZW0gYSB0aWNrZXQgZXhhY3RseSBvbmNlOyBudWxsIHdoZW4gdW5rbm93biwgZXhwaXJlZCBvciBhbHJlYWR5IHNwZW50LiAqL1xuICBjb25zdW1lKHRpY2tldElkOiBzdHJpbmcpOiBQcm9taXNlPFNzZVRpY2tldFJlY29yZCB8IG51bGw+O1xuICAvKiogUmVjb3JkIHRoZSBvcmcgdGhhdCBvd25zIGBzdWJqZWN0YCBmb3IgYHR0bE1zYC4gKi9cbiAgYmluZE93bmVyKHN1YmplY3Q6IHN0cmluZywgb3JnSWQ6IHN0cmluZywgdHRsTXM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIC8qKiBUaGUgb3JnIHRoYXQgb3ducyBgc3ViamVjdGAsIG9yIG51bGwgd2hlbiBub25lIGlzIGJvdW5kLiBUaHJvd3Mgd2hlbiB0aGUgYmFja2VuZCBjYW4ndCBhbnN3ZXIuICovXG4gIGdldE93bmVyKHN1YmplY3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIC8qKiBSZWxlYXNlIHRpbWVycy9yZXNvdXJjZXMuIEluLW1lbW9yeSBjbGVhcnMgaXRzIHN3ZWVwIGludGVydmFsOyBSZWRpcyBpcyBhIG5vLW9wLiAqL1xuICBzdG9wKCk6IHZvaWQ7XG59XG5cbi8qKiBDYXBzICsgVFRMIGZvciB0aGUgdGlja2V0IHN0b3JlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2VUaWNrZXRTdG9yZUNvbmZpZyB7XG4gIC8qKiBUaWNrZXQgbGlmZXRpbWUg4oCUIGxvbmcgZW5vdWdoIGZvciB0aGUgY2xpZW50IHRvIG9wZW4gdGhlIEV2ZW50U291cmNlLiAqL1xuICB0dGxNczogbnVtYmVyO1xuICAvKiogQ2FwIG9uIExJVkUgdGlja2V0cyBhY3Jvc3MgYWxsIG9yZ3MgKGFidXNlIC8gbWVtb3J5IGJvdW5kKS4gKi9cbiAgbWF4VG90YWw6IG51bWJlcjtcbiAgLyoqIENhcCBvbiBMSVZFIHRpY2tldHMgcGVyIG9yZyAoc2luZ2xlLXRlbmFudCBmYWlybmVzcyBib3VuZCkuICovXG4gIG1heFBlck9yZzogbnVtYmVyO1xuICAvKipcbiAgICogS2V5IG5hbWVzcGFjZSBzbyBpbmRlcGVuZGVudCBjaGFubmVscyAobWVzc2FnZSBub3RpZmljYXRpb25zLCByZXBvcnRpbmdcbiAgICogZXhlY3V0aW9uLXN0YXR1cywgYSBzZXJ2aWNlJ3MgYnVpbGQtbG9nIHN0cmVhbSkgbmV2ZXIgc2hhcmUgdGlja2V0cywgY2Fwc1xuICAgKiBvciBvd25lcnNoaXAgYmluZGluZ3Mg4oCUIGEgdGlja2V0IG1pbnRlZCBmb3Igb25lIGNoYW5uZWwgbXVzdCBub3QgYmVcbiAgICogcmVkZWVtYWJsZSBvbiBhbm90aGVyLiBPbWl0IGZvciB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuXG4gICAqL1xuICBrZXlQcmVmaXg/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIG5ld1RpY2tldElkKCk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoMjQpLnRvU3RyaW5nKCdiYXNlNjR1cmwnKTtcbn1cblxuLyoqIEluLW1lbW9yeSBiYWNrZW5kIOKAlCBzaW5nbGUtcHJvY2VzcyBmYWxsYmFjayB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVtb3J5U3NlVGlja2V0U3RvcmUoY29uZmlnOiBTc2VUaWNrZXRTdG9yZUNvbmZpZyk6IFNzZVRpY2tldFN0b3JlIHtcbiAgaW50ZXJmYWNlIEVudHJ5IGV4dGVuZHMgU3NlVGlja2V0UmVjb3JkIHsgZXhwaXJlc0F0OiBudW1iZXIgfVxuICBjb25zdCB0aWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5PigpO1xuICBjb25zdCBvd25lcnMgPSBuZXcgTWFwPHN0cmluZywgeyBvcmdJZDogc3RyaW5nOyBleHBpcmVzQXQ6IG51bWJlciB9PigpO1xuXG4gIGNvbnN0IHN3ZWVwID0gKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgZm9yIChjb25zdCBbaWQsIHRdIG9mIHRpY2tldHMpIGlmIChub3cgPj0gdC5leHBpcmVzQXQpIHRpY2tldHMuZGVsZXRlKGlkKTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgb10gb2Ygb3duZXJzKSBpZiAobm93ID49IG8uZXhwaXJlc0F0KSBvd25lcnMuZGVsZXRlKGlkKTtcbiAgfTtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbChzd2VlcCwgTWF0aC5tYXgoMV8wMDAsIGNvbmZpZy50dGxNcykpO1xuICB0aW1lci51bnJlZigpO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgaXNzdWUob3JnSWQsIHN1YmplY3QpIHtcbiAgICAgIHN3ZWVwKCk7XG4gICAgICBpZiAodGlja2V0cy5zaXplID49IGNvbmZpZy5tYXhUb3RhbCkgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246ICd0b3RhbCcgfTtcbiAgICAgIGxldCBmb3JPcmcgPSAwO1xuICAgICAgZm9yIChjb25zdCB0IG9mIHRpY2tldHMudmFsdWVzKCkpIGlmICh0Lm9yZ0lkID09PSBvcmdJZCkgZm9yT3JnKys7XG4gICAgICBpZiAoZm9yT3JnID49IGNvbmZpZy5tYXhQZXJPcmcpIHJldHVybiB7IG9rOiBmYWxzZSwgcmVhc29uOiAnb3JnJyB9O1xuICAgICAgY29uc3QgdGlja2V0ID0gbmV3VGlja2V0SWQoKTtcbiAgICAgIHRpY2tldHMuc2V0KHRpY2tldCwgeyBvcmdJZCwgLi4uKHN1YmplY3QgIT09IHVuZGVmaW5lZCAmJiB7IHN1YmplY3QgfSksIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIGNvbmZpZy50dGxNcyB9KTtcbiAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB0aWNrZXQgfTtcbiAgICB9LFxuICAgIGFzeW5jIGNvbnN1bWUodGlja2V0SWQpIHtcbiAgICAgIGNvbnN0IHQgPSB0aWNrZXRzLmdldCh0aWNrZXRJZCk7XG4gICAgICB0aWNrZXRzLmRlbGV0ZSh0aWNrZXRJZCk7IC8vIHNpbmdsZS11c2Ug4oCUIGdvbmUgd2hldGhlciBvciBub3QgaXQgd2FzIHZhbGlkXG4gICAgICBpZiAoIXQgfHwgRGF0ZS5ub3coKSA+PSB0LmV4cGlyZXNBdCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4geyBvcmdJZDogdC5vcmdJZCwgLi4uKHQuc3ViamVjdCAhPT0gdW5kZWZpbmVkICYmIHsgc3ViamVjdDogdC5zdWJqZWN0IH0pIH07XG4gICAgfSxcbiAgICBhc3luYyBiaW5kT3duZXIoc3ViamVjdCwgb3JnSWQsIHR0bE1zKSB7XG4gICAgICBvd25lcnMuc2V0KHN1YmplY3QsIHsgb3JnSWQsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIHR0bE1zIH0pO1xuICAgIH0sXG4gICAgYXN5bmMgZ2V0T3duZXIoc3ViamVjdCkge1xuICAgICAgY29uc3QgbyA9IG93bmVycy5nZXQoc3ViamVjdCk7XG4gICAgICBpZiAoIW8pIHJldHVybiBudWxsO1xuICAgICAgaWYgKERhdGUubm93KCkgPj0gby5leHBpcmVzQXQpIHsgb3duZXJzLmRlbGV0ZShzdWJqZWN0KTsgcmV0dXJuIG51bGw7IH1cbiAgICAgIHJldHVybiBvLm9yZ0lkO1xuICAgIH0sXG4gICAgc3RvcCgpIHsgY2xlYXJJbnRlcnZhbCh0aW1lcik7IH0sXG4gIH07XG59XG5cbi8qKiBNaW5pbWFsIGlvcmVkaXMgc3VyZmFjZSB0aGUgUmVkaXMgYmFja2VuZCBuZWVkcyAoR0VUREVMIHJlcXVpcmVzIFJlZGlzIOKJpSA2LjIpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2VUaWNrZXRSZWRpcyBleHRlbmRzIFJlYWR5QXdhcmVSZWRpcyB7XG4gIGV2YWwoc2NyaXB0OiBzdHJpbmcsIG51bUtleXM6IG51bWJlciwgLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldGRlbChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIHpyZW0oa2V5OiBzdHJpbmcsIC4uLm1lbWJlcnM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+O1xuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIC4uLmFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHVua25vd24+O1xuICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xufVxuXG4vKipcbiAqIEF0b21pYyBsaXZlLWNvdW50IGlzc3VlLiBQcnVuZXMgZXhwaXJlZCBtZW1iZXJzIGZyb20gYm90aCBjYXAgc2V0cywgY2hlY2tzIHRoZVxuICogdG90YWwgdGhlbiB0aGUgcGVyLW9yZyBjYXAsIGFuZCBvbmx5IHRoZW4gc3RvcmVzIHRoZSB0aWNrZXQgYW5kIHJlY29yZHMgaXQgaW5cbiAqIGJvdGggc2V0cyDigJQgc28gY29uY3VycmVudCBtaW50cyBjYW4ndCBvdmVyc2hvb3QgYSBjYXAgYW5kIGEgY2FwIGNhbiBuZXZlclxuICogc3RpY2sgKGV2ZXJ5IG1lbWJlciBjYXJyaWVzIGl0cyBvd24gZXhwaXJ5IHNjb3JlIGFuZCBldmVyeSBrZXkgYSBUVEwpLlxuICpcbiAqIEtFWVM6IHRvdGFsIHpzZXQsIG9yZyB6c2V0LCB0aWNrZXQga2V5LlxuICogQVJHVjogdHRsTXMsIG1heFRvdGFsLCBtYXhQZXJPcmcsIHRpY2tldElkLCByZWNvcmQgSlNPTi5cbiAqIFVzZXMgdGhlIHNlcnZlciBjbG9jayBzbyBldmVyeSBwb2QgYWdyZWVzIG9uIFwiZXhwaXJlZFwiLlxuICovXG5jb25zdCBJU1NVRV9TQ1JJUFQgPSBgXG5sb2NhbCB0ID0gcmVkaXMuY2FsbCgnVElNRScpXG5sb2NhbCBub3cgPSB0b251bWJlcih0WzFdKSAqIDEwMDAgKyBtYXRoLmZsb29yKHRvbnVtYmVyKHRbMl0pIC8gMTAwMClcbmxvY2FsIHR0bCA9IHRvbnVtYmVyKEFSR1ZbMV0pXG5yZWRpcy5jYWxsKCdaUkVNUkFOR0VCWVNDT1JFJywgS0VZU1sxXSwgJy1pbmYnLCBub3cpXG5yZWRpcy5jYWxsKCdaUkVNUkFOR0VCWVNDT1JFJywgS0VZU1syXSwgJy1pbmYnLCBub3cpXG5pZiByZWRpcy5jYWxsKCdaQ0FSRCcsIEtFWVNbMV0pID49IHRvbnVtYmVyKEFSR1ZbMl0pIHRoZW4gcmV0dXJuICd0b3RhbCcgZW5kXG5pZiByZWRpcy5jYWxsKCdaQ0FSRCcsIEtFWVNbMl0pID49IHRvbnVtYmVyKEFSR1ZbM10pIHRoZW4gcmV0dXJuICdvcmcnIGVuZFxucmVkaXMuY2FsbCgnU0VUJywgS0VZU1szXSwgQVJHVls1XSwgJ1BYJywgdHRsKVxucmVkaXMuY2FsbCgnWkFERCcsIEtFWVNbMV0sIG5vdyArIHR0bCwgQVJHVls0XSlcbnJlZGlzLmNhbGwoJ1pBREQnLCBLRVlTWzJdLCBub3cgKyB0dGwsIEFSR1ZbNF0pXG5yZWRpcy5jYWxsKCdQRVhQSVJFJywgS0VZU1sxXSwgdHRsKVxucmVkaXMuY2FsbCgnUEVYUElSRScsIEtFWVNbMl0sIHR0bClcbnJldHVybiAnb2snYDtcblxuLyoqXG4gKiBSZWRpcyBiYWNrZW5kIOKAlCBtdWx0aS1yZXBsaWNhIHNhZmUuXG4gKlxuICogRmFpbC1DTE9TRUQ6IGEgUmVkaXMgZXJyb3IgbWFrZXMgYGlzc3VlYCByZWplY3QgKGB0b3RhbGApLCBgY29uc3VtZWAgcmV0dXJuXG4gKiBudWxsIGFuZCBgZ2V0T3duZXJgIHRocm93LCBzbyBhbiBvdXRhZ2UgZGVncmFkZXMgdG8gXCJubyBsaXZlIHN0cmVhbVwiIHJhdGhlclxuICogdGhhbiBoYW5kaW5nIG91dCBvciBhY2NlcHRpbmcgdW52YWxpZGF0ZWQgdGlja2V0cy4gYGJpbmRPd25lcmAgaXMgYmVzdC1lZmZvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc1NzZVRpY2tldFN0b3JlKHJlZGlzOiBTc2VUaWNrZXRSZWRpcywgY29uZmlnOiBTc2VUaWNrZXRTdG9yZUNvbmZpZyk6IFNzZVRpY2tldFN0b3JlIHtcbiAgY29uc3QgbnMgPSBjb25maWcua2V5UHJlZml4ID8gYCR7Y29uZmlnLmtleVByZWZpeH06YCA6ICcnO1xuICBjb25zdCB0aWNrZXRLZXkgPSAodDogc3RyaW5nKSA9PiBgJHtuc31zc2U6dGs6JHt0fWA7XG4gIGNvbnN0IG9yZ1NldEtleSA9IChvOiBzdHJpbmcpID0+IGAke25zfXNzZTp0a3o6b3JnOiR7b31gO1xuICBjb25zdCB0b3RhbFNldEtleSA9IGAke25zfXNzZTp0a3o6YWxsYDtcbiAgY29uc3Qgb3duZXJLZXkgPSAoczogc3RyaW5nKSA9PiBgJHtuc31zc2U6b3duZXI6JHtzfWA7XG4gIGNvbnN0IHR0bE1zID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGNvbmZpZy50dGxNcykpO1xuICAvLyBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZTogd2FpdCAoYm91bmRlZCkgZm9yIHRoZSBmaXJzdCBjb25uZWN0aW9uXG4gIC8vIHNvIHRoZSBmaXJzdCBtaW50L3JlZGVlbSBhZnRlciBib290IGlzbid0IHJlamVjdGVkIG91dHJpZ2h0LlxuICBjb25zdCByZWFkeSA9IGNyZWF0ZVJlZGlzUmVhZHlHYXRlKHJlZGlzKTtcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGlzc3VlKG9yZ0lkLCBzdWJqZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZWFkeSgpO1xuICAgICAgICBjb25zdCB0aWNrZXQgPSBuZXdUaWNrZXRJZCgpO1xuICAgICAgICBjb25zdCByZWNvcmQ6IFNzZVRpY2tldFJlY29yZCA9IHsgb3JnSWQsIC4uLihzdWJqZWN0ICE9PSB1bmRlZmluZWQgJiYgeyBzdWJqZWN0IH0pIH07XG4gICAgICAgIGNvbnN0IG91dGNvbWUgPSBhd2FpdCByZWRpcy5ldmFsKFxuICAgICAgICAgIElTU1VFX1NDUklQVCwgMywgdG90YWxTZXRLZXksIG9yZ1NldEtleShvcmdJZCksIHRpY2tldEtleSh0aWNrZXQpLFxuICAgICAgICAgIHR0bE1zLCBjb25maWcubWF4VG90YWwsIGNvbmZpZy5tYXhQZXJPcmcsIHRpY2tldCwgSlNPTi5zdHJpbmdpZnkocmVjb3JkKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG91dGNvbWUgPT09ICdvaycpIHJldHVybiB7IG9rOiB0cnVlLCB0aWNrZXQgfTtcbiAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246IG91dGNvbWUgPT09ICdvcmcnID8gJ29yZycgOiAndG90YWwnIH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NTRSB0aWNrZXQgaXNzdWUgZmFpbGVkIChmYWlsLWNsb3NlZCknLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCByZWFzb246ICd0b3RhbCcgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGNvbnN1bWUodGlja2V0SWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHJlYWR5KCk7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmdldGRlbCh0aWNrZXRLZXkodGlja2V0SWQpKTtcbiAgICAgICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZWMgPSBKU09OLnBhcnNlKHJhdykgYXMgU3NlVGlja2V0UmVjb3JkO1xuICAgICAgICBpZiAodHlwZW9mIHJlYz8ub3JnSWQgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gRnJlZSB0aGUgbGl2ZS1jb3VudCBzbG90cyBub3cgcmF0aGVyIHRoYW4gYXQgZXhwaXJ5LiBCZXN0LWVmZm9ydDogYVxuICAgICAgICAvLyBmYWlsdXJlIGhlcmUgb25seSBkZWxheXMgdGhlIHNsb3QgdW50aWwgdGhlIG1lbWJlcidzIGV4cGlyeSBzY29yZS5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3JlZGlzLnpyZW0ob3JnU2V0S2V5KHJlYy5vcmdJZCksIHRpY2tldElkKSwgcmVkaXMuenJlbSh0b3RhbFNldEtleSwgdGlja2V0SWQpXSlcbiAgICAgICAgICAuY2F0Y2goKGVycjogdW5rbm93bikgPT4gbG9nZ2VyLmRlYnVnKCdTU0UgdGlja2V0IHNsb3QgcmVsZWFzZSBmYWlsZWQnLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KSk7XG4gICAgICAgIHJldHVybiByZWM7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NTRSB0aWNrZXQgY29uc3VtZSBmYWlsZWQgKGZhaWwtY2xvc2VkKScsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGJpbmRPd25lcihzdWJqZWN0LCBvcmdJZCwgb3duZXJUdGxNcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgcmVhZHkoKTtcbiAgICAgICAgYXdhaXQgcmVkaXMuc2V0KG93bmVyS2V5KHN1YmplY3QpLCBvcmdJZCwgJ1BYJywgTWF0aC5tYXgoMSwgTWF0aC5jZWlsKG93bmVyVHRsTXMpKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NTRSBzdHJlYW0tb3duZXIgYmluZCBmYWlsZWQnLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGdldE93bmVyKHN1YmplY3QpIHtcbiAgICAgIGF3YWl0IHJlYWR5KCk7XG4gICAgICByZXR1cm4gcmVkaXMuZ2V0KG93bmVyS2V5KHN1YmplY3QpKTtcbiAgICB9LFxuICAgIHN0b3AoKSB7IC8qIGtleXMgZXhwaXJlIG9uIHRoZWlyIG93biBUVEwgKi8gfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGVwbG95LXdpZGUgdGlja2V0IGNhcHM6IGBTU0VfTUFYX1RPVEFMX1RJQ0tFVFNgIChkZWZhdWx0IDEwMDApIGFuZFxuICogYFNTRV9NQVhfVElDS0VUU19QRVJfT1JHYCAoZGVmYXVsdCAxMCkuIE9uZSByZWFkZXIgc28gZXZlcnkgY2hhbm5lbCBwYXJzZXNcbiAqIHRoZW0gdGhlIHNhbWUgd2F5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52U3NlVGlja2V0Q2FwcygpOiBQaWNrPFNzZVRpY2tldFN0b3JlQ29uZmlnLCAnbWF4VG90YWwnIHwgJ21heFBlck9yZyc+IHtcbiAgcmV0dXJuIHtcbiAgICBtYXhUb3RhbDogZW52SW50KCdTU0VfTUFYX1RPVEFMX1RJQ0tFVFMnLCAxMDAwLCB7IG1pbjogMSB9KSxcbiAgICBtYXhQZXJPcmc6IGVudkludCgnU1NFX01BWF9USUNLRVRTX1BFUl9PUkcnLCAxMCwgeyBtaW46IDEgfSksXG4gIH07XG59XG5cbi8qKiB7QGxpbmsgY3JlYXRlRW52U3NlVGlja2V0U3RvcmV9IGNvbmZpZzogdGhlIGNhcHMgZGVmYXVsdCB0byB7QGxpbmsgZW52U3NlVGlja2V0Q2Fwc30uICovXG5leHBvcnQgdHlwZSBFbnZTc2VUaWNrZXRTdG9yZUNvbmZpZyA9IE9taXQ8U3NlVGlja2V0U3RvcmVDb25maWcsICdtYXhUb3RhbCcgfCAnbWF4UGVyT3JnJz5cbiAgJiBQYXJ0aWFsPFBpY2s8U3NlVGlja2V0U3RvcmVDb25maWcsICdtYXhUb3RhbCcgfCAnbWF4UGVyT3JnJz4+O1xuXG4vKipcbiAqIEJ1aWxkIGFuIHtAbGluayBTc2VUaWNrZXRTdG9yZX0gZnJvbSB0aGUgc3RhbmRhcmQgUmVkaXMgZW52IChgUkVESVNfVVJMYCBvclxuICogYFJFRElTX1NFTlRJTkVMU2ApOiB0aGUgUmVkaXMgYmFja2VuZCB3aGVuIGNvbmZpZ3VyZWQgKG11bHRpLXJlcGxpY2Egc2FmZSksXG4gKiBvdGhlcndpc2UgdGhlIGluLW1lbW9yeSBzaW5nbGUtcHJvY2VzcyBiYWNrZW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52U3NlVGlja2V0U3RvcmUob3B0aW9uczogRW52U3NlVGlja2V0U3RvcmVDb25maWcpOiBTc2VUaWNrZXRTdG9yZSB7XG4gIGNvbnN0IGNhcHMgPSBlbnZTc2VUaWNrZXRDYXBzKCk7XG4gIGNvbnN0IGNvbmZpZzogU3NlVGlja2V0U3RvcmVDb25maWcgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBtYXhUb3RhbDogb3B0aW9ucy5tYXhUb3RhbCA/PyBjYXBzLm1heFRvdGFsLFxuICAgIG1heFBlck9yZzogb3B0aW9ucy5tYXhQZXJPcmcgPz8gY2Fwcy5tYXhQZXJPcmcsXG4gIH07XG4gIGNvbnN0IHJlZGlzID0gY3JlYXRlRW52UmVkaXNDbGllbnQ8U3NlVGlja2V0UmVkaXM+KCdzc2UtdGlja2V0Jyk7XG4gIGlmIChyZWRpcykge1xuICAgIGxvZ2dlci5pbmZvKCdTU0UgdGlja2V0IHN0b3JlOiBSZWRpcyBiYWNrZW5kIChtdWx0aS1yZXBsaWNhKScsIHsga2V5UHJlZml4OiBjb25maWcua2V5UHJlZml4IH0pO1xuICAgIHJldHVybiBjcmVhdGVSZWRpc1NzZVRpY2tldFN0b3JlKHJlZGlzLCBjb25maWcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdTU0UgdGlja2V0IHN0b3JlOiBpbi1tZW1vcnkgYmFja2VuZCAoc2luZ2xlLXByb2Nlc3MgZmFsbGJhY2spJywgeyBrZXlQcmVmaXg6IGNvbmZpZy5rZXlQcmVmaXggfSk7XG4gIHJldHVybiBjcmVhdGVNZW1vcnlTc2VUaWNrZXRTdG9yZShjb25maWcpO1xufVxuIl19
@@ -47,4 +47,4 @@ export async function sendSystemNotification(notification, opts = {}) {
47
47
  return false;
48
48
  }
49
49
  }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLW5vdGlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9zeXN0ZW0tbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRW5ELG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQVc5RDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsWUFBZ0MsRUFDaEMsSUFBSSxHQUFzRCxFQUFFO0lBRTVELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRTtZQUNqRSxPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLG9CQUFvQixDQUFDO29CQUNsQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxlQUFlLEVBQUU7b0JBQ2xELEtBQUssRUFBRSxZQUFZLENBQUMsY0FBYztvQkFDbEMsSUFBSSxFQUFFLFFBQVE7aUJBQ2YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsNkVBQTZFO1FBQzdFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUU7Z0JBQy9DLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYztnQkFDM0MsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLElBQUksYUFBYTthQUNoRCxDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgY3JlYXRlU2FmZUNsaWVudCB9IGZyb20gJy4vaHR0cC1jbGllbnQuanMnO1xuaW1wb3J0IHsgc2VydmljZUlkZW50aXR5IH0gZnJvbSAnLi9zZXJ2aWNlLWtleXMuanMnO1xuaW1wb3J0IHsgZ2V0U2VydmljZUF1dGhIZWFkZXIgfSBmcm9tICcuLi9taWRkbGV3YXJlL3NlcnZpY2UtdG9rZW5zLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2VQcmlvcml0eSB9IGZyb20gJy4uL3R5cGVzL3dpcmUtdm9jYWJ1bGFyeS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignc3lzdGVtLW5vdGlmaWNhdGlvbicpO1xuXG4vKiogVGhlIG1lc3NhZ2Ugc2VydmljZSdzIHNlcnZpY2UtdG8tc2VydmljZSBub3RpZmljYXRpb24gcm91dGUuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX05PVElGWV9QQVRIID0gJy9tZXNzYWdlcy9pbnRlcm5hbC9ub3RpZnknO1xuXG4vKiogQSBTWVNURU0tYXV0aG9yZWQgaW4tYXBwIG1lc3NhZ2UgZm9yIGEgcmVjaXBpZW50IG9yZywgb3B0aW9uYWxseSBvbmUgdXNlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtTm90aWZpY2F0aW9uIHtcbiAgcmVjaXBpZW50T3JnSWQ6IHN0cmluZztcbiAgcmVjaXBpZW50VXNlcklkPzogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgcHJpb3JpdHk/OiBNZXNzYWdlUHJpb3JpdHk7XG59XG5cbi8qKlxuICogRHJvcCBhIFNZU1RFTS1hdXRob3JlZCBtZXNzYWdlIGludG8gYSByZWNpcGllbnQgb3JnJ3MgaW5ib3ggdmlhIHRoZSBtZXNzYWdlXG4gKiBzZXJ2aWNlJ3MgaW50ZXJuYWwgbm90aWZ5IHJvdXRlICh3aGljaCBhbHNvIHB1c2hlcyB0aGUgcmVhbC10aW1lIFNTRSBwaW5nKS5cbiAqIEF1dGhlbnRpY2F0ZXMgd2l0aCB0aGlzIHByb2Nlc3MncyBzaWduZWQgc2VydmljZSB0b2tlbiwgc2NvcGVkIHRvIHRoZVxuICogcmVjaXBpZW50IG9yZy5cbiAqXG4gKiBSRVBPUlRTIHdoZXRoZXIgdGhlIG1lc3NhZ2Ugd2FzIHBlcnNpc3RlZDogdHJ1ZSBvbmx5IG9uIGEgMnh4LiBOZXZlciB0aHJvd3Mg4oCUXG4gKiBhbiB1bnJlYWNoYWJsZSBzZXJ2aWNlIG9yIGEgcmVmdXNhbCBpcyBsb2dnZWQgYW5kIHJldHVybnMgZmFsc2UsIHNvIGEgY2FsbGVyXG4gKiB3aG9zZSBub24tZGVsaXZlcnkgY29zdHMgc29tZXRoaW5nIChhIHJldHJpZWQgcmVtaW5kZXIsIGEgbm90aWZpY2F0aW9uIGxvZylcbiAqIGNhbiBhY3Qgb24gaXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kU3lzdGVtTm90aWZpY2F0aW9uKFxuICBub3RpZmljYXRpb246IFN5c3RlbU5vdGlmaWNhdGlvbixcbiAgb3B0czogeyBzZXJ2aWNlPzogU2VydmljZUNvbmZpZzsgc2VydmljZU5hbWU/OiBzdHJpbmcgfSA9IHt9LFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlU2FmZUNsaWVudChvcHRzLnNlcnZpY2UgPz8gc2VydmljZUVuZHBvaW50KCdtZXNzYWdlJykpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5wb3N0KFNZU1RFTV9OT1RJRllfUEFUSCwgbm90aWZpY2F0aW9uLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogb3B0cy5zZXJ2aWNlTmFtZSA/PyBzZXJ2aWNlSWRlbnRpdHkoKSxcbiAgICAgICAgICBvcmdJZDogbm90aWZpY2F0aW9uLnJlY2lwaWVudE9yZ0lkLFxuICAgICAgICAgIHJvbGU6ICdtZW1iZXInLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gVGhlIHNhZmUgY2xpZW50IHJlc29sdmVzIG51bGwgb24gYSB0cmFuc3BvcnQgZmFpbHVyZSByYXRoZXIgdGhhbiB0aHJvd2luZy5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdC5zdGF0dXNDb2RlIDwgMjAwIHx8IHJlc3VsdC5zdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1N5c3RlbSBub3RpZmljYXRpb24gbm90IGRlbGl2ZXJlZCcsIHtcbiAgICAgICAgcmVjaXBpZW50T3JnSWQ6IG5vdGlmaWNhdGlvbi5yZWNpcGllbnRPcmdJZCxcbiAgICAgICAgc3RhdHVzQ29kZTogcmVzdWx0Py5zdGF0dXNDb2RlID8/ICd1bnJlYWNoYWJsZScsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdTeXN0ZW0gbm90aWZpY2F0aW9uIGZhaWxlZCcsIHsgcmVjaXBpZW50T3JnSWQ6IG5vdGlmaWNhdGlvbi5yZWNpcGllbnRPcmdJZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLW5vdGlmaWNhdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3N5c3RlbS1ub3RpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFbkQsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLDJCQUEyQixDQUFDO0FBVzlEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxZQUFnQyxFQUNoQyxJQUFJLEdBQXNELEVBQUU7SUFFNUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFO1lBQ2pFLE9BQU8sRUFBRTtnQkFDUCxhQUFhLEVBQUUsb0JBQW9CLENBQUM7b0JBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLGVBQWUsRUFBRTtvQkFDbEQsS0FBSyxFQUFFLFlBQVksQ0FBQyxjQUFjO29CQUNsQyxJQUFJLEVBQUUsUUFBUTtpQkFDZixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7UUFDSCw2RUFBNkU7UUFDN0UsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7WUFDM0UsTUFBTSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTtnQkFDL0MsY0FBYyxFQUFFLFlBQVksQ0FBQyxjQUFjO2dCQUMzQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxhQUFhO2FBQ2hELENBQUMsQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsY0FBYyxFQUFFLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckgsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVTYWZlQ2xpZW50IH0gZnJvbSAnLi9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlSWRlbnRpdHkgfSBmcm9tICcuL3NlcnZpY2Uta2V5cy5qcyc7XG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvc2VydmljZS10b2tlbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB0eXBlIHsgTWVzc2FnZVByaW9yaXR5IH0gZnJvbSAnLi4vdHlwZXMvd2lyZS12b2NhYnVsYXJ5LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBzZXJ2aWNlRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9zZXJ2aWNlLXJlZ2lzdHJ5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzeXN0ZW0tbm90aWZpY2F0aW9uJyk7XG5cbi8qKiBUaGUgbWVzc2FnZSBzZXJ2aWNlJ3Mgc2VydmljZS10by1zZXJ2aWNlIG5vdGlmaWNhdGlvbiByb3V0ZS4gKi9cbmV4cG9ydCBjb25zdCBTWVNURU1fTk9USUZZX1BBVEggPSAnL21lc3NhZ2VzL2ludGVybmFsL25vdGlmeSc7XG5cbi8qKiBBIFNZU1RFTS1hdXRob3JlZCBpbi1hcHAgbWVzc2FnZSBmb3IgYSByZWNpcGllbnQgb3JnLCBvcHRpb25hbGx5IG9uZSB1c2VyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeXN0ZW1Ob3RpZmljYXRpb24ge1xuICByZWNpcGllbnRPcmdJZDogc3RyaW5nO1xuICByZWNpcGllbnRVc2VySWQ/OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgY29udGVudDogc3RyaW5nO1xuICBwcmlvcml0eT86IE1lc3NhZ2VQcmlvcml0eTtcbn1cblxuLyoqXG4gKiBEcm9wIGEgU1lTVEVNLWF1dGhvcmVkIG1lc3NhZ2UgaW50byBhIHJlY2lwaWVudCBvcmcncyBpbmJveCB2aWEgdGhlIG1lc3NhZ2VcbiAqIHNlcnZpY2UncyBpbnRlcm5hbCBub3RpZnkgcm91dGUgKHdoaWNoIGFsc28gcHVzaGVzIHRoZSByZWFsLXRpbWUgU1NFIHBpbmcpLlxuICogQXV0aGVudGljYXRlcyB3aXRoIHRoaXMgcHJvY2VzcydzIHNpZ25lZCBzZXJ2aWNlIHRva2VuLCBzY29wZWQgdG8gdGhlXG4gKiByZWNpcGllbnQgb3JnLlxuICpcbiAqIFJFUE9SVFMgd2hldGhlciB0aGUgbWVzc2FnZSB3YXMgcGVyc2lzdGVkOiB0cnVlIG9ubHkgb24gYSAyeHguIE5ldmVyIHRocm93cyDigJRcbiAqIGFuIHVucmVhY2hhYmxlIHNlcnZpY2Ugb3IgYSByZWZ1c2FsIGlzIGxvZ2dlZCBhbmQgcmV0dXJucyBmYWxzZSwgc28gYSBjYWxsZXJcbiAqIHdob3NlIG5vbi1kZWxpdmVyeSBjb3N0cyBzb21ldGhpbmcgKGEgcmV0cmllZCByZW1pbmRlciwgYSBub3RpZmljYXRpb24gbG9nKVxuICogY2FuIGFjdCBvbiBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRTeXN0ZW1Ob3RpZmljYXRpb24oXG4gIG5vdGlmaWNhdGlvbjogU3lzdGVtTm90aWZpY2F0aW9uLFxuICBvcHRzOiB7IHNlcnZpY2U/OiBTZXJ2aWNlQ29uZmlnOyBzZXJ2aWNlTmFtZT86IHN0cmluZyB9ID0ge30sXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVTYWZlQ2xpZW50KG9wdHMuc2VydmljZSA/PyBzZXJ2aWNlRW5kcG9pbnQoJ21lc3NhZ2UnKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnBvc3QoU1lTVEVNX05PVElGWV9QQVRILCBub3RpZmljYXRpb24sIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoe1xuICAgICAgICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lID8/IHNlcnZpY2VJZGVudGl0eSgpLFxuICAgICAgICAgIG9yZ0lkOiBub3RpZmljYXRpb24ucmVjaXBpZW50T3JnSWQsXG4gICAgICAgICAgcm9sZTogJ21lbWJlcicsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAvLyBUaGUgc2FmZSBjbGllbnQgcmVzb2x2ZXMgbnVsbCBvbiBhIHRyYW5zcG9ydCBmYWlsdXJlIHJhdGhlciB0aGFuIHRocm93aW5nLlxuICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0LnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzdWx0LnN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICBsb2dnZXIud2FybignU3lzdGVtIG5vdGlmaWNhdGlvbiBub3QgZGVsaXZlcmVkJywge1xuICAgICAgICByZWNpcGllbnRPcmdJZDogbm90aWZpY2F0aW9uLnJlY2lwaWVudE9yZ0lkLFxuICAgICAgICBzdGF0dXNDb2RlOiByZXN1bHQ/LnN0YXR1c0NvZGUgPz8gJ3VucmVhY2hhYmxlJyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1N5c3RlbSBub3RpZmljYXRpb24gZmFpbGVkJywgeyByZWNpcGllbnRPcmdJZDogbm90aWZpY2F0aW9uLnJlY2lwaWVudE9yZ0lkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -294,4 +294,4 @@ export async function publishCredentialRevocation(redis, kind, id, ttlSeconds) {
294
294
  return false;
295
295
  }
296
296
  }
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmV2b2NhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy90b2tlbi1yZXZvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUF3QixNQUFNLGdCQUFnQixDQUFDO0FBRWxHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRWhEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLGFBQWEsQ0FBQztBQUV6RCx3Q0FBd0M7QUFDeEMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDL0MsT0FBTyxHQUFHLDJCQUEyQixHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ25ELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsY0FBYyxDQUFDO0FBRTVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBVztJQUM5QyxPQUFPLEdBQUcsNkJBQTZCLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxHQUFHLEVBQUUsYUFBYTtJQUNsQixHQUFHLEVBQUUsYUFBYTtDQUNWLENBQUM7QUFLWCxpRkFBaUY7QUFDakYsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsRUFBVTtJQUN0RSxPQUFPLEdBQUcsNEJBQTRCLENBQUMsSUFB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Q0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsS0FBdUIsRUFDdkIsSUFBb0IsRUFDcEIsRUFBVSxFQUNWLFVBQWtCO0lBRWxCLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQywrRkFBK0YsRUFBRTtZQUMzRyxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFJlZGlzQ2FjaGVDbGllbnQgfSBmcm9tICcuL2NhY2hlLXNlcnZpY2UuanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNDbGllbnQsIGNyZWF0ZVJlZGlzUmVhZHlHYXRlLCB0eXBlIFJlYWR5QXdhcmVSZWRpcyB9IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmltcG9ydCB0eXBlIHsgQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzLCBTZXNzaW9uUmV2b2NhdGlvblN0YXRlLCBUb2tlblJldm9jYXRpb25TdG9yZSB9IGZyb20gJy4uL21pZGRsZXdhcmUvcmV2b2NhdGlvbi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigndG9rZW4tcmV2b2NhdGlvbicpO1xuXG4vKipcbiAqIFJlZGlzIGtleSBuYW1lc3BhY2UgZm9yIHRoZSBwZXItdXNlciBjdXJyZW50IGB0b2tlblZlcnNpb25gLiBUaGUgcGxhdGZvcm1cbiAqIFBVQkxJU0hFUyB0byB0aGlzIGtleSBvbiBldmVyeSBwcml2aWxlZ2UgY2hhbmdlOyB0aGUgc3RhdGVsZXNzIHNlcnZpY2VzIFJFQURcbiAqIGl0IGluIGByZXF1aXJlQXV0aGAgKHZpYSB7QGxpbmsgY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZX0pIHRvIHJlamVjdFxuICogdG9rZW5zIG1pbnRlZCBiZWZvcmUgdGhhdCBjaGFuZ2UuIFB1Ymxpc2hlciBhbmQgcmVhZGVycyBNVVNUIHNoYXJlIHRoaXMgZXhhY3RcbiAqIHByZWZpeCDigJQgaGVuY2UgYm90aCBoZWxwZXJzIGxpdmUgaGVyZSwgaW4gb25lIHBsYWNlLlxuICovXG5leHBvcnQgY29uc3QgVE9LRU5fUkVWT0NBVElPTl9LRVlfUFJFRklYID0gJ2F1dGhyZXY6dHY6JztcblxuLyoqIFRoZSByZXZvY2F0aW9uIGtleSBmb3IgYSB1c2VyIGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuUmV2b2NhdGlvbktleSh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtUT0tFTl9SRVZPQ0FUSU9OX0tFWV9QUkVGSVh9JHt1c2VySWR9YDtcbn1cblxuLyoqXG4gKiBSZWRpcyBrZXkgbmFtZXNwYWNlIGZvciBlbmRlZCBJTVBFUlNPTkFUSU9OIHNlc3Npb25zLCBieSB0b2tlbiBganRpYC4gU2FtZVxuICogcHVibGlzaC9yZWFkIHNwbGl0IGFzIHRoZSB0b2tlblZlcnNpb24ga2V5cyBhYm92ZSwgYW5kIGtlcHQgYmVzaWRlIHRoZW0gZm9yIHRoZVxuICogc2FtZSByZWFzb246IHB1Ymxpc2hlciBhbmQgcmVhZGVycyBtdXN0IGFncmVlIG9uIHRoaXMgZXhhY3QgcHJlZml4LlxuICovXG5leHBvcnQgY29uc3QgU0VTU0lPTl9SRVZPQ0FUSU9OX0tFWV9QUkVGSVggPSAnYXV0aHJldjpqdGk6JztcblxuLyoqIFRoZSByZXZvY2F0aW9uIGtleSBmb3Igb25lIHNlc3Npb24ncyB0b2tlbiBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXNzaW9uUmV2b2NhdGlvbktleShqdGk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTRVNTSU9OX1JFVk9DQVRJT05fS0VZX1BSRUZJWH0ke2p0aX1gO1xufVxuXG4vKipcbiAqIFJlZGlzIGtleSBuYW1lc3BhY2VzIGZvciByZXZva2luZyBPTkUgY3JlZGVudGlhbCByYXRoZXIgdGhhbiBhIHdob2xlIHVzZXI6XG4gKlxuICogLSBgcmV2b2tlOnNpZDo8c2lkPmAgICDigJQgb25lIHJlZnJlc2gtc2Vzc2lvbiBzbG90IChhIHNpZ25lZC1vdXQgZGV2aWNlLCBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2b2tlZCBtYWNoaW5lIHNlc3Npb24pLiBSZWplY3RzIGV2ZXJ5IGFjY2VzcyB0b2tlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgIHdob3NlIGBzaWRgIGNsYWltIG5hbWVzIGl0LlxuICogLSBgcmV2b2tlOmtleTo8a2V5SWQ+YCDigJQgb25lIGFjY2VzcyBrZXkgKFBBVCBvciBzZXJ2aWNlLWFjY291bnQga2V5KS4gUmVqZWN0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBrZXkncyBleGNoYW5nZWQgdG9rZW4gKGB0b2tlbl91c2U6ICdhcGlfa2V5J2AsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYGp0aWAgPSBrZXkgaWQpIGFuZCBhbnl0aGluZyBkZXJpdmVkIGZyb20gaXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoYHBhcmVudEtleUlkYCkuXG4gKlxuICogUGxhdGZvcm0gUFVCTElTSEVTIHRoZXNlICh7QGxpbmsgcHVibGlzaENyZWRlbnRpYWxSZXZvY2F0aW9ufSk7IGV2ZXJ5IHNlcnZpY2VcbiAqIFJFQURTIHRoZW0gaW4gYHJlcXVpcmVBdXRoYC4gUHJlc2VuY2UgaXMgdGhlIHdob2xlIHNpZ25hbCDigJQgdGhlIHZhbHVlIGlzIGAxYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENSRURFTlRJQUxfUkVWT0NBVElPTl9QUkVGSVggPSB7XG4gIHNpZDogJ3Jldm9rZTpzaWQ6JyxcbiAga2V5OiAncmV2b2tlOmtleTonLFxufSBhcyBjb25zdDtcblxuLyoqIFdoaWNoIGNyZWRlbnRpYWwgYSB7QGxpbmsgY3JlZGVudGlhbFJldm9jYXRpb25LZXl9IG5hbWVzLiAqL1xuZXhwb3J0IHR5cGUgQ3JlZGVudGlhbEtpbmQgPSBrZXlvZiB0eXBlb2YgQ1JFREVOVElBTF9SRVZPQ0FUSU9OX1BSRUZJWDtcblxuLyoqIFRoZSByZXZvY2F0aW9uIGtleSBmb3Igb25lIHNlc3Npb24gc2xvdCAoYHNpZGApIG9yIG9uZSBhY2Nlc3Mga2V5IChga2V5YCkuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlZGVudGlhbFJldm9jYXRpb25LZXkoa2luZDogQ3JlZGVudGlhbEtpbmQsIGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Q1JFREVOVElBTF9SRVZPQ0FUSU9OX1BSRUZJWFtraW5kXX0ke2lkfWA7XG59XG5cbi8qKlxuICogQXRvbWljIFwic2V0IGlmIGdyZWF0ZXJcIiBmb3IgdGhlIHBlci11c2VyIHRva2VuVmVyc2lvbi4gQSBwbGFpbiBTRVQgbGV0IHR3b1xuICogY29uY3VycmVudCBwdWJsaXNoZXMgbGFuZCBvdXQgb2Ygb3JkZXIg4oCUIGFuIG9sZGVyIHZlcnNpb24gb3ZlcndyaXRpbmcgYSBuZXdlclxuICogb25lIHNpbGVudGx5IFVOLXJldm9rZWQgZXZlcnkgdG9rZW4gYmV0d2VlbiB0aGVtLiBUaGUgc2NyaXB0IG9ubHkgZXZlciByYWlzZXNcbiAqIHRoZSBzdG9yZWQgdmVyc2lvbiwgYW5kIG9ubHkgZXZlciBsZW5ndGhlbnMgdGhlIGVudHJ5J3MgVFRMLlxuICpcbiAqIEtFWVNbMV0gPSByZXZvY2F0aW9uIGtleTsgQVJHVlsxXSA9IHZlcnNpb247IEFSR1ZbMl0gPSB0dGwgc2Vjb25kcy5cbiAqIFJldHVybnMgMSB3aGVuIGl0IHdyb3RlLCAwIHdoZW4gYW4gZXF1YWwtb3ItbmV3ZXIgdmVyc2lvbiB3YXMgYWxyZWFkeSB0aGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFVF9JRl9HUkVBVEVSX0xVQSA9IGBcbmxvY2FsIGN1ciA9IHRvbnVtYmVyKHJlZGlzLmNhbGwoJ0dFVCcsIEtFWVNbMV0pKVxubG9jYWwgdiA9IHRvbnVtYmVyKEFSR1ZbMV0pXG5sb2NhbCB0dGwgPSB0b251bWJlcihBUkdWWzJdKVxuaWYgY3VyIGFuZCBjdXIgPj0gdiB0aGVuXG4gIGlmIHJlZGlzLmNhbGwoJ1RUTCcsIEtFWVNbMV0pIDwgdHRsIHRoZW4gcmVkaXMuY2FsbCgnRVhQSVJFJywgS0VZU1sxXSwgdHRsKSBlbmRcbiAgcmV0dXJuIDBcbmVuZFxucmVkaXMuY2FsbCgnU0VUJywgS0VZU1sxXSwgQVJHVlsxXSwgJ0VYJywgdHRsKVxucmV0dXJuIDFcbmA7XG5cbi8qKlxuICogQnVpbGQgYSB7QGxpbmsgVG9rZW5SZXZvY2F0aW9uU3RvcmV9IGJhY2tlZCBieSBhIFJlZGlzIGNsaWVudCwgZm9yIGEgc3RhdGVsZXNzXG4gKiBzZXJ2aWNlIHRvIHJlZ2lzdGVyIHZpYSBgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmVgLiBSZWFkcyB0aGUgY3VycmVudFxuICogYHRva2VuVmVyc2lvbmAgdGhlIHBsYXRmb3JtIHB1Ymxpc2hlZCBmb3IgdGhlIHVzZXIuXG4gKlxuICogRmFpbC1vcGVuIGJ5IGNvbnRyYWN0OiBhIG1pc3MsIGEgcGFyc2UgZmFpbHVyZSwgb3IgYSBSZWRpcyBlcnJvciBhbGwgeWllbGRcbiAqIGBudWxsYCAo4oCUIGByZXF1aXJlQXV0aGAgdHJlYXRzIHRoYXQgYXMgXCJubyBrbm93biByZXZvY2F0aW9uXCIpLCBzbyBhIFJlZGlzXG4gKiBvdXRhZ2UgZGVncmFkZXMgdG8gdGhlIHByZS1leGlzdGluZyBiZWhhdmlvdXIgcmF0aGVyIHRoYW4gbG9ja2luZyB1c2VycyBvdXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKHJlZGlzOiBSZWRpc0NhY2hlQ2xpZW50KTogVG9rZW5SZXZvY2F0aW9uU3RvcmUge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBhd2FpdCByZWRpcy5nZXQodG9rZW5SZXZvY2F0aW9uS2V5KHVzZXJJZCkpO1xuICAgICAgICBpZiAocmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgLy8gU3RyaWN0IGludGVnZXIgcGFyc2U6IGBOdW1iZXJgICh1bmxpa2UgYHBhcnNlSW50YCkgcmVqZWN0cyB0cmFpbGluZ1xuICAgICAgICAvLyBnYXJiYWdlIChcIjVhYmNcIiDihpIgTmFOKSwgc28gYSBjb3JydXB0ZWQgZW50cnkgZmFpbHMgb3BlbiAobnVsbCDihpIgXCJub3RcbiAgICAgICAgLy8gcmV2b2tlZFwiKSByYXRoZXIgdGhhbiBiZWluZyByZWFkIGFzIGEgYm9ndXMgdmVyc2lvbi4gVGhlIGVtcHR5LXN0cmluZ1xuICAgICAgICAvLyBndWFyZCBhYm92ZSBtYXR0ZXJzIGJlY2F1c2UgYE51bWJlcignJylgIGlzIDAsIG5vdCBOYU4uXG4gICAgICAgIGNvbnN0IG4gPSBOdW1iZXIocmF3KTtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobikgPyBuIDogbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBSZWRpcyB3YXMgcmVhY2hhYmxlIGVub3VnaCB0byB0cnkgYnV0IHRoZSByZWFkIGVycm9yZWQg4oCUIHRoaXMgaXMgYVxuICAgICAgICAvLyBERUdSQURBVElPTjogd2hpbGUgaXQgcGVyc2lzdHMsIGZvcmNlZCBsb2dvdXRzIC8gcHJpdmlsZWdlIHJldm9jYXRpb25zXG4gICAgICAgIC8vIHNpbGVudGx5IHN0b3AgdGFraW5nIGVmZmVjdCB1bnRpbCBuYXR1cmFsIHRva2VuIGV4cGlyeS4gRW1pdCBhIGNvdW50ZXJcbiAgICAgICAgLy8gc28gYFRva2VuUmV2b2NhdGlvbkZhaWxpbmdPcGVuYCBjYW4gYWxlcnQgb24gYSBTVVNUQUlORUQgcmF0ZSAobWlycm9yc1xuICAgICAgICAvLyB0aGUgcXVvdGFfZmFpbF9vcGVuX3RvdGFsIHBhdHRlcm4pLiBOb3QgZW1pdHRlZCBmb3IgdGhlIFwiUmVkaXMgbm90XG4gICAgICAgIC8vIGNvbmZpZ3VyZWRcIiBwYXRoIChjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlIOKGkiBudWxsIGNsaWVudCksXG4gICAgICAgIC8vIHdoaWNoIGlzIGEgZGVsaWJlcmF0ZSBvcHQtb3V0LCBub3QgYSBkZWdyYWRhdGlvbi5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3Rva2VuX3Jldm9jYXRpb25fZmFpbF9vcGVuX3RvdGFsJywgeyByZWFzb246ICdyZWFkLWVycm9yJyB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdUb2tlbi1yZXZvY2F0aW9uIHJlYWQgZmFpbGVkIChmYWlsLW9wZW4pJywge1xuICAgICAgICAgIHVzZXJJZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBnZXRTZXNzaW9uUmV2b2NhdGlvbihqdGk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvblJldm9jYXRpb25TdGF0ZT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmF3ID0gYXdhaXQgcmVkaXMuZ2V0KHNlc3Npb25SZXZvY2F0aW9uS2V5KGp0aSkpO1xuICAgICAgICByZXR1cm4gcmF3ID09PSBudWxsIHx8IHJhdyA9PT0gdW5kZWZpbmVkID8gJ2xpdmUnIDogJ3Jldm9rZWQnO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE5PVCBmYWlsLW9wZW4sIHVubGlrZSBnZXRDdXJyZW50VmVyc2lvbiBhYm92ZTogYHVuYXZhaWxhYmxlYCByZWplY3RzXG4gICAgICAgIC8vIHRoZSBpbXBlcnNvbmF0aW9uIHRva2VuLiBDb3VudGVkIHNvIGEgc3VzdGFpbmVkIG91dGFnZSDigJQgd2hpY2ggc3RvcHNcbiAgICAgICAgLy8gc3VwcG9ydCBpbXBlcnNvbmF0aW9uIGV2ZXJ5d2hlcmUg4oCUIGlzIHZpc2libGUgYW5kIGFsZXJ0YWJsZS5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3Nlc3Npb25fcmV2b2NhdGlvbl91bmF2YWlsYWJsZV90b3RhbCcsIHsgcmVhc29uOiAncmVhZC1lcnJvcicgfSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnU2Vzc2lvbi1yZXZvY2F0aW9uIHJlYWQgZmFpbGVkIChyZWplY3RpbmcgaW1wZXJzb25hdGlvbiB0b2tlbiknLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gICAgICB9XG4gICAgfSxcbiAgICBhc3luYyBpc0NyZWRlbnRpYWxSZXZva2VkKHJlZnM6IENyZWRlbnRpYWxSZXZvY2F0aW9uUmVmcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgLi4uKHJlZnMuc2lkID8gW2NyZWRlbnRpYWxSZXZvY2F0aW9uS2V5KCdzaWQnLCByZWZzLnNpZCldIDogW10pLFxuICAgICAgICAuLi5yZWZzLmtleUlkcy5tYXAoKGlkKSA9PiBjcmVkZW50aWFsUmV2b2NhdGlvbktleSgna2V5JywgaWQpKSxcbiAgICAgIF07XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKGtleXMubWFwKChrKSA9PiByZWRpcy5nZXQoaykpKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKCh2KSA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRmFpbC1vcGVuLCBsaWtlIGdldEN1cnJlbnRWZXJzaW9uOiBhIG9uZS1jcmVkZW50aWFsIHJldm9jYXRpb24gaXMgdGhlXG4gICAgICAgIC8vIHNhbWUgY2xhc3Mgb2Ygc2lnbmFsIGFzIGEgdG9rZW5WZXJzaW9uIGJ1bXAsIGFuZCBhIFJlZGlzIG91dGFnZSBtdXN0XG4gICAgICAgIC8vIG5vdCBsb2NrIGV2ZXJ5IHNlc3Npb24gb3V0LiBDb3VudGVkIHNvIGl0IGlzIGFsZXJ0YWJsZS5cbiAgICAgICAgZW1pdENvdW50ZXIoJ3Rva2VuX3Jldm9jYXRpb25fZmFpbF9vcGVuX3RvdGFsJywgeyByZWFzb246ICdjcmVkZW50aWFsLXJlYWQtZXJyb3InIH0pO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NyZWRlbnRpYWwtcmV2b2NhdGlvbiByZWFkIGZhaWxlZCAoZmFpbC1vcGVuKScsIHsgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHtAbGluayBUb2tlblJldm9jYXRpb25TdG9yZX0gYmFja2VkIGJ5IGEgUmVkaXMgY2xpZW50IHRoYXQgaXMgbGF6aWx5XG4gKiBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzdGFuZGFyZCBgUkVESVNfVVJMYCBvciBgUkVESVNfU0VOVElORUxTYCBlbnYg4oCUXG4gKiBmb3IgYSBzdGF0ZWxlc3Mgc2VydmljZSB0aGF0IGtlZXBzIE5PIFJlZGlzIGNsaWVudCBvZiBpdHMgb3duLiBUaGUgY2xpZW50IGlzXG4gKiBidWlsdCBvbiBmaXJzdCBgZ2V0Q3VycmVudFZlcnNpb25gIGNhbGwgYW5kIG1lbW9pemVkOyBgaW9yZWRpc2AgaXMgbG9hZGVkIHZpYVxuICogYSBndWFyZGVkIGR5bmFtaWMgcmVxdWlyZSBzbyBtZXJlbHkgaW1wb3J0aW5nIHRoaXMgbmV2ZXIgYnJlYWtzIGEgYnVpbGQvdGVzdFxuICogd2hlcmUgUmVkaXMgaXNuJ3QgcHJlc2VudC5cbiAqXG4gKiBGVUxMWSBGQUlMLU9QRU46IG5vIGVudiBjb25maWd1cmVkLCBhbiBpb3JlZGlzIGxvYWQgZmFpbHVyZSwgYSBjb25uZWN0IGVycm9yLFxuICogb3IgYW55IHJlYWQgZmFpbHVyZSBhbGwgcmVzb2x2ZSB0byBgbnVsbGAgKFwibm8ga25vd24gcmV2b2NhdGlvblwiKSwgc28gYVxuICogc2VydmljZSBkZWdyYWRlcyB0byBuYXR1cmFsIHRva2VuIGV4cGlyeSByYXRoZXIgdGhhbiBsb2NraW5nIHVzZXJzIG91dC4gQVxuICogc2VydmljZSBvcHRzIGluIHdpdGggYSBzaW5nbGUgYm9vdCBsaW5lOlxuICogICBgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmUoY3JlYXRlRW52UmVkaXNUb2tlblJldm9jYXRpb25TdG9yZSgpKTtgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKCk6IFRva2VuUmV2b2NhdGlvblN0b3JlIHtcbiAgdHlwZSBSZWFkZXJSZWRpcyA9IFJlZGlzQ2FjaGVDbGllbnQgJiBSZWFkeUF3YXJlUmVkaXM7XG4gIC8vIHVuZGVmaW5lZCA9IG5vdCB5ZXQgYXR0ZW1wdGVkOyBudWxsID0gYXR0ZW1wdGVkIGFuZCB1bmF2YWlsYWJsZSAoc3RheSBvZmYpLlxuICBsZXQgY2FjaGVkOiBSZWFkZXJSZWRpcyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGxldCByZWFkeTogKCgpID0+IFByb21pc2U8dm9pZD4pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhZGVyIGNsaWVudCwgYnVpbHQgb24gZmlyc3QgdXNlLiBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZSxcbiAgICogc28gYSBHRVQgYmVmb3JlIHRoZSBmaXJzdCBjb25uZWN0aW9uIGNvbXBsZXRlcyBpcyByZWplY3RlZCDigJQgd2hpY2ggbWFkZSB0aGVcbiAgICogRklSU1QgaW1wZXJzb25hdGlvbiBjaGVjayBvbiBldmVyeSBwb2QgcmVhZCAndW5hdmFpbGFibGUnICg0MDEpLiBXYWl0XG4gICAqIChib3VuZGVkLCBuZXZlciByZWplY3RpbmcpIGZvciByZWFkaW5lc3M7IGEgZ2VudWluZWx5IGRvd24gUmVkaXMgdGhlbiBrZWVwc1xuICAgKiB0aGUgZXhpc3RpbmcgZmFpbC1vcGVuIC8gJ3VuYXZhaWxhYmxlJyBzZW1hbnRpY3MuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBjbGllbnQoKTogUHJvbWlzZTxSZWFkZXJSZWRpcyB8IG51bGw+IHtcbiAgICBpZiAoY2FjaGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNoYXJlZCBlbnYtY29uZmlndXJlZCBpb3JlZGlzIGNvbnN0cnVjdGlvbiAoZXJyb3IgbGlzdGVuZXIgYXR0YWNoZWQsIG51bGxcbiAgICAgIC8vIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCk7IHRoZSByZWFkZXIgc3RheXMgZmFpbC1vcGVuIOKAlCBhIG51bGwgY2xpZW50XG4gICAgICAvLyBqdXN0IGZhbGxzIGJhY2sgdG8gbmF0dXJhbCB0b2tlbiBleHBpcnkuXG4gICAgICBjYWNoZWQgPSBjcmVhdGVFbnZSZWRpc0NsaWVudDxSZWFkZXJSZWRpcz4oJ3Jldm9jYXRpb24tcmVhZGVyJyk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdSZWRpcyB0b2tlbi1yZXZvY2F0aW9uIHJlYWRlciBpbml0aWFsaXplZCcpO1xuICAgICAgICByZWFkeSA9IGNyZWF0ZVJlZGlzUmVhZHlHYXRlKGNhY2hlZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFkeSkgYXdhaXQgcmVhZHkoKTtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXRDdXJyZW50VmVyc2lvbih1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgICAgY29uc3QgcmVkaXMgPSBhd2FpdCBjbGllbnQoKTtcbiAgICAgIGlmICghcmVkaXMpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXMpLmdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZCk7XG4gICAgfSxcbiAgICBhc3luYyBnZXRTZXNzaW9uUmV2b2NhdGlvbihqdGk6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvblJldm9jYXRpb25TdGF0ZT4ge1xuICAgICAgY29uc3QgcmVkaXMgPSBhd2FpdCBjbGllbnQoKTtcbiAgICAgIC8vIE5vIFJlZGlzIGNvbmZpZ3VyZWQg4oeSIHRoZXJlIGlzIG5vIHdheSB0byBsZWFybiBhIHNlc3Npb24gd2FzIGVuZGVkLCBzb1xuICAgICAgLy8gYW4gaW1wZXJzb25hdGlvbiB0b2tlbiBjYW4ndCBiZSB0cnVzdGVkLiBFdmVyeSByZWFsIGRlcGxveW1lbnQgcnVucyBSZWRpc1xuICAgICAgLy8gKHRoZSBidWlsZCBxdWV1ZSBuZWVkcyBpdCksIHNvIHRoaXMgb25seSBiaXRlcyBhIG1pc2NvbmZpZ3VyZWQgc2VydmljZS5cbiAgICAgIGlmICghcmVkaXMpIHtcbiAgICAgICAgZW1pdENvdW50ZXIoJ3Nlc3Npb25fcmV2b2NhdGlvbl91bmF2YWlsYWJsZV90b3RhbCcsIHsgcmVhc29uOiAnbm90LWNvbmZpZ3VyZWQnIH0pO1xuICAgICAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVhdGVSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKHJlZGlzKS5nZXRTZXNzaW9uUmV2b2NhdGlvbiEoanRpKTtcbiAgICB9LFxuICAgIGFzeW5jIGlzQ3JlZGVudGlhbFJldm9rZWQocmVmczogQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCByZWRpcyA9IGF3YWl0IGNsaWVudCgpO1xuICAgICAgaWYgKCFyZWRpcykgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXMpLmlzQ3JlZGVudGlhbFJldm9rZWQhKHJlZnMpO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUHVibGlzaCBhIHVzZXIncyBjdXJyZW50IGB0b2tlblZlcnNpb25gIHNvIHRoZSBzdGF0ZWxlc3Mgc2VydmljZXMgc2VlIHRoZVxuICogcmV2b2NhdGlvbiBpbW1lZGlhdGVseSAocGxhdGZvcm0gc2lkZSkuIEJlc3QtZWZmb3J0IOKAlCBuZXZlciB0aHJvd3M7IGEgZmFpbHVyZVxuICoganVzdCBtZWFucyB0aGUgc2VydmljZXMgZmFsbCBiYWNrIHRvIG5hdHVyYWwgdG9rZW4gZXhwaXJ5IGZvciB0aGlzIGNoYW5nZS5cbiAqXG4gKiBUaGUgd3JpdGUgaXMgYW4gYXRvbWljIHNldC1pZi1ncmVhdGVyICh7QGxpbmsgU0VUX0lGX0dSRUFURVJfTFVBfSksIHNvIGFuXG4gKiBvdXQtb2Ytb3JkZXIgcHVibGlzaCBjYW4gbmV2ZXIgbG93ZXIgdGhlIHN0b3JlZCB2ZXJzaW9uLlxuICpcbiAqIFRoZSBrZXkgaXMgd3JpdHRlbiB3aXRoIGEgVFRMIGVxdWFsIHRvIHRoZSBhY2Nlc3MtdG9rZW4gbGlmZXRpbWU6IGFueSB0b2tlblxuICogdGhhdCBjb3VsZCBzdGlsbCBjYXJyeSBhbiBvbGRlciB2ZXJzaW9uIGhhcyBleHBpcmVkIGJ5IHRoZSB0aW1lIHRoZSBlbnRyeVxuICogbGFwc2VzLCBzbyBhbiBleHBpcmVkIGVudHJ5IGNhbiBuZXZlciBjYXVzZSBhIGZhbHNlIFwicmV2b2tlZFwiIG5vciBhIG1pc3NlZCBvbmUuXG4gKlxuICogQHBhcmFtIHJlZGlzIC0gdGhlIHBsYXRmb3JtJ3MgUmVkaXMgY2xpZW50XG4gKiBAcGFyYW0gdXNlcklkIC0gdGhlIHVzZXIgd2hvc2Ugc2Vzc2lvbnMgY2hhbmdlZFxuICogQHBhcmFtIHRva2VuVmVyc2lvbiAtIHRoZSB1c2VyJ3MgTkVXIChwb3N0LWluY3JlbWVudCkgdG9rZW5WZXJzaW9uXG4gKiBAcGFyYW0gdHRsU2Vjb25kcyAtIGFjY2Vzcy10b2tlbiBsaWZldGltZSBpbiBzZWNvbmRzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoVG9rZW5SZXZvY2F0aW9uKFxuICByZWRpczogUmVkaXNDYWNoZUNsaWVudCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHRva2VuVmVyc2lvbjogbnVtYmVyLFxuICB0dGxTZWNvbmRzOiBudW1iZXIsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICAvLyBBdG9taWMgc2V0LWlmLWdyZWF0ZXI6IGNvbmN1cnJlbnQgcHVibGlzaGVzIGNhbiBhcnJpdmUgb3V0IG9mIG9yZGVyLCBhbmQgYVxuICAgIC8vIHBsYWluIFNFVCB3b3VsZCBsZXQgdGhlIG9sZGVyIHZlcnNpb24gd2luLiBBIGNsaWVudCB0aGF0IGNhbid0IHJ1biBMdWEgaXNcbiAgICAvLyByZWZ1c2VkIChjYXVnaHQgYmVsb3cpIHJhdGhlciB0aGFuIHdyaXR0ZW4gcmFjaWx5LlxuICAgIGlmICh0eXBlb2YgcmVkaXMuZXZhbCAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdSZWRpcyBjbGllbnQgY2Fubm90IHJ1biBzY3JpcHRzIChldmFsIHVuYXZhaWxhYmxlKScpO1xuICAgIGF3YWl0IHJlZGlzLmV2YWwoU0VUX0lGX0dSRUFURVJfTFVBLCAxLCB0b2tlblJldm9jYXRpb25LZXkodXNlcklkKSwgU3RyaW5nKHRva2VuVmVyc2lvbiksIE1hdGgubWF4KDEsIE1hdGguZmxvb3IodHRsU2Vjb25kcykpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1Rva2VuLXJldm9jYXRpb24gcHVibGlzaCBmYWlsZWQgKHNlcnZpY2VzIGZhbGwgYmFjayB0byB0b2tlbiBleHBpcnkpJywge1xuICAgICAgdXNlcklkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoIHRoYXQgb25lIElNUEVSU09OQVRJT04gc2Vzc2lvbiBoYXMgZW5kZWQsIHNvIGV2ZXJ5IHN0YXRlbGVzcyBzZXJ2aWNlXG4gKiByZWplY3RzIGl0cyB0b2tlbiBvbiB0aGUgbmV4dCByZXF1ZXN0IChwbGF0Zm9ybSBzaWRlKS5cbiAqXG4gKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHB1Ymxpc2ggbGFuZGVkIOKAlCB1bmxpa2UgYHB1Ymxpc2hUb2tlblJldm9jYXRpb25gLCB3aGljaCBpc1xuICogZmlyZS1hbmQtZm9yZ2V0LiBUaGUgY2FsbGVyIG11c3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBwZXJzb24gd2hvIGVuZGVkIHRoZVxuICogc2Vzc2lvbiB0aGF0IGl0IGRpZCBOT1QgZW5kIGV2ZXJ5d2hlcmUsIHJhdGhlciB0aGFuIHJlcG9ydGluZyBzdWNjZXNzIHdoaWxlXG4gKiB0aGUgdG9rZW4gc3RpbGwgd29ya3MgYWdhaW5zdCBvdGhlciBzZXJ2aWNlcy5cbiAqXG4gKiBUaGUgZW50cnkgZXhwaXJlcyB3aXRoIHRoZSBzZXNzaW9uOiBvbmNlIHRoZSB0b2tlbiBpdHNlbGYgY2FuIG5vIGxvbmdlciBiZVxuICogdXNlZCwgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHJldm9rZSwgc28gdGhlIGtleSBjbGVhbnMgaXRzZWxmIHVwLlxuICpcbiAqIEBwYXJhbSB0dGxNcyAtIHRpbWUgcmVtYWluaW5nIG9uIHRoZSBzZXNzaW9uJ3MgdG9rZW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hTZXNzaW9uUmV2b2NhdGlvbihcbiAgcmVkaXM6IFJlZGlzQ2FjaGVDbGllbnQsXG4gIGp0aTogc3RyaW5nLFxuICB0dGxNczogbnVtYmVyLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVkaXMuc2V0KHNlc3Npb25SZXZvY2F0aW9uS2V5KGp0aSksICcxJywgJ1BYJywgTWF0aC5tYXgoMTAwMCwgTWF0aC5jZWlsKHR0bE1zKSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybignU2Vzc2lvbi1yZXZvY2F0aW9uIHB1Ymxpc2ggZmFpbGVkIChvdGhlciBzZXJ2aWNlcyB3aWxsIGhvbm91ciB0aGUgdG9rZW4gdW50aWwgaXQgZXhwaXJlcyknLCB7XG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUHVibGlzaCB0aGF0IE9ORSBjcmVkZW50aWFsIOKAlCBhIHNlc3Npb24gc2xvdCAoYHNpZGApIG9yIGFuIGFjY2VzcyBrZXlcbiAqIChga2V5YCkg4oCUIGhhcyBiZWVuIHJldm9rZWQsIHNvIGV2ZXJ5IHNlcnZpY2UgcmVqZWN0cyB0aGUgdG9rZW5zIHRoYXQgbmFtZSBpdFxuICogb24gdGhlIG5leHQgcmVxdWVzdCAocGxhdGZvcm0gc2lkZSkuXG4gKlxuICogYHR0bFNlY29uZHNgIE1VU1QgYmUgYXQgbGVhc3QgdGhlIGxvbmdlc3QgbGlmZXRpbWUgb2YgYW55IHRva2VuIHRoYXQgY2FuXG4gKiBjYXJyeSB0aGlzIGlkIChhbiBhY2Nlc3MgdG9rZW4gbWludGVkIGZyb20gdGhlIHNsb3QsIGFuIGV4Y2hhbmdlZCBrZXkgdG9rZW4sXG4gKiBvciBhIHRva2VuIGRlcml2ZWQgZnJvbSBvbmUpOiB0aGUgZW50cnkgbGFwc2luZyBmaXJzdCB3b3VsZCByZWFkIGFzIFwibm90XG4gKiByZXZva2VkXCIgd2hpbGUgc3VjaCBhIHRva2VuIGlzIHN0aWxsIGFsaXZlLlxuICpcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHVibGlzaCBsYW5kZWQsIHNvIHRoZSBjYWxsZXIgY2FuIHJlcG9ydCBhIHJldm9jYXRpb25cbiAqIHRoYXQgZGlkIG5vdCByZWFjaCB0aGUgb3RoZXIgc2VydmljZXMgaW5zdGVhZCBvZiBjbGFpbWluZyBzdWNjZXNzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaENyZWRlbnRpYWxSZXZvY2F0aW9uKFxuICByZWRpczogUmVkaXNDYWNoZUNsaWVudCxcbiAga2luZDogQ3JlZGVudGlhbEtpbmQsXG4gIGlkOiBzdHJpbmcsXG4gIHR0bFNlY29uZHM6IG51bWJlcixcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IHJlZGlzLnNldChjcmVkZW50aWFsUmV2b2NhdGlvbktleShraW5kLCBpZCksICcxJywgJ0VYJywgTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHR0bFNlY29uZHMpKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdDcmVkZW50aWFsLXJldm9jYXRpb24gcHVibGlzaCBmYWlsZWQgKHNlcnZpY2VzIGhvbm91ciB0aGUgY3JlZGVudGlhbCB1bnRpbCBpdHMgdG9rZW5zIGV4cGlyZSknLCB7XG4gICAgICBraW5kLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmV2b2NhdGlvbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3Rva2VuLXJldm9jYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUd0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFaEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsYUFBYSxDQUFDO0FBRXpELHdDQUF3QztBQUN4QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBYztJQUMvQyxPQUFPLEdBQUcsMkJBQTJCLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxjQUFjLENBQUM7QUFFNUQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFXO0lBQzlDLE9BQU8sR0FBRyw2QkFBNkIsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHO0lBQzFDLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLEdBQUcsRUFBRSxhQUFhO0NBQ1YsQ0FBQztBQUtYLGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBb0IsRUFBRSxFQUFVO0lBQ3RFLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFF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QUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxLQUF1QixFQUN2QixJQUFvQixFQUNwQixFQUFVLEVBQ1YsVUFBa0I7SUFFbEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLCtGQUErRixFQUFFO1lBQzNHLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB0eXBlIHsgUmVkaXNDYWNoZUNsaWVudCB9IGZyb20gJy4vY2FjaGUtc2VydmljZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbnZSZWRpc0NsaWVudCwgY3JlYXRlUmVkaXNSZWFkeUdhdGUsIHR5cGUgUmVhZHlBd2FyZVJlZGlzIH0gZnJvbSAnLi9lbnYtcmVkaXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDcmVkZW50aWFsUmV2b2NhdGlvblJlZnMsIFNlc3Npb25SZXZvY2F0aW9uU3RhdGUsIFRva2VuUmV2b2NhdGlvblN0b3JlIH0gZnJvbSAnLi4vbWlkZGxld2FyZS9yZXZvY2F0aW9uLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCd0b2tlbi1yZXZvY2F0aW9uJyk7XG5cbi8qKlxuICogUmVkaXMga2V5IG5hbWVzcGFjZSBmb3IgdGhlIHBlci11c2VyIGN1cnJlbnQgYHRva2VuVmVyc2lvbmAuIFRoZSBwbGF0Zm9ybVxuICogUFVCTElTSEVTIHRvIHRoaXMga2V5IG9uIGV2ZXJ5IHByaXZpbGVnZSBjaGFuZ2U7IHRoZSBzdGF0ZWxlc3Mgc2VydmljZXMgUkVBRFxuICogaXQgaW4gYHJlcXVpcmVBdXRoYCAodmlhIHtAbGluayBjcmVhdGVSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlfSkgdG8gcmVqZWN0XG4gKiB0b2tlbnMgbWludGVkIGJlZm9yZSB0aGF0IGNoYW5nZS4gUHVibGlzaGVyIGFuZCByZWFkZXJzIE1VU1Qgc2hhcmUgdGhpcyBleGFjdFxuICogcHJlZml4IOKAlCBoZW5jZSBib3RoIGhlbHBlcnMgbGl2ZSBoZXJlLCBpbiBvbmUgcGxhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT0tFTl9SRVZPQ0FUSU9OX0tFWV9QUkVGSVggPSAnYXV0aHJldjp0djonO1xuXG4vKiogVGhlIHJldm9jYXRpb24ga2V5IGZvciBhIHVzZXIgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5SZXZvY2F0aW9uS2V5KHVzZXJJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1RPS0VOX1JFVk9DQVRJT05fS0VZX1BSRUZJWH0ke3VzZXJJZH1gO1xufVxuXG4vKipcbiAqIFJlZGlzIGtleSBuYW1lc3BhY2UgZm9yIGVuZGVkIElNUEVSU09OQVRJT04gc2Vzc2lvbnMsIGJ5IHRva2VuIGBqdGlgLiBTYW1lXG4gKiBwdWJsaXNoL3JlYWQgc3BsaXQgYXMgdGhlIHRva2VuVmVyc2lvbiBrZXlzIGFib3ZlLCBhbmQga2VwdCBiZXNpZGUgdGhlbSBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogcHVibGlzaGVyIGFuZCByZWFkZXJzIG11c3QgYWdyZWUgb24gdGhpcyBleGFjdCBwcmVmaXguXG4gKi9cbmV4cG9ydCBjb25zdCBTRVNTSU9OX1JFVk9DQVRJT05fS0VZX1BSRUZJWCA9ICdhdXRocmV2Omp0aTonO1xuXG4vKiogVGhlIHJldm9jYXRpb24ga2V5IGZvciBvbmUgc2Vzc2lvbidzIHRva2VuIGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlc3Npb25SZXZvY2F0aW9uS2V5KGp0aTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NFU1NJT05fUkVWT0NBVElPTl9LRVlfUFJFRklYfSR7anRpfWA7XG59XG5cbi8qKlxuICogUmVkaXMga2V5IG5hbWVzcGFjZXMgZm9yIHJldm9raW5nIE9ORSBjcmVkZW50aWFsIHJhdGhlciB0aGFuIGEgd2hvbGUgdXNlcjpcbiAqXG4gKiAtIGByZXZva2U6c2lkOjxzaWQ+YCAgIOKAlCBvbmUgcmVmcmVzaC1zZXNzaW9uIHNsb3QgKGEgc2lnbmVkLW91dCBkZXZpY2UsIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXZva2VkIG1hY2hpbmUgc2Vzc2lvbikuIFJlamVjdHMgZXZlcnkgYWNjZXNzIHRva2VuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hvc2UgYHNpZGAgY2xhaW0gbmFtZXMgaXQuXG4gKiAtIGByZXZva2U6a2V5OjxrZXlJZD5gIOKAlCBvbmUgYWNjZXNzIGtleSAoUEFUIG9yIHNlcnZpY2UtYWNjb3VudCBrZXkpLiBSZWplY3RzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGtleSdzIGV4Y2hhbmdlZCB0b2tlbiAoYHRva2VuX3VzZTogJ2FwaV9rZXknYCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBganRpYCA9IGtleSBpZCkgYW5kIGFueXRoaW5nIGRlcml2ZWQgZnJvbSBpdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChgcGFyZW50S2V5SWRgKS5cbiAqXG4gKiBQbGF0Zm9ybSBQVUJMSVNIRVMgdGhlc2UgKHtAbGluayBwdWJsaXNoQ3JlZGVudGlhbFJldm9jYXRpb259KTsgZXZlcnkgc2VydmljZVxuICogUkVBRFMgdGhlbSBpbiBgcmVxdWlyZUF1dGhgLiBQcmVzZW5jZSBpcyB0aGUgd2hvbGUgc2lnbmFsIOKAlCB0aGUgdmFsdWUgaXMgYDFgLlxuICovXG5leHBvcnQgY29uc3QgQ1JFREVOVElBTF9SRVZPQ0FUSU9OX1BSRUZJWCA9IHtcbiAgc2lkOiAncmV2b2tlOnNpZDonLFxuICBrZXk6ICdyZXZva2U6a2V5OicsXG59IGFzIGNvbnN0O1xuXG4vKiogV2hpY2ggY3JlZGVudGlhbCBhIHtAbGluayBjcmVkZW50aWFsUmV2b2NhdGlvbktleX0gbmFtZXMuICovXG5leHBvcnQgdHlwZSBDcmVkZW50aWFsS2luZCA9IGtleW9mIHR5cGVvZiBDUkVERU5USUFMX1JFVk9DQVRJT05fUFJFRklYO1xuXG4vKiogVGhlIHJldm9jYXRpb24ga2V5IGZvciBvbmUgc2Vzc2lvbiBzbG90IChgc2lkYCkgb3Igb25lIGFjY2VzcyBrZXkgKGBrZXlgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsUmV2b2NhdGlvbktleShraW5kOiBDcmVkZW50aWFsS2luZCwgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtDUkVERU5USUFMX1JFVk9DQVRJT05fUFJFRklYW2tpbmRdfSR7aWR9YDtcbn1cblxuLyoqXG4gKiBBdG9taWMgXCJzZXQgaWYgZ3JlYXRlclwiIGZvciB0aGUgcGVyLXVzZXIgdG9rZW5WZXJzaW9uLiBBIHBsYWluIFNFVCBsZXQgdHdvXG4gKiBjb25jdXJyZW50IHB1Ymxpc2hlcyBsYW5kIG91dCBvZiBvcmRlciDigJQgYW4gb2xkZXIgdmVyc2lvbiBvdmVyd3JpdGluZyBhIG5ld2VyXG4gKiBvbmUgc2lsZW50bHkgVU4tcmV2b2tlZCBldmVyeSB0b2tlbiBiZXR3ZWVuIHRoZW0uIFRoZSBzY3JpcHQgb25seSBldmVyIHJhaXNlc1xuICogdGhlIHN0b3JlZCB2ZXJzaW9uLCBhbmQgb25seSBldmVyIGxlbmd0aGVucyB0aGUgZW50cnkncyBUVEwuXG4gKlxuICogS0VZU1sxXSA9IHJldm9jYXRpb24ga2V5OyBBUkdWWzFdID0gdmVyc2lvbjsgQVJHVlsyXSA9IHR0bCBzZWNvbmRzLlxuICogUmV0dXJucyAxIHdoZW4gaXQgd3JvdGUsIDAgd2hlbiBhbiBlcXVhbC1vci1uZXdlciB2ZXJzaW9uIHdhcyBhbHJlYWR5IHRoZXJlLlxuICovXG5leHBvcnQgY29uc3QgU0VUX0lGX0dSRUFURVJfTFVBID0gYFxubG9jYWwgY3VyID0gdG9udW1iZXIocmVkaXMuY2FsbCgnR0VUJywgS0VZU1sxXSkpXG5sb2NhbCB2ID0gdG9udW1iZXIoQVJHVlsxXSlcbmxvY2FsIHR0bCA9IHRvbnVtYmVyKEFSR1ZbMl0pXG5pZiBjdXIgYW5kIGN1ciA+PSB2IHRoZW5cbiAgaWYgcmVkaXMuY2FsbCgnVFRMJywgS0VZU1sxXSkgPCB0dGwgdGhlbiByZWRpcy5jYWxsKCdFWFBJUkUnLCBLRVlTWzFdLCB0dGwpIGVuZFxuICByZXR1cm4gMFxuZW5kXG5yZWRpcy5jYWxsKCdTRVQnLCBLRVlTWzFdLCBBUkdWWzFdLCAnRVgnLCB0dGwpXG5yZXR1cm4gMVxuYDtcblxuLyoqXG4gKiBCdWlsZCBhIHtAbGluayBUb2tlblJldm9jYXRpb25TdG9yZX0gYmFja2VkIGJ5IGEgUmVkaXMgY2xpZW50LCBmb3IgYSBzdGF0ZWxlc3NcbiAqIHNlcnZpY2UgdG8gcmVnaXN0ZXIgdmlhIGBzZXRUb2tlblJldm9jYXRpb25TdG9yZWAuIFJlYWRzIHRoZSBjdXJyZW50XG4gKiBgdG9rZW5WZXJzaW9uYCB0aGUgcGxhdGZvcm0gcHVibGlzaGVkIGZvciB0aGUgdXNlci5cbiAqXG4gKiBGYWlsLW9wZW4gYnkgY29udHJhY3Q6IGEgbWlzcywgYSBwYXJzZSBmYWlsdXJlLCBvciBhIFJlZGlzIGVycm9yIGFsbCB5aWVsZFxuICogYG51bGxgICjigJQgYHJlcXVpcmVBdXRoYCB0cmVhdHMgdGhhdCBhcyBcIm5vIGtub3duIHJldm9jYXRpb25cIiksIHNvIGEgUmVkaXNcbiAqIG91dGFnZSBkZWdyYWRlcyB0byB0aGUgcHJlLWV4aXN0aW5nIGJlaGF2aW91ciByYXRoZXIgdGhhbiBsb2NraW5nIHVzZXJzIG91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXM6IFJlZGlzQ2FjaGVDbGllbnQpOiBUb2tlblJldm9jYXRpb25TdG9yZSB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0Q3VycmVudFZlcnNpb24odXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IHJlZGlzLmdldCh0b2tlblJldm9jYXRpb25LZXkodXNlcklkKSk7XG4gICAgICAgIGlmIChyYXcgPT09IG51bGwgfHwgcmF3ID09PSB1bmRlZmluZWQgfHwgcmF3LnRyaW0oKSA9PT0gJycpIHJldHVybiBudWxsO1xuICAgICAgICAvLyBTdHJpY3QgaW50ZWdlciBwYXJzZTogYE51bWJlcmAgKHVubGlrZSBgcGFyc2VJbnRgKSByZWplY3RzIHRyYWlsaW5nXG4gICAgICAgIC8vIGdhcmJhZ2UgKFwiNWFiY1wiIOKGkiBOYU4pLCBzbyBhIGNvcnJ1cHRlZCBlbnRyeSBmYWlscyBvcGVuIChudWxsIOKGkiBcIm5vdFxuICAgICAgICAvLyByZXZva2VkXCIpIHJhdGhlciB0aGFuIGJlaW5nIHJlYWQgYXMgYSBib2d1cyB2ZXJzaW9uLiBUaGUgZW1wdHktc3RyaW5nXG4gICAgICAgIC8vIGd1YXJkIGFib3ZlIG1hdHRlcnMgYmVjYXVzZSBgTnVtYmVyKCcnKWAgaXMgMCwgbm90IE5hTi5cbiAgICAgICAgY29uc3QgbiA9IE51bWJlcihyYXcpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihuKSA/IG4gOiBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIFJlZGlzIHdhcyByZWFjaGFibGUgZW5vdWdoIHRvIHRyeSBidXQgdGhlIHJlYWQgZXJyb3JlZCDigJQgdGhpcyBpcyBhXG4gICAgICAgIC8vIERFR1JBREFUSU9OOiB3aGlsZSBpdCBwZXJzaXN0cywgZm9yY2VkIGxvZ291dHMgLyBwcml2aWxlZ2UgcmV2b2NhdGlvbnNcbiAgICAgICAgLy8gc2lsZW50bHkgc3RvcCB0YWtpbmcgZWZmZWN0IHVudGlsIG5hdHVyYWwgdG9rZW4gZXhwaXJ5LiBFbWl0IGEgY291bnRlclxuICAgICAgICAvLyBzbyBgVG9rZW5SZXZvY2F0aW9uRmFpbGluZ09wZW5gIGNhbiBhbGVydCBvbiBhIFNVU1RBSU5FRCByYXRlIChtaXJyb3JzXG4gICAgICAgIC8vIHRoZSBxdW90YV9mYWlsX29wZW5fdG90YWwgcGF0dGVybikuIE5vdCBlbWl0dGVkIGZvciB0aGUgXCJSZWRpcyBub3RcbiAgICAgICAgLy8gY29uZmlndXJlZFwiIHBhdGggKGNyZWF0ZUVudlJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUg4oaSIG51bGwgY2xpZW50KSxcbiAgICAgICAgLy8gd2hpY2ggaXMgYSBkZWxpYmVyYXRlIG9wdC1vdXQsIG5vdCBhIGRlZ3JhZGF0aW9uLlxuICAgICAgICBlbWl0Q291bnRlcigndG9rZW5fcmV2b2NhdGlvbl9mYWlsX29wZW5fdG90YWwnLCB7IHJlYXNvbjogJ3JlYWQtZXJyb3InIH0pO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1Rva2VuLXJldm9jYXRpb24gcmVhZCBmYWlsZWQgKGZhaWwtb3BlbiknLCB7XG4gICAgICAgICAgdXNlcklkLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGdldFNlc3Npb25SZXZvY2F0aW9uKGp0aTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uUmV2b2NhdGlvblN0YXRlPiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByYXcgPSBhd2FpdCByZWRpcy5nZXQoc2Vzc2lvblJldm9jYXRpb25LZXkoanRpKSk7XG4gICAgICAgIHJldHVybiByYXcgPT09IG51bGwgfHwgcmF3ID09PSB1bmRlZmluZWQgPyAnbGl2ZScgOiAncmV2b2tlZCc7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gTk9UIGZhaWwtb3BlbiwgdW5saWtlIGdldEN1cnJlbnRWZXJzaW9uIGFib3ZlOiBgdW5hdmFpbGFibGVgIHJlamVjdHNcbiAgICAgICAgLy8gdGhlIGltcGVyc29uYXRpb24gdG9rZW4uIENvdW50ZWQgc28gYSBzdXN0YWluZWQgb3V0YWdlIOKAlCB3aGljaCBzdG9wc1xuICAgICAgICAvLyBzdXBwb3J0IGltcGVyc29uYXRpb24gZXZlcnl3aGVyZSDigJQgaXMgdmlzaWJsZSBhbmQgYWxlcnRhYmxlLlxuICAgICAgICBlbWl0Q291bnRlcignc2Vzc2lvbl9yZXZvY2F0aW9uX3VuYXZhaWxhYmxlX3RvdGFsJywgeyByZWFzb246ICdyZWFkLWVycm9yJyB9KTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTZXNzaW9uLXJldm9jYXRpb24gcmVhZCBmYWlsZWQgKHJlamVjdGluZyBpbXBlcnNvbmF0aW9uIHRva2VuKScsIHtcbiAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGlzQ3JlZGVudGlhbFJldm9rZWQocmVmczogQ3JlZGVudGlhbFJldm9jYXRpb25SZWZzKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBjb25zdCBrZXlzID0gW1xuICAgICAgICAuLi4ocmVmcy5zaWQgPyBbY3JlZGVudGlhbFJldm9jYXRpb25LZXkoJ3NpZCcsIHJlZnMuc2lkKV0gOiBbXSksXG4gICAgICAgIC4uLnJlZnMua2V5SWRzLm1hcCgoaWQpID0+IGNyZWRlbnRpYWxSZXZvY2F0aW9uS2V5KCdrZXknLCBpZCkpLFxuICAgICAgXTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoa2V5cy5tYXAoKGspID0+IHJlZGlzLmdldChrKSkpO1xuICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoKHYpID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGYWlsLW9wZW4sIGxpa2UgZ2V0Q3VycmVudFZlcnNpb246IGEgb25lLWNyZWRlbnRpYWwgcmV2b2NhdGlvbiBpcyB0aGVcbiAgICAgICAgLy8gc2FtZSBjbGFzcyBvZiBzaWduYWwgYXMgYSB0b2tlblZlcnNpb24gYnVtcCwgYW5kIGEgUmVkaXMgb3V0YWdlIG11c3RcbiAgICAgICAgLy8gbm90IGxvY2sgZXZlcnkgc2Vzc2lvbiBvdXQuIENvdW50ZWQgc28gaXQgaXMgYWxlcnRhYmxlLlxuICAgICAgICBlbWl0Q291bnRlcigndG9rZW5fcmV2b2NhdGlvbl9mYWlsX29wZW5fdG90YWwnLCB7IHJlYXNvbjogJ2NyZWRlbnRpYWwtcmVhZC1lcnJvcicgfSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ3JlZGVudGlhbC1yZXZvY2F0aW9uIHJlYWQgZmFpbGVkIChmYWlsLW9wZW4pJywgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEge0BsaW5rIFRva2VuUmV2b2NhdGlvblN0b3JlfSBiYWNrZWQgYnkgYSBSZWRpcyBjbGllbnQgdGhhdCBpcyBsYXppbHlcbiAqIGNvbnN0cnVjdGVkIGZyb20gdGhlIHN0YW5kYXJkIGBSRURJU19VUkxgIG9yIGBSRURJU19TRU5USU5FTFNgIGVudiDigJRcbiAqIGZvciBhIHN0YXRlbGVzcyBzZXJ2aWNlIHRoYXQga2VlcHMgTk8gUmVkaXMgY2xpZW50IG9mIGl0cyBvd24uIFRoZSBjbGllbnQgaXNcbiAqIGJ1aWx0IG9uIGZpcnN0IGBnZXRDdXJyZW50VmVyc2lvbmAgY2FsbCBhbmQgbWVtb2l6ZWQ7IGBpb3JlZGlzYCBpcyBsb2FkZWQgdmlhXG4gKiBhIGd1YXJkZWQgZHluYW1pYyByZXF1aXJlIHNvIG1lcmVseSBpbXBvcnRpbmcgdGhpcyBuZXZlciBicmVha3MgYSBidWlsZC90ZXN0XG4gKiB3aGVyZSBSZWRpcyBpc24ndCBwcmVzZW50LlxuICpcbiAqIEZVTExZIEZBSUwtT1BFTjogbm8gZW52IGNvbmZpZ3VyZWQsIGFuIGlvcmVkaXMgbG9hZCBmYWlsdXJlLCBhIGNvbm5lY3QgZXJyb3IsXG4gKiBvciBhbnkgcmVhZCBmYWlsdXJlIGFsbCByZXNvbHZlIHRvIGBudWxsYCAoXCJubyBrbm93biByZXZvY2F0aW9uXCIpLCBzbyBhXG4gKiBzZXJ2aWNlIGRlZ3JhZGVzIHRvIG5hdHVyYWwgdG9rZW4gZXhwaXJ5IHJhdGhlciB0aGFuIGxvY2tpbmcgdXNlcnMgb3V0LiBBXG4gKiBzZXJ2aWNlIG9wdHMgaW4gd2l0aCBhIHNpbmdsZSBib290IGxpbmU6XG4gKiAgIGBzZXRUb2tlblJldm9jYXRpb25TdG9yZShjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlKCkpO2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudlJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUoKTogVG9rZW5SZXZvY2F0aW9uU3RvcmUge1xuICB0eXBlIFJlYWRlclJlZGlzID0gUmVkaXNDYWNoZUNsaWVudCAmIFJlYWR5QXdhcmVSZWRpcztcbiAgLy8gdW5kZWZpbmVkID0gbm90IHlldCBhdHRlbXB0ZWQ7IG51bGwgPSBhdHRlbXB0ZWQgYW5kIHVuYXZhaWxhYmxlIChzdGF5IG9mZikuXG4gIGxldCBjYWNoZWQ6IFJlYWRlclJlZGlzIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgbGV0IHJlYWR5OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSByZWFkZXIgY2xpZW50LCBidWlsdCBvbiBmaXJzdCB1c2UuIFRoZSBlbnYgY2xpZW50IGhhcyBubyBvZmZsaW5lIHF1ZXVlLFxuICAgKiBzbyBhIEdFVCBiZWZvcmUgdGhlIGZpcnN0IGNvbm5lY3Rpb24gY29tcGxldGVzIGlzIHJlamVjdGVkIOKAlCB3aGljaCBtYWRlIHRoZVxuICAgKiBGSVJTVCBpbXBlcnNvbmF0aW9uIGNoZWNrIG9uIGV2ZXJ5IHBvZCByZWFkICd1bmF2YWlsYWJsZScgKDQwMSkuIFdhaXRcbiAgICogKGJvdW5kZWQsIG5ldmVyIHJlamVjdGluZykgZm9yIHJlYWRpbmVzczsgYSBnZW51aW5lbHkgZG93biBSZWRpcyB0aGVuIGtlZXBzXG4gICAqIHRoZSBleGlzdGluZyBmYWlsLW9wZW4gLyAndW5hdmFpbGFibGUnIHNlbWFudGljcy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIGNsaWVudCgpOiBQcm9taXNlPFJlYWRlclJlZGlzIHwgbnVsbD4ge1xuICAgIGlmIChjYWNoZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU2hhcmVkIGVudi1jb25maWd1cmVkIGlvcmVkaXMgY29uc3RydWN0aW9uIChlcnJvciBsaXN0ZW5lciBhdHRhY2hlZCwgbnVsbFxuICAgICAgLy8gd2hlbiBSZWRpcyBpc24ndCBjb25maWd1cmVkKTsgdGhlIHJlYWRlciBzdGF5cyBmYWlsLW9wZW4g4oCUIGEgbnVsbCBjbGllbnRcbiAgICAgIC8vIGp1c3QgZmFsbHMgYmFjayB0byBuYXR1cmFsIHRva2VuIGV4cGlyeS5cbiAgICAgIGNhY2hlZCA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PFJlYWRlclJlZGlzPigncmV2b2NhdGlvbi1yZWFkZXInKTtcbiAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1JlZGlzIHRva2VuLXJldm9jYXRpb24gcmVhZGVyIGluaXRpYWxpemVkJyk7XG4gICAgICAgIHJlYWR5ID0gY3JlYXRlUmVkaXNSZWFkeUdhdGUoY2FjaGVkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlYWR5KSBhd2FpdCByZWFkeSgpO1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldEN1cnJlbnRWZXJzaW9uKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgICBjb25zdCByZWRpcyA9IGF3YWl0IGNsaWVudCgpO1xuICAgICAgaWYgKCFyZWRpcykgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZShyZWRpcykuZ2V0Q3VycmVudFZlcnNpb24odXNlcklkKTtcbiAgICB9LFxuICAgIGFzeW5jIGdldFNlc3Npb25SZXZvY2F0aW9uKGp0aTogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uUmV2b2NhdGlvblN0YXRlPiB7XG4gICAgICBjb25zdCByZWRpcyA9IGF3YWl0IGNsaWVudCgpO1xuICAgICAgLy8gTm8gUmVkaXMgY29uZmlndXJlZCDih5IgdGhlcmUgaXMgbm8gd2F5IHRvIGxlYXJuIGEgc2Vzc2lvbiB3YXMgZW5kZWQsIHNvXG4gICAgICAvLyBhbiBpbXBlcnNvbmF0aW9uIHRva2VuIGNhbid0IGJlIHRydXN0ZWQuIEV2ZXJ5IHJlYWwgZGVwbG95bWVudCBydW5zIFJlZGlzXG4gICAgICAvLyAodGhlIGJ1aWxkIHF1ZXVlIG5lZWRzIGl0KSwgc28gdGhpcyBvbmx5IGJpdGVzIGEgbWlzY29uZmlndXJlZCBzZXJ2aWNlLlxuICAgICAgaWYgKCFyZWRpcykge1xuICAgICAgICBlbWl0Q291bnRlcignc2Vzc2lvbl9yZXZvY2F0aW9uX3VuYXZhaWxhYmxlX3RvdGFsJywgeyByZWFzb246ICdub3QtY29uZmlndXJlZCcgfSk7XG4gICAgICAgIHJldHVybiAndW5hdmFpbGFibGUnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUocmVkaXMpLmdldFNlc3Npb25SZXZvY2F0aW9uIShqdGkpO1xuICAgIH0sXG4gICAgYXN5bmMgaXNDcmVkZW50aWFsUmV2b2tlZChyZWZzOiBDcmVkZW50aWFsUmV2b2NhdGlvblJlZnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgIGNvbnN0IHJlZGlzID0gYXdhaXQgY2xpZW50KCk7XG4gICAgICBpZiAoIXJlZGlzKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZShyZWRpcykuaXNDcmVkZW50aWFsUmV2b2tlZCEocmVmcyk7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBQdWJsaXNoIGEgdXNlcidzIGN1cnJlbnQgYHRva2VuVmVyc2lvbmAgc28gdGhlIHN0YXRlbGVzcyBzZXJ2aWNlcyBzZWUgdGhlXG4gKiByZXZvY2F0aW9uIGltbWVkaWF0ZWx5IChwbGF0Zm9ybSBzaWRlKS4gQmVzdC1lZmZvcnQg4oCUIG5ldmVyIHRocm93czsgYSBmYWlsdXJlXG4gKiBqdXN0IG1lYW5zIHRoZSBzZXJ2aWNlcyBmYWxsIGJhY2sgdG8gbmF0dXJhbCB0b2tlbiBleHBpcnkgZm9yIHRoaXMgY2hhbmdlLlxuICpcbiAqIFRoZSB3cml0ZSBpcyBhbiBhdG9taWMgc2V0LWlmLWdyZWF0ZXIgKHtAbGluayBTRVRfSUZfR1JFQVRFUl9MVUF9KSwgc28gYW5cbiAqIG91dC1vZi1vcmRlciBwdWJsaXNoIGNhbiBuZXZlciBsb3dlciB0aGUgc3RvcmVkIHZlcnNpb24uXG4gKlxuICogVGhlIGtleSBpcyB3cml0dGVuIHdpdGggYSBUVEwgZXF1YWwgdG8gdGhlIGFjY2Vzcy10b2tlbiBsaWZldGltZTogYW55IHRva2VuXG4gKiB0aGF0IGNvdWxkIHN0aWxsIGNhcnJ5IGFuIG9sZGVyIHZlcnNpb24gaGFzIGV4cGlyZWQgYnkgdGhlIHRpbWUgdGhlIGVudHJ5XG4gKiBsYXBzZXMsIHNvIGFuIGV4cGlyZWQgZW50cnkgY2FuIG5ldmVyIGNhdXNlIGEgZmFsc2UgXCJyZXZva2VkXCIgbm9yIGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gcmVkaXMgLSB0aGUgcGxhdGZvcm0ncyBSZWRpcyBjbGllbnRcbiAqIEBwYXJhbSB1c2VySWQgLSB0aGUgdXNlciB3aG9zZSBzZXNzaW9ucyBjaGFuZ2VkXG4gKiBAcGFyYW0gdG9rZW5WZXJzaW9uIC0gdGhlIHVzZXIncyBORVcgKHBvc3QtaW5jcmVtZW50KSB0b2tlblZlcnNpb25cbiAqIEBwYXJhbSB0dGxTZWNvbmRzIC0gYWNjZXNzLXRva2VuIGxpZmV0aW1lIGluIHNlY29uZHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1Ymxpc2hUb2tlblJldm9jYXRpb24oXG4gIHJlZGlzOiBSZWRpc0NhY2hlQ2xpZW50LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgdG9rZW5WZXJzaW9uOiBudW1iZXIsXG4gIHR0bFNlY29uZHM6IG51bWJlcixcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIC8vIEF0b21pYyBzZXQtaWYtZ3JlYXRlcjogY29uY3VycmVudCBwdWJsaXNoZXMgY2FuIGFycml2ZSBvdXQgb2Ygb3JkZXIsIGFuZCBhXG4gICAgLy8gcGxhaW4gU0VUIHdvdWxkIGxldCB0aGUgb2xkZXIgdmVyc2lvbiB3aW4uIEEgY2xpZW50IHRoYXQgY2FuJ3QgcnVuIEx1YSBpc1xuICAgIC8vIHJlZnVzZWQgKGNhdWdodCBiZWxvdykgcmF0aGVyIHRoYW4gd3JpdHRlbiByYWNpbHkuXG4gICAgaWYgKHR5cGVvZiByZWRpcy5ldmFsICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZGlzIGNsaWVudCBjYW5ub3QgcnVuIHNjcmlwdHMgKGV2YWwgdW5hdmFpbGFibGUpJyk7XG4gICAgYXdhaXQgcmVkaXMuZXZhbChTRVRfSUZfR1JFQVRFUl9MVUEsIDEsIHRva2VuUmV2b2NhdGlvbktleSh1c2VySWQpLCBTdHJpbmcodG9rZW5WZXJzaW9uKSwgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcih0dGxTZWNvbmRzKSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybignVG9rZW4tcmV2b2NhdGlvbiBwdWJsaXNoIGZhaWxlZCAoc2VydmljZXMgZmFsbCBiYWNrIHRvIHRva2VuIGV4cGlyeSknLCB7XG4gICAgICB1c2VySWQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFB1Ymxpc2ggdGhhdCBvbmUgSU1QRVJTT05BVElPTiBzZXNzaW9uIGhhcyBlbmRlZCwgc28gZXZlcnkgc3RhdGVsZXNzIHNlcnZpY2VcbiAqIHJlamVjdHMgaXRzIHRva2VuIG9uIHRoZSBuZXh0IHJlcXVlc3QgKHBsYXRmb3JtIHNpZGUpLlxuICpcbiAqIFJldHVybnMgd2hldGhlciB0aGUgcHVibGlzaCBsYW5kZWQg4oCUIHVubGlrZSBgcHVibGlzaFRva2VuUmV2b2NhdGlvbmAsIHdoaWNoIGlzXG4gKiBmaXJlLWFuZC1mb3JnZXQuIFRoZSBjYWxsZXIgbXVzdCBiZSBhYmxlIHRvIHRlbGwgdGhlIHBlcnNvbiB3aG8gZW5kZWQgdGhlXG4gKiBzZXNzaW9uIHRoYXQgaXQgZGlkIE5PVCBlbmQgZXZlcnl3aGVyZSwgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIHN1Y2Nlc3Mgd2hpbGVcbiAqIHRoZSB0b2tlbiBzdGlsbCB3b3JrcyBhZ2FpbnN0IG90aGVyIHNlcnZpY2VzLlxuICpcbiAqIFRoZSBlbnRyeSBleHBpcmVzIHdpdGggdGhlIHNlc3Npb246IG9uY2UgdGhlIHRva2VuIGl0c2VsZiBjYW4gbm8gbG9uZ2VyIGJlXG4gKiB1c2VkLCB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gcmV2b2tlLCBzbyB0aGUga2V5IGNsZWFucyBpdHNlbGYgdXAuXG4gKlxuICogQHBhcmFtIHR0bE1zIC0gdGltZSByZW1haW5pbmcgb24gdGhlIHNlc3Npb24ncyB0b2tlblxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHVibGlzaFNlc3Npb25SZXZvY2F0aW9uKFxuICByZWRpczogUmVkaXNDYWNoZUNsaWVudCxcbiAganRpOiBzdHJpbmcsXG4gIHR0bE1zOiBudW1iZXIsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCByZWRpcy5zZXQoc2Vzc2lvblJldm9jYXRpb25LZXkoanRpKSwgJzEnLCAnUFgnLCBNYXRoLm1heCgxMDAwLCBNYXRoLmNlaWwodHRsTXMpKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdTZXNzaW9uLXJldm9jYXRpb24gcHVibGlzaCBmYWlsZWQgKG90aGVyIHNlcnZpY2VzIHdpbGwgaG9ub3VyIHRoZSB0b2tlbiB1bnRpbCBpdCBleHBpcmVzKScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoIHRoYXQgT05FIGNyZWRlbnRpYWwg4oCUIGEgc2Vzc2lvbiBzbG90IChgc2lkYCkgb3IgYW4gYWNjZXNzIGtleVxuICogKGBrZXlgKSDigJQgaGFzIGJlZW4gcmV2b2tlZCwgc28gZXZlcnkgc2VydmljZSByZWplY3RzIHRoZSB0b2tlbnMgdGhhdCBuYW1lIGl0XG4gKiBvbiB0aGUgbmV4dCByZXF1ZXN0IChwbGF0Zm9ybSBzaWRlKS5cbiAqXG4gKiBgdHRsU2Vjb25kc2AgTVVTVCBiZSBhdCBsZWFzdCB0aGUgbG9uZ2VzdCBsaWZldGltZSBvZiBhbnkgdG9rZW4gdGhhdCBjYW5cbiAqIGNhcnJ5IHRoaXMgaWQgKGFuIGFjY2VzcyB0b2tlbiBtaW50ZWQgZnJvbSB0aGUgc2xvdCwgYW4gZXhjaGFuZ2VkIGtleSB0b2tlbixcbiAqIG9yIGEgdG9rZW4gZGVyaXZlZCBmcm9tIG9uZSk6IHRoZSBlbnRyeSBsYXBzaW5nIGZpcnN0IHdvdWxkIHJlYWQgYXMgXCJub3RcbiAqIHJldm9rZWRcIiB3aGlsZSBzdWNoIGEgdG9rZW4gaXMgc3RpbGwgYWxpdmUuXG4gKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBwdWJsaXNoIGxhbmRlZCwgc28gdGhlIGNhbGxlciBjYW4gcmVwb3J0IGEgcmV2b2NhdGlvblxuICogdGhhdCBkaWQgbm90IHJlYWNoIHRoZSBvdGhlciBzZXJ2aWNlcyBpbnN0ZWFkIG9mIGNsYWltaW5nIHN1Y2Nlc3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdWJsaXNoQ3JlZGVudGlhbFJldm9jYXRpb24oXG4gIHJlZGlzOiBSZWRpc0NhY2hlQ2xpZW50LFxuICBraW5kOiBDcmVkZW50aWFsS2luZCxcbiAgaWQ6IHN0cmluZyxcbiAgdHRsU2Vjb25kczogbnVtYmVyLFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVkaXMuc2V0KGNyZWRlbnRpYWxSZXZvY2F0aW9uS2V5KGtpbmQsIGlkKSwgJzEnLCAnRVgnLCBNYXRoLm1heCgxLCBNYXRoLmNlaWwodHRsU2Vjb25kcykpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0NyZWRlbnRpYWwtcmV2b2NhdGlvbiBwdWJsaXNoIGZhaWxlZCAoc2VydmljZXMgaG9ub3VyIHRoZSBjcmVkZW50aWFsIHVudGlsIGl0cyB0b2tlbnMgZXhwaXJlKScsIHtcbiAgICAgIGtpbmQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
@@ -40,6 +40,17 @@ export declare function scanStaleHours(): number;
40
40
  export interface ScannedRecord extends PluginImageRow {
41
41
  name: string;
42
42
  version: string;
43
+ /**
44
+ * The org that OWNS this plugin/listing — NOT the consuming org on
45
+ * {@link VersionVulnInput}, which is whoever is asking. Vulnerability waivers
46
+ * are the operator's and are system-org-only, so without this the module
47
+ * could not apply them at all: a Critical the operator had waived still
48
+ * reported as an `error` to every tenant resolving the version, long after it
49
+ * stopped blocking the build and the listing. Optional because most callers
50
+ * have no owner to hand (a tenant's own row is its own owner) and absent means
51
+ * "no waiver applies", which is the safe direction.
52
+ */
53
+ ownerOrgId?: string | null;
43
54
  scannedAt?: Date | string | null;
44
55
  scanSummary?: unknown;
45
56
  scanFlaggedAt?: Date | string | null;