@pipeline-builder/api-core 5.2.6 → 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 +1 -1
  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
@@ -263,4 +263,4 @@ export async function incrWindow(redis, key, windowMs) {
263
263
  const n = await redis.eval(INCR_WINDOW_SCRIPT, 1, key, Math.max(1, Math.ceil(windowMs)));
264
264
  return Number(n);
265
265
  }
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXJlZGlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Vudi1yZWRpcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSCxvRUFBb0U7QUFDcEUsTUFBTSxPQUFPLGdCQUFpQixTQUFRLEtBQUs7SUFDekMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBaUJEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEdBQXVCO0lBQ3BELElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3ZFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENB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IEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSAnbW9kdWxlJztcblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdlbnYtcmVkaXMnKTtcblxuLyoqXG4gKiBUaGUgT05FIHBsYWNlIFJlZGlzIGNvbm5lY3Rpb24gc2V0dGluZ3MgYXJlIHJlYWQgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gKlxuICogVHdvIHNoYXBlcywgZXhhY3RseSBvbmUgb2Ygd2hpY2ggbWF5IGJlIHNldDpcbiAqXG4gKiAtICoqU3RhbmRhbG9uZSoqIOKAlCBgUkVESVNfVVJMYCAoYHJlZGlzOi8vaG9zdDo2Mzc5Wy9kYl1gLCBvciBgcmVkaXNzOi8vYCBmb3JcbiAqICAgVExTKS4gQ3JlZGVudGlhbHMgbWF5IHNpdCBpbiB0aGUgVVJMIG9yIGluIGBSRURJU19QQVNTV09SRGAuXG4gKiAtICoqSEEgKFNlbnRpbmVsKSoqIOKAlCBgUkVESVNfU0VOVElORUxTYCAoY29tbWEtc2VwYXJhdGVkIGBob3N0OnBvcnRgKSBwbHVzXG4gKiAgIGBSRURJU19TRU5USU5FTF9NQVNURVJgIChkZWZhdWx0IGBteW1hc3RlcmApIGFuZCBvcHRpb25hbFxuICogICBgUkVESVNfU0VOVElORUxfUEFTU1dPUkRgLiBgUkVESVNfUEFTU1dPUkRgIGF1dGhlbnRpY2F0ZXMgdG8gdGhlIGRhdGEgbm9kZXMuXG4gKiAgIGlvcmVkaXMgZm9sbG93cyB0aGUgbWFzdGVyIGFjcm9zcyBhIGZhaWxvdmVyLlxuICpcbiAqIE5laXRoZXIgc2V0IOKGkiBSZWRpcyBpcyBvZmYsIGFuZCBlYWNoIGNhbGxlciBkZWdyYWRlcyB0byBpdHMgZG9jdW1lbnRlZFxuICogbm8tUmVkaXMgYmVoYXZpb3IuXG4gKlxuICogYFJFRElTX0hPU1RgIC8gYFJFRElTX1BPUlRgIGFyZSBub3QgcmVhZC4gYFJFRElTX0hPU1RgIGlzIHJlZnVzZWQgb3V0cmlnaHQgc28gYVxuICogc3RhbGUgY29uZmlnIGZhaWxzIGF0IHN0YXJ0dXAgaW5zdGVhZCBvZiBzaWxlbnRseSBydW5uaW5nIHdpdGhvdXQgUmVkaXMuXG4gKiBgUkVESVNfUE9SVGAgY2FuJ3QgYmUgcmVmdXNlZDogS3ViZXJuZXRlcyBpbmplY3RzIGBSRURJU19QT1JUPXRjcDovLzxpcD46NjM3OWBcbiAqIGludG8gZXZlcnkgcG9kIGluIGEgbmFtZXNwYWNlIHdpdGggYSBTZXJ2aWNlIG5hbWVkIGByZWRpc2AsIHdoaWNoIGlzIGV4YWN0bHlcbiAqIHdoeSBhIGhvc3QvcG9ydCBwYWlyIHdhcyB1bnNhZmUgdG8gcGFyc2UuXG4gKlxuICogTWlzY29uZmlndXJhdGlvbiB0aHJvd3Mge0BsaW5rIFJlZGlzQ29uZmlnRXJyb3J9LiBXcml0ZXJzIGFuZCByZWFkZXJzIG9mIHRoZVxuICogc2FtZSBrZXlzIChyZXZvY2F0aW9uLCBzdGVwLXVwLCBsZWFkZXIgbG9ja3MpIG11c3QgcmVzb2x2ZSBSZWRpcyBpZGVudGljYWxseTtcbiAqIGEgY29uZmlnIHRoYXQgcXVpZXRseSByZXNvbHZlZCB0byBcIm5vIFJlZGlzXCIgb24gb25lIHNpZGUgaXMgaG93IHJldm9jYXRpb25cbiAqIG9uY2UgZGlkIG5vdGhpbmcgYXQgYWxsLlxuICovXG5cbi8qKiBUaHJvd24gZm9yIGEgUmVkaXMgZW52aXJvbm1lbnQgdGhhdCBjYW4ndCBiZSB1c2VkIGFzIHdyaXR0ZW4uICovXG5leHBvcnQgY2xhc3MgUmVkaXNDb25maWdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1JlZGlzQ29uZmlnRXJyb3InO1xuICB9XG59XG5cbi8qKiBSZXNvbHZlZCBjb25uZWN0aW9uLCBpbmRlcGVuZGVudCBvZiBhbnkgY2xpZW50IGxpYnJhcnkuICovXG5leHBvcnQgdHlwZSBSZWRpc0Nvbm5lY3Rpb24gPVxuICB8IHtcbiAgICBtb2RlOiAnc2VudGluZWwnO1xuICAgIHNlbnRpbmVsczogQXJyYXk8eyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9PjtcbiAgICBtYXN0ZXJOYW1lOiBzdHJpbmc7XG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gICAgc2VudGluZWxQYXNzd29yZD86IHN0cmluZztcbiAgfVxuICB8IHtcbiAgICBtb2RlOiAndXJsJztcbiAgICB1cmw6IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSBgUkVESVNfU0VOVElORUxTYCBpbnRvIGB7IGhvc3QsIHBvcnQgfVtdYC4gQmxhbmsgZW50cmllcyBhcmUgc2tpcHBlZCBhbmRcbiAqIGEgbWlzc2luZyBwb3J0IG1lYW5zIHRoZSBTZW50aW5lbCBkZWZhdWx0IDI2Mzc5OyBhIHBvcnQgdGhhdCBpc24ndCBhIHZhbGlkXG4gKiBUQ1AgcG9ydCBpcyBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlbnRpbmVscyhyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IEFycmF5PHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXIgfT4ge1xuICBpZiAoIXJhdykgcmV0dXJuIFtdO1xuICByZXR1cm4gcmF3LnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBpZHggPSBlbnRyeS5sYXN0SW5kZXhPZignOicpO1xuICAgIGNvbnN0IGhvc3QgPSBpZHggPT09IC0xID8gZW50cnkgOiBlbnRyeS5zbGljZSgwLCBpZHgpO1xuICAgIGNvbnN0IHBvcnRUZXh0ID0gaWR4ID09PSAtMSA/ICcnIDogZW50cnkuc2xpY2UoaWR4ICsgMSk7XG4gICAgY29uc3QgcG9ydCA9IHBvcnRUZXh0ID09PSAnJyA/IDI2Mzc5IDogTnVtYmVyKHBvcnRUZXh0KTtcbiAgICBpZiAoIWhvc3QgfHwgIU51bWJlci5pc0ludGVnZXIocG9ydCkgfHwgcG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM1KSB7XG4gICAgICB0aHJvdyBuZXcgUmVkaXNDb25maWdFcnJvcihgUkVESVNfU0VOVElORUxTIGVudHJ5IFwiJHtlbnRyeX1cIiBpcyBub3QgaG9zdDpwb3J0YCk7XG4gICAgfVxuICAgIHJldHVybiB7IGhvc3QsIHBvcnQgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgUmVkaXMgY29ubmVjdGlvbiBmcm9tIGBlbnZgLCBvciBgbnVsbGAgd2hlbiBSZWRpcyBpc24ndFxuICogY29uZmlndXJlZC4gVGhyb3dzIHtAbGluayBSZWRpc0NvbmZpZ0Vycm9yfSBmb3IgYW4gdW51c2FibGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWRpc0Nvbm5lY3Rpb24oZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KTogUmVkaXNDb25uZWN0aW9uIHwgbnVsbCB7XG4gIGlmIChlbnYuUkVESVNfSE9TVCkge1xuICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKFxuICAgICAgJ1JFRElTX0hPU1QgaXMgbm90IHN1cHBvcnRlZC4gU2V0IFJFRElTX1VSTD1yZWRpczovLzxob3N0Pjo8cG9ydD4gKG9yIFJFRElTX1NFTlRJTkVMUyBmb3IgSEEpIGFuZCByZW1vdmUgUkVESVNfSE9TVC9SRURJU19QT1JULicsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNlbnRpbmVscyA9IHBhcnNlU2VudGluZWxzKGVudi5SRURJU19TRU5USU5FTFMpO1xuICBjb25zdCB1cmwgPSBlbnYuUkVESVNfVVJMPy50cmltKCk7XG4gIGNvbnN0IHBhc3N3b3JkID0gZW52LlJFRElTX1BBU1NXT1JEIHx8IHVuZGVmaW5lZDtcblxuICBpZiAoc2VudGluZWxzLmxlbmd0aCA+IDAgJiYgdXJsKSB7XG4gICAgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoJ1NldCBSRURJU19VUkwgb3IgUkVESVNfU0VOVElORUxTLCBub3QgYm90aC4nKTtcbiAgfVxuXG4gIGlmIChzZW50aW5lbHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiAnc2VudGluZWwnLFxuICAgICAgc2VudGluZWxzLFxuICAgICAgbWFzdGVyTmFtZTogZW52LlJFRElTX1NFTlRJTkVMX01BU1RFUiB8fCAnbXltYXN0ZXInLFxuICAgICAgcGFzc3dvcmQsXG4gICAgICBzZW50aW5lbFBhc3N3b3JkOiBlbnYuUkVESVNfU0VOVElORUxfUEFTU1dPUkQgfHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgbGV0IHBhcnNlZDogVVJMO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgUmVkaXNDb25maWdFcnJvcignUkVESVNfVVJMIGlzIG5vdCBhIHZhbGlkIFVSTCAoZXhwZWN0ZWQgcmVkaXM6Ly88aG9zdD46PHBvcnQ+KS4nKTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gJ3JlZGlzOicgJiYgcGFyc2VkLnByb3RvY29sICE9PSAncmVkaXNzOicpIHtcbiAgICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKGBSRURJU19VUkwgbXVzdCB1c2UgcmVkaXM6Ly8gb3IgcmVkaXNzOi8vLCBnb3QgJHtwYXJzZWQucHJvdG9jb2x9Ly9gKTtcbiAgICB9XG4gICAgaWYgKCFwYXJzZWQuaG9zdG5hbWUpIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKCdSRURJU19VUkwgaGFzIG5vIGhvc3QuJyk7XG4gICAgcmV0dXJuIHsgbW9kZTogJ3VybCcsIHVybCwgcGFzc3dvcmQgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQSBsb2ctc2FmZSBkZXNjcmlwdGlvbiBvZiBhIGNvbm5lY3Rpb24gKG5ldmVyIGluY2x1ZGVzIGNyZWRlbnRpYWxzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZVJlZGlzQ29ubmVjdGlvbihjb25uOiBSZWRpc0Nvbm5lY3Rpb24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmIChjb25uLm1vZGUgPT09ICdzZW50aW5lbCcpIHtcbiAgICByZXR1cm4geyBtb2RlOiAnc2VudGluZWwnLCBtYXN0ZXI6IGNvbm4ubWFzdGVyTmFtZSwgc2VudGluZWxzOiBjb25uLnNlbnRpbmVscy5sZW5ndGggfTtcbiAgfVxuICBjb25zdCB1ID0gbmV3IFVSTChjb25uLnVybCk7XG4gIHJldHVybiB7IG1vZGU6ICd1cmwnLCBob3N0OiB1Lmhvc3RuYW1lLCBwb3J0OiB1LnBvcnQgfHwgJzYzNzknLCB0bHM6IHUucHJvdG9jb2wgPT09ICdyZWRpc3M6JyB9O1xufVxuXG50eXBlIFJlZGlzQ3RvcjxUPiA9IG5ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiBUO1xuXG5mdW5jdGlvbiBsb2FkSW9yZWRpczxUPigpOiBSZWRpc0N0b3I8VD4ge1xuICBjb25zdCByZXEgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG4gIGNvbnN0IG1vZCA9IHJlcSgnaW9yZWRpcycpIGFzIHsgUmVkaXM/OiBSZWRpc0N0b3I8VD47IGRlZmF1bHQ/OiBSZWRpc0N0b3I8VD4gfTtcbiAgcmV0dXJuIChtb2QuUmVkaXMgPz8gbW9kLmRlZmF1bHQgPz8gbW9kKSBhcyBSZWRpc0N0b3I8VD47XG59XG5cbi8qKlxuICogQ29uc3RydWN0IGFuIGlvcmVkaXMgY2xpZW50IGZvciBhIHJlc29sdmVkIGNvbm5lY3Rpb24uIGBvcHRpb25zYCBhcmUgbWVyZ2VkXG4gKiBpbnRvIHRoZSBjbGllbnQgb3B0aW9ucyAoZS5nLiBgeyBkYiwgbWF4UmV0cmllc1BlclJlcXVlc3Q6IG51bGwgfWAgZm9yIEJ1bGxNUSkuXG4gKiBBbiBgZXJyb3JgIGxpc3RlbmVyIGlzIGFsd2F5cyBhdHRhY2hlZCBzbyBhIGRyb3BwZWQgY29ubmVjdGlvbiBpcyBsb2dnZWRcbiAqIHJhdGhlciB0aGFuIHN1cmZhY2luZyBhcyBhbiB1bmhhbmRsZWQgYCdlcnJvcidgIGV2ZW50IHRoYXQgY3Jhc2hlcyBOb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVkaXNDbGllbnQ8VCA9IHVua25vd24+KFxuICBjb25uOiBSZWRpc0Nvbm5lY3Rpb24sXG4gIGxhYmVsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pOiBUIHtcbiAgY29uc3QgQ3RvciA9IGxvYWRJb3JlZGlzPFQ+KCk7XG4gIGNvbnN0IGF1dGggPSBjb25uLnBhc3N3b3JkID8geyBwYXNzd29yZDogY29ubi5wYXNzd29yZCB9IDoge307XG4gIGNvbnN0IGluc3QgPSBjb25uLm1vZGUgPT09ICdzZW50aW5lbCdcbiAgICA/IG5ldyBDdG9yKHtcbiAgICAgIHNlbnRpbmVsczogY29ubi5zZW50aW5lbHMsXG4gICAgICBuYW1lOiBjb25uLm1hc3Rlck5hbWUsXG4gICAgICAuLi4oY29ubi5zZW50aW5lbFBhc3N3b3JkID8geyBzZW50aW5lbFBhc3N3b3JkOiBjb25uLnNlbnRpbmVsUGFzc3dvcmQgfSA6IHt9KSxcbiAgICAgIC4uLmF1dGgsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pXG4gICAgOiBuZXcgQ3Rvcihjb25uLnVybCwgeyAuLi5hdXRoLCAuLi5vcHRpb25zIH0pO1xuICAoaW5zdCBhcyB1bmtub3duIGFzIHsgb246IChldnQ6IHN0cmluZywgY2I6IChlOiB1bmtub3duKSA9PiB2b2lkKSA9PiB2b2lkIH0pXG4gICAgLm9uKCdlcnJvcicsIChlKSA9PiBsb2dnZXIud2FybihgUmVkaXMgJHtsYWJlbH0gY2xpZW50IGVycm9yYCwgeyBlcnJvcjogZXJyb3JNZXNzYWdlKGUpIH0pKTtcbiAgcmV0dXJuIGluc3Q7XG59XG5cbi8qKlxuICogVGhlIHNoYXJlZCBhcHBsaWNhdGlvbiBSZWRpcyBjbGllbnQ6IGBudWxsYCB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQsIHNvXG4gKiB0aGUgY2FsbGVyIGRlZ3JhZGVzIHRvIGl0cyBuby1SZWRpcyBiZWhhdmlvci5cbiAqXG4gKiBDb21tYW5kcyBmYWlsIGZhc3QgKGBtYXhSZXRyaWVzUGVyUmVxdWVzdDogMWAsIG5vIG9mZmxpbmUgcXVldWUpIGJlY2F1c2UgdGhlXG4gKiByZXF1ZXN0LXBhdGggY2FsbGVycyBhcmUgYmVzdC1lZmZvcnQgb3IgZmFpbCBjbG9zZWQgb24gdGhlaXIgb3duIHRlcm1zIOKAlCBhXG4gKiByZXF1ZXN0IG11c3Qgbm90IGhhbmcgYmVoaW5kIGEgUmVkaXMgb3V0YWdlLiBUaGF0IGluY2x1ZGVzIHRoZSBtb21lbnRzIGJlZm9yZVxuICogdGhlIGZpcnN0IGNvbm5lY3Rpb24gY29tcGxldGVzOiBhIGJhY2tncm91bmQgY2FsbGVyIHRoYXQgcnVucyBhdCBzdGFydHVwIG11c3RcbiAqIGVpdGhlciB0b2xlcmF0ZSBhIHJlamVjdGVkIGNvbW1hbmQgb3Igd2FpdCB3aXRoIHtAbGluayB3aGVuUmVkaXNSZWFkeX0uXG4gKlxuICogVGhyb3dzIHtAbGluayBSZWRpc0NvbmZpZ0Vycm9yfSBmb3IgYSBiYWQgY29uZmlndXJhdGlvbiwgYW5kIGlmIFJlZGlzIGlzXG4gKiBjb25maWd1cmVkIGJ1dCBgaW9yZWRpc2AgY2FuJ3QgYmUgbG9hZGVkIOKAlCBib3RoIGFyZSBkZXBsb3ltZW50IGVycm9ycyB0aGF0XG4gKiBtdXN0IG5vdCBxdWlldGx5IHR1cm4gUmVkaXMtYmFja2VkIGd1YXJhbnRlZXMgb2ZmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52UmVkaXNDbGllbnQ8VCA9IHVua25vd24+KFxuICBsYWJlbDogc3RyaW5nLFxuICBvcHRzOiB7IHJlYWR5R2F0ZT86IGJvb2xlYW47IHJlYWR5VGltZW91dE1zPzogbnVtYmVyIH0gPSB7fSxcbik6IFQgfCBudWxsIHtcbiAgY29uc3QgY29ubiA9IHJlc29sdmVSZWRpc0Nvbm5lY3Rpb24oKTtcbiAgaWYgKCFjb25uKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgaW5zdCA9IGNyZWF0ZVJlZGlzQ2xpZW50PFQ+KGNvbm4sIGxhYmVsLCB7IG1heFJldHJpZXNQZXJSZXF1ZXN0OiAxLCBlbmFibGVPZmZsaW5lUXVldWU6IGZhbHNlIH0pO1xuICBsb2dnZXIuaW5mbyhgUmVkaXMgJHtsYWJlbH0gY2xpZW50IGNyZWF0ZWRgLCBkZXNjcmliZVJlZGlzQ29ubmVjdGlvbihjb25uKSk7XG4gIHJldHVybiBvcHRzLnJlYWR5R2F0ZSA9PT0gZmFsc2VcbiAgICA/IGluc3RcbiAgICA6IHdpdGhSZWFkeUdhdGUoaW5zdCBhcyBUICYgUmVhZHlBd2FyZVJlZGlzLCBjcmVhdGVSZWRpc1JlYWR5R2F0ZShpbnN0IGFzIFJlYWR5QXdhcmVSZWRpcywgb3B0cy5yZWFkeVRpbWVvdXRNcykpO1xufVxuXG4vKiogQ2xpZW50IG1ldGhvZHMgdGhhdCBhcmUgc3luY2hyb25vdXMsIG1hbmFnZSB0aGUgY29ubmVjdGlvbiBpdHNlbGYsIG9yIGJ1aWxkXG4gKiAgYSBiYXRjaCDigJQgbmV2ZXIgZGVmZXJyZWQgYmVoaW5kIHRoZSByZWFkaW5lc3MgZ2F0ZS4gKi9cbmNvbnN0IFVOR0FURURfTUVUSE9EUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnb24nLCAnb25jZScsICdvZmYnLCAnYWRkTGlzdGVuZXInLCAncmVtb3ZlTGlzdGVuZXInLCAncmVtb3ZlQWxsTGlzdGVuZXJzJywgJ2VtaXQnLFxuICAnbGlzdGVuZXJzJywgJ2xpc3RlbmVyQ291bnQnLCAnc2V0TWF4TGlzdGVuZXJzJywgJ2dldE1heExpc3RlbmVycycsICdwcmVwZW5kTGlzdGVuZXInLFxuICAnY29ubmVjdCcsICdkaXNjb25uZWN0JywgJ3F1aXQnLCAnZHVwbGljYXRlJywgJ3BpcGVsaW5lJywgJ211bHRpJywgJ2RlZmluZUNvbW1hbmQnLFxuXSk7XG5cbi8qKlxuICogV3JhcCBhIG5vLW9mZmxpbmUtcXVldWUgY2xpZW50IHNvIGV2ZXJ5IGNvbW1hbmQgZmlyc3Qgd2FpdHMgKGJvdW5kZWQsIG5ldmVyXG4gKiByZWplY3Rpbmcg4oCUIHNlZSB7QGxpbmsgY3JlYXRlUmVkaXNSZWFkeUdhdGV9KSBmb3IgdGhlIGNvbm5lY3Rpb24uIFdpdGhvdXQgaXRcbiAqIHRoZSBmaXJzdCBjb21tYW5kIGEgY2FsbGVyIGlzc3VlcyByaWdodCBhZnRlciBhIGxhenkgY29uc3RydWN0aW9uIGlzIHJlamVjdGVkXG4gKiBvdXRyaWdodCwgZS5nLiBhIHN0YXJ0dXAgY29uc3VtZXItZ3JvdXAgY3JlYXRlIG9yIHRoZSBmaXJzdCBpZGVtcG90ZW5jeSBjaGVjay5cbiAqL1xuZnVuY3Rpb24gd2l0aFJlYWR5R2F0ZTxUIGV4dGVuZHMgb2JqZWN0PihjbGllbnQ6IFQsIHJlYWR5OiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogVCB7XG4gIHJldHVybiBuZXcgUHJveHkoY2xpZW50LCB7XG4gICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJyB8fCBVTkdBVEVEX01FVEhPRFMuaGFzKHByb3ApKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZS5iaW5kKHRhcmdldCkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgIGF3YWl0IHJlYWR5KCk7XG4gICAgICAgIHJldHVybiAodmFsdWUgYXMgKC4uLmE6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkodGFyZ2V0LCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGlvcmVkaXMgbmVlZGVkIHRvIHdhaXQgZm9yIGEgY29ubmVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZHlBd2FyZVJlZGlzIHtcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBvbmNlPyhldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHVua25vd247XG4gIG9mZj8oZXZlbnQ6IHN0cmluZywgY2I6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQpOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb25jZSBgY2xpZW50YCBpcyBjb25uZWN0ZWQgYW5kIHJlYWR5IGZvciBjb21tYW5kcywgb3IgcmVqZWN0IGFmdGVyXG4gKiBgdGltZW91dE1zYC4gRm9yIHN0YXJ0dXAgd29yayAoY3JlYXRpbmcgYSBjb25zdW1lciBncm91cCwgc3Vic2NyaWJpbmcpIHRoYXRcbiAqIG90aGVyd2lzZSByYWNlcyB0aGUgZmlyc3QgY29ubmVjdGlvbi4gQSBjbGllbnQgd2l0aG91dCBpb3JlZGlzJyBgc3RhdHVzYFxuICogKGUuZy4gYSB0ZXN0IGRvdWJsZSkgY291bnRzIGFzIHJlYWR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hlblJlZGlzUmVhZHkoY2xpZW50OiBSZWFkeUF3YXJlUmVkaXMsIHRpbWVvdXRNcyA9IDMwXzAwMCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY2xpZW50LnN0YXR1cyA9PT0gdW5kZWZpbmVkIHx8IGNsaWVudC5zdGF0dXMgPT09ICdyZWFkeScgfHwgIWNsaWVudC5vbmNlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgb25SZWFkeSA9ICgpID0+IHsgY2xlYXJUaW1lb3V0KHRpbWVyKTsgcmVzb2x2ZSgpOyB9O1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGllbnQub2ZmPy4oJ3JlYWR5Jywgb25SZWFkeSk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBSZWRpcyBub3QgcmVhZHkgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgKSk7XG4gICAgfSwgdGltZW91dE1zKTtcbiAgICB0aW1lci51bnJlZj8uKCk7XG4gICAgY2xpZW50Lm9uY2UhKCdyZWFkeScsIG9uUmVhZHkpO1xuICB9KTtcbn1cblxuLyoqIERlZmF1bHQgYm91bmQgZm9yIHtAbGluayBjcmVhdGVSZWRpc1JlYWR5R2F0ZX06IHNob3J0IGVub3VnaCBmb3IgYSByZXF1ZXN0IHBhdGguICovXG5leHBvcnQgY29uc3QgUkVRVUVTVF9QQVRIX1JFRElTX1JFQURZX1RJTUVPVVRfTVMgPSAyXzAwMDtcblxuLyoqXG4gKiBBIHJlcXVlc3QtcGF0aCByZWFkaW5lc3MgZ2F0ZSBmb3IgYSBsYXppbHkgYnVpbHQgZW52IFJlZGlzIGNsaWVudC5cbiAqXG4gKiBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZSwgc28gYSBjb21tYW5kIGlzc3VlZCBiZWZvcmUgdGhlIGZpcnN0XG4gKiBjb25uZWN0aW9uIGNvbXBsZXRlcyBpcyByZWplY3RlZCBvdXRyaWdodCDigJQgdGhlIGZpcnN0IHJlcXVlc3QgYWZ0ZXIgYSBsYXp5XG4gKiBjb25zdHJ1Y3Rpb24gd291bGQgb3RoZXJ3aXNlIGhpdCB0aGF0IHJlamVjdGlvbiAoZS5nLiB0aGUgZmlyc3Qgc3RlcC11cCBwZXJcbiAqIHBvZCBmYWlsaW5nLCBvciB0aGUgZmlyc3QgaW1wZXJzb25hdGlvbiBjaGVjayByZWFkaW5nIFwidW5hdmFpbGFibGVcIikuXG4gKlxuICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIHJlc29sdmVzIG9uY2UgdGhlIGNsaWVudCBpcyByZWFkeSwgb3IgYWZ0ZXJcbiAqIGB0aW1lb3V0TXNgIOKAlCBpdCBORVZFUiByZWplY3RzOiB0aGUgY2FsbGVyIHRoZW4gcnVucyBpdHMgY29tbWFuZCBhbmQga2VlcHMgaXRzXG4gKiBvd24gZmFpbC1vcGVuIC8gZmFpbC1jbG9zZWQgc2VtYW50aWNzLiBDb25jdXJyZW50IGNhbGxlcnMgc2hhcmUgb25lIHdhaXQuIEFmdGVyXG4gKiBhIHdhaXQgdGltZXMgb3V0IChSZWRpcyBnZW51aW5lbHkgZG93bikgbGF0ZXIgY2FsbHMgc3RvcCB3YWl0aW5nIHVudGlsIHRoZVxuICogY2xpZW50IHJlcG9ydHMgYHJlYWR5YCBhZ2Fpbiwgc28gYW4gb3V0YWdlIGNvc3RzIG9uZSBib3VuZGVkIHdhaXQgaW5zdGVhZCBvZlxuICogYWRkaW5nIGB0aW1lb3V0TXNgIHRvIGV2ZXJ5IHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc1JlYWR5R2F0ZShcbiAgY2xpZW50OiBSZWFkeUF3YXJlUmVkaXMsXG4gIHRpbWVvdXRNcyA9IFJFUVVFU1RfUEFUSF9SRURJU19SRUFEWV9USU1FT1VUX01TLFxuKTogKCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpbmZsaWdodDogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBsZXQgZ2F2ZVVwID0gZmFsc2U7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKGNsaWVudC5zdGF0dXMgPT09IHVuZGVmaW5lZCB8fCBjbGllbnQuc3RhdHVzID09PSAncmVhZHknIHx8ICFjbGllbnQub25jZSkge1xuICAgICAgZ2F2ZVVwID0gZmFsc2U7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGlmIChnYXZlVXApIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoIWluZmxpZ2h0KSB7XG4gICAgICBpbmZsaWdodCA9IHdoZW5SZWRpc1JlYWR5KGNsaWVudCwgdGltZW91dE1zKVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGdhdmVVcCA9IHRydWU7XG4gICAgICAgICAgLy8gUmUtYXJtIHRoZSB3YWl0IG9uY2UgdGhlIGNvbm5lY3Rpb24gY29tZXMgYmFjay5cbiAgICAgICAgICBjbGllbnQub25jZSEoJ3JlYWR5JywgKCkgPT4geyBnYXZlVXAgPSBmYWxzZTsgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHsgaW5mbGlnaHQgPSBudWxsOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGluZmxpZ2h0O1xuICB9O1xufVxuXG4vKiogVGhlIHN1YnNldCBvZiBpb3JlZGlzIG5lZWRlZCBieSB7QGxpbmsgaW5jcldpbmRvd30uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGlzRXZhbENsaWVudCB7XG4gIGV2YWwoc2NyaXB0OiBzdHJpbmcsIG51bUtleXM6IG51bWJlciwgLi4uYXJnczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKlxuICogSU5DUiBhIGZpeGVkLXdpbmRvdyBjb3VudGVyIGFuZCBtYWtlIHN1cmUgaXQgY2FycmllcyBhIFRUTCwgYXRvbWljYWxseS5cbiAqXG4gKiBBIHNlcGFyYXRlIGBJTkNSYCB0aGVuIGBFWFBJUkVgIGlzIG5vdCBhdG9taWM6IGlmIHRoZSBFWFBJUkUgaXMgbG9zdCAoYVxuICogY29ubmVjdGlvbiBkcm9wLCBhIGZhaWxvdmVyIGJldHdlZW4gdGhlIHR3byBjb21tYW5kcykgdGhlIGtleSBuZXZlciBleHBpcmVzXG4gKiBhbmQgdGhlIGNvdW50ZXIgc3RheXMgb3ZlciBpdHMgbGltaXQgZm9yZXZlci4gVGhlIHNjcmlwdCBhbHNvIGhlYWxzIGEga2V5XG4gKiB0aGF0IHNvbWVob3cgbGFja3MgYSBUVEwgKGBQVFRMYCA9IC0xKSByYXRoZXIgdGhhbiBvbmx5IHNldHRpbmcgaXQgb24gdGhlXG4gKiBmaXJzdCBoaXQuXG4gKi9cbmNvbnN0IElOQ1JfV0lORE9XX1NDUklQVCA9IGBcbmxvY2FsIG4gPSByZWRpcy5jYWxsKCdJTkNSJywgS0VZU1sxXSlcbmlmIG4gPT0gMSBvciByZWRpcy5jYWxsKCdQVFRMJywgS0VZU1sxXSkgPCAwIHRoZW5cbiAgcmVkaXMuY2FsbCgnUEVYUElSRScsIEtFWVNbMV0sIEFSR1ZbMV0pXG5lbmRcbnJldHVybiBuYDtcblxuLyoqXG4gKiBJbmNyZW1lbnQgYGtleWAgd2l0aGluIGEgd2luZG93IG9mIGB3aW5kb3dNc2AgYW5kIHJldHVybiB0aGUgbmV3IGNvdW50LlxuICogVGhyb3dzIHdoZW4gUmVkaXMgZXJyb3JzIOKAlCBjYWxsZXJzIGNob29zZSB0aGVpciBvd24gZmFpbHVyZSBwb2xpY3kuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbmNyV2luZG93KHJlZGlzOiBSZWRpc0V2YWxDbGllbnQsIGtleTogc3RyaW5nLCB3aW5kb3dNczogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgbiA9IGF3YWl0IHJlZGlzLmV2YWwoSU5DUl9XSU5ET1dfU0NSSVBULCAxLCBrZXksIE1hdGgubWF4KDEsIE1hdGguY2VpbCh3aW5kb3dNcykpKTtcbiAgcmV0dXJuIE51bWJlcihuKTtcbn1cbiJdfQ==
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LXJlZGlzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvZW52LXJlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUV6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILG9FQUFvRTtBQUNwRSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN6QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFpQkQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBdUI7SUFDcEQsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNwQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sSUFBSSxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQywwQkFBMEIsS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxHQUFHLEdBQXNCLE9BQU8sQ0FBQyxHQUFHO0lBQ3pFLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxnQkFBZ0IsQ0FDeEIsZ0lBQWdJLENBQ2pJLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDO0lBRWpELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLGdCQUFnQixDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUztZQUNULFVBQVUsRUFBRSxHQUFHLENBQUMscUJBQXFCLElBQUksVUFBVTtZQUNuRCxRQUFRO1lBQ1IsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLHVCQUF1QixJQUFJLFNBQVM7U0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsSUFBSSxNQUFXLENBQUM7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLElBQUksZ0JBQWdCLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxpREFBaUQsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsMkVBQTJFO0FBQzNFLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxJQUFxQjtJQUMzRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0IsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekYsQ0FBQztJQUNELE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7QUFDbEcsQ0FBQztBQUlELFNBQVMsV0FBVztJQUNsQixNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBcUQsQ0FBQztJQUMvRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBaUIsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLElBQXFCLEVBQ3JCLEtBQWEsRUFDYixPQUFPLEdBQTRCLEVBQUU7SUFFckMsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFLLENBQUM7SUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVO1FBQ25DLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNULFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdFLEdBQUcsSUFBSTtZQUNQLEdBQUcsT0FBTztTQUNYLENBQUM7UUFDRixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvQyxJQUEyRTtTQUN6RSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLEtBQWEsRUFDYixJQUFJLEdBQXFELEVBQUU7SUFFM0QsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxpQkFBaUIsRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1FBQzdCLENBQUMsQ0FBQyxJQUFJO1FBQ04sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUEyQixFQUFFLG9CQUFvQixDQUFDLElBQXVCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDckgsQ0FBQztBQUVEOzBEQUMwRDtBQUMxRCxNQUFNLGVBQWUsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDbkQsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU07SUFDbEYsV0FBVyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDckYsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsZUFBZTtDQUNuRixDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILFNBQVMsYUFBYSxDQUFtQixNQUFTLEVBQUUsS0FBMEI7SUFDNUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDdkIsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUTtZQUN4QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEQsSUFBSSxPQUFPLEtBQUssS0FBSyxVQUFVLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDekYsT0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNsRSxDQUFDO1lBQ0QsT0FBTyxLQUFLLEVBQUUsR0FBRyxJQUFlLEVBQUUsRUFBRTtnQkFDbEMsTUFBTSxLQUFLLEVBQUUsQ0FBQztnQkFDZCxPQUFRLEtBQXNDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNyRSxDQUFDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVNEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUF1QixFQUFFLFNBQVMsR0FBRyxNQUFNO0lBQ3hFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZHLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNkLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxJQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELHVGQUF1RjtBQUN2RixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxLQUFLLENBQUM7QUFFekQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQXVCLEVBQ3ZCLFNBQVMsR0FBRyxtQ0FBbUM7SUFFL0MsSUFBSSxRQUFRLEdBQXlCLElBQUksQ0FBQztJQUMxQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDbkIsT0FBTyxHQUFHLEVBQUU7UUFDVixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdFLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDZixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxNQUFNO1lBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsUUFBUSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO2lCQUN6QyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2Qsa0RBQWtEO2dCQUNsRCxNQUFNLENBQUMsSUFBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFPRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sa0JBQWtCLEdBQUc7Ozs7O1NBS2xCLENBQUM7QUFFVjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FBQyxLQUFzQixFQUFFLEdBQVcsRUFBRSxRQUFnQjtJQUNwRixNQUFNLENBQUMsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdtb2R1bGUnO1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2Vudi1yZWRpcycpO1xuXG4vKipcbiAqIFRoZSBPTkUgcGxhY2UgUmVkaXMgY29ubmVjdGlvbiBzZXR0aW5ncyBhcmUgcmVhZCBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBUd28gc2hhcGVzLCBleGFjdGx5IG9uZSBvZiB3aGljaCBtYXkgYmUgc2V0OlxuICpcbiAqIC0gKipTdGFuZGFsb25lKiog4oCUIGBSRURJU19VUkxgIChgcmVkaXM6Ly9ob3N0OjYzNzlbL2RiXWAsIG9yIGByZWRpc3M6Ly9gIGZvclxuICogICBUTFMpLiBDcmVkZW50aWFscyBtYXkgc2l0IGluIHRoZSBVUkwgb3IgaW4gYFJFRElTX1BBU1NXT1JEYC5cbiAqIC0gKipIQSAoU2VudGluZWwpKiog4oCUIGBSRURJU19TRU5USU5FTFNgIChjb21tYS1zZXBhcmF0ZWQgYGhvc3Q6cG9ydGApIHBsdXNcbiAqICAgYFJFRElTX1NFTlRJTkVMX01BU1RFUmAgKGRlZmF1bHQgYG15bWFzdGVyYCkgYW5kIG9wdGlvbmFsXG4gKiAgIGBSRURJU19TRU5USU5FTF9QQVNTV09SRGAuIGBSRURJU19QQVNTV09SRGAgYXV0aGVudGljYXRlcyB0byB0aGUgZGF0YSBub2Rlcy5cbiAqICAgaW9yZWRpcyBmb2xsb3dzIHRoZSBtYXN0ZXIgYWNyb3NzIGEgZmFpbG92ZXIuXG4gKlxuICogTmVpdGhlciBzZXQg4oaSIFJlZGlzIGlzIG9mZiwgYW5kIGVhY2ggY2FsbGVyIGRlZ3JhZGVzIHRvIGl0cyBkb2N1bWVudGVkXG4gKiBuby1SZWRpcyBiZWhhdmlvci5cbiAqXG4gKiBgUkVESVNfSE9TVGAgLyBgUkVESVNfUE9SVGAgYXJlIG5vdCByZWFkLiBgUkVESVNfSE9TVGAgaXMgcmVmdXNlZCBvdXRyaWdodCBzbyBhXG4gKiBzdGFsZSBjb25maWcgZmFpbHMgYXQgc3RhcnR1cCBpbnN0ZWFkIG9mIHNpbGVudGx5IHJ1bm5pbmcgd2l0aG91dCBSZWRpcy5cbiAqIGBSRURJU19QT1JUYCBjYW4ndCBiZSByZWZ1c2VkOiBLdWJlcm5ldGVzIGluamVjdHMgYFJFRElTX1BPUlQ9dGNwOi8vPGlwPjo2Mzc5YFxuICogaW50byBldmVyeSBwb2QgaW4gYSBuYW1lc3BhY2Ugd2l0aCBhIFNlcnZpY2UgbmFtZWQgYHJlZGlzYCwgd2hpY2ggaXMgZXhhY3RseVxuICogd2h5IGEgaG9zdC9wb3J0IHBhaXIgd2FzIHVuc2FmZSB0byBwYXJzZS5cbiAqXG4gKiBNaXNjb25maWd1cmF0aW9uIHRocm93cyB7QGxpbmsgUmVkaXNDb25maWdFcnJvcn0uIFdyaXRlcnMgYW5kIHJlYWRlcnMgb2YgdGhlXG4gKiBzYW1lIGtleXMgKHJldm9jYXRpb24sIHN0ZXAtdXAsIGxlYWRlciBsb2NrcykgbXVzdCByZXNvbHZlIFJlZGlzIGlkZW50aWNhbGx5O1xuICogYSBjb25maWcgdGhhdCBxdWlldGx5IHJlc29sdmVkIHRvIFwibm8gUmVkaXNcIiBvbiBvbmUgc2lkZSBpcyBob3cgcmV2b2NhdGlvblxuICogb25jZSBkaWQgbm90aGluZyBhdCBhbGwuXG4gKi9cblxuLyoqIFRocm93biBmb3IgYSBSZWRpcyBlbnZpcm9ubWVudCB0aGF0IGNhbid0IGJlIHVzZWQgYXMgd3JpdHRlbi4gKi9cbmV4cG9ydCBjbGFzcyBSZWRpc0NvbmZpZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnUmVkaXNDb25maWdFcnJvcic7XG4gIH1cbn1cblxuLyoqIFJlc29sdmVkIGNvbm5lY3Rpb24sIGluZGVwZW5kZW50IG9mIGFueSBjbGllbnQgbGlicmFyeS4gKi9cbmV4cG9ydCB0eXBlIFJlZGlzQ29ubmVjdGlvbiA9XG4gIHwge1xuICAgIG1vZGU6ICdzZW50aW5lbCc7XG4gICAgc2VudGluZWxzOiBBcnJheTx7IGhvc3Q6IHN0cmluZzsgcG9ydDogbnVtYmVyIH0+O1xuICAgIG1hc3Rlck5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICBzZW50aW5lbFBhc3N3b3JkPzogc3RyaW5nO1xuICB9XG4gIHwge1xuICAgIG1vZGU6ICd1cmwnO1xuICAgIHVybDogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIGBSRURJU19TRU5USU5FTFNgIGludG8gYHsgaG9zdCwgcG9ydCB9W11gLiBCbGFuayBlbnRyaWVzIGFyZSBza2lwcGVkIGFuZFxuICogYSBtaXNzaW5nIHBvcnQgbWVhbnMgdGhlIFNlbnRpbmVsIGRlZmF1bHQgMjYzNzk7IGEgcG9ydCB0aGF0IGlzbid0IGEgdmFsaWRcbiAqIFRDUCBwb3J0IGlzIGEgY29uZmlndXJhdGlvbiBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VudGluZWxzKHJhdzogc3RyaW5nIHwgdW5kZWZpbmVkKTogQXJyYXk8eyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlciB9PiB7XG4gIGlmICghcmF3KSByZXR1cm4gW107XG4gIHJldHVybiByYXcuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikubWFwKChlbnRyeSkgPT4ge1xuICAgIGNvbnN0IGlkeCA9IGVudHJ5Lmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgY29uc3QgaG9zdCA9IGlkeCA9PT0gLTEgPyBlbnRyeSA6IGVudHJ5LnNsaWNlKDAsIGlkeCk7XG4gICAgY29uc3QgcG9ydFRleHQgPSBpZHggPT09IC0xID8gJycgOiBlbnRyeS5zbGljZShpZHggKyAxKTtcbiAgICBjb25zdCBwb3J0ID0gcG9ydFRleHQgPT09ICcnID8gMjYzNzkgOiBOdW1iZXIocG9ydFRleHQpO1xuICAgIGlmICghaG9zdCB8fCAhTnVtYmVyLmlzSW50ZWdlcihwb3J0KSB8fCBwb3J0IDwgMSB8fCBwb3J0ID4gNjU1MzUpIHtcbiAgICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKGBSRURJU19TRU5USU5FTFMgZW50cnkgXCIke2VudHJ5fVwiIGlzIG5vdCBob3N0OnBvcnRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaG9zdCwgcG9ydCB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBSZWRpcyBjb25uZWN0aW9uIGZyb20gYGVudmAsIG9yIGBudWxsYCB3aGVuIFJlZGlzIGlzbid0XG4gKiBjb25maWd1cmVkLiBUaHJvd3Mge0BsaW5rIFJlZGlzQ29uZmlnRXJyb3J9IGZvciBhbiB1bnVzYWJsZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlZGlzQ29ubmVjdGlvbihlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0gcHJvY2Vzcy5lbnYpOiBSZWRpc0Nvbm5lY3Rpb24gfCBudWxsIHtcbiAgaWYgKGVudi5SRURJU19IT1NUKSB7XG4gICAgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoXG4gICAgICAnUkVESVNfSE9TVCBpcyBub3Qgc3VwcG9ydGVkLiBTZXQgUkVESVNfVVJMPXJlZGlzOi8vPGhvc3Q+Ojxwb3J0PiAob3IgUkVESVNfU0VOVElORUxTIGZvciBIQSkgYW5kIHJlbW92ZSBSRURJU19IT1NUL1JFRElTX1BPUlQuJyxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VudGluZWxzID0gcGFyc2VTZW50aW5lbHMoZW52LlJFRElTX1NFTlRJTkVMUyk7XG4gIGNvbnN0IHVybCA9IGVudi5SRURJU19VUkw/LnRyaW0oKTtcbiAgY29uc3QgcGFzc3dvcmQgPSBlbnYuUkVESVNfUEFTU1dPUkQgfHwgdW5kZWZpbmVkO1xuXG4gIGlmIChzZW50aW5lbHMubGVuZ3RoID4gMCAmJiB1cmwpIHtcbiAgICB0aHJvdyBuZXcgUmVkaXNDb25maWdFcnJvcignU2V0IFJFRElTX1VSTCBvciBSRURJU19TRU5USU5FTFMsIG5vdCBib3RoLicpO1xuICB9XG5cbiAgaWYgKHNlbnRpbmVscy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6ICdzZW50aW5lbCcsXG4gICAgICBzZW50aW5lbHMsXG4gICAgICBtYXN0ZXJOYW1lOiBlbnYuUkVESVNfU0VOVElORUxfTUFTVEVSIHx8ICdteW1hc3RlcicsXG4gICAgICBwYXNzd29yZCxcbiAgICAgIHNlbnRpbmVsUGFzc3dvcmQ6IGVudi5SRURJU19TRU5USU5FTF9QQVNTV09SRCB8fCB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICBsZXQgcGFyc2VkOiBVUkw7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IG5ldyBVUkwodXJsKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBSZWRpc0NvbmZpZ0Vycm9yKCdSRURJU19VUkwgaXMgbm90IGEgdmFsaWQgVVJMIChleHBlY3RlZCByZWRpczovLzxob3N0Pjo8cG9ydD4pLicpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnByb3RvY29sICE9PSAncmVkaXM6JyAmJiBwYXJzZWQucHJvdG9jb2wgIT09ICdyZWRpc3M6Jykge1xuICAgICAgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoYFJFRElTX1VSTCBtdXN0IHVzZSByZWRpczovLyBvciByZWRpc3M6Ly8sIGdvdCAke3BhcnNlZC5wcm90b2NvbH0vL2ApO1xuICAgIH1cbiAgICBpZiAoIXBhcnNlZC5ob3N0bmFtZSkgdGhyb3cgbmV3IFJlZGlzQ29uZmlnRXJyb3IoJ1JFRElTX1VSTCBoYXMgbm8gaG9zdC4nKTtcbiAgICByZXR1cm4geyBtb2RlOiAndXJsJywgdXJsLCBwYXNzd29yZCB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBBIGxvZy1zYWZlIGRlc2NyaXB0aW9uIG9mIGEgY29ubmVjdGlvbiAobmV2ZXIgaW5jbHVkZXMgY3JlZGVudGlhbHMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlUmVkaXNDb25uZWN0aW9uKGNvbm46IFJlZGlzQ29ubmVjdGlvbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKGNvbm4ubW9kZSA9PT0gJ3NlbnRpbmVsJykge1xuICAgIHJldHVybiB7IG1vZGU6ICdzZW50aW5lbCcsIG1hc3RlcjogY29ubi5tYXN0ZXJOYW1lLCBzZW50aW5lbHM6IGNvbm4uc2VudGluZWxzLmxlbmd0aCB9O1xuICB9XG4gIGNvbnN0IHUgPSBuZXcgVVJMKGNvbm4udXJsKTtcbiAgcmV0dXJuIHsgbW9kZTogJ3VybCcsIGhvc3Q6IHUuaG9zdG5hbWUsIHBvcnQ6IHUucG9ydCB8fCAnNjM3OScsIHRsczogdS5wcm90b2NvbCA9PT0gJ3JlZGlzczonIH07XG59XG5cbnR5cGUgUmVkaXNDdG9yPFQ+ID0gbmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IFQ7XG5cbmZ1bmN0aW9uIGxvYWRJb3JlZGlzPFQ+KCk6IFJlZGlzQ3RvcjxUPiB7XG4gIGNvbnN0IHJlcSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbiAgY29uc3QgbW9kID0gcmVxKCdpb3JlZGlzJykgYXMgeyBSZWRpcz86IFJlZGlzQ3RvcjxUPjsgZGVmYXVsdD86IFJlZGlzQ3RvcjxUPiB9O1xuICByZXR1cm4gKG1vZC5SZWRpcyA/PyBtb2QuZGVmYXVsdCA/PyBtb2QpIGFzIFJlZGlzQ3RvcjxUPjtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYW4gaW9yZWRpcyBjbGllbnQgZm9yIGEgcmVzb2x2ZWQgY29ubmVjdGlvbi4gYG9wdGlvbnNgIGFyZSBtZXJnZWRcbiAqIGludG8gdGhlIGNsaWVudCBvcHRpb25zIChlLmcuIGB7IGRiLCBtYXhSZXRyaWVzUGVyUmVxdWVzdDogbnVsbCB9YCBmb3IgQnVsbE1RKS5cbiAqIEFuIGBlcnJvcmAgbGlzdGVuZXIgaXMgYWx3YXlzIGF0dGFjaGVkIHNvIGEgZHJvcHBlZCBjb25uZWN0aW9uIGlzIGxvZ2dlZFxuICogcmF0aGVyIHRoYW4gc3VyZmFjaW5nIGFzIGFuIHVuaGFuZGxlZCBgJ2Vycm9yJ2AgZXZlbnQgdGhhdCBjcmFzaGVzIE5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWRpc0NsaWVudDxUID0gdW5rbm93bj4oXG4gIGNvbm46IFJlZGlzQ29ubmVjdGlvbixcbiAgbGFiZWw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbik6IFQge1xuICBjb25zdCBDdG9yID0gbG9hZElvcmVkaXM8VD4oKTtcbiAgY29uc3QgYXV0aCA9IGNvbm4ucGFzc3dvcmQgPyB7IHBhc3N3b3JkOiBjb25uLnBhc3N3b3JkIH0gOiB7fTtcbiAgY29uc3QgaW5zdCA9IGNvbm4ubW9kZSA9PT0gJ3NlbnRpbmVsJ1xuICAgID8gbmV3IEN0b3Ioe1xuICAgICAgc2VudGluZWxzOiBjb25uLnNlbnRpbmVscyxcbiAgICAgIG5hbWU6IGNvbm4ubWFzdGVyTmFtZSxcbiAgICAgIC4uLihjb25uLnNlbnRpbmVsUGFzc3dvcmQgPyB7IHNlbnRpbmVsUGFzc3dvcmQ6IGNvbm4uc2VudGluZWxQYXNzd29yZCB9IDoge30pLFxuICAgICAgLi4uYXV0aCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSlcbiAgICA6IG5ldyBDdG9yKGNvbm4udXJsLCB7IC4uLmF1dGgsIC4uLm9wdGlvbnMgfSk7XG4gIChpbnN0IGFzIHVua25vd24gYXMgeyBvbjogKGV2dDogc3RyaW5nLCBjYjogKGU6IHVua25vd24pID0+IHZvaWQpID0+IHZvaWQgfSlcbiAgICAub24oJ2Vycm9yJywgKGUpID0+IGxvZ2dlci53YXJuKGBSZWRpcyAke2xhYmVsfSBjbGllbnQgZXJyb3JgLCB7IGVycm9yOiBlcnJvck1lc3NhZ2UoZSkgfSkpO1xuICByZXR1cm4gaW5zdDtcbn1cblxuLyoqXG4gKiBUaGUgc2hhcmVkIGFwcGxpY2F0aW9uIFJlZGlzIGNsaWVudDogYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCwgc29cbiAqIHRoZSBjYWxsZXIgZGVncmFkZXMgdG8gaXRzIG5vLVJlZGlzIGJlaGF2aW9yLlxuICpcbiAqIENvbW1hbmRzIGZhaWwgZmFzdCAoYG1heFJldHJpZXNQZXJSZXF1ZXN0OiAxYCwgbm8gb2ZmbGluZSBxdWV1ZSkgYmVjYXVzZSB0aGVcbiAqIHJlcXVlc3QtcGF0aCBjYWxsZXJzIGFyZSBiZXN0LWVmZm9ydCBvciBmYWlsIGNsb3NlZCBvbiB0aGVpciBvd24gdGVybXMg4oCUIGFcbiAqIHJlcXVlc3QgbXVzdCBub3QgaGFuZyBiZWhpbmQgYSBSZWRpcyBvdXRhZ2UuIFRoYXQgaW5jbHVkZXMgdGhlIG1vbWVudHMgYmVmb3JlXG4gKiB0aGUgZmlyc3QgY29ubmVjdGlvbiBjb21wbGV0ZXM6IGEgYmFja2dyb3VuZCBjYWxsZXIgdGhhdCBydW5zIGF0IHN0YXJ0dXAgbXVzdFxuICogZWl0aGVyIHRvbGVyYXRlIGEgcmVqZWN0ZWQgY29tbWFuZCBvciB3YWl0IHdpdGgge0BsaW5rIHdoZW5SZWRpc1JlYWR5fS5cbiAqXG4gKiBUaHJvd3Mge0BsaW5rIFJlZGlzQ29uZmlnRXJyb3J9IGZvciBhIGJhZCBjb25maWd1cmF0aW9uLCBhbmQgaWYgUmVkaXMgaXNcbiAqIGNvbmZpZ3VyZWQgYnV0IGBpb3JlZGlzYCBjYW4ndCBiZSBsb2FkZWQg4oCUIGJvdGggYXJlIGRlcGxveW1lbnQgZXJyb3JzIHRoYXRcbiAqIG11c3Qgbm90IHF1aWV0bHkgdHVybiBSZWRpcy1iYWNrZWQgZ3VhcmFudGVlcyBvZmYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnZSZWRpc0NsaWVudDxUID0gdW5rbm93bj4oXG4gIGxhYmVsOiBzdHJpbmcsXG4gIG9wdHM6IHsgcmVhZHlHYXRlPzogYm9vbGVhbjsgcmVhZHlUaW1lb3V0TXM/OiBudW1iZXIgfSA9IHt9LFxuKTogVCB8IG51bGwge1xuICBjb25zdCBjb25uID0gcmVzb2x2ZVJlZGlzQ29ubmVjdGlvbigpO1xuICBpZiAoIWNvbm4pIHJldHVybiBudWxsO1xuICBjb25zdCBpbnN0ID0gY3JlYXRlUmVkaXNDbGllbnQ8VD4oY29ubiwgbGFiZWwsIHsgbWF4UmV0cmllc1BlclJlcXVlc3Q6IDEsIGVuYWJsZU9mZmxpbmVRdWV1ZTogZmFsc2UgfSk7XG4gIGxvZ2dlci5pbmZvKGBSZWRpcyAke2xhYmVsfSBjbGllbnQgY3JlYXRlZGAsIGRlc2NyaWJlUmVkaXNDb25uZWN0aW9uKGNvbm4pKTtcbiAgcmV0dXJuIG9wdHMucmVhZHlHYXRlID09PSBmYWxzZVxuICAgID8gaW5zdFxuICAgIDogd2l0aFJlYWR5R2F0ZShpbnN0IGFzIFQgJiBSZWFkeUF3YXJlUmVkaXMsIGNyZWF0ZVJlZGlzUmVhZHlHYXRlKGluc3QgYXMgUmVhZHlBd2FyZVJlZGlzLCBvcHRzLnJlYWR5VGltZW91dE1zKSk7XG59XG5cbi8qKiBDbGllbnQgbWV0aG9kcyB0aGF0IGFyZSBzeW5jaHJvbm91cywgbWFuYWdlIHRoZSBjb25uZWN0aW9uIGl0c2VsZiwgb3IgYnVpbGRcbiAqICBhIGJhdGNoIOKAlCBuZXZlciBkZWZlcnJlZCBiZWhpbmQgdGhlIHJlYWRpbmVzcyBnYXRlLiAqL1xuY29uc3QgVU5HQVRFRF9NRVRIT0RTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdvbicsICdvbmNlJywgJ29mZicsICdhZGRMaXN0ZW5lcicsICdyZW1vdmVMaXN0ZW5lcicsICdyZW1vdmVBbGxMaXN0ZW5lcnMnLCAnZW1pdCcsXG4gICdsaXN0ZW5lcnMnLCAnbGlzdGVuZXJDb3VudCcsICdzZXRNYXhMaXN0ZW5lcnMnLCAnZ2V0TWF4TGlzdGVuZXJzJywgJ3ByZXBlbmRMaXN0ZW5lcicsXG4gICdjb25uZWN0JywgJ2Rpc2Nvbm5lY3QnLCAncXVpdCcsICdkdXBsaWNhdGUnLCAncGlwZWxpbmUnLCAnbXVsdGknLCAnZGVmaW5lQ29tbWFuZCcsXG5dKTtcblxuLyoqXG4gKiBXcmFwIGEgbm8tb2ZmbGluZS1xdWV1ZSBjbGllbnQgc28gZXZlcnkgY29tbWFuZCBmaXJzdCB3YWl0cyAoYm91bmRlZCwgbmV2ZXJcbiAqIHJlamVjdGluZyDigJQgc2VlIHtAbGluayBjcmVhdGVSZWRpc1JlYWR5R2F0ZX0pIGZvciB0aGUgY29ubmVjdGlvbi4gV2l0aG91dCBpdFxuICogdGhlIGZpcnN0IGNvbW1hbmQgYSBjYWxsZXIgaXNzdWVzIHJpZ2h0IGFmdGVyIGEgbGF6eSBjb25zdHJ1Y3Rpb24gaXMgcmVqZWN0ZWRcbiAqIG91dHJpZ2h0LCBlLmcuIGEgc3RhcnR1cCBjb25zdW1lci1ncm91cCBjcmVhdGUgb3IgdGhlIGZpcnN0IGlkZW1wb3RlbmN5IGNoZWNrLlxuICovXG5mdW5jdGlvbiB3aXRoUmVhZHlHYXRlPFQgZXh0ZW5kcyBvYmplY3Q+KGNsaWVudDogVCwgcmVhZHk6ICgpID0+IFByb21pc2U8dm9pZD4pOiBUIHtcbiAgcmV0dXJuIG5ldyBQcm94eShjbGllbnQsIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHByb3AgIT09ICdzdHJpbmcnIHx8IFVOR0FURURfTUVUSE9EUy5oYXMocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmJpbmQodGFyZ2V0KSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgYXdhaXQgcmVhZHkoKTtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyAoLi4uYTogdW5rbm93bltdKSA9PiB1bmtub3duKS5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIFRoZSBzdWJzZXQgb2YgaW9yZWRpcyBuZWVkZWQgdG8gd2FpdCBmb3IgYSBjb25uZWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkeUF3YXJlUmVkaXMge1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIG9uY2U/KGV2ZW50OiBzdHJpbmcsIGNiOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB2b2lkKTogdW5rbm93bjtcbiAgb2ZmPyhldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCk6IHVua25vd247XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvbmNlIGBjbGllbnRgIGlzIGNvbm5lY3RlZCBhbmQgcmVhZHkgZm9yIGNvbW1hbmRzLCBvciByZWplY3QgYWZ0ZXJcbiAqIGB0aW1lb3V0TXNgLiBGb3Igc3RhcnR1cCB3b3JrIChjcmVhdGluZyBhIGNvbnN1bWVyIGdyb3VwLCBzdWJzY3JpYmluZykgdGhhdFxuICogb3RoZXJ3aXNlIHJhY2VzIHRoZSBmaXJzdCBjb25uZWN0aW9uLiBBIGNsaWVudCB3aXRob3V0IGlvcmVkaXMnIGBzdGF0dXNgXG4gKiAoZS5nLiBhIHRlc3QgZG91YmxlKSBjb3VudHMgYXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGVuUmVkaXNSZWFkeShjbGllbnQ6IFJlYWR5QXdhcmVSZWRpcywgdGltZW91dE1zID0gMzBfMDAwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChjbGllbnQuc3RhdHVzID09PSB1bmRlZmluZWQgfHwgY2xpZW50LnN0YXR1cyA9PT0gJ3JlYWR5JyB8fCAhY2xpZW50Lm9uY2UpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBvblJlYWR5ID0gKCkgPT4geyBjbGVhclRpbWVvdXQodGltZXIpOyByZXNvbHZlKCk7IH07XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsaWVudC5vZmY/LigncmVhZHknLCBvblJlYWR5KTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYFJlZGlzIG5vdCByZWFkeSBhZnRlciAke3RpbWVvdXRNc31tc2ApKTtcbiAgICB9LCB0aW1lb3V0TXMpO1xuICAgIHRpbWVyLnVucmVmPy4oKTtcbiAgICBjbGllbnQub25jZSEoJ3JlYWR5Jywgb25SZWFkeSk7XG4gIH0pO1xufVxuXG4vKiogRGVmYXVsdCBib3VuZCBmb3Ige0BsaW5rIGNyZWF0ZVJlZGlzUmVhZHlHYXRlfTogc2hvcnQgZW5vdWdoIGZvciBhIHJlcXVlc3QgcGF0aC4gKi9cbmV4cG9ydCBjb25zdCBSRVFVRVNUX1BBVEhfUkVESVNfUkVBRFlfVElNRU9VVF9NUyA9IDJfMDAwO1xuXG4vKipcbiAqIEEgcmVxdWVzdC1wYXRoIHJlYWRpbmVzcyBnYXRlIGZvciBhIGxhemlseSBidWlsdCBlbnYgUmVkaXMgY2xpZW50LlxuICpcbiAqIFRoZSBlbnYgY2xpZW50IGhhcyBubyBvZmZsaW5lIHF1ZXVlLCBzbyBhIGNvbW1hbmQgaXNzdWVkIGJlZm9yZSB0aGUgZmlyc3RcbiAqIGNvbm5lY3Rpb24gY29tcGxldGVzIGlzIHJlamVjdGVkIG91dHJpZ2h0IOKAlCB0aGUgZmlyc3QgcmVxdWVzdCBhZnRlciBhIGxhenlcbiAqIGNvbnN0cnVjdGlvbiB3b3VsZCBvdGhlcndpc2UgaGl0IHRoYXQgcmVqZWN0aW9uIChlLmcuIHRoZSBmaXJzdCBzdGVwLXVwIHBlclxuICogcG9kIGZhaWxpbmcsIG9yIHRoZSBmaXJzdCBpbXBlcnNvbmF0aW9uIGNoZWNrIHJlYWRpbmcgXCJ1bmF2YWlsYWJsZVwiKS5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVzb2x2ZXMgb25jZSB0aGUgY2xpZW50IGlzIHJlYWR5LCBvciBhZnRlclxuICogYHRpbWVvdXRNc2Ag4oCUIGl0IE5FVkVSIHJlamVjdHM6IHRoZSBjYWxsZXIgdGhlbiBydW5zIGl0cyBjb21tYW5kIGFuZCBrZWVwcyBpdHNcbiAqIG93biBmYWlsLW9wZW4gLyBmYWlsLWNsb3NlZCBzZW1hbnRpY3MuIENvbmN1cnJlbnQgY2FsbGVycyBzaGFyZSBvbmUgd2FpdC4gQWZ0ZXJcbiAqIGEgd2FpdCB0aW1lcyBvdXQgKFJlZGlzIGdlbnVpbmVseSBkb3duKSBsYXRlciBjYWxscyBzdG9wIHdhaXRpbmcgdW50aWwgdGhlXG4gKiBjbGllbnQgcmVwb3J0cyBgcmVhZHlgIGFnYWluLCBzbyBhbiBvdXRhZ2UgY29zdHMgb25lIGJvdW5kZWQgd2FpdCBpbnN0ZWFkIG9mXG4gKiBhZGRpbmcgYHRpbWVvdXRNc2AgdG8gZXZlcnkgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlZGlzUmVhZHlHYXRlKFxuICBjbGllbnQ6IFJlYWR5QXdhcmVSZWRpcyxcbiAgdGltZW91dE1zID0gUkVRVUVTVF9QQVRIX1JFRElTX1JFQURZX1RJTUVPVVRfTVMsXG4pOiAoKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGluZmxpZ2h0OiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIGxldCBnYXZlVXAgPSBmYWxzZTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoY2xpZW50LnN0YXR1cyA9PT0gdW5kZWZpbmVkIHx8IGNsaWVudC5zdGF0dXMgPT09ICdyZWFkeScgfHwgIWNsaWVudC5vbmNlKSB7XG4gICAgICBnYXZlVXAgPSBmYWxzZTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgaWYgKGdhdmVVcCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmICghaW5mbGlnaHQpIHtcbiAgICAgIGluZmxpZ2h0ID0gd2hlblJlZGlzUmVhZHkoY2xpZW50LCB0aW1lb3V0TXMpXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgZ2F2ZVVwID0gdHJ1ZTtcbiAgICAgICAgICAvLyBSZS1hcm0gdGhlIHdhaXQgb25jZSB0aGUgY29ubmVjdGlvbiBjb21lcyBiYWNrLlxuICAgICAgICAgIGNsaWVudC5vbmNlISgncmVhZHknLCAoKSA9PiB7IGdhdmVVcCA9IGZhbHNlOyB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4geyBpbmZsaWdodCA9IG51bGw7IH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5mbGlnaHQ7XG4gIH07XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGlvcmVkaXMgbmVlZGVkIGJ5IHtAbGluayBpbmNyV2luZG93fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXNFdmFsQ2xpZW50IHtcbiAgZXZhbChzY3JpcHQ6IHN0cmluZywgbnVtS2V5czogbnVtYmVyLCAuLi5hcmdzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBJTkNSIGEgZml4ZWQtd2luZG93IGNvdW50ZXIgYW5kIG1ha2Ugc3VyZSBpdCBjYXJyaWVzIGEgVFRMLCBhdG9taWNhbGx5LlxuICpcbiAqIEEgc2VwYXJhdGUgYElOQ1JgIHRoZW4gYEVYUElSRWAgaXMgbm90IGF0b21pYzogaWYgdGhlIEVYUElSRSBpcyBsb3N0IChhXG4gKiBjb25uZWN0aW9uIGRyb3AsIGEgZmFpbG92ZXIgYmV0d2VlbiB0aGUgdHdvIGNvbW1hbmRzKSB0aGUga2V5IG5ldmVyIGV4cGlyZXNcbiAqIGFuZCB0aGUgY291bnRlciBzdGF5cyBvdmVyIGl0cyBsaW1pdCBmb3JldmVyLiBUaGUgc2NyaXB0IGFsc28gaGVhbHMgYSBrZXlcbiAqIHRoYXQgc29tZWhvdyBsYWNrcyBhIFRUTCAoYFBUVExgID0gLTEpIHJhdGhlciB0aGFuIG9ubHkgc2V0dGluZyBpdCBvbiB0aGVcbiAqIGZpcnN0IGhpdC5cbiAqL1xuY29uc3QgSU5DUl9XSU5ET1dfU0NSSVBUID0gYFxubG9jYWwgbiA9IHJlZGlzLmNhbGwoJ0lOQ1InLCBLRVlTWzFdKVxuaWYgbiA9PSAxIG9yIHJlZGlzLmNhbGwoJ1BUVEwnLCBLRVlTWzFdKSA8IDAgdGhlblxuICByZWRpcy5jYWxsKCdQRVhQSVJFJywgS0VZU1sxXSwgQVJHVlsxXSlcbmVuZFxucmV0dXJuIG5gO1xuXG4vKipcbiAqIEluY3JlbWVudCBga2V5YCB3aXRoaW4gYSB3aW5kb3cgb2YgYHdpbmRvd01zYCBhbmQgcmV0dXJuIHRoZSBuZXcgY291bnQuXG4gKiBUaHJvd3Mgd2hlbiBSZWRpcyBlcnJvcnMg4oCUIGNhbGxlcnMgY2hvb3NlIHRoZWlyIG93biBmYWlsdXJlIHBvbGljeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluY3JXaW5kb3cocmVkaXM6IFJlZGlzRXZhbENsaWVudCwga2V5OiBzdHJpbmcsIHdpbmRvd01zOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBuID0gYXdhaXQgcmVkaXMuZXZhbChJTkNSX1dJTkRPV19TQ1JJUFQsIDEsIGtleSwgTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHdpbmRvd01zKSkpO1xuICByZXR1cm4gTnVtYmVyKG4pO1xufVxuIl19
@@ -217,8 +217,18 @@ export class InternalHttpClient {
217
217
  */
218
218
  request(method, path, body, options) {
219
219
  return new Promise((resolve, reject) => {
220
+ // A Buffer body is sent AS-IS. Without this every caller had to hand over
221
+ // an object to be `JSON.stringify`'d, which for a large pre-serialized
222
+ // document (an SPDX SBOM read off disk) meant parsing it to an object only
223
+ // so this could serialize it straight back — two full copies of a
224
+ // multi-megabyte string to move bytes that were already on disk.
225
+ //
226
+ // Deliberately narrow: ONLY a Buffer opts out. Anything else keeps the
227
+ // JSON contract every other caller relies on, so this cannot quietly
228
+ // change how an ordinary object body is sent.
229
+ const raw = Buffer.isBuffer(body) ? body : undefined;
220
230
  // Serialize when body is defined (including 0/false/'' which are valid JSON values).
221
- const bodyStr = body !== undefined ? JSON.stringify(body) : undefined;
231
+ const bodyStr = raw === undefined && body !== undefined ? JSON.stringify(body) : undefined;
222
232
  const headers = {
223
233
  'Content-Type': 'application/json',
224
234
  ...options?.headers,
@@ -230,6 +240,9 @@ export class InternalHttpClient {
230
240
  if (bodyStr) {
231
241
  headers['Content-Length'] = Buffer.byteLength(bodyStr);
232
242
  }
243
+ else if (raw) {
244
+ headers['Content-Length'] = raw.length;
245
+ }
233
246
  // Validate path to prevent protocol injection / request smuggling
234
247
  if (path.includes('://') || path.startsWith('//') || /[\r\n\0]/.test(path)) {
235
248
  throw new Error(`Invalid request path: ${path}`);
@@ -347,7 +360,10 @@ export class InternalHttpClient {
347
360
  req.destroy();
348
361
  }, timeoutMs);
349
362
  deadline.unref?.();
350
- if (bodyStr) {
363
+ if (raw) {
364
+ req.write(raw);
365
+ }
366
+ else if (bodyStr) {
351
367
  req.write(bodyStr);
352
368
  }
353
369
  req.end();
@@ -415,4 +431,4 @@ export function createSafeClient(config, options) {
415
431
  },
416
432
  };
417
433
  }
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixHQUV0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUU5RTs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQUcsTUFB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LENBQUM7WUFDL0MsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBnZXRDaXJjdWl0QnJlYWtlciwgY2lyY3VpdEJyZWFrZXJLZXksIENpcmN1aXRPcGVuRXJyb3IgfSBmcm9tICcuL2NpcmN1aXQtYnJlYWtlci5qcyc7XG5pbXBvcnQge1xuICBERUZBVUxUX01BWF9SRVRSSUVTLFxuICBERUZBVUxUX1JFVFJZX0RFTEFZX01TLFxuICBERUZBVUxUX01BWF9SQVRFX0xJTUlUX1JFVFJJRVMsXG4gIGdldFJldHJ5RGVjaXNpb24sXG4gIGdldEVycm9yUmV0cnlEZWNpc2lvbixcbiAgdHlwZSBSZXRyeUNvbmZpZyxcbn0gZnJvbSAnLi9yZXRyeS1zdHJhdGVneS5qcyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzL2h0dHAtc3RhdHVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbmZpZyB9IGZyb20gJy4uL3R5cGVzL2NvbW1vbi5qcyc7XG5pbXBvcnQgeyBzbGVlcCB9IGZyb20gJy4uL3V0aWxzL2NvbmN1cnJlbmN5LmpzJztcbmltcG9ydCB7IGVudkludCB9IGZyb20gJy4uL3V0aWxzL2Vudi5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignaHR0cC1jbGllbnQnKTtcblxuLyoqXG4gKiBEZWZhdWx0IHJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKGVudjogYEhUVFBfQ0xJRU5UX1RJTUVPVVRgKS5cbiAqL1xuY29uc3QgREVGQVVMVF9USU1FT1VUID0gZW52SW50KCdIVFRQX0NMSUVOVF9USU1FT1VUJywgNTAwMCwgeyBtaW46IDEgfSk7XG5cbi8qKlxuICogRGVmYXVsdCBjYXAgb24gY29uY3VycmVudCBrZWVwLWFsaXZlIHNvY2tldHMgcGVyIGNsaWVudCBhZ2VudFxuICogKGVudjogYEhUVFBfQ0xJRU5UX01BWF9TT0NLRVRTYCkuIE5vZGUncyBkZWZhdWx0IGlzIGBJbmZpbml0eWAsIHdoaWNoIGxldHMgYVxuICogYnVyc3Qgb2YgY29uY3VycmVudCBjYWxscyBvcGVuIHVuYm91bmRlZCBzb2NrZXRzIGFnYWluc3QgYSBkb3duc3RyZWFtIHNlcnZpY2VcbiAqIChmZCBleGhhdXN0aW9uICsgY29ubmVjdGlvbi1zdG9ybSBvbiB0aGUgY2FsbGVlKS4gNjQgaXMgYW1wbGUgZm9yXG4gKiBzZXJ2aWNlLXRvLXNlcnZpY2UgZmFuLW91dCB3aGlsZSBzdGF5aW5nIGJvdW5kZWQuXG4gKi9cbmNvbnN0IERFRkFVTFRfTUFYX1NPQ0tFVFMgPSBlbnZJbnQoJ0hUVFBfQ0xJRU5UX01BWF9TT0NLRVRTJywgNjQsIHsgbWluOiAxIH0pO1xuXG4vKipcbiAqIERlZmF1bHQgY2FwIG9uIGEgcmVzcG9uc2UgYm9keSAoYnl0ZXM7IGVudjogYEhUVFBfQ0xJRU5UX01BWF9SRVNQT05TRV9CWVRFU2AsXG4gKiBkZWZhdWx0IDEwIE1pQikuIEV2ZXJ5IHJlc3BvbnNlIGlzIGJ1ZmZlcmVkIGFuZCBKU09OLXBhcnNlZCBpbiBtZW1vcnksIHNvIGFuXG4gKiB1bmJvdW5kZWQgYm9keSBmcm9tIGEgbWlzYmVoYXZpbmcgKG9yIGNvbXByb21pc2VkKSBwZWVyIGlzIGEgbWVtb3J5IERvUyBvbiB0aGVcbiAqIGNhbGxlci4gRXhjZWVkaW5nIGl0IGFib3J0cyB0aGUgcmVxdWVzdCB3aXRoIHtAbGluayBSZXNwb25zZVRvb0xhcmdlRXJyb3J9LlxuICovXG5jb25zdCBERUZBVUxUX01BWF9SRVNQT05TRV9CWVRFUyA9IGVudkludCgnSFRUUF9DTElFTlRfTUFYX1JFU1BPTlNFX0JZVEVTJywgMTAgKiAxMDI0ICogMTAyNCwgeyBtaW46IDEgfSk7XG5cbi8qKiBBIHJlc3BvbnNlIGJvZHkgZXhjZWVkZWQgdGhlIGNsaWVudCdzIGBtYXhSZXNwb25zZUJ5dGVzYC4gTm90IHJldHJpZWQuICovXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VUb29MYXJnZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gJ1JFU1BPTlNFX1RPT19MQVJHRSc7XG4gIGNvbnN0cnVjdG9yKGxpbWl0OiBudW1iZXIpIHtcbiAgICBzdXBlcihgUmVzcG9uc2UgYm9keSBleGNlZWRlZCAke2xpbWl0fSBieXRlc2ApO1xuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVRvb0xhcmdlRXJyb3InO1xuICB9XG59XG5cbi8vIEhUVFAgbWV0aG9kcyB0aGF0IGFyZSBpZGVtcG90ZW50IGJ5IGRlZmluaXRpb24g4oCUIHNhZmUgdG8gYXV0by1yZXRyeSBvbiBhXG4vLyA1eHgvY29ubmVjdGlvbi90aW1lb3V0IHdpdGhvdXQgcmlza2luZyBhIGR1cGxpY2F0ZSBzaWRlIGVmZmVjdC5cbmNvbnN0IElERU1QT1RFTlRfTUVUSE9EUyA9IG5ldyBTZXQoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJ10pO1xuXG4vKipcbiAqIEhUVFAgcmVxdWVzdCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zIHtcbiAgLyoqIFJlcXVlc3QgaGVhZGVycyAqL1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gcmV0cnkgYXR0ZW1wdHMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcyAoZGVmYXVsdDogMikgKi9cbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIEJhc2UgZGVsYXkgYmV0d2VlbiByZXRyaWVzIGluIG1zIOKAlCBkb3VibGVzIGVhY2ggYXR0ZW1wdCAoZGVmYXVsdDogMjAwKSAqL1xuICByZXRyeURlbGF5TXM/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHJldHJ5IGF0dGVtcHRzIHNwZWNpZmljYWxseSBmb3IgNDI5IHJhdGUgbGltaXRpbmcgKGRlZmF1bHQ6IDQpICovXG4gIG1heFJhdGVMaW1pdFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCByZXF1ZXN0IElEIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIChhZGRlZCBhcyBYLVJlcXVlc3QtSWQgaGVhZGVyKSAqL1xuICByZXF1ZXN0SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUcmVhdCB0aGlzIHJlcXVlc3QgYXMgc2FmZSB0byBhdXRvLXJldHJ5IG9uIDV4eC9jb25uZWN0aW9uL3RpbWVvdXQgZXZlblxuICAgKiB0aG91Z2ggdGhlIG1ldGhvZCBpcyBub24taWRlbXBvdGVudCAoZS5nLiB0aGUgZW5kcG9pbnQgaXMgaWRlbXBvdGVudCBieSBhblxuICAgKiBJZGVtcG90ZW5jeS1LZXksIG9yIHRoZSBvcGVyYXRpb24gaXMgbmF0dXJhbGx5IGlkZW1wb3RlbnQpLiBEZWZhdWx0IGZhbHNlOlxuICAgKiBub24taWRlbXBvdGVudCBtZXRob2RzIGFyZSBOT1QgcmV0cmllZCBvbiB0aG9zZSBmYWlsdXJlcywgb25seSBvbiA0MjkuXG4gICAqL1xuICBpZGVtcG90ZW50PzogYm9vbGVhbjtcbiAgLyoqIENhcCBvbiB0aGlzIHJlc3BvbnNlJ3MgYm9keSBpbiBieXRlcyAoZGVmYXVsdDogdGhlIGNsaWVudCdzLCBlbHNlIDEwIE1pQikuICovXG4gIG1heFJlc3BvbnNlQnl0ZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSb3V0ZSBjbGFzcyBmb3IgdGhlIGNpcmN1aXQgYnJlYWtlciAoZGVmYXVsdDogdGhlIGNsaWVudCdzLCBlbHNlXG4gICAqIGAnZGVmYXVsdCdgKS4gUmVxdWVzdHMgaW4gZGlmZmVyZW50IGNsYXNzZXMgdG8gdGhlIHNhbWUgYGhvc3Q6cG9ydGAgdHJpcFxuICAgKiBpbmRlcGVuZGVudCBicmVha2VycyDigJQgc2VlIGBjaXJjdWl0QnJlYWtlcktleWAuXG4gICAqL1xuICBicmVha2VyQ2xhc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSFRUUCBjbGllbnQgcmVzcG9uc2Ugd3JhcHBlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50UmVzcG9uc2U8VCA9IHVua25vd24+IHtcbiAgLyoqIEhUVFAgc3RhdHVzIGNvZGUgKi9cbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICAvKiogUmVzcG9uc2UgYm9keSAocGFyc2VkIEpTT04pICovXG4gIGJvZHk6IFQ7XG4gIC8qKiBSZXNwb25zZSBoZWFkZXJzICovXG4gIGhlYWRlcnM6IGh0dHAuSW5jb21pbmdIdHRwSGVhZGVycztcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBIVFRQIGNsaWVudCBmb3Igc2VydmljZS10by1zZXJ2aWNlIGNvbW11bmljYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBJbnRlcm5hbEh0dHBDbGllbnQoe1xuICogICBob3N0OiAncXVvdGEnLFxuICogICBwb3J0OiAzMDAwLFxuICogICB0aW1lb3V0OiA1MDAwLFxuICogfSk7XG4gKlxuICogY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0KCcvb3JnMTIzL2FwaUNhbGxzJyk7XG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQucG9zdCgnL29yZzEyMy9pbmNyZW1lbnQnLCB7IHF1b3RhVHlwZTogJ2FwaUNhbGxzJyB9KTtcbiAqIGBgYFxuICovXG4vKipcbiAqIE9wdGlvbnMgY29udHJvbGxpbmcgdGhlIGNsaWVudCdzIGNvbm5lY3Rpb24gcG9vbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGNhbGxlci1vd25lZCBgaHR0cC5BZ2VudGAgdG8gdXNlIGluc3RlYWQgb2YgdGhlIHByb2Nlc3Mtd2lkZSBzaGFyZWQgb25lLlxuICAgKiBUaGUgY2xpZW50IG5ldmVyIGRlc3Ryb3lzIGl0LlxuICAgKi9cbiAgYWdlbnQ/OiBodHRwLkFnZW50O1xuICAvKiogQ2FwIG9uIGNvbmN1cnJlbnQga2VlcC1hbGl2ZSBzb2NrZXRzIGZvciB0aGUgc2hhcmVkIGFnZW50IChkZWZhdWx0IDY0KS4gKi9cbiAgbWF4U29ja2V0cz86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgY2lyY3VpdC1icmVha2VyIHJvdXRlIGNsYXNzIGZvciB0aGlzIGNsaWVudCdzIHJlcXVlc3RzLiAqL1xuICBicmVha2VyQ2xhc3M/OiBzdHJpbmc7XG4gIC8qKiBEZWZhdWx0IHJlc3BvbnNlLWJvZHkgY2FwIChieXRlcykgZm9yIHRoaXMgY2xpZW50J3MgcmVxdWVzdHMuICovXG4gIG1heFJlc3BvbnNlQnl0ZXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvY2Vzcy13aWRlIGtlZXAtYWxpdmUgYWdlbnRzLCBvbmUgcGVyIGBob3N0OnBvcnRgIChhbmQgc29ja2V0IGNhcCkg4oCUXG4gKiBtaXJyb3JpbmcgdGhlIHBlci10YXJnZXQgY2lyY3VpdC1icmVha2VyIHJlZ2lzdHJ5LiBDbGllbnRzIGFyZSBjaGVhcCBhbmQgb2Z0ZW5cbiAqIGJ1aWx0IHBlciBjYWxsIChhbiBvcmctaGllcmFyY2h5IHdhbGsgYnVpbGRzIG9uZSBwZXIgaG9wKSwgc28gYSBwZXItY2xpZW50XG4gKiBhZ2VudCB0aHJldyBhd2F5IGl0cyBwb29sZWQgc29ja2V0cyBldmVyeSB0aW1lIGFuZCB0aGUgc29ja2V0IGNhcCBib3VuZGVkXG4gKiBub3RoaW5nLiBTaGFyaW5nIHRoZSBhZ2VudCBwb29scyBjb25uZWN0aW9ucyB0byBhIGRvd25zdHJlYW0gYWNyb3NzIGV2ZXJ5XG4gKiBjbGllbnQgdGhhdCB0YXJnZXRzIGl0LlxuICovXG5jb25zdCBzaGFyZWRBZ2VudHMgPSBuZXcgTWFwPHN0cmluZywgaHR0cC5BZ2VudD4oKTtcblxuZnVuY3Rpb24gZ2V0U2hhcmVkQWdlbnQoaG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIG1heFNvY2tldHM6IG51bWJlcik6IGh0dHAuQWdlbnQge1xuICBjb25zdCBrZXkgPSBgJHtob3N0fToke3BvcnR9OiR7bWF4U29ja2V0c31gO1xuICBsZXQgYWdlbnQgPSBzaGFyZWRBZ2VudHMuZ2V0KGtleSk7XG4gIGlmICghYWdlbnQpIHtcbiAgICBhZ2VudCA9IG5ldyBodHRwLkFnZW50KHsga2VlcEFsaXZlOiB0cnVlLCBtYXhTb2NrZXRzIH0pO1xuICAgIHNoYXJlZEFnZW50cy5zZXQoa2V5LCBhZ2VudCk7XG4gIH1cbiAgcmV0dXJuIGFnZW50O1xufVxuXG4vKipcbiAqIENsb3NlIGV2ZXJ5IHNoYXJlZCBrZWVwLWFsaXZlIGFnZW50IChpZGxlIHNvY2tldHMgYXJlIHJlbGVhc2VkOyBpbi1mbGlnaHRcbiAqIHJlcXVlc3RzIGZpbmlzaCkuIEZvciBwcm9jZXNzIHNodXRkb3duIGFuZCB0ZXN0cyDigJQgYSBsYXRlciByZXF1ZXN0IHNpbXBseVxuICogYnVpbGRzIGEgZnJlc2ggYWdlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXN0cm95U2hhcmVkSHR0cEFnZW50cygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBhZ2VudCBvZiBzaGFyZWRBZ2VudHMudmFsdWVzKCkpIGFnZW50LmRlc3Ryb3koKTtcbiAgc2hhcmVkQWdlbnRzLmNsZWFyKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbEh0dHBDbGllbnQge1xuICBwcml2YXRlIGNvbmZpZzogUmVxdWlyZWQ8U2VydmljZUNvbmZpZz47XG4gIHByaXZhdGUgYWdlbnQ6IGh0dHAuQWdlbnQ7XG4gIHByaXZhdGUgYnJlYWtlckNsYXNzPzogc3RyaW5nO1xuICBwcml2YXRlIG1heFJlc3BvbnNlQnl0ZXM6IG51bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEhUVFAgY2xpZW50IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIC0gU2VydmljZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29ubmVjdGlvbi1wb29sIGNvbnRyb2xzIChvd24gYWdlbnQgLyBzb2NrZXQgY2FwKVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnOiBTZXJ2aWNlQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudE9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICB0aW1lb3V0OiBjb25maWcudGltZW91dCA/PyBERUZBVUxUX1RJTUVPVVQsXG4gICAgfTtcbiAgICB0aGlzLmFnZW50ID0gb3B0aW9ucz8uYWdlbnRcbiAgICAgID8/IGdldFNoYXJlZEFnZW50KHRoaXMuY29uZmlnLmhvc3QsIHRoaXMuY29uZmlnLnBvcnQsIG9wdGlvbnM/Lm1heFNvY2tldHMgPz8gREVGQVVMVF9NQVhfU09DS0VUUyk7XG4gICAgdGhpcy5icmVha2VyQ2xhc3MgPSBvcHRpb25zPy5icmVha2VyQ2xhc3M7XG4gICAgdGhpcy5tYXhSZXNwb25zZUJ5dGVzID0gb3B0aW9ucz8ubWF4UmVzcG9uc2VCeXRlcyA/PyBERUZBVUxUX01BWF9SRVNQT05TRV9CWVRFUztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgR0VUIHJlcXVlc3QuXG4gICAqL1xuICBhc3luYyBnZXQ8VCA9IHVua25vd24+KHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aFJldHJ5PFQ+KCdHRVQnLCBwYXRoLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBQT1NUIHJlcXVlc3QuXG4gICAqL1xuICBhc3luYyBwb3N0PFQgPSB1bmtub3duPihcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYm9keT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RXaXRoUmV0cnk8VD4oJ1BPU1QnLCBwYXRoLCBib2R5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgUFVUIHJlcXVlc3QuXG4gICAqL1xuICBhc3luYyBwdXQ8VCA9IHVua25vd24+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMsXG4gICk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFdpdGhSZXRyeTxUPignUFVUJywgcGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIERFTEVURSByZXF1ZXN0LlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlPFQgPSB1bmtub3duPihwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFdpdGhSZXRyeTxUPignREVMRVRFJywgcGF0aCwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHdpdGggcmV0cnkgbG9naWMgZm9yIHRyYW5zaWVudCBmYWlsdXJlcy5cbiAgICpcbiAgICogLSA0MjkgKHJhdGUgbGltaXQpOiByZXNwZWN0cyBgUmV0cnktQWZ0ZXJgIGhlYWRlciwgdXNlcyBsb25nZXIgYmFzZSBkZWxheSAoNHgpLFxuICAgKiAgIHJldHJpZXMgdXAgdG8gYG1heFJhdGVMaW1pdFJldHJpZXNgIHRpbWVzIChkZWZhdWx0IDQpLlxuICAgKiAtIDUwMi81MDMvNTA0IChzZXJ2ZXIgZXJyb3JzKTogc3RhbmRhcmQgZXhwb25lbnRpYWwgYmFja29mZiwgdXAgdG8gYG1heFJldHJpZXNgIChkZWZhdWx0IDIpLlxuICAgKiAtIENvbm5lY3Rpb24gZXJyb3JzIC8gdGltZW91dHM6IHJldHJpZXMgdXAgdG8gYG1heFJldHJpZXNgLlxuICAgKiAtIEFsbCBkZWxheXMgaW5jbHVkZSDCsTI1JSBqaXR0ZXIgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlcXVlc3RXaXRoUmV0cnk8VD4oXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJvZHk/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4+IHtcbiAgICAvLyBBIG1hbGZvcm1lZCBwYXRoIGlzIGEgQ0xJRU5UIGJ1Zywgbm90IGEgZG93bnN0cmVhbSBmYXVsdCDigJQgcmVqZWN0IGl0IHVwXG4gICAgLy8gZnJvbnQgc28gaXQgbmV2ZXIgYnVybnMgcmV0cmllcyBvciBmZWVkcyB0aGUgY2lyY3VpdCBicmVha2VyICh3aGljaCB3b3VsZFxuICAgIC8vIG90aGVyd2lzZSBzaGVkIHRyYWZmaWMgdG8gYSBwZXJmZWN0bHkgaGVhbHRoeSBkb3duc3RyZWFtKS4gcmVxdWVzdCgpIGtlZXBzXG4gICAgLy8gdGhlIHNhbWUgZ3VhcmQgYXMgZGVmZW5jZS1pbi1kZXB0aC5cbiAgICBpZiAocGF0aC5pbmNsdWRlcygnOi8vJykgfHwgcGF0aC5zdGFydHNXaXRoKCcvLycpIHx8IC9bXFxyXFxuXFwwXS8udGVzdChwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlcXVlc3QgcGF0aDogJHtwYXRofWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5Q29uZmlnOiBSZXRyeUNvbmZpZyA9IHtcbiAgICAgIG1heFJldHJpZXM6IG9wdGlvbnM/Lm1heFJldHJpZXMgPz8gREVGQVVMVF9NQVhfUkVUUklFUyxcbiAgICAgIG1heFJhdGVMaW1pdFJldHJpZXM6IG9wdGlvbnM/Lm1heFJhdGVMaW1pdFJldHJpZXMgPz8gREVGQVVMVF9NQVhfUkFURV9MSU1JVF9SRVRSSUVTLFxuICAgICAgcmV0cnlEZWxheU1zOiBvcHRpb25zPy5yZXRyeURlbGF5TXMgPz8gREVGQVVMVF9SRVRSWV9ERUxBWV9NUyxcbiAgICB9O1xuICAgIGNvbnN0IHRvdGFsTWF4QXR0ZW1wdHMgPSBNYXRoLm1heChyZXRyeUNvbmZpZy5tYXhSZXRyaWVzLCByZXRyeUNvbmZpZy5tYXhSYXRlTGltaXRSZXRyaWVzID8/IERFRkFVTFRfTUFYX1JBVEVfTElNSVRfUkVUUklFUyk7XG5cbiAgICAvLyBXaGV0aGVyIGl0J3Mgc2FmZSB0byBhdXRvLXJldHJ5IHRoaXMgcmVxdWVzdCBvbiBhIDV4eC9jb25uZWN0aW9uL3RpbWVvdXQuXG4gICAgLy8gQSB0aW1lZC1vdXQgUE9TVCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIHNlcnZlci1zaWRlLCBzbyByZXRyeWluZ1xuICAgIC8vIGEgbm9uLWlkZW1wb3RlbnQgcmVxdWVzdCByaXNrcyBhIERVUExJQ0FURSBzaWRlIGVmZmVjdCAoZG91YmxlLWNoYXJnZSxcbiAgICAvLyBkb3VibGUtY3JlYXRlKS4gT25seSBHRVQvSEVBRC9PUFRJT05TLCBhbiBleHBsaWNpdCBgaWRlbXBvdGVudGAgb3B0LWluLCBvclxuICAgIC8vIGEgcmVxdWVzdCBjYXJyeWluZyBhbiBJZGVtcG90ZW5jeS1LZXkgYXJlIGF1dG8tcmV0cmllZCBvbiB0aG9zZSBmYWlsdXJlcy5cbiAgICAvLyAoNDI5IGlzIGFsd2F5cyByZXRyaWVkIOKAlCBzZWUgYmVsb3cg4oCUIHNpbmNlIGl0IHdhcyByZWplY3RlZCwgbm90IHByb2Nlc3NlZC4pXG4gICAgY29uc3QgcmV0cnlTYWZlID1cbiAgICAgIElERU1QT1RFTlRfTUVUSE9EUy5oYXMobWV0aG9kLnRvVXBwZXJDYXNlKCkpIHx8XG4gICAgICBvcHRpb25zPy5pZGVtcG90ZW50ID09PSB0cnVlIHx8XG4gICAgICAhIShvcHRpb25zPy5oZWFkZXJzICYmIChvcHRpb25zLmhlYWRlcnNbJ0lkZW1wb3RlbmN5LUtleSddIHx8IG9wdGlvbnMuaGVhZGVyc1snaWRlbXBvdGVuY3kta2V5J10pKTtcblxuICAgIC8vIFBlci10YXJnZXQgY2lyY3VpdCBicmVha2VyICsgUzJTIHJlcXVlc3QgbWV0cmljcy4gYHRhcmdldGAgaXMgdGhlIHNoYXJlZFxuICAgIC8vIGJyZWFrZXIvbWV0cmljIGtleSBzbyBvbmUgYmFkIGRvd25zdHJlYW0gdHJpcHMgb25jZSAobm90IG9uY2UtcGVyLWNsaWVudClcbiAgICAvLyBhbmQgZGFzaGJvYXJkcyBjYW4gc2VlIFMyUyBoZWFsdGggcGVyIGNhbGxlZS5cbiAgICBjb25zdCB0YXJnZXQgPSBgJHt0aGlzLmNvbmZpZy5ob3N0fToke3RoaXMuY29uZmlnLnBvcnR9YDtcbiAgICBjb25zdCBicmVha2VyID0gZ2V0Q2lyY3VpdEJyZWFrZXIoY2lyY3VpdEJyZWFrZXJLZXkodGFyZ2V0LCBvcHRpb25zPy5icmVha2VyQ2xhc3MgPz8gdGhpcy5icmVha2VyQ2xhc3MpKTtcbiAgICBpZiAoIWJyZWFrZXIuYWxsb3dSZXF1ZXN0KCkpIHtcbiAgICAgIC8vIEZhc3QtZmFpbCB3aXRob3V0IHRvdWNoaW5nIHRoZSBuZXR3b3JrIOKAlCB0aGlzIGlzIHRoZSBsb2FkLXNoZWRkaW5nIHRoYXRcbiAgICAgIC8vIHByZXZlbnRzIGEgZG93bnN0cmVhbSBicm93bm91dCBmcm9tIGNhc2NhZGluZyB2aWEgcmV0cnkgc3Rvcm1zLlxuICAgICAgZW1pdENvdW50ZXIoJ3Myc19yZXF1ZXN0c190b3RhbCcsIHsgdGFyZ2V0LCBtZXRob2QsIG91dGNvbWU6ICdjaXJjdWl0X29wZW4nIH0pO1xuICAgICAgdGhyb3cgbmV3IENpcmN1aXRPcGVuRXJyb3IodGFyZ2V0KTtcbiAgICB9XG5cbiAgICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IHRvdGFsTWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3Q8VD4obWV0aG9kLCBwYXRoLCBib2R5LCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGdldFJldHJ5RGVjaXNpb24ocmVzcG9uc2Uuc3RhdHVzQ29kZSwgcmVzcG9uc2UuaGVhZGVycywgYXR0ZW1wdCwgcmV0cnlDb25maWcpO1xuICAgICAgICAvLyA0MjkgaXMgc2FmZSB0byByZXRyeSBmb3IgQU5ZIG1ldGhvZCAocmF0ZS1saW1pdGVkIOKGkiBub3QgcHJvY2Vzc2VkKTsgYVxuICAgICAgICAvLyA1eHgvZ2F0ZXdheSBlcnJvciBpcyBvbmx5IHJldHJpZWQgd2hlbiB0aGUgcmVxdWVzdCBpcyByZXRyeS1zYWZlLlxuICAgICAgICBpZiAoZGVjaXNpb24uc2hvdWxkUmV0cnkgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQyOSB8fCByZXRyeVNhZmUpKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGRlY2lzaW9uLnJlYXNvbiArICcsIHJldHJ5aW5nJywgeyBtZXRob2QsIHBhdGgsIGF0dGVtcHQ6IGF0dGVtcHQgKyAxLCBkZWxheU1zOiBkZWNpc2lvbi5kZWxheU1zIH0pO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdzMnNfcmVxdWVzdF9yZXRyaWVzX3RvdGFsJywgeyB0YXJnZXQsIG1ldGhvZCB9KTtcbiAgICAgICAgICBhd2FpdCBzbGVlcChkZWNpc2lvbi5kZWxheU1zKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRlcm1pbmFsIHJlc3BvbnNlLiBBIDV4eCBpcyBhIGRvd25zdHJlYW0gZmF1bHQgKGZlZWRzIHRoZSBicmVha2VyKTsgYVxuICAgICAgICAvLyA0MjkgaXMgYmFja3ByZXNzdXJlLCBub3QgYSBmYXVsdCDigJQgdGhlIHNlcnZpY2UgYW5zd2VyZWQsIHNvIGl0IGNvdW50c1xuICAgICAgICAvLyBhcyBzdWNjZXNzIGZvciBicmVha2VyIHB1cnBvc2VzIChuZXZlciB0cmlwIHRoZSBicmVha2VyIG9uIHJhdGUgbGltaXRzKS5cbiAgICAgICAgY29uc3QgaXNTZXJ2ZXJGYXVsdCA9IHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gNTAwICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPD0gNTk5O1xuICAgICAgICBpZiAoaXNTZXJ2ZXJGYXVsdCkge1xuICAgICAgICAgIGJyZWFrZXIucmVjb3JkRmFpbHVyZSgpO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdzMnNfcmVxdWVzdHNfdG90YWwnLCB7IHRhcmdldCwgbWV0aG9kLCBvdXRjb21lOiAnc2VydmVyX2Vycm9yJyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVha2VyLnJlY29yZFN1Y2Nlc3MoKTtcbiAgICAgICAgICBlbWl0Q291bnRlcignczJzX3JlcXVlc3RzX3RvdGFsJywgeyB0YXJnZXQsIG1ldGhvZCwgb3V0Y29tZTogJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcblxuICAgICAgICAvLyBBbiBvdmVyc2l6ZWQgYm9keSBpcyB0aGUgcGVlcidzIGNvbnRlbnQsIG5vdCBhIHRyYW5zaWVudCBmYXVsdDogbmV2ZXJcbiAgICAgICAgLy8gcmUtZG93bmxvYWQgaXQsIGFuZCBuZXZlciBjb3VudCBpdCBhZ2FpbnN0IHRoZSBicmVha2VyLlxuICAgICAgICBpZiAobGFzdEVycm9yIGluc3RhbmNlb2YgUmVzcG9uc2VUb29MYXJnZUVycm9yKSB7XG4gICAgICAgICAgYnJlYWtlci5yZWNvcmRTdWNjZXNzKCk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ3Myc19yZXF1ZXN0c190b3RhbCcsIHsgdGFyZ2V0LCBtZXRob2QsIG91dGNvbWU6ICd0b29fbGFyZ2UnIH0pO1xuICAgICAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGdldEVycm9yUmV0cnlEZWNpc2lvbihhdHRlbXB0LCByZXRyeUNvbmZpZyk7XG4gICAgICAgIGlmIChkZWNpc2lvbi5zaG91bGRSZXRyeSAmJiByZXRyeVNhZmUpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ1JldHJ5aW5nIGFmdGVyIGVycm9yJywgeyBtZXRob2QsIHBhdGgsIGVycm9yOiBsYXN0RXJyb3IubWVzc2FnZSwgYXR0ZW1wdDogYXR0ZW1wdCArIDEgfSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ3Myc19yZXF1ZXN0X3JldHJpZXNfdG90YWwnLCB7IHRhcmdldCwgbWV0aG9kIH0pO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGRlY2lzaW9uLmRlbGF5TXMpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCByZXRyeWluZyAobm9uLWlkZW1wb3RlbnQsIG9yIGF0dGVtcHRzIGV4aGF1c3RlZCkg4oCUIGEgY29ubmVjdGlvblxuICAgICAgICAvLyBlcnJvci90aW1lb3V0IGlzIGEgZG93bnN0cmVhbSBmYXVsdDogZmVlZCB0aGUgYnJlYWtlciBhbmQgZmFpbCBub3cuXG4gICAgICAgIGJyZWFrZXIucmVjb3JkRmFpbHVyZSgpO1xuICAgICAgICBlbWl0Q291bnRlcignczJzX3JlcXVlc3RzX3RvdGFsJywgeyB0YXJnZXQsIG1ldGhvZCwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExvb3AgZXhoYXVzdGVkIHdpdGhvdXQgcmV0dXJuaW5nIChhbGwgYXR0ZW1wdHMgcmV0cmllZCB0aGVuIHJhbiBvdXQpLlxuICAgIGJyZWFrZXIucmVjb3JkRmFpbHVyZSgpO1xuICAgIGVtaXRDb3VudGVyKCdzMnNfcmVxdWVzdHNfdG90YWwnLCB7IHRhcmdldCwgbWV0aG9kLCBvdXRjb21lOiAnZXJyb3InIH0pO1xuICAgIHRocm93IGxhc3RFcnJvciE7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgcmVxdWVzdCBtZXRob2QuXG4gICAqL1xuICBwcml2YXRlIHJlcXVlc3Q8VD4oXG4gICAgbWV0aG9kOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJvZHk/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gU2VyaWFsaXplIHdoZW4gYm9keSBpcyBkZWZpbmVkIChpbmNsdWRpbmcgMC9mYWxzZS8nJyB3aGljaCBhcmUgdmFsaWQgSlNPTiB2YWx1ZXMpLlxuICAgICAgY29uc3QgYm9keVN0ciA9IGJvZHkgIT09IHVuZGVmaW5lZCA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBoZWFkZXJzOiBodHRwLk91dGdvaW5nSHR0cEhlYWRlcnMgPSB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIC4uLm9wdGlvbnM/LmhlYWRlcnMsXG4gICAgICB9O1xuXG4gICAgICAvLyBQcm9wYWdhdGUgcmVxdWVzdCBJRCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZ1xuICAgICAgaWYgKG9wdGlvbnM/LnJlcXVlc3RJZCkge1xuICAgICAgICBoZWFkZXJzWydYLVJlcXVlc3QtSWQnXSA9IG9wdGlvbnMucmVxdWVzdElkO1xuICAgICAgfVxuXG4gICAgICBpZiAoYm9keVN0cikge1xuICAgICAgICBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gQnVmZmVyLmJ5dGVMZW5ndGgoYm9keVN0cik7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHBhdGggdG8gcHJldmVudCBwcm90b2NvbCBpbmplY3Rpb24gLyByZXF1ZXN0IHNtdWdnbGluZ1xuICAgICAgaWYgKHBhdGguaW5jbHVkZXMoJzovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnLy8nKSB8fCAvW1xcclxcblxcMF0vLnRlc3QocGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlcXVlc3QgcGF0aDogJHtwYXRofWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zPy50aW1lb3V0ID8/IHRoaXMuY29uZmlnLnRpbWVvdXQ7XG4gICAgICBjb25zdCBtYXhCeXRlcyA9IG9wdGlvbnM/Lm1heFJlc3BvbnNlQnl0ZXMgPz8gdGhpcy5tYXhSZXNwb25zZUJ5dGVzO1xuXG4gICAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogaHR0cC5SZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgaG9zdG5hbWU6IHRoaXMuY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IHRoaXMuY29uZmlnLnBvcnQsXG4gICAgICAgIHBhdGg6IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWAsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgLy8gU29ja2V0IElETEUgdGltZW91dC4gVGhlIHRvdGFsIGRlYWRsaW5lIGJlbG93IGJvdW5kcyB0aGUgd2hvbGVcbiAgICAgICAgLy8gZXhjaGFuZ2Ug4oCUIGEgcGVlciB0cmlja2xpbmcgb25lIGJ5dGUgcGVyIGludGVydmFsIG5ldmVyIGdvZXMgaWRsZS5cbiAgICAgICAgdGltZW91dDogdGltZW91dE1zLFxuICAgICAgICBhZ2VudDogdGhpcy5hZ2VudCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFNldHRsZSBleGFjdGx5IG9uY2UsIHdoaWNoZXZlciBvZiB0aGUgbWFueSB0ZXJtaW5hbCBldmVudHMgZmlyZXMgZmlyc3RcbiAgICAgIC8vIChyZXNwb25zZSBlbmQsIHJlcXVlc3QvcmVzcG9uc2UgZXJyb3IsIGFib3J0LCBwcmVtYXR1cmUgY2xvc2UsIGRlYWRsaW5lLFxuICAgICAgLy8gc2l6ZSBjYXApLiBFdmVyeSBleGl0IHBhdGggY2xlYXJzIHRoZSBkZWFkbGluZSB0aW1lci5cbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgICBsZXQgZGVhZGxpbmU6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZmFpbCA9IChlcnJvcjogRXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGlmIChkZWFkbGluZSkgY2xlYXJUaW1lb3V0KGRlYWRsaW5lKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdWNjZWVkID0gKHZhbHVlOiBIdHRwQ2xpZW50UmVzcG9uc2U8VD4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGlmIChkZWFkbGluZSkgY2xlYXJUaW1lb3V0KGRlYWRsaW5lKTtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXEgPSBodHRwLnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICBsZXQgcmVjZWl2ZWQgPSAwO1xuXG4gICAgICAgIHJlcy5vbignZGF0YScsIChyYXc6IEJ1ZmZlciB8IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShyYXcpIDogcmF3O1xuICAgICAgICAgIHJlY2VpdmVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAocmVjZWl2ZWQgPiBtYXhCeXRlcykge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0hUVFAgcmVzcG9uc2UgZXhjZWVkZWQgc2l6ZSBjYXAnLCB7IGhvc3Q6IHRoaXMuY29uZmlnLmhvc3QsIHBhdGgsIG1heEJ5dGVzIH0pO1xuICAgICAgICAgICAgZmFpbChuZXcgUmVzcG9uc2VUb29MYXJnZUVycm9yKG1heEJ5dGVzKSk7XG4gICAgICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRoZSByZXNwb25zZSBzdHJlYW0gZmFpbGluZyBvciBiZWluZyBjdXQgbWlkLWJvZHkgbXVzdCByZWplY3Qg4oCUIGJlZm9yZSxcbiAgICAgICAgLy8gdGhlc2UgbGVmdCB0aGUgcHJvbWlzZSBwZW5kaW5nIGZvcmV2ZXIgKGEgaHVuZyBjYWxsZXIsIGFuZCBhIGJyZWFrZXJcbiAgICAgICAgLy8gcHJvYmUgdGhhdCBuZXZlciByZXBvcnRlZCBiYWNrKS5cbiAgICAgICAgcmVzLm9uKCdlcnJvcicsIChlcnJvcikgPT4gZmFpbChlcnJvcikpO1xuICAgICAgICByZXMub24oJ2Fib3J0ZWQnLCAoKSA9PiBmYWlsKG5ldyBFcnJvcignUmVzcG9uc2UgYWJvcnRlZCBieSBwZWVyIGJlZm9yZSBjb21wbGV0aW9uJykpKTtcbiAgICAgICAgcmVzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICBpZiAoIXJlcy5jb21wbGV0ZSkgZmFpbChuZXcgRXJyb3IoJ1Jlc3BvbnNlIGNsb3NlZCBiZWZvcmUgY29tcGxldGlvbicpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gZGF0YSA/IEpTT04ucGFyc2UoZGF0YSkgOiB7fTtcbiAgICAgICAgICAgIHN1Y2NlZWQoe1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSB8fCBIdHRwU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgICAgICAgICAgYm9keTogcGFyc2VkQm9keSBhcyBULFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UgYm9keScsIHtcbiAgICAgICAgICAgICAgaG9zdDogdGhpcy5jb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShwYXJzZUVycm9yKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VjY2VlZCh7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlIHx8IEh0dHBTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgICAgICAgICBib2R5OiB7fSBhcyBULFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuOyAvLyBvdXIgb3duIGRlc3Ryb3koKSBhZnRlciBhIGRlYWRsaW5lL3NpemUtY2FwIGZhaWx1cmVcbiAgICAgICAgLy8gTm9kZSBkdWFsLXN0YWNrIGNvbm5lY3QgZmFpbHVyZXMgYXJlIGFuIEFnZ3JlZ2F0ZUVycm9yIHdpdGggYW4gZW1wdHlcbiAgICAgICAgLy8gYC5tZXNzYWdlYDsgdGhlIGNhdXNlIGlzIGluIGAuY29kZWAgKEVDT05OUkVGVVNFRC9FVElNRURPVVQpLiBGYWxsXG4gICAgICAgIC8vIGJhY2sgc28gdGhlIGxvZyBpc24ndCBhIGJsYW5rIGBlcnJvcjpcIlwiYC5cbiAgICAgICAgY29uc3QgZGV0YWlsID0gZXJyb3IubWVzc2FnZSB8fCAoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlIHx8IGVycm9yLm5hbWU7XG4gICAgICAgIGxvZ2dlci5lcnJvcignSFRUUCByZXF1ZXN0IGZhaWxlZCcsIHtcbiAgICAgICAgICBob3N0OiB0aGlzLmNvbmZpZy5ob3N0LFxuICAgICAgICAgIHBvcnQ6IHRoaXMuY29uZmlnLnBvcnQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgZXJyb3I6IGRldGFpbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZhaWwoZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRpbWVvdXRFcnJvciA9ICgpID0+IG5ldyBFcnJvcihgUmVxdWVzdCB0aW1lb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCk7XG5cbiAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0hUVFAgcmVxdWVzdCB0aW1lb3V0IChzb2NrZXQgaWRsZSknLCB7IGhvc3Q6IHRoaXMuY29uZmlnLmhvc3QsIHBhdGgsIHRpbWVvdXQ6IHRpbWVvdXRNcyB9KTtcbiAgICAgICAgZmFpbCh0aW1lb3V0RXJyb3IoKSk7XG4gICAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIHJlcXVlc3QgY2xvc2luZyBiZWZvcmUgd2Ugc2V0dGxlZCAobm8gcmVzcG9uc2UsIG9yIGEgcmVzcG9uc2Ugd2VcbiAgICAgIC8vIG5ldmVyIGZpbmlzaGVkKSBpcyBhIGZhaWx1cmUsIG5vdCBzaWxlbmNlLlxuICAgICAgcmVxLm9uKCdjbG9zZScsICgpID0+IGZhaWwobmV3IEVycm9yKCdSZXF1ZXN0IGNsb3NlZCBiZWZvcmUgYSByZXNwb25zZSBjb21wbGV0ZWQnKSkpO1xuXG4gICAgICAvLyBUT1RBTCBkZWFkbGluZSBmb3IgdGhlIGV4Y2hhbmdlIChjb25uZWN0ICsgc2VuZCArIGZ1bGwgYm9keSkuXG4gICAgICBkZWFkbGluZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybignSFRUUCByZXF1ZXN0IHRpbWVvdXQgKHRvdGFsIGRlYWRsaW5lKScsIHsgaG9zdDogdGhpcy5jb25maWcuaG9zdCwgcGF0aCwgdGltZW91dDogdGltZW91dE1zIH0pO1xuICAgICAgICBmYWlsKHRpbWVvdXRFcnJvcigpKTtcbiAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICBkZWFkbGluZS51bnJlZj8uKCk7XG5cbiAgICAgIGlmIChib2R5U3RyKSB7XG4gICAgICAgIHJlcS53cml0ZShib2R5U3RyKTtcbiAgICAgIH1cblxuICAgICAgcmVxLmVuZCgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIEhUVFAgY2xpZW50IHdpdGggZXJyb3IgaGFuZGxpbmcgdGhhdCByZXR1cm5zIG51bGwgb24gZmFpbHVyZS5cbiAqIFVzZWZ1bCBmb3IgZmFpbC1vcGVuIHNjZW5hcmlvcy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gU2VydmljZSBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBDbGllbnQgd3JhcHBlciB3aXRoIHNhZmUgbWV0aG9kc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2FmZUNsaWVudChjb25maWc6IFNlcnZpY2VDb25maWcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50T3B0aW9ucykge1xuICBjb25zdCBjbGllbnQgPSBuZXcgSW50ZXJuYWxIdHRwQ2xpZW50KGNvbmZpZywgb3B0aW9ucyk7XG5cbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBTYWZlIEdFVCByZXF1ZXN0IC0gcmV0dXJucyBudWxsIG9uIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGdldDxUPihwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPFQ+IHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5nZXQ8VD4ocGF0aCwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTYWZlIEdFVCBmYWlsZWQsIHJldHVybmluZyBudWxsJywgeyBwYXRoLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlIFBPU1QgcmVxdWVzdCAtIHJldHVybnMgbnVsbCBvbiBlcnJvci5cbiAgICAgKi9cbiAgICBhc3luYyBwb3N0PFQ+KFxuICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgYm9keT86IHVua25vd24sXG4gICAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4gfCBudWxsPiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgY2xpZW50LnBvc3Q8VD4ocGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTYWZlIFBPU1QgZmFpbGVkLCByZXR1cm5pbmcgbnVsbCcsIHsgcGF0aCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2FmZSBQVVQgcmVxdWVzdCAtIHJldHVybnMgbnVsbCBvbiBlcnJvci5cbiAgICAgKi9cbiAgICBhc3luYyBwdXQ8VD4oXG4gICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICBib2R5PzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPiB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjbGllbnQucHV0PFQ+KHBhdGgsIGJvZHksIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnU2FmZSBQVVQgZmFpbGVkLCByZXR1cm5pbmcgbnVsbCcsIHsgcGF0aCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2FmZSBERUxFVEUgcmVxdWVzdCAtIHJldHVybnMgbnVsbCBvbiBlcnJvci4gVXNlZCBieSBkZXN0cnVjdGl2ZVxuICAgICAqIGNyb3NzLXNlcnZpY2Ugb3BlcmF0aW9ucyAoZS5nLiBvcmctY2FzY2FkZSBkZWxldGUgaW4gcGxhdGZvcm0pLlxuICAgICAqL1xuICAgIGFzeW5jIGRlbGV0ZTxUPihcbiAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPiB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjbGllbnQuZGVsZXRlPFQ+KHBhdGgsIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnU2FmZSBERUxFVEUgZmFpbGVkLCByZXR1cm5pbmcgbnVsbCcsIHsgcGF0aCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIl19
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9odHRwLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlGLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixnQkFBZ0IsRUFDaEIscUJBQXFCLEdBRXRCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXpELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhFOzs7Ozs7R0FNRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsZ0NBQWdDLEVB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QixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUksSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQ7OztXQUdHO1FBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FDVixJQUFZLEVBQ1osT0FBd0I7WUFFeEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFJLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCB7IGdldENpcmN1aXRCcmVha2VyLCBjaXJjdWl0QnJlYWtlcktleSwgQ2lyY3VpdE9wZW5FcnJvciB9IGZyb20gJy4vY2lyY3VpdC1icmVha2VyLmpzJztcbmltcG9ydCB7XG4gIERFRkFVTFRfTUFYX1JFVFJJRVMsXG4gIERFRkFVTFRfUkVUUllfREVMQVlfTVMsXG4gIERFRkFVTFRfTUFYX1JBVEVfTElNSVRfUkVUUklFUyxcbiAgZ2V0UmV0cnlEZWNpc2lvbixcbiAgZ2V0RXJyb3JSZXRyeURlY2lzaW9uLFxuICB0eXBlIFJldHJ5Q29uZmlnLFxufSBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcbmltcG9ydCB7IEh0dHBTdGF0dXMgfSBmcm9tICcuLi9jb25zdGFudHMvaHR0cC1zdGF0dXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvY29tbW9uLmpzJztcbmltcG9ydCB7IHNsZWVwIH0gZnJvbSAnLi4vdXRpbHMvY29uY3VycmVuY3kuanMnO1xuaW1wb3J0IHsgZW52SW50IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdodHRwLWNsaWVudCcpO1xuXG4vKipcbiAqIERlZmF1bHQgcmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAoZW52OiBgSFRUUF9DTElFTlRfVElNRU9VVGApLlxuICovXG5jb25zdCBERUZBVUxUX1RJTUVPVVQgPSBlbnZJbnQoJ0hUVFBfQ0xJRU5UX1RJTUVPVVQnLCA1MDAwLCB7IG1pbjogMSB9KTtcblxuLyoqXG4gKiBEZWZhdWx0IGNhcCBvbiBjb25jdXJyZW50IGtlZXAtYWxpdmUgc29ja2V0cyBwZXIgY2xpZW50IGFnZW50XG4gKiAoZW52OiBgSFRUUF9DTElFTlRfTUFYX1NPQ0tFVFNgKS4gTm9kZSdzIGRlZmF1bHQgaXMgYEluZmluaXR5YCwgd2hpY2ggbGV0cyBhXG4gKiBidXJzdCBvZiBjb25jdXJyZW50IGNhbGxzIG9wZW4gdW5ib3VuZGVkIHNvY2tldHMgYWdhaW5zdCBhIGRvd25zdHJlYW0gc2VydmljZVxuICogKGZkIGV4aGF1c3Rpb24gKyBjb25uZWN0aW9uLXN0b3JtIG9uIHRoZSBjYWxsZWUpLiA2NCBpcyBhbXBsZSBmb3JcbiAqIHNlcnZpY2UtdG8tc2VydmljZSBmYW4tb3V0IHdoaWxlIHN0YXlpbmcgYm91bmRlZC5cbiAqL1xuY29uc3QgREVGQVVMVF9NQVhfU09DS0VUUyA9IGVudkludCgnSFRUUF9DTElFTlRfTUFYX1NPQ0tFVFMnLCA2NCwgeyBtaW46IDEgfSk7XG5cbi8qKlxuICogRGVmYXVsdCBjYXAgb24gYSByZXNwb25zZSBib2R5IChieXRlczsgZW52OiBgSFRUUF9DTElFTlRfTUFYX1JFU1BPTlNFX0JZVEVTYCxcbiAqIGRlZmF1bHQgMTAgTWlCKS4gRXZlcnkgcmVzcG9uc2UgaXMgYnVmZmVyZWQgYW5kIEpTT04tcGFyc2VkIGluIG1lbW9yeSwgc28gYW5cbiAqIHVuYm91bmRlZCBib2R5IGZyb20gYSBtaXNiZWhhdmluZyAob3IgY29tcHJvbWlzZWQpIHBlZXIgaXMgYSBtZW1vcnkgRG9TIG9uIHRoZVxuICogY2FsbGVyLiBFeGNlZWRpbmcgaXQgYWJvcnRzIHRoZSByZXF1ZXN0IHdpdGgge0BsaW5rIFJlc3BvbnNlVG9vTGFyZ2VFcnJvcn0uXG4gKi9cbmNvbnN0IERFRkFVTFRfTUFYX1JFU1BPTlNFX0JZVEVTID0gZW52SW50KCdIVFRQX0NMSUVOVF9NQVhfUkVTUE9OU0VfQllURVMnLCAxMCAqIDEwMjQgKiAxMDI0LCB7IG1pbjogMSB9KTtcblxuLyoqIEEgcmVzcG9uc2UgYm9keSBleGNlZWRlZCB0aGUgY2xpZW50J3MgYG1heFJlc3BvbnNlQnl0ZXNgLiBOb3QgcmV0cmllZC4gKi9cbmV4cG9ydCBjbGFzcyBSZXNwb25zZVRvb0xhcmdlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSAnUkVTUE9OU0VfVE9PX0xBUkdFJztcbiAgY29uc3RydWN0b3IobGltaXQ6IG51bWJlcikge1xuICAgIHN1cGVyKGBSZXNwb25zZSBib2R5IGV4Y2VlZGVkICR7bGltaXR9IGJ5dGVzYCk7XG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlVG9vTGFyZ2VFcnJvcic7XG4gIH1cbn1cblxuLy8gSFRUUCBtZXRob2RzIHRoYXQgYXJlIGlkZW1wb3RlbnQgYnkgZGVmaW5pdGlvbiDigJQgc2FmZSB0byBhdXRvLXJldHJ5IG9uIGFcbi8vIDV4eC9jb25uZWN0aW9uL3RpbWVvdXQgd2l0aG91dCByaXNraW5nIGEgZHVwbGljYXRlIHNpZGUgZWZmZWN0LlxuY29uc3QgSURFTVBPVEVOVF9NRVRIT0RTID0gbmV3IFNldChbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnXSk7XG5cbi8qKlxuICogSFRUUCByZXF1ZXN0IG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICAvKiogUmVxdWVzdCBoZWFkZXJzICovXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogTWF4aW11bSByZXRyeSBhdHRlbXB0cyBmb3IgdHJhbnNpZW50IGZhaWx1cmVzIChkZWZhdWx0OiAyKSAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICAvKiogQmFzZSBkZWxheSBiZXR3ZWVuIHJldHJpZXMgaW4gbXMg4oCUIGRvdWJsZXMgZWFjaCBhdHRlbXB0IChkZWZhdWx0OiAyMDApICovXG4gIHJldHJ5RGVsYXlNcz86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gcmV0cnkgYXR0ZW1wdHMgc3BlY2lmaWNhbGx5IGZvciA0MjkgcmF0ZSBsaW1pdGluZyAoZGVmYXVsdDogNCkgKi9cbiAgbWF4UmF0ZUxpbWl0UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIHJlcXVlc3QgSUQgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmcgKGFkZGVkIGFzIFgtUmVxdWVzdC1JZCBoZWFkZXIpICovXG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRyZWF0IHRoaXMgcmVxdWVzdCBhcyBzYWZlIHRvIGF1dG8tcmV0cnkgb24gNXh4L2Nvbm5lY3Rpb24vdGltZW91dCBldmVuXG4gICAqIHRob3VnaCB0aGUgbWV0aG9kIGlzIG5vbi1pZGVtcG90ZW50IChlLmcuIHRoZSBlbmRwb2ludCBpcyBpZGVtcG90ZW50IGJ5IGFuXG4gICAqIElkZW1wb3RlbmN5LUtleSwgb3IgdGhlIG9wZXJhdGlvbiBpcyBuYXR1cmFsbHkgaWRlbXBvdGVudCkuIERlZmF1bHQgZmFsc2U6XG4gICAqIG5vbi1pZGVtcG90ZW50IG1ldGhvZHMgYXJlIE5PVCByZXRyaWVkIG9uIHRob3NlIGZhaWx1cmVzLCBvbmx5IG9uIDQyOS5cbiAgICovXG4gIGlkZW1wb3RlbnQ/OiBib29sZWFuO1xuICAvKiogQ2FwIG9uIHRoaXMgcmVzcG9uc2UncyBib2R5IGluIGJ5dGVzIChkZWZhdWx0OiB0aGUgY2xpZW50J3MsIGVsc2UgMTAgTWlCKS4gKi9cbiAgbWF4UmVzcG9uc2VCeXRlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJvdXRlIGNsYXNzIGZvciB0aGUgY2lyY3VpdCBicmVha2VyIChkZWZhdWx0OiB0aGUgY2xpZW50J3MsIGVsc2VcbiAgICogYCdkZWZhdWx0J2ApLiBSZXF1ZXN0cyBpbiBkaWZmZXJlbnQgY2xhc3NlcyB0byB0aGUgc2FtZSBgaG9zdDpwb3J0YCB0cmlwXG4gICAqIGluZGVwZW5kZW50IGJyZWFrZXJzIOKAlCBzZWUgYGNpcmN1aXRCcmVha2VyS2V5YC5cbiAgICovXG4gIGJyZWFrZXJDbGFzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBIVFRQIGNsaWVudCByZXNwb25zZSB3cmFwcGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRSZXNwb25zZTxUID0gdW5rbm93bj4ge1xuICAvKiogSFRUUCBzdGF0dXMgY29kZSAqL1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIC8qKiBSZXNwb25zZSBib2R5IChwYXJzZWQgSlNPTikgKi9cbiAgYm9keTogVDtcbiAgLyoqIFJlc3BvbnNlIGhlYWRlcnMgKi9cbiAgaGVhZGVyczogaHR0cC5JbmNvbWluZ0h0dHBIZWFkZXJzO1xufVxuXG4vKipcbiAqIEludGVybmFsIEhUVFAgY2xpZW50IGZvciBzZXJ2aWNlLXRvLXNlcnZpY2UgY29tbXVuaWNhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2xpZW50ID0gbmV3IEludGVybmFsSHR0cENsaWVudCh7XG4gKiAgIGhvc3Q6ICdxdW90YScsXG4gKiAgIHBvcnQ6IDMwMDAsXG4gKiAgIHRpbWVvdXQ6IDUwMDAsXG4gKiB9KTtcbiAqXG4gKiBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQoJy9vcmcxMjMvYXBpQ2FsbHMnKTtcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5wb3N0KCcvb3JnMTIzL2luY3JlbWVudCcsIHsgcXVvdGFUeXBlOiAnYXBpQ2FsbHMnIH0pO1xuICogYGBgXG4gKi9cbi8qKlxuICogT3B0aW9ucyBjb250cm9sbGluZyB0aGUgY2xpZW50J3MgY29ubmVjdGlvbiBwb29sLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY2FsbGVyLW93bmVkIGBodHRwLkFnZW50YCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgcHJvY2Vzcy13aWRlIHNoYXJlZCBvbmUuXG4gICAqIFRoZSBjbGllbnQgbmV2ZXIgZGVzdHJveXMgaXQuXG4gICAqL1xuICBhZ2VudD86IGh0dHAuQWdlbnQ7XG4gIC8qKiBDYXAgb24gY29uY3VycmVudCBrZWVwLWFsaXZlIHNvY2tldHMgZm9yIHRoZSBzaGFyZWQgYWdlbnQgKGRlZmF1bHQgNjQpLiAqL1xuICBtYXhTb2NrZXRzPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCBjaXJjdWl0LWJyZWFrZXIgcm91dGUgY2xhc3MgZm9yIHRoaXMgY2xpZW50J3MgcmVxdWVzdHMuICovXG4gIGJyZWFrZXJDbGFzcz86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgcmVzcG9uc2UtYm9keSBjYXAgKGJ5dGVzKSBmb3IgdGhpcyBjbGllbnQncyByZXF1ZXN0cy4gKi9cbiAgbWF4UmVzcG9uc2VCeXRlcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9jZXNzLXdpZGUga2VlcC1hbGl2ZSBhZ2VudHMsIG9uZSBwZXIgYGhvc3Q6cG9ydGAgKGFuZCBzb2NrZXQgY2FwKSDigJRcbiAqIG1pcnJvcmluZyB0aGUgcGVyLXRhcmdldCBjaXJjdWl0LWJyZWFrZXIgcmVnaXN0cnkuIENsaWVudHMgYXJlIGNoZWFwIGFuZCBvZnRlblxuICogYnVpbHQgcGVyIGNhbGwgKGFuIG9yZy1oaWVyYXJjaHkgd2FsayBidWlsZHMgb25lIHBlciBob3ApLCBzbyBhIHBlci1jbGllbnRcbiAqIGFnZW50IHRocmV3IGF3YXkgaXRzIHBvb2xlZCBzb2NrZXRzIGV2ZXJ5IHRpbWUgYW5kIHRoZSBzb2NrZXQgY2FwIGJvdW5kZWRcbiAqIG5vdGhpbmcuIFNoYXJpbmcgdGhlIGFnZW50IHBvb2xzIGNvbm5lY3Rpb25zIHRvIGEgZG93bnN0cmVhbSBhY3Jvc3MgZXZlcnlcbiAqIGNsaWVudCB0aGF0IHRhcmdldHMgaXQuXG4gKi9cbmNvbnN0IHNoYXJlZEFnZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBodHRwLkFnZW50PigpO1xuXG5mdW5jdGlvbiBnZXRTaGFyZWRBZ2VudChob3N0OiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgbWF4U29ja2V0czogbnVtYmVyKTogaHR0cC5BZ2VudCB7XG4gIGNvbnN0IGtleSA9IGAke2hvc3R9OiR7cG9ydH06JHttYXhTb2NrZXRzfWA7XG4gIGxldCBhZ2VudCA9IHNoYXJlZEFnZW50cy5nZXQoa2V5KTtcbiAgaWYgKCFhZ2VudCkge1xuICAgIGFnZW50ID0gbmV3IGh0dHAuQWdlbnQoeyBrZWVwQWxpdmU6IHRydWUsIG1heFNvY2tldHMgfSk7XG4gICAgc2hhcmVkQWdlbnRzLnNldChrZXksIGFnZW50KTtcbiAgfVxuICByZXR1cm4gYWdlbnQ7XG59XG5cbi8qKlxuICogQ2xvc2UgZXZlcnkgc2hhcmVkIGtlZXAtYWxpdmUgYWdlbnQgKGlkbGUgc29ja2V0cyBhcmUgcmVsZWFzZWQ7IGluLWZsaWdodFxuICogcmVxdWVzdHMgZmluaXNoKS4gRm9yIHByb2Nlc3Mgc2h1dGRvd24gYW5kIHRlc3RzIOKAlCBhIGxhdGVyIHJlcXVlc3Qgc2ltcGx5XG4gKiBidWlsZHMgYSBmcmVzaCBhZ2VudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lTaGFyZWRIdHRwQWdlbnRzKCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IGFnZW50IG9mIHNoYXJlZEFnZW50cy52YWx1ZXMoKSkgYWdlbnQuZGVzdHJveSgpO1xuICBzaGFyZWRBZ2VudHMuY2xlYXIoKTtcbn1cblxuZXhwb3J0IGNsYXNzIEludGVybmFsSHR0cENsaWVudCB7XG4gIHByaXZhdGUgY29uZmlnOiBSZXF1aXJlZDxTZXJ2aWNlQ29uZmlnPjtcbiAgcHJpdmF0ZSBhZ2VudDogaHR0cC5BZ2VudDtcbiAgcHJpdmF0ZSBicmVha2VyQ2xhc3M/OiBzdHJpbmc7XG4gIHByaXZhdGUgbWF4UmVzcG9uc2VCeXRlczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgSFRUUCBjbGllbnQgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBTZXJ2aWNlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25uZWN0aW9uLXBvb2wgY29udHJvbHMgKG93biBhZ2VudCAvIHNvY2tldCBjYXApXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNlcnZpY2VDb25maWcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50T3B0aW9ucykge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0ID8/IERFRkFVTFRfVElNRU9VVCxcbiAgICB9O1xuICAgIHRoaXMuYWdlbnQgPSBvcHRpb25zPy5hZ2VudFxuICAgICAgPz8gZ2V0U2hhcmVkQWdlbnQodGhpcy5jb25maWcuaG9zdCwgdGhpcy5jb25maWcucG9ydCwgb3B0aW9ucz8ubWF4U29ja2V0cyA/PyBERUZBVUxUX01BWF9TT0NLRVRTKTtcbiAgICB0aGlzLmJyZWFrZXJDbGFzcyA9IG9wdGlvbnM/LmJyZWFrZXJDbGFzcztcbiAgICB0aGlzLm1heFJlc3BvbnNlQnl0ZXMgPSBvcHRpb25zPy5tYXhSZXNwb25zZUJ5dGVzID8/IERFRkFVTFRfTUFYX1JFU1BPTlNFX0JZVEVTO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBHRVQgcmVxdWVzdC5cbiAgICovXG4gIGFzeW5jIGdldDxUID0gdW5rbm93bj4ocGF0aDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RXaXRoUmV0cnk8VD4oJ0dFVCcsIHBhdGgsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIFBPU1QgcmVxdWVzdC5cbiAgICovXG4gIGFzeW5jIHBvc3Q8VCA9IHVua25vd24+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBib2R5PzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMsXG4gICk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFdpdGhSZXRyeTxUPignUE9TVCcsIHBhdGgsIGJvZHksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBQVVQgcmVxdWVzdC5cbiAgICovXG4gIGFzeW5jIHB1dDxUID0gdW5rbm93bj4oXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGJvZHk/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aFJldHJ5PFQ+KCdQVVQnLCBwYXRoLCBib2R5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgREVMRVRFIHJlcXVlc3QuXG4gICAqL1xuICBhc3luYyBkZWxldGU8VCA9IHVua25vd24+KHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aFJldHJ5PFQ+KCdERUxFVEUnLCBwYXRoLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3Qgd2l0aCByZXRyeSBsb2dpYyBmb3IgdHJhbnNpZW50IGZhaWx1cmVzLlxuICAgKlxuICAgKiAtIDQyOSAocmF0ZSBsaW1pdCk6IHJlc3BlY3RzIGBSZXRyeS1BZnRlcmAgaGVhZGVyLCB1c2VzIGxvbmdlciBiYXNlIGRlbGF5ICg0eCksXG4gICAqICAgcmV0cmllcyB1cCB0byBgbWF4UmF0ZUxpbWl0UmV0cmllc2AgdGltZXMgKGRlZmF1bHQgNCkuXG4gICAqIC0gNTAyLzUwMy81MDQgKHNlcnZlciBlcnJvcnMpOiBzdGFuZGFyZCBleHBvbmVudGlhbCBiYWNrb2ZmLCB1cCB0byBgbWF4UmV0cmllc2AgKGRlZmF1bHQgMikuXG4gICAqIC0gQ29ubmVjdGlvbiBlcnJvcnMgLyB0aW1lb3V0czogcmV0cmllcyB1cCB0byBgbWF4UmV0cmllc2AuXG4gICAqIC0gQWxsIGRlbGF5cyBpbmNsdWRlIMKxMjUlIGppdHRlciB0byBwcmV2ZW50IHRodW5kZXJpbmcgaGVyZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdFdpdGhSZXRyeTxUPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYm9keT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPj4ge1xuICAgIC8vIEEgbWFsZm9ybWVkIHBhdGggaXMgYSBDTElFTlQgYnVnLCBub3QgYSBkb3duc3RyZWFtIGZhdWx0IOKAlCByZWplY3QgaXQgdXBcbiAgICAvLyBmcm9udCBzbyBpdCBuZXZlciBidXJucyByZXRyaWVzIG9yIGZlZWRzIHRoZSBjaXJjdWl0IGJyZWFrZXIgKHdoaWNoIHdvdWxkXG4gICAgLy8gb3RoZXJ3aXNlIHNoZWQgdHJhZmZpYyB0byBhIHBlcmZlY3RseSBoZWFsdGh5IGRvd25zdHJlYW0pLiByZXF1ZXN0KCkga2VlcHNcbiAgICAvLyB0aGUgc2FtZSBndWFyZCBhcyBkZWZlbmNlLWluLWRlcHRoLlxuICAgIGlmIChwYXRoLmluY2x1ZGVzKCc6Ly8nKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJy8vJykgfHwgL1tcXHJcXG5cXDBdLy50ZXN0KHBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVxdWVzdCBwYXRoOiAke3BhdGh9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlDb25maWc6IFJldHJ5Q29uZmlnID0ge1xuICAgICAgbWF4UmV0cmllczogb3B0aW9ucz8ubWF4UmV0cmllcyA/PyBERUZBVUxUX01BWF9SRVRSSUVTLFxuICAgICAgbWF4UmF0ZUxpbWl0UmV0cmllczogb3B0aW9ucz8ubWF4UmF0ZUxpbWl0UmV0cmllcyA/PyBERUZBVUxUX01BWF9SQVRFX0xJTUlUX1JFVFJJRVMsXG4gICAgICByZXRyeURlbGF5TXM6IG9wdGlvbnM/LnJldHJ5RGVsYXlNcyA/PyBERUZBVUxUX1JFVFJZX0RFTEFZX01TLFxuICAgIH07XG4gICAgY29uc3QgdG90YWxNYXhBdHRlbXB0cyA9IE1hdGgubWF4KHJldHJ5Q29uZmlnLm1heFJldHJpZXMsIHJldHJ5Q29uZmlnLm1heFJhdGVMaW1pdFJldHJpZXMgPz8gREVGQVVMVF9NQVhfUkFURV9MSU1JVF9SRVRSSUVTKTtcblxuICAgIC8vIFdoZXRoZXIgaXQncyBzYWZlIHRvIGF1dG8tcmV0cnkgdGhpcyByZXF1ZXN0IG9uIGEgNXh4L2Nvbm5lY3Rpb24vdGltZW91dC5cbiAgICAvLyBBIHRpbWVkLW91dCBQT1NUIG1heSBoYXZlIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQgc2VydmVyLXNpZGUsIHNvIHJldHJ5aW5nXG4gICAgLy8gYSBub24taWRlbXBvdGVudCByZXF1ZXN0IHJpc2tzIGEgRFVQTElDQVRFIHNpZGUgZWZmZWN0IChkb3VibGUtY2hhcmdlLFxuICAgIC8vIGRvdWJsZS1jcmVhdGUpLiBPbmx5IEdFVC9IRUFEL09QVElPTlMsIGFuIGV4cGxpY2l0IGBpZGVtcG90ZW50YCBvcHQtaW4sIG9yXG4gICAgLy8gYSByZXF1ZXN0IGNhcnJ5aW5nIGFuIElkZW1wb3RlbmN5LUtleSBhcmUgYXV0by1yZXRyaWVkIG9uIHRob3NlIGZhaWx1cmVzLlxuICAgIC8vICg0MjkgaXMgYWx3YXlzIHJldHJpZWQg4oCUIHNlZSBiZWxvdyDigJQgc2luY2UgaXQgd2FzIHJlamVjdGVkLCBub3QgcHJvY2Vzc2VkLilcbiAgICBjb25zdCByZXRyeVNhZmUgPVxuICAgICAgSURFTVBPVEVOVF9NRVRIT0RTLmhhcyhtZXRob2QudG9VcHBlckNhc2UoKSkgfHxcbiAgICAgIG9wdGlvbnM/LmlkZW1wb3RlbnQgPT09IHRydWUgfHxcbiAgICAgICEhKG9wdGlvbnM/LmhlYWRlcnMgJiYgKG9wdGlvbnMuaGVhZGVyc1snSWRlbXBvdGVuY3ktS2V5J10gfHwgb3B0aW9ucy5oZWFkZXJzWydpZGVtcG90ZW5jeS1rZXknXSkpO1xuXG4gICAgLy8gUGVyLXRhcmdldCBjaXJjdWl0IGJyZWFrZXIgKyBTMlMgcmVxdWVzdCBtZXRyaWNzLiBgdGFyZ2V0YCBpcyB0aGUgc2hhcmVkXG4gICAgLy8gYnJlYWtlci9tZXRyaWMga2V5IHNvIG9uZSBiYWQgZG93bnN0cmVhbSB0cmlwcyBvbmNlIChub3Qgb25jZS1wZXItY2xpZW50KVxuICAgIC8vIGFuZCBkYXNoYm9hcmRzIGNhbiBzZWUgUzJTIGhlYWx0aCBwZXIgY2FsbGVlLlxuICAgIGNvbnN0IHRhcmdldCA9IGAke3RoaXMuY29uZmlnLmhvc3R9OiR7dGhpcy5jb25maWcucG9ydH1gO1xuICAgIGNvbnN0IGJyZWFrZXIgPSBnZXRDaXJjdWl0QnJlYWtlcihjaXJjdWl0QnJlYWtlcktleSh0YXJnZXQsIG9wdGlvbnM/LmJyZWFrZXJDbGFzcyA/PyB0aGlzLmJyZWFrZXJDbGFzcykpO1xuICAgIGlmICghYnJlYWtlci5hbGxvd1JlcXVlc3QoKSkge1xuICAgICAgLy8gRmFzdC1mYWlsIHdpdGhvdXQgdG91Y2hpbmcgdGhlIG5ldHdvcmsg4oCUIHRoaXMgaXMgdGhlIGxvYWQtc2hlZGRpbmcgdGhhdFxuICAgICAgLy8gcHJldmVudHMgYSBkb3duc3RyZWFtIGJyb3dub3V0IGZyb20gY2FzY2FkaW5nIHZpYSByZXRyeSBzdG9ybXMuXG4gICAgICBlbWl0Q291bnRlcignczJzX3JlcXVlc3RzX3RvdGFsJywgeyB0YXJnZXQsIG1ldGhvZCwgb3V0Y29tZTogJ2NpcmN1aXRfb3BlbicgfSk7XG4gICAgICB0aHJvdyBuZXcgQ2lyY3VpdE9wZW5FcnJvcih0YXJnZXQpO1xuICAgIH1cblxuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgdW5kZWZpbmVkO1xuXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gdG90YWxNYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdDxUPihtZXRob2QsIHBhdGgsIGJvZHksIG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IGRlY2lzaW9uID0gZ2V0UmV0cnlEZWNpc2lvbihyZXNwb25zZS5zdGF0dXNDb2RlLCByZXNwb25zZS5oZWFkZXJzLCBhdHRlbXB0LCByZXRyeUNvbmZpZyk7XG4gICAgICAgIC8vIDQyOSBpcyBzYWZlIHRvIHJldHJ5IGZvciBBTlkgbWV0aG9kIChyYXRlLWxpbWl0ZWQg4oaSIG5vdCBwcm9jZXNzZWQpOyBhXG4gICAgICAgIC8vIDV4eC9nYXRld2F5IGVycm9yIGlzIG9ubHkgcmV0cmllZCB3aGVuIHRoZSByZXF1ZXN0IGlzIHJldHJ5LXNhZmUuXG4gICAgICAgIGlmIChkZWNpc2lvbi5zaG91bGRSZXRyeSAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDI5IHx8IHJldHJ5U2FmZSkpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoZGVjaXNpb24ucmVhc29uICsgJywgcmV0cnlpbmcnLCB7IG1ldGhvZCwgcGF0aCwgYXR0ZW1wdDogYXR0ZW1wdCArIDEsIGRlbGF5TXM6IGRlY2lzaW9uLmRlbGF5TXMgfSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ3Myc19yZXF1ZXN0X3JldHJpZXNfdG90YWwnLCB7IHRhcmdldCwgbWV0aG9kIH0pO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGRlY2lzaW9uLmRlbGF5TXMpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGVybWluYWwgcmVzcG9uc2UuIEEgNXh4IGlzIGEgZG93bnN0cmVhbSBmYXVsdCAoZmVlZHMgdGhlIGJyZWFrZXIpOyBhXG4gICAgICAgIC8vIDQyOSBpcyBiYWNrcHJlc3N1cmUsIG5vdCBhIGZhdWx0IOKAlCB0aGUgc2VydmljZSBhbnN3ZXJlZCwgc28gaXQgY291bnRzXG4gICAgICAgIC8vIGFzIHN1Y2Nlc3MgZm9yIGJyZWFrZXIgcHVycG9zZXMgKG5ldmVyIHRyaXAgdGhlIGJyZWFrZXIgb24gcmF0ZSBsaW1pdHMpLlxuICAgICAgICBjb25zdCBpc1NlcnZlckZhdWx0ID0gcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSA1MDAgJiYgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8PSA1OTk7XG4gICAgICAgIGlmIChpc1NlcnZlckZhdWx0KSB7XG4gICAgICAgICAgYnJlYWtlci5yZWNvcmRGYWlsdXJlKCk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ3Myc19yZXF1ZXN0c190b3RhbCcsIHsgdGFyZ2V0LCBtZXRob2QsIG91dGNvbWU6ICdzZXJ2ZXJfZXJyb3InIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrZXIucmVjb3JkU3VjY2VzcygpO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdzMnNfcmVxdWVzdHNfdG90YWwnLCB7IHRhcmdldCwgbWV0aG9kLCBvdXRjb21lOiAnc3VjY2VzcycgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xuXG4gICAgICAgIC8vIEFuIG92ZXJzaXplZCBib2R5IGlzIHRoZSBwZWVyJ3MgY29udGVudCwgbm90IGEgdHJhbnNpZW50IGZhdWx0OiBuZXZlclxuICAgICAgICAvLyByZS1kb3dubG9hZCBpdCwgYW5kIG5ldmVyIGNvdW50IGl0IGFnYWluc3QgdGhlIGJyZWFrZXIuXG4gICAgICAgIGlmIChsYXN0RXJyb3IgaW5zdGFuY2VvZiBSZXNwb25zZVRvb0xhcmdlRXJyb3IpIHtcbiAgICAgICAgICBicmVha2VyLnJlY29yZFN1Y2Nlc3MoKTtcbiAgICAgICAgICBlbWl0Q291bnRlcignczJzX3JlcXVlc3RzX3RvdGFsJywgeyB0YXJnZXQsIG1ldGhvZCwgb3V0Y29tZTogJ3Rvb19sYXJnZScgfSk7XG4gICAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY2lzaW9uID0gZ2V0RXJyb3JSZXRyeURlY2lzaW9uKGF0dGVtcHQsIHJldHJ5Q29uZmlnKTtcbiAgICAgICAgaWYgKGRlY2lzaW9uLnNob3VsZFJldHJ5ICYmIHJldHJ5U2FmZSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUmV0cnlpbmcgYWZ0ZXIgZXJyb3InLCB7IG1ldGhvZCwgcGF0aCwgZXJyb3I6IGxhc3RFcnJvci5tZXNzYWdlLCBhdHRlbXB0OiBhdHRlbXB0ICsgMSB9KTtcbiAgICAgICAgICBlbWl0Q291bnRlcignczJzX3JlcXVlc3RfcmV0cmllc190b3RhbCcsIHsgdGFyZ2V0LCBtZXRob2QgfSk7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoZGVjaXNpb24uZGVsYXlNcyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90IHJldHJ5aW5nIChub24taWRlbXBvdGVudCwgb3IgYXR0ZW1wdHMgZXhoYXVzdGVkKSDigJQgYSBjb25uZWN0aW9uXG4gICAgICAgIC8vIGVycm9yL3RpbWVvdXQgaXMgYSBkb3duc3RyZWFtIGZhdWx0OiBmZWVkIHRoZSBicmVha2VyIGFuZCBmYWlsIG5vdy5cbiAgICAgICAgYnJlYWtlci5yZWNvcmRGYWlsdXJlKCk7XG4gICAgICAgIGVtaXRDb3VudGVyKCdzMnNfcmVxdWVzdHNfdG90YWwnLCB7IHRhcmdldCwgbWV0aG9kLCBvdXRjb21lOiAnZXJyb3InIH0pO1xuICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTG9vcCBleGhhdXN0ZWQgd2l0aG91dCByZXR1cm5pbmcgKGFsbCBhdHRlbXB0cyByZXRyaWVkIHRoZW4gcmFuIG91dCkuXG4gICAgYnJlYWtlci5yZWNvcmRGYWlsdXJlKCk7XG4gICAgZW1pdENvdW50ZXIoJ3Myc19yZXF1ZXN0c190b3RhbCcsIHsgdGFyZ2V0LCBtZXRob2QsIG91dGNvbWU6ICdlcnJvcicgfSk7XG4gICAgdGhyb3cgbGFzdEVycm9yITtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCByZXF1ZXN0IG1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgcmVxdWVzdDxUPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgYm9keT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICApOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAvLyBBIEJ1ZmZlciBib2R5IGlzIHNlbnQgQVMtSVMuIFdpdGhvdXQgdGhpcyBldmVyeSBjYWxsZXIgaGFkIHRvIGhhbmQgb3ZlclxuICAgICAgLy8gYW4gb2JqZWN0IHRvIGJlIGBKU09OLnN0cmluZ2lmeWAnZCwgd2hpY2ggZm9yIGEgbGFyZ2UgcHJlLXNlcmlhbGl6ZWRcbiAgICAgIC8vIGRvY3VtZW50IChhbiBTUERYIFNCT00gcmVhZCBvZmYgZGlzaykgbWVhbnQgcGFyc2luZyBpdCB0byBhbiBvYmplY3Qgb25seVxuICAgICAgLy8gc28gdGhpcyBjb3VsZCBzZXJpYWxpemUgaXQgc3RyYWlnaHQgYmFjayDigJQgdHdvIGZ1bGwgY29waWVzIG9mIGFcbiAgICAgIC8vIG11bHRpLW1lZ2FieXRlIHN0cmluZyB0byBtb3ZlIGJ5dGVzIHRoYXQgd2VyZSBhbHJlYWR5IG9uIGRpc2suXG4gICAgICAvL1xuICAgICAgLy8gRGVsaWJlcmF0ZWx5IG5hcnJvdzogT05MWSBhIEJ1ZmZlciBvcHRzIG91dC4gQW55dGhpbmcgZWxzZSBrZWVwcyB0aGVcbiAgICAgIC8vIEpTT04gY29udHJhY3QgZXZlcnkgb3RoZXIgY2FsbGVyIHJlbGllcyBvbiwgc28gdGhpcyBjYW5ub3QgcXVpZXRseVxuICAgICAgLy8gY2hhbmdlIGhvdyBhbiBvcmRpbmFyeSBvYmplY3QgYm9keSBpcyBzZW50LlxuICAgICAgY29uc3QgcmF3ID0gQnVmZmVyLmlzQnVmZmVyKGJvZHkpID8gYm9keSA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFNlcmlhbGl6ZSB3aGVuIGJvZHkgaXMgZGVmaW5lZCAoaW5jbHVkaW5nIDAvZmFsc2UvJycgd2hpY2ggYXJlIHZhbGlkIEpTT04gdmFsdWVzKS5cbiAgICAgIGNvbnN0IGJvZHlTdHIgPSByYXcgPT09IHVuZGVmaW5lZCAmJiBib2R5ICE9PSB1bmRlZmluZWQgPyBKU09OLnN0cmluZ2lmeShib2R5KSA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaGVhZGVyczogaHR0cC5PdXRnb2luZ0h0dHBIZWFkZXJzID0ge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAuLi5vcHRpb25zPy5oZWFkZXJzLFxuICAgICAgfTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHJlcXVlc3QgSUQgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmdcbiAgICAgIGlmIChvcHRpb25zPy5yZXF1ZXN0SWQpIHtcbiAgICAgICAgaGVhZGVyc1snWC1SZXF1ZXN0LUlkJ10gPSBvcHRpb25zLnJlcXVlc3RJZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHlTdHIpIHtcbiAgICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKGJvZHlTdHIpO1xuICAgICAgfSBlbHNlIGlmIChyYXcpIHtcbiAgICAgICAgaGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IHJhdy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHBhdGggdG8gcHJldmVudCBwcm90b2NvbCBpbmplY3Rpb24gLyByZXF1ZXN0IHNtdWdnbGluZ1xuICAgICAgaWYgKHBhdGguaW5jbHVkZXMoJzovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnLy8nKSB8fCAvW1xcclxcblxcMF0vLnRlc3QocGF0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlcXVlc3QgcGF0aDogJHtwYXRofWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zPy50aW1lb3V0ID8/IHRoaXMuY29uZmlnLnRpbWVvdXQ7XG4gICAgICBjb25zdCBtYXhCeXRlcyA9IG9wdGlvbnM/Lm1heFJlc3BvbnNlQnl0ZXMgPz8gdGhpcy5tYXhSZXNwb25zZUJ5dGVzO1xuXG4gICAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogaHR0cC5SZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgaG9zdG5hbWU6IHRoaXMuY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IHRoaXMuY29uZmlnLnBvcnQsXG4gICAgICAgIHBhdGg6IHBhdGguc3RhcnRzV2l0aCgnLycpID8gcGF0aCA6IGAvJHtwYXRofWAsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgLy8gU29ja2V0IElETEUgdGltZW91dC4gVGhlIHRvdGFsIGRlYWRsaW5lIGJlbG93IGJvdW5kcyB0aGUgd2hvbGVcbiAgICAgICAgLy8gZXhjaGFuZ2Ug4oCUIGEgcGVlciB0cmlja2xpbmcgb25lIGJ5dGUgcGVyIGludGVydmFsIG5ldmVyIGdvZXMgaWRsZS5cbiAgICAgICAgdGltZW91dDogdGltZW91dE1zLFxuICAgICAgICBhZ2VudDogdGhpcy5hZ2VudCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFNldHRsZSBleGFjdGx5IG9uY2UsIHdoaWNoZXZlciBvZiB0aGUgbWFueSB0ZXJtaW5hbCBldmVudHMgZmlyZXMgZmlyc3RcbiAgICAgIC8vIChyZXNwb25zZSBlbmQsIHJlcXVlc3QvcmVzcG9uc2UgZXJyb3IsIGFib3J0LCBwcmVtYXR1cmUgY2xvc2UsIGRlYWRsaW5lLFxuICAgICAgLy8gc2l6ZSBjYXApLiBFdmVyeSBleGl0IHBhdGggY2xlYXJzIHRoZSBkZWFkbGluZSB0aW1lci5cbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgICBsZXQgZGVhZGxpbmU6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZmFpbCA9IChlcnJvcjogRXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGlmIChkZWFkbGluZSkgY2xlYXJUaW1lb3V0KGRlYWRsaW5lKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdWNjZWVkID0gKHZhbHVlOiBIdHRwQ2xpZW50UmVzcG9uc2U8VD4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgIGlmIChkZWFkbGluZSkgY2xlYXJUaW1lb3V0KGRlYWRsaW5lKTtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXEgPSBodHRwLnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIChyZXMpID0+IHtcbiAgICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICBsZXQgcmVjZWl2ZWQgPSAwO1xuXG4gICAgICAgIHJlcy5vbignZGF0YScsIChyYXc6IEJ1ZmZlciB8IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShyYXcpIDogcmF3O1xuICAgICAgICAgIHJlY2VpdmVkICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICBpZiAocmVjZWl2ZWQgPiBtYXhCeXRlcykge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0hUVFAgcmVzcG9uc2UgZXhjZWVkZWQgc2l6ZSBjYXAnLCB7IGhvc3Q6IHRoaXMuY29uZmlnLmhvc3QsIHBhdGgsIG1heEJ5dGVzIH0pO1xuICAgICAgICAgICAgZmFpbChuZXcgUmVzcG9uc2VUb29MYXJnZUVycm9yKG1heEJ5dGVzKSk7XG4gICAgICAgICAgICByZXEuZGVzdHJveSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRoZSByZXNwb25zZSBzdHJlYW0gZmFpbGluZyBvciBiZWluZyBjdXQgbWlkLWJvZHkgbXVzdCByZWplY3Qg4oCUIGJlZm9yZSxcbiAgICAgICAgLy8gdGhlc2UgbGVmdCB0aGUgcHJvbWlzZSBwZW5kaW5nIGZvcmV2ZXIgKGEgaHVuZyBjYWxsZXIsIGFuZCBhIGJyZWFrZXJcbiAgICAgICAgLy8gcHJvYmUgdGhhdCBuZXZlciByZXBvcnRlZCBiYWNrKS5cbiAgICAgICAgcmVzLm9uKCdlcnJvcicsIChlcnJvcikgPT4gZmFpbChlcnJvcikpO1xuICAgICAgICByZXMub24oJ2Fib3J0ZWQnLCAoKSA9PiBmYWlsKG5ldyBFcnJvcignUmVzcG9uc2UgYWJvcnRlZCBieSBwZWVyIGJlZm9yZSBjb21wbGV0aW9uJykpKTtcbiAgICAgICAgcmVzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICBpZiAoIXJlcy5jb21wbGV0ZSkgZmFpbChuZXcgRXJyb3IoJ1Jlc3BvbnNlIGNsb3NlZCBiZWZvcmUgY29tcGxldGlvbicpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRCb2R5ID0gZGF0YSA/IEpTT04ucGFyc2UoZGF0YSkgOiB7fTtcbiAgICAgICAgICAgIHN1Y2NlZWQoe1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSB8fCBIdHRwU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgICAgICAgICAgYm9keTogcGFyc2VkQm9keSBhcyBULFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gcGFyc2UgcmVzcG9uc2UgYm9keScsIHtcbiAgICAgICAgICAgICAgaG9zdDogdGhpcy5jb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShwYXJzZUVycm9yKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VjY2VlZCh7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlIHx8IEh0dHBTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgICAgICAgICBib2R5OiB7fSBhcyBULFxuICAgICAgICAgICAgICBoZWFkZXJzOiByZXMuaGVhZGVycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgcmVxLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuOyAvLyBvdXIgb3duIGRlc3Ryb3koKSBhZnRlciBhIGRlYWRsaW5lL3NpemUtY2FwIGZhaWx1cmVcbiAgICAgICAgLy8gTm9kZSBkdWFsLXN0YWNrIGNvbm5lY3QgZmFpbHVyZXMgYXJlIGFuIEFnZ3JlZ2F0ZUVycm9yIHdpdGggYW4gZW1wdHlcbiAgICAgICAgLy8gYC5tZXNzYWdlYDsgdGhlIGNhdXNlIGlzIGluIGAuY29kZWAgKEVDT05OUkVGVVNFRC9FVElNRURPVVQpLiBGYWxsXG4gICAgICAgIC8vIGJhY2sgc28gdGhlIGxvZyBpc24ndCBhIGJsYW5rIGBlcnJvcjpcIlwiYC5cbiAgICAgICAgY29uc3QgZGV0YWlsID0gZXJyb3IubWVzc2FnZSB8fCAoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlIHx8IGVycm9yLm5hbWU7XG4gICAgICAgIGxvZ2dlci5lcnJvcignSFRUUCByZXF1ZXN0IGZhaWxlZCcsIHtcbiAgICAgICAgICBob3N0OiB0aGlzLmNvbmZpZy5ob3N0LFxuICAgICAgICAgIHBvcnQ6IHRoaXMuY29uZmlnLnBvcnQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgZXJyb3I6IGRldGFpbCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZhaWwoZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRpbWVvdXRFcnJvciA9ICgpID0+IG5ldyBFcnJvcihgUmVxdWVzdCB0aW1lb3V0IGFmdGVyICR7dGltZW91dE1zfW1zYCk7XG5cbiAgICAgIHJlcS5vbigndGltZW91dCcsICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0hUVFAgcmVxdWVzdCB0aW1lb3V0IChzb2NrZXQgaWRsZSknLCB7IGhvc3Q6IHRoaXMuY29uZmlnLmhvc3QsIHBhdGgsIHRpbWVvdXQ6IHRpbWVvdXRNcyB9KTtcbiAgICAgICAgZmFpbCh0aW1lb3V0RXJyb3IoKSk7XG4gICAgICAgIHJlcS5kZXN0cm95KCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIHJlcXVlc3QgY2xvc2luZyBiZWZvcmUgd2Ugc2V0dGxlZCAobm8gcmVzcG9uc2UsIG9yIGEgcmVzcG9uc2Ugd2VcbiAgICAgIC8vIG5ldmVyIGZpbmlzaGVkKSBpcyBhIGZhaWx1cmUsIG5vdCBzaWxlbmNlLlxuICAgICAgcmVxLm9uKCdjbG9zZScsICgpID0+IGZhaWwobmV3IEVycm9yKCdSZXF1ZXN0IGNsb3NlZCBiZWZvcmUgYSByZXNwb25zZSBjb21wbGV0ZWQnKSkpO1xuXG4gICAgICAvLyBUT1RBTCBkZWFkbGluZSBmb3IgdGhlIGV4Y2hhbmdlIChjb25uZWN0ICsgc2VuZCArIGZ1bGwgYm9keSkuXG4gICAgICBkZWFkbGluZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybignSFRUUCByZXF1ZXN0IHRpbWVvdXQgKHRvdGFsIGRlYWRsaW5lKScsIHsgaG9zdDogdGhpcy5jb25maWcuaG9zdCwgcGF0aCwgdGltZW91dDogdGltZW91dE1zIH0pO1xuICAgICAgICBmYWlsKHRpbWVvdXRFcnJvcigpKTtcbiAgICAgICAgcmVxLmRlc3Ryb3koKTtcbiAgICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgICBkZWFkbGluZS51bnJlZj8uKCk7XG5cbiAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgcmVxLndyaXRlKHJhdyk7XG4gICAgICB9IGVsc2UgaWYgKGJvZHlTdHIpIHtcbiAgICAgICAgcmVxLndyaXRlKGJvZHlTdHIpO1xuICAgICAgfVxuXG4gICAgICByZXEuZW5kKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gSFRUUCBjbGllbnQgd2l0aCBlcnJvciBoYW5kbGluZyB0aGF0IHJldHVybnMgbnVsbCBvbiBmYWlsdXJlLlxuICogVXNlZnVsIGZvciBmYWlsLW9wZW4gc2NlbmFyaW9zLlxuICpcbiAqIEBwYXJhbSBjb25maWcgLSBTZXJ2aWNlIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIENsaWVudCB3cmFwcGVyIHdpdGggc2FmZSBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTYWZlQ2xpZW50KGNvbmZpZzogU2VydmljZUNvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRPcHRpb25zKSB7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBJbnRlcm5hbEh0dHBDbGllbnQoY29uZmlnLCBvcHRpb25zKTtcblxuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqIFNhZmUgR0VUIHJlcXVlc3QgLSByZXR1cm5zIG51bGwgb24gZXJyb3IuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0PFQ+KHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U8VD4gfCBudWxsPiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgY2xpZW50LmdldDxUPihwYXRoLCBvcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1NhZmUgR0VUIGZhaWxlZCwgcmV0dXJuaW5nIG51bGwnLCB7IHBhdGgsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFNhZmUgUE9TVCByZXF1ZXN0IC0gcmV0dXJucyBudWxsIG9uIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIHBvc3Q8VD4oXG4gICAgICBwYXRoOiBzdHJpbmcsXG4gICAgICBib2R5PzogdW5rbm93bixcbiAgICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyxcbiAgICApOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZTxUPiB8IG51bGw+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBjbGllbnQucG9zdDxUPihwYXRoLCBib2R5LCBvcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1NhZmUgUE9TVCBmYWlsZWQsIHJldHVybmluZyBudWxsJywgeyBwYXRoLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlIFBVVCByZXF1ZXN0IC0gcmV0dXJucyBudWxsIG9uIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIHB1dDxUPihcbiAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICAgICk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPFQ+IHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5wdXQ8VD4ocGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTYWZlIFBVVCBmYWlsZWQsIHJldHVybmluZyBudWxsJywgeyBwYXRoLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlIERFTEVURSByZXF1ZXN0IC0gcmV0dXJucyBudWxsIG9uIGVycm9yLiBVc2VkIGJ5IGRlc3RydWN0aXZlXG4gICAgICogY3Jvc3Mtc2VydmljZSBvcGVyYXRpb25zIChlLmcuIG9yZy1jYXNjYWRlIGRlbGV0ZSBpbiBwbGF0Zm9ybSkuXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlPFQ+KFxuICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zLFxuICAgICk6IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlPFQ+IHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5kZWxldGU8VD4ocGF0aCwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdTYWZlIERFTEVURSBmYWlsZWQsIHJldHVybmluZyBudWxsJywgeyBwYXRoLCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXX0=
@@ -30,5 +30,5 @@ export { createWebhookChannel, createEmailChannel, createChannelRegistry, type N
30
30
  export { alertDeliveryConfig, canDeliverAnywhere, deadmanConfig, reportAlertDeliveryPosture, slackAlertsConfig, startDeadmanHeartbeat, stopDeadmanHeartbeat, type DeadmanConfig, type AlertDeliveryConfig, type SlackAlertsConfig, } from './alert-delivery.js';
31
31
  export { verifyPagerDutySignature, onCallInboundConfig, fetchRotaCoverage, parseOnCallWebhook, ackLatencySeconds, PAGERDUTY_API_URL, type OnCallInboundConfig, type OnCallWebhookEvent, type OnCallWebhookEventType, type RotaCoverage, } from './pagerduty-inbound.js';
32
32
  export { sendPagerDutyEvent, pagerDutyConfig, resolveEventsEndpoint, PAGERDUTY_EVENTS_URL, type OnCallProvider, type PagerDutyAction, type PagerDutyConfig, type PagerDutyEvent, type PagerDutyResult, type PagerDutySeverity, } from './pagerduty.js';
33
- export { createEcosystemNotifyClient, ECOSYSTEM_NOTIFY_PATH, type EcosystemNotifyClient, } from './ecosystem-notify-client.js';
33
+ export { createEcosystemNotifyClient, NOTIFY_EMAIL_PATH, type EcosystemNotifyClient, } from './ecosystem-notify-client.js';
34
34
  export { fetchOrgAIAccess, fetchOrgAIKey, assertOrgAIEnabled, requireOrgAIEnabled, resetOrgAICache, ORG_AI_ACCESS_PATH, ORG_AI_KEYS_PATH, type OrgAIAccess, } from './org-ai-client.js';
@@ -37,6 +37,6 @@ export { createWebhookChannel, createEmailChannel, createChannelRegistry, } from
37
37
  export { alertDeliveryConfig, canDeliverAnywhere, deadmanConfig, reportAlertDeliveryPosture, slackAlertsConfig, startDeadmanHeartbeat, stopDeadmanHeartbeat, } from './alert-delivery.js';
38
38
  export { verifyPagerDutySignature, onCallInboundConfig, fetchRotaCoverage, parseOnCallWebhook, ackLatencySeconds, PAGERDUTY_API_URL, } from './pagerduty-inbound.js';
39
39
  export { sendPagerDutyEvent, pagerDutyConfig, resolveEventsEndpoint, PAGERDUTY_EVENTS_URL, } from './pagerduty.js';
40
- export { createEcosystemNotifyClient, ECOSYSTEM_NOTIFY_PATH, } from './ecosystem-notify-client.js';
40
+ export { createEcosystemNotifyClient, NOTIFY_EMAIL_PATH, } from './ecosystem-notify-client.js';
41
41
  export { fetchOrgAIAccess, fetchOrgAIKey, assertOrgAIEnabled, requireOrgAIEnabled, resetOrgAICache, ORG_AI_ACCESS_PATH, ORG_AI_KEYS_PATH, } from './org-ai-client.js';
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixtQkFBbUIsRUFDbkIsOEJBQThCLEdBQy9CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLGtCQUFrQixFQUtsQixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixhQUFhLEVBQ2IsMEJBQTBCLEdBSzNCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixrQkFBa0IsR0FFbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsZUFBZSxHQUdoQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixZQUFZLEVBQ1osYUFBYSxFQUNiLGNBQWMsRUFDZCxVQUFVLEVBQ1YsV0FBVyxFQUNYLGVBQWUsRUFDZixlQUFlLEVBQ2YscUNBQXFDLEdBU3RDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLHNCQUFzQixHQUd2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUUzQiw4QkFBOEIsR0FFL0IsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELE9BQU8sRUFHTCxZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FB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Q2xCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLGdCQUFnQixHQUVqQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIGV4Y2hhbmdlQXBpS2V5LFxuICByZXNldEFwaUtleUV4Y2hhbmdlQ2FjaGUsXG4gIEFwaUtleVJlamVjdGVkRXJyb3IsXG4gIEFwaUtleUV4Y2hhbmdlVW5hdmFpbGFibGVFcnJvcixcbn0gZnJvbSAnLi9hcGkta2V5LWV4Y2hhbmdlLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUNhY2hlU2VydmljZSxcbiAgdHlwZSBSZWRpc0NhY2hlQ2xpZW50LFxuICB0eXBlIENhY2hlSW52YWxpZGF0aW9uTWVzc2FnZSxcbiAgdHlwZSBDYWNoZUludmFsaWRhdGlvbkJ1cyxcbiAgdHlwZSBSZWRpc0ludmFsaWRhdGlvbkNsaWVudCxcbiAgQ2FjaGVTZXJ2aWNlLFxufSBmcm9tICcuL2NhY2hlLXNlcnZpY2UuanMnO1xuZXhwb3J0IHtcbiAgd2l0aExlYWRlckxvY2ssXG4gIGNyZWF0ZUVudlJlZGlzTG9jayxcbiAgbGVhZGVyTG9ja0tleSxcbiAgREVGQVVMVF9MRUFERVJfTE9DS19UVExfTVMsXG4gIHR5cGUgTG9ja1JlZGlzLFxuICB0eXBlIExlYWRlckxvY2tSdW4sXG4gIHR5cGUgTGVhZGVyTG9ja09wdGlvbnMsXG4gIHR5cGUgTGVhZGVyTG9ja0Fib3J0UmVhc29uLFxufSBmcm9tICcuL2xlYWRlci1sb2NrLmpzJztcbmV4cG9ydCB7XG4gIHNlbmRTeXN0ZW1Ob3RpZmljYXRpb24sXG4gIFNZU1RFTV9OT1RJRllfUEFUSCxcbiAgdHlwZSBTeXN0ZW1Ob3RpZmljYXRpb24sXG59IGZyb20gJy4vc3lzdGVtLW5vdGlmaWNhdGlvbi5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVTY2hlZHVsZXIsXG4gIHR5cGUgU2NoZWR1bGVyT3B0aW9ucyxcbiAgdHlwZSBTY2hlZHVsZXIsXG59IGZyb20gJy4vc2NoZWR1bGVyLmpzJztcbmV4cG9ydCB7XG4gIGFzc2Vzc1ZlcnNpb25WdWxucyxcbiAgdmVyc2lvblNjYW5GYWN0cyxcbiAgc2NhbkZyZXNobmVzcyxcbiAgc2Nhbldhcm5pbmdzLFxuICBsYXN0U2Nhbm5lZEF0LFxuICBzY2FuU3RhbGVIb3VycyxcbiAgc2V2ZXJpdHlPZixcbiAgbWF4U2V2ZXJpdHksXG4gIHNldmVyaXR5QXRMZWFzdCxcbiAgVlVMTl9TRVZFUklUSUVTLFxuICBzZXRWdWxuUG9saWN5Q29tcGxpYW5jZUNsaWVudEZvclRlc3RzLFxuICB0eXBlIFZ1bG5TZXZlcml0eSxcbiAgdHlwZSBWdWxuV2FybmluZyxcbiAgdHlwZSBTY2FubmVkUmVjb3JkLFxuICB0eXBlIFZ1bG5Db25zdW1wdGlvblBvbGljeSxcbiAgdHlwZSBWdWxuQWNjZXB0YW5jZSxcbiAgdHlwZSBWZXJzaW9uU2NhbkZhY3RzLFxuICB0eXBlIFZlcnNpb25WdWxuSW5wdXQsXG4gIHR5cGUgVmVyc2lvblZ1bG5Bc3Nlc3NtZW50LFxufSBmcm9tICcuL3ZlcnNpb24tdnVsbi1wb2xpY3kuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlQ29tcGxpYW5jZUNsaWVudCxcbiAgdHlwZSBDb21wbGlhbmNlQ2hlY2tSZXN1bHQsXG4gIHR5cGUgQ29tcGxpYW5jZVZpb2xhdGlvbixcbn0gZnJvbSAnLi9jb21wbGlhbmNlLWNsaWVudC5qcyc7XG5leHBvcnQge1xuICBwbHVnaW5SdW5zT3duSW1hZ2UsXG4gIHBsdWdpbkNvbXBsaWFuY2VUYWdzLFxuICBkZXJpdmVQbHVnaW5JbWFnZUNvbXBsaWFuY2UsXG4gIHR5cGUgUGx1Z2luQ29tcGxpYW5jZUF0dHJpYnV0ZXMsXG4gIFBMVUdJTl9JTUFHRV9DT01QTElBTkNFX0ZJRUxEUyxcbiAgdHlwZSBQbHVnaW5JbWFnZVJvdyxcbn0gZnJvbSAnLi4vdXRpbHMvcGx1Z2luLWNvbXBsaWFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wbGlhbmNlLWV2ZW50LXN1YnNjcmliZXIuanMnO1xuZXhwb3J0IHtcbiAgdHlwZSBFbnRpdHlFdmVudCxcbiAgdHlwZSBFbnRpdHlFdmVudFN1YnNjcmliZXIsXG4gIGVudGl0eUV2ZW50cyxcbn0gZnJvbSAnLi9lbnRpdHktZXZlbnRzLmpzJztcbmV4cG9ydCB7XG4gIGRlc3Ryb3lTaGFyZWRIdHRwQWdlbnRzLFxuICBjcmVhdGVTYWZlQ2xpZW50LFxuICBSZXNwb25zZVRvb0xhcmdlRXJyb3IsXG4gIEludGVybmFsSHR0cENsaWVudCxcbn0gZnJvbSAnLi9odHRwLWNsaWVudC5qcyc7XG5leHBvcnQge1xuICBzZXRQbGF0Zm9ybUp3a3NDYWNoZSxcbiAgSndrc1VuYXZhaWxhYmxlRXJyb3IsXG4gIFVua25vd25LaWRFcnJvcixcbiAgSndrc0NhY2hlLFxufSBmcm9tICcuL2p3a3MtY2FjaGUuanMnO1xuLy8gU2VydmljZS1rZXkgaW50ZXJuYWxzIHN0YXkgaW50ZXJuYWwuIFRoZSBwYWNrYWdlIHN1cmZhY2UgaXMgdGhlIHZlcmlmeS9pbnNwZWN0XG4vLyBzaWRlIHRoYXQgcGxhdGZvcm0ncyBKV1Qgb3B0aW9ucyBhbmQgdGhlIGF1dGggbWlkZGxld2FyZSBuZWVkOyBrZXkgTUFURVJJQUxcbi8vIGhhbmRsaW5nIChgc2lnblNlcnZpY2VKd3RgLCB0aGUgYnVuZGxlLCB0aGUgdGVzdCByZXNldCBob29rKSBpcyByZWFjaGFibGUgb25seVxuLy8gYnkgZGVlcCBpbXBvcnQgZnJvbSBpbnNpZGUgYXBpLWNvcmUgYW5kIGl0cyB0ZXN0aW5nIGhlbHBlcnMuXG5leHBvcnQge1xuICBpc1NlcnZpY2VLaWQsXG4gIHNlcnZpY2VJZGVudGl0eSxcbiAgdmVyaWZ5U2VydmljZUp3dCxcbn0gZnJvbSAnLi9zZXJ2aWNlLWtleXMuanMnO1xuLy8gVGhlIGJyZWFrZXIgaXMgd2lyZWQgYnkgdGhlIHNoYXJlZCBIVFRQIGNsaWVudDsgc2VydmljZXMgY29uc3VtZSBpdHMgRUZGRUNULFxuLy8gbm90IHRoZSBjbGFzcy4gT25seSB0aGUgb3BlcmF0aW9uYWwgc3VyZmFjZSBpcyBwdWJsaWMuXG5leHBvcnQge1xuICByZXNldENpcmN1aXRCcmVha2Vycyxcbn0gZnJvbSAnLi9jaXJjdWl0LWJyZWFrZXIuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlRW52UmVkaXNEdXJhYmxlRXZlbnRCdXMsXG4gIHR5cGUgRXZlbnRTdWJzY3JpcHRpb24sXG4gIHR5cGUgRHVyYWJsZUV2ZW50QnVzLFxufSBmcm9tICcuL2R1cmFibGUtZXZlbnQtYnVzLmpzJztcbmV4cG9ydCB7XG4gIGdldEVycm9yUmV0cnlEZWNpc2lvbixcbn0gZnJvbSAnLi9yZXRyeS1zdHJhdGVneS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFJldHJ5Q29uZmlnLFxufSBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcbmV4cG9ydCB7XG4gIG5leHRCYWNrb2ZmTXMsXG4gIHJldHJ5Rm9yZXZlcixcbn0gZnJvbSAnLi9yZXRyeS1mb3JldmVyLmpzJztcbmV4cG9ydCB7XG4gIGdldFF1b3RhU2VydmljZUF1dGhIZWFkZXIsXG4gIGNyZWF0ZVF1b3RhU2VydmljZSxcbiAgaW5jcmVtZW50UXVvdGEsXG4gIHJlc2VydmVRdW90YSxcbiAgc2VuZFF1b3RhUmVzZXJ2ZURlbmllZCxcbiAgZGVjcmVtZW50UXVvdGEsXG4gIG1ldGVyZWRRdW90YVR5cGVGb3IsXG4gIGNhbGxRdW90YUV4ZW1wdGlvbixcbiAgUVVPVEFfQ0hFQ0tfVElNRU9VVF9NUyxcbiAgcXVvdGFBdHRyaWJ1dGlvbkZyb21SZXF1ZXN0LFxuICB0eXBlIEFpS2V5U291cmNlLFxuICB0eXBlIEFpTGltaXRDb2RlLFxuICB0eXBlIENhbGxRdW90YUV4ZW1wdGlvbixcbiAgdHlwZSBRdW90YVJlc2VydmVSZXN1bHQsXG4gIHR5cGUgUXVvdGFUb2tlblVzYWdlLFxuICB0eXBlIFF1b3RhU2VydmljZSxcbiAgdHlwZSBRdW90YVVzYWdlQXR0cmlidXRpb24sXG59IGZyb20gJy4vcXVvdGEuanMnO1xuZXhwb3J0IHtcbiAgYWlDYWxsV2VpZ2h0LFxuICBwYXJzZUFpTW9kZWxXZWlnaHRzLFxuICBNQVhfQUlfQ0FMTF9XRUlHSFQsXG59IGZyb20gJy4vYWktY2FsbC13ZWlnaHQuanMnO1xuZXhwb3J0IHtcbiAgUXVvdGFJbmNyZW1lbnRCYXRjaGVyLFxuICBmbHVzaFF1b3RhSW5jcmVtZW50cyxcbiAgUVVPVEFfSU5DUkVNRU5UX0ZMVVNIX01TLFxuICBRVU9UQV9JTkNSRU1FTlRfQlVGRkVSX01BWCxcbiAgTUFYX0dST1VQU19QRVJfSU5DUkVNRU5ULFxuICB0eXBlIE1ldGVyZWRJbmNyZW1lbnRHcm91cCxcbn0gZnJvbSAnLi9xdW90YS1pbmNyZW1lbnQtYmF0Y2hlci5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVSZW1vdGVBdWRpdENsaWVudCxcbiAgd2lyZUF1dGh6RGVuaWFsQXVkaXRvcixcbiAgcmVjb3JkQXVkaXQsXG4gIHR5cGUgUmVtb3RlQXVkaXRFdmVudCxcbiAgdHlwZSBSZW1vdGVBdWRpdFdpcmVFdmVudCxcbiAgdHlwZSBSZW1vdGVBdWRpdENsaWVudCxcbn0gZnJvbSAnLi9yZW1vdGUtYXVkaXQtY2xpZW50LmpzJztcbmV4cG9ydCB7XG4gIHJ1bldpdGhBdWRpdENvbnRleHQsXG4gIGN1cnJlbnRBdWRpdENvbnRleHQsXG4gIGF1ZGl0Q29udGV4dEZyb21SZXF1ZXN0LFxuICBhdWRpdEF1dGhCbG9jayxcbiAgc2FuaXRpemVDb3JyZWxhdGlvbklkLFxuICBzYW5pdGl6ZVVzZXJBZ2VudCxcbiAgQVVESVRfQ09SUkVMQVRJT05fSEVBREVSUyxcbiAgdHlwZSBBdWRpdENvbnRleHQsXG4gIHR5cGUgQXVkaXRDb3JyZWxhdGlvbixcbiAgdHlwZSBBdWRpdEpvYkNvbnRleHQsXG4gIHR5cGUgQXVkaXRBdXRoQmxvY2ssXG59IGZyb20gJy4vYXVkaXQtY29udGV4dC5qcyc7XG5leHBvcnQge1xuICBhdWRpdFNwb29sS2V5LFxuICBjcmVhdGVFbnZSZWRpc0F1ZGl0U3Bvb2wsXG4gIHR5cGUgQXVkaXRTcG9vbCxcbn0gZnJvbSAnLi9hdWRpdC1zcG9vbC5qcyc7XG5leHBvcnQge1xuICByZXNvbHZlUmVkaXNDb25uZWN0aW9uLFxuICBkZXNjcmliZVJlZGlzQ29ubmVjdGlvbixcbiAgY3JlYXRlUmVkaXNDbGllbnQsXG4gIGNyZWF0ZUVudlJlZGlzQ2xpZW50LFxuICBjcmVhdGVSZWRpc1JlYWR5R2F0ZSxcbiAgaW5jcldpbmRvdyxcbiAgUmVkaXNDb25maWdFcnJvcixcbiAgdHlwZSBSZWRpc0V2YWxDbGllbnQsXG59IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZVJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUsXG4gIGNyZWF0ZUVudlJlZGlzVG9rZW5SZXZvY2F0aW9uU3RvcmUsXG4gIHB1Ymxpc2hUb2tlblJldm9jYXRpb24sXG4gIHB1Ymxpc2hTZXNzaW9uUmV2b2NhdGlvbixcbiAgcHVibGlzaENyZWRlbnRpYWxSZXZvY2F0aW9uLFxufSBmcm9tICcuL3Rva2VuLXJldm9jYXRpb24uanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlTWVtb3J5U3NlVGlja2V0U3RvcmUsXG4gIGNyZWF0ZUVudlNzZVRpY2tldFN0b3JlLFxuICBlbnZTc2VUaWNrZXRDYXBzLFxuICB0eXBlIEVudlNzZVRpY2tldFN0b3JlQ29uZmlnLFxuICB0eXBlIFNzZVRpY2tldFN0b3JlLFxuICB0eXBlIFNzZVRpY2tldFN0b3JlQ29uZmlnLFxufSBmcm9tICcuL3NzZS10aWNrZXQtc3RvcmUuanMnO1xuZXhwb3J0IHtcbiAgd2lyZVNlcnZpY2VTZWN1cml0eSxcbn0gZnJvbSAnLi9zZXJ2aWNlLWJvb3QuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlV2ViaG9va0NoYW5uZWwsXG4gIGNyZWF0ZUVtYWlsQ2hhbm5lbCxcbiAgY3JlYXRlQ2hhbm5lbFJlZ2lzdHJ5LFxuICB0eXBlIE5vdGlmaWNhdGlvblByaW9yaXR5LFxuICB0eXBlIE5vdGlmaWNhdGlvbk1lc3NhZ2UsXG4gIHR5cGUgQ2hhbm5lbFRhcmdldCxcbiAgdHlwZSBEZWxpdmVyeVJlc3VsdCxcbiAgdHlwZSBOb3RpZmljYXRpb25DaGFubmVsLFxufSBmcm9tICcuL25vdGlmaWNhdGlvbi1jaGFubmVscy5qcyc7XG5leHBvcnQge1xuICBhbGVydERlbGl2ZXJ5Q29uZmlnLFxuICBjYW5EZWxpdmVyQW55d2hlcmUsXG4gIGRlYWRtYW5Db25maWcsXG4gIHJlcG9ydEFsZXJ0RGVsaXZlcnlQb3N0dXJlLFxuICBzbGFja0FsZXJ0c0NvbmZpZyxcbiAgc3RhcnREZWFkbWFuSGVhcnRiZWF0LFxuICBzdG9wRGVhZG1hbkhlYXJ0YmVhdCxcbiAgdHlwZSBEZWFkbWFuQ29uZmlnLFxuICB0eXBlIEFsZXJ0RGVsaXZlcnlDb25maWcsXG4gIHR5cGUgU2xhY2tBbGVydHNDb25maWcsXG59IGZyb20gJy4vYWxlcnQtZGVsaXZlcnkuanMnO1xuZXhwb3J0IHtcbiAgdmVyaWZ5UGFnZXJEdXR5U2lnbmF0dXJlLFxuICBvbkNhbGxJbmJvdW5kQ29uZmlnLFxuICBmZXRjaFJvdGFDb3ZlcmFnZSxcbiAgcGFyc2VPbkNhbGxXZWJob29rLFxuICBhY2tMYXRlbmN5U2Vjb25kcyxcbiAgUEFHRVJEVVRZX0FQSV9VUkwsXG4gIHR5cGUgT25DYWxsSW5ib3VuZENvbmZpZyxcbiAgdHlwZSBPbkNhbGxXZWJob29rRXZlbnQsXG4gIHR5cGUgT25DYWxsV2ViaG9va0V2ZW50VHlwZSxcbiAgdHlwZSBSb3RhQ292ZXJhZ2UsXG59IGZyb20gJy4vcGFnZXJkdXR5LWluYm91bmQuanMnO1xuZXhwb3J0IHtcbiAgc2VuZFBhZ2VyRHV0eUV2ZW50LFxuICBwYWdlckR1dHlDb25maWcsXG4gIHJlc29sdmVFdmVudHNFbmRwb2ludCxcbiAgUEFHRVJEVVRZX0VWRU5UU19VUkwsXG4gIHR5cGUgT25DYWxsUHJvdmlkZXIsXG4gIHR5cGUgUGFnZXJEdXR5QWN0aW9uLFxuICB0eXBlIFBhZ2VyRHV0eUNvbmZpZyxcbiAgdHlwZSBQYWdlckR1dHlFdmVudCxcbiAgdHlwZSBQYWdlckR1dHlSZXN1bHQsXG4gIHR5cGUgUGFnZXJEdXR5U2V2ZXJpdHksXG59IGZyb20gJy4vcGFnZXJkdXR5LmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUVjb3N5c3RlbU5vdGlmeUNsaWVudCxcbiAgRUNPU1lTVEVNX05PVElGWV9QQVRILFxuICB0eXBlIEVjb3N5c3RlbU5vdGlmeUNsaWVudCxcbn0gZnJvbSAnLi9lY29zeXN0ZW0tbm90aWZ5LWNsaWVudC5qcyc7XG5leHBvcnQge1xuICBmZXRjaE9yZ0FJQWNjZXNzLFxuICBmZXRjaE9yZ0FJS2V5LFxuICBhc3NlcnRPcmdBSUVuYWJsZWQsXG4gIHJlcXVpcmVPcmdBSUVuYWJsZWQsXG4gIHJlc2V0T3JnQUlDYWNoZSxcbiAgT1JHX0FJX0FDQ0VTU19QQVRILFxuICBPUkdfQUlfS0VZU19QQVRILFxuICB0eXBlIE9yZ0FJQWNjZXNzLFxufSBmcm9tICcuL29yZy1haS1jbGllbnQuanMnO1xuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQiw4QkFBOEIsR0FDL0IsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsa0JBQWtCLEVBS2xCLFlBQVksR0FDYixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYiwwQkFBMEIsR0FLM0IsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGtCQUFrQixHQUVuQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxlQUFlLEdBR2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFlBQVksRUFDWixhQUFhLEVBQ2IsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBQ1gsZUFBZSxFQUNmLGVBQWUsRUFDZixxQ0FBcUMsR0FTdEMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsc0JBQXNCLEdBR3ZCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBRTNCLDhCQUE4QixHQUUvQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsT0FBTyxFQUdMLFlBQVksR0FDYixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsb0JBQW9CLEVB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LGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEdBRWpCLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuZXhwb3J0IHtcbiAgZXhjaGFuZ2VBcGlLZXksXG4gIHJlc2V0QXBpS2V5RXhjaGFuZ2VDYWNoZSxcbiAgQXBpS2V5UmVqZWN0ZWRFcnJvcixcbiAgQXBpS2V5RXhjaGFuZ2VVbmF2YWlsYWJsZUVycm9yLFxufSBmcm9tICcuL2FwaS1rZXktZXhjaGFuZ2UuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlQ2FjaGVTZXJ2aWNlLFxuICB0eXBlIFJlZGlzQ2FjaGVDbGllbnQsXG4gIHR5cGUgQ2FjaGVJbnZhbGlkYXRpb25NZXNzYWdlLFxuICB0eXBlIENhY2hlSW52YWxpZGF0aW9uQnVzLFxuICB0eXBlIFJlZGlzSW52YWxpZGF0aW9uQ2xpZW50LFxuICBDYWNoZVNlcnZpY2UsXG59IGZyb20gJy4vY2FjaGUtc2VydmljZS5qcyc7XG5leHBvcnQge1xuICB3aXRoTGVhZGVyTG9jayxcbiAgY3JlYXRlRW52UmVkaXNMb2NrLFxuICBsZWFkZXJMb2NrS2V5LFxuICBERUZBVUxUX0xFQURFUl9MT0NLX1RUTF9NUyxcbiAgdHlwZSBMb2NrUmVkaXMsXG4gIHR5cGUgTGVhZGVyTG9ja1J1bixcbiAgdHlwZSBMZWFkZXJMb2NrT3B0aW9ucyxcbiAgdHlwZSBMZWFkZXJMb2NrQWJvcnRSZWFzb24sXG59IGZyb20gJy4vbGVhZGVyLWxvY2suanMnO1xuZXhwb3J0IHtcbiAgc2VuZFN5c3RlbU5vdGlmaWNhdGlvbixcbiAgU1lTVEVNX05PVElGWV9QQVRILFxuICB0eXBlIFN5c3RlbU5vdGlmaWNhdGlvbixcbn0gZnJvbSAnLi9zeXN0ZW0tbm90aWZpY2F0aW9uLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZVNjaGVkdWxlcixcbiAgdHlwZSBTY2hlZHVsZXJPcHRpb25zLFxuICB0eXBlIFNjaGVkdWxlcixcbn0gZnJvbSAnLi9zY2hlZHVsZXIuanMnO1xuZXhwb3J0IHtcbiAgYXNzZXNzVmVyc2lvblZ1bG5zLFxuICB2ZXJzaW9uU2NhbkZhY3RzLFxuICBzY2FuRnJlc2huZXNzLFxuICBzY2FuV2FybmluZ3MsXG4gIGxhc3RTY2FubmVkQXQsXG4gIHNjYW5TdGFsZUhvdXJzLFxuICBzZXZlcml0eU9mLFxuICBtYXhTZXZlcml0eSxcbiAgc2V2ZXJpdHlBdExlYXN0LFxuICBWVUxOX1NFVkVSSVRJRVMsXG4gIHNldFZ1bG5Qb2xpY3lDb21wbGlhbmNlQ2xpZW50Rm9yVGVzdHMsXG4gIHR5cGUgVnVsblNldmVyaXR5LFxuICB0eXBlIFZ1bG5XYXJuaW5nLFxuICB0eXBlIFNjYW5uZWRSZWNvcmQsXG4gIHR5cGUgVnVsbkNvbnN1bXB0aW9uUG9saWN5LFxuICB0eXBlIFZ1bG5BY2NlcHRhbmNlLFxuICB0eXBlIFZlcnNpb25TY2FuRmFjdHMsXG4gIHR5cGUgVmVyc2lvblZ1bG5JbnB1dCxcbiAgdHlwZSBWZXJzaW9uVnVsbkFzc2Vzc21lbnQsXG59IGZyb20gJy4vdmVyc2lvbi12dWxuLXBvbGljeS5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVDb21wbGlhbmNlQ2xpZW50LFxuICB0eXBlIENvbXBsaWFuY2VDaGVja1Jlc3VsdCxcbiAgdHlwZSBDb21wbGlhbmNlVmlvbGF0aW9uLFxufSBmcm9tICcuL2NvbXBsaWFuY2UtY2xpZW50LmpzJztcbmV4cG9ydCB7XG4gIHBsdWdpblJ1bnNPd25JbWFnZSxcbiAgcGx1Z2luQ29tcGxpYW5jZVRhZ3MsXG4gIGRlcml2ZVBsdWdpbkltYWdlQ29tcGxpYW5jZSxcbiAgdHlwZSBQbHVnaW5Db21wbGlhbmNlQXR0cmlidXRlcyxcbiAgUExVR0lOX0lNQUdFX0NPTVBMSUFOQ0VfRklFTERTLFxuICB0eXBlIFBsdWdpbkltYWdlUm93LFxufSBmcm9tICcuLi91dGlscy9wbHVnaW4tY29tcGxpYW5jZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBsaWFuY2UtZXZlbnQtc3Vic2NyaWJlci5qcyc7XG5leHBvcnQge1xuICB0eXBlIEVudGl0eUV2ZW50LFxuICB0eXBlIEVudGl0eUV2ZW50U3Vic2NyaWJlcixcbiAgZW50aXR5RXZlbnRzLFxufSBmcm9tICcuL2VudGl0eS1ldmVudHMuanMnO1xuZXhwb3J0IHtcbiAgZGVzdHJveVNoYXJlZEh0dHBBZ2VudHMsXG4gIGNyZWF0ZVNhZmVDbGllbnQsXG4gIFJlc3BvbnNlVG9vTGFyZ2VFcnJvcixcbiAgSW50ZXJuYWxIdHRwQ2xpZW50LFxufSBmcm9tICcuL2h0dHAtY2xpZW50LmpzJztcbmV4cG9ydCB7XG4gIHNldFBsYXRmb3JtSndrc0NhY2hlLFxuICBKd2tzVW5hdmFpbGFibGVFcnJvcixcbiAgVW5rbm93bktpZEVycm9yLFxuICBKd2tzQ2FjaGUsXG59IGZyb20gJy4vandrcy1jYWNoZS5qcyc7XG4vLyBTZXJ2aWNlLWtleSBpbnRlcm5hbHMgc3RheSBpbnRlcm5hbC4gVGhlIHBhY2thZ2Ugc3VyZmFjZSBpcyB0aGUgdmVyaWZ5L2luc3BlY3Rcbi8vIHNpZGUgdGhhdCBwbGF0Zm9ybSdzIEpXVCBvcHRpb25zIGFuZCB0aGUgYXV0aCBtaWRkbGV3YXJlIG5lZWQ7IGtleSBNQVRFUklBTFxuLy8gaGFuZGxpbmcgKGBzaWduU2VydmljZUp3dGAsIHRoZSBidW5kbGUsIHRoZSB0ZXN0IHJlc2V0IGhvb2spIGlzIHJlYWNoYWJsZSBvbmx5XG4vLyBieSBkZWVwIGltcG9ydCBmcm9tIGluc2lkZSBhcGktY29yZSBhbmQgaXRzIHRlc3RpbmcgaGVscGVycy5cbmV4cG9ydCB7XG4gIGlzU2VydmljZUtpZCxcbiAgc2VydmljZUlkZW50aXR5LFxuICB2ZXJpZnlTZXJ2aWNlSnd0LFxufSBmcm9tICcuL3NlcnZpY2Uta2V5cy5qcyc7XG4vLyBUaGUgYnJlYWtlciBpcyB3aXJlZCBieSB0aGUgc2hhcmVkIEhUVFAgY2xpZW50OyBzZXJ2aWNlcyBjb25zdW1lIGl0cyBFRkZFQ1QsXG4vLyBub3QgdGhlIGNsYXNzLiBPbmx5IHRoZSBvcGVyYXRpb25hbCBzdXJmYWNlIGlzIHB1YmxpYy5cbmV4cG9ydCB7XG4gIHJlc2V0Q2lyY3VpdEJyZWFrZXJzLFxufSBmcm9tICcuL2NpcmN1aXQtYnJlYWtlci5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVFbnZSZWRpc0R1cmFibGVFdmVudEJ1cyxcbiAgdHlwZSBFdmVudFN1YnNjcmlwdGlvbixcbiAgdHlwZSBEdXJhYmxlRXZlbnRCdXMsXG59IGZyb20gJy4vZHVyYWJsZS1ldmVudC1idXMuanMnO1xuZXhwb3J0IHtcbiAgZ2V0RXJyb3JSZXRyeURlY2lzaW9uLFxufSBmcm9tICcuL3JldHJ5LXN0cmF0ZWd5LmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUmV0cnlDb25maWcsXG59IGZyb20gJy4vcmV0cnktc3RyYXRlZ3kuanMnO1xuZXhwb3J0IHtcbiAgbmV4dEJhY2tvZmZNcyxcbiAgcmV0cnlGb3JldmVyLFxufSBmcm9tICcuL3JldHJ5LWZvcmV2ZXIuanMnO1xuZXhwb3J0IHtcbiAgZ2V0UXVvdGFTZXJ2aWNlQXV0aEhlYWRlcixcbiAgY3JlYXRlUXVvdGFTZXJ2aWNlLFxuICBpbmNyZW1lbnRRdW90YSxcbiAgcmVzZXJ2ZVF1b3RhLFxuICBzZW5kUXVvdGFSZXNlcnZlRGVuaWVkLFxuICBkZWNyZW1lbnRRdW90YSxcbiAgbWV0ZXJlZFF1b3RhVHlwZUZvcixcbiAgY2FsbFF1b3RhRXhlbXB0aW9uLFxuICBRVU9UQV9DSEVDS19USU1FT1VUX01TLFxuICBxdW90YUF0dHJpYnV0aW9uRnJvbVJlcXVlc3QsXG4gIHR5cGUgQWlLZXlTb3VyY2UsXG4gIHR5cGUgQWlMaW1pdENvZGUsXG4gIHR5cGUgQ2FsbFF1b3RhRXhlbXB0aW9uLFxuICB0eXBlIFF1b3RhUmVzZXJ2ZVJlc3VsdCxcbiAgdHlwZSBRdW90YVRva2VuVXNhZ2UsXG4gIHR5cGUgUXVvdGFTZXJ2aWNlLFxuICB0eXBlIFF1b3RhVXNhZ2VBdHRyaWJ1dGlvbixcbn0gZnJvbSAnLi9xdW90YS5qcyc7XG5leHBvcnQge1xuICBhaUNhbGxXZWlnaHQsXG4gIHBhcnNlQWlNb2RlbFdlaWdodHMsXG4gIE1BWF9BSV9DQUxMX1dFSUdIVCxcbn0gZnJvbSAnLi9haS1jYWxsLXdlaWdodC5qcyc7XG5leHBvcnQge1xuICBRdW90YUluY3JlbWVudEJhdGNoZXIsXG4gIGZsdXNoUXVvdGFJbmNyZW1lbnRzLFxuICBRVU9UQV9JTkNSRU1FTlRfRkxVU0hfTVMsXG4gIFFVT1RBX0lOQ1JFTUVOVF9CVUZGRVJfTUFYLFxuICBNQVhfR1JPVVBTX1BFUl9JTkNSRU1FTlQsXG4gIHR5cGUgTWV0ZXJlZEluY3JlbWVudEdyb3VwLFxufSBmcm9tICcuL3F1b3RhLWluY3JlbWVudC1iYXRjaGVyLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZVJlbW90ZUF1ZGl0Q2xpZW50LFxuICB3aXJlQXV0aHpEZW5pYWxBdWRpdG9yLFxuICByZWNvcmRBdWRpdCxcbiAgdHlwZSBSZW1vdGVBdWRpdEV2ZW50LFxuICB0eXBlIFJlbW90ZUF1ZGl0V2lyZUV2ZW50LFxuICB0eXBlIFJlbW90ZUF1ZGl0Q2xpZW50LFxufSBmcm9tICcuL3JlbW90ZS1hdWRpdC1jbGllbnQuanMnO1xuZXhwb3J0IHtcbiAgcnVuV2l0aEF1ZGl0Q29udGV4dCxcbiAgY3VycmVudEF1ZGl0Q29udGV4dCxcbiAgYXVkaXRDb250ZXh0RnJvbVJlcXVlc3QsXG4gIGF1ZGl0QXV0aEJsb2NrLFxuICBzYW5pdGl6ZUNvcnJlbGF0aW9uSWQsXG4gIHNhbml0aXplVXNlckFnZW50LFxuICBBVURJVF9DT1JSRUxBVElPTl9IRUFERVJTLFxuICB0eXBlIEF1ZGl0Q29udGV4dCxcbiAgdHlwZSBBdWRpdENvcnJlbGF0aW9uLFxuICB0eXBlIEF1ZGl0Sm9iQ29udGV4dCxcbiAgdHlwZSBBdWRpdEF1dGhCbG9jayxcbn0gZnJvbSAnLi9hdWRpdC1jb250ZXh0LmpzJztcbmV4cG9ydCB7XG4gIGF1ZGl0U3Bvb2xLZXksXG4gIGNyZWF0ZUVudlJlZGlzQXVkaXRTcG9vbCxcbiAgdHlwZSBBdWRpdFNwb29sLFxufSBmcm9tICcuL2F1ZGl0LXNwb29sLmpzJztcbmV4cG9ydCB7XG4gIHJlc29sdmVSZWRpc0Nvbm5lY3Rpb24sXG4gIGRlc2NyaWJlUmVkaXNDb25uZWN0aW9uLFxuICBjcmVhdGVSZWRpc0NsaWVudCxcbiAgY3JlYXRlRW52UmVkaXNDbGllbnQsXG4gIGNyZWF0ZVJlZGlzUmVhZHlHYXRlLFxuICBpbmNyV2luZG93LFxuICBSZWRpc0NvbmZpZ0Vycm9yLFxuICB0eXBlIFJlZGlzRXZhbENsaWVudCxcbn0gZnJvbSAnLi9lbnYtcmVkaXMuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlUmVkaXNUb2tlblJldm9jYXRpb25TdG9yZSxcbiAgY3JlYXRlRW52UmVkaXNUb2tlblJldm9jYXRpb25TdG9yZSxcbiAgcHVibGlzaFRva2VuUmV2b2NhdGlvbixcbiAgcHVibGlzaFNlc3Npb25SZXZvY2F0aW9uLFxuICBwdWJsaXNoQ3JlZGVudGlhbFJldm9jYXRpb24sXG59IGZyb20gJy4vdG9rZW4tcmV2b2NhdGlvbi5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVNZW1vcnlTc2VUaWNrZXRTdG9yZSxcbiAgY3JlYXRlRW52U3NlVGlja2V0U3RvcmUsXG4gIGVudlNzZVRpY2tldENhcHMsXG4gIHR5cGUgRW52U3NlVGlja2V0U3RvcmVDb25maWcsXG4gIHR5cGUgU3NlVGlja2V0U3RvcmUsXG4gIHR5cGUgU3NlVGlja2V0U3RvcmVDb25maWcsXG59IGZyb20gJy4vc3NlLXRpY2tldC1zdG9yZS5qcyc7XG5leHBvcnQge1xuICB3aXJlU2VydmljZVNlY3VyaXR5LFxufSBmcm9tICcuL3NlcnZpY2UtYm9vdC5qcyc7XG5leHBvcnQge1xuICBjcmVhdGVXZWJob29rQ2hhbm5lbCxcbiAgY3JlYXRlRW1haWxDaGFubmVsLFxuICBjcmVhdGVDaGFubmVsUmVnaXN0cnksXG4gIHR5cGUgTm90aWZpY2F0aW9uUHJpb3JpdHksXG4gIHR5cGUgTm90aWZpY2F0aW9uTWVzc2FnZSxcbiAgdHlwZSBDaGFubmVsVGFyZ2V0LFxuICB0eXBlIERlbGl2ZXJ5UmVzdWx0LFxuICB0eXBlIE5vdGlmaWNhdGlvbkNoYW5uZWwsXG59IGZyb20gJy4vbm90aWZpY2F0aW9uLWNoYW5uZWxzLmpzJztcbmV4cG9ydCB7XG4gIGFsZXJ0RGVsaXZlcnlDb25maWcsXG4gIGNhbkRlbGl2ZXJBbnl3aGVyZSxcbiAgZGVhZG1hbkNvbmZpZyxcbiAgcmVwb3J0QWxlcnREZWxpdmVyeVBvc3R1cmUsXG4gIHNsYWNrQWxlcnRzQ29uZmlnLFxuICBzdGFydERlYWRtYW5IZWFydGJlYXQsXG4gIHN0b3BEZWFkbWFuSGVhcnRiZWF0LFxuICB0eXBlIERlYWRtYW5Db25maWcsXG4gIHR5cGUgQWxlcnREZWxpdmVyeUNvbmZpZyxcbiAgdHlwZSBTbGFja0FsZXJ0c0NvbmZpZyxcbn0gZnJvbSAnLi9hbGVydC1kZWxpdmVyeS5qcyc7XG5leHBvcnQge1xuICB2ZXJpZnlQYWdlckR1dHlTaWduYXR1cmUsXG4gIG9uQ2FsbEluYm91bmRDb25maWcsXG4gIGZldGNoUm90YUNvdmVyYWdlLFxuICBwYXJzZU9uQ2FsbFdlYmhvb2ssXG4gIGFja0xhdGVuY3lTZWNvbmRzLFxuICBQQUdFUkRVVFlfQVBJX1VSTCxcbiAgdHlwZSBPbkNhbGxJbmJvdW5kQ29uZmlnLFxuICB0eXBlIE9uQ2FsbFdlYmhvb2tFdmVudCxcbiAgdHlwZSBPbkNhbGxXZWJob29rRXZlbnRUeXBlLFxuICB0eXBlIFJvdGFDb3ZlcmFnZSxcbn0gZnJvbSAnLi9wYWdlcmR1dHktaW5ib3VuZC5qcyc7XG5leHBvcnQge1xuICBzZW5kUGFnZXJEdXR5RXZlbnQsXG4gIHBhZ2VyRHV0eUNvbmZpZyxcbiAgcmVzb2x2ZUV2ZW50c0VuZHBvaW50LFxuICBQQUdFUkRVVFlfRVZFTlRTX1VSTCxcbiAgdHlwZSBPbkNhbGxQcm92aWRlcixcbiAgdHlwZSBQYWdlckR1dHlBY3Rpb24sXG4gIHR5cGUgUGFnZXJEdXR5Q29uZmlnLFxuICB0eXBlIFBhZ2VyRHV0eUV2ZW50LFxuICB0eXBlIFBhZ2VyRHV0eVJlc3VsdCxcbiAgdHlwZSBQYWdlckR1dHlTZXZlcml0eSxcbn0gZnJvbSAnLi9wYWdlcmR1dHkuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlRWNvc3lzdGVtTm90aWZ5Q2xpZW50LFxuICBOT1RJRllfRU1BSUxfUEFUSCxcbiAgdHlwZSBFY29zeXN0ZW1Ob3RpZnlDbGllbnQsXG59IGZyb20gJy4vZWNvc3lzdGVtLW5vdGlmeS1jbGllbnQuanMnO1xuZXhwb3J0IHtcbiAgZmV0Y2hPcmdBSUFjY2VzcyxcbiAgZmV0Y2hPcmdBSUtleSxcbiAgYXNzZXJ0T3JnQUlFbmFibGVkLFxuICByZXF1aXJlT3JnQUlFbmFibGVkLFxuICByZXNldE9yZ0FJQ2FjaGUsXG4gIE9SR19BSV9BQ0NFU1NfUEFUSCxcbiAgT1JHX0FJX0tFWVNfUEFUSCxcbiAgdHlwZSBPcmdBSUFjY2Vzcyxcbn0gZnJvbSAnLi9vcmctYWktY2xpZW50LmpzJztcbiJdfQ==
@@ -221,4 +221,4 @@ export function platformJwksCache() {
221
221
  export function setPlatformJwksCache(cache) {
222
222
  platformJwks = cache;
223
223
  }
224
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiandrcy1jYWNoZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9qd2tzLWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUE0QnRDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsU0FBUyxFQUNULGNBQWMsRUFDZCxnQkFBZ0IsR0FHakIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRTFDLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxhQUFhO0FBRTlELDREQUE0RDtBQUM1RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7QUFFM0MsMkZBQTJGO0FBQzNGLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLE1BQU0sQ0FBQztBQUV0RCx3RkFBd0Y7QUFDeEYsTUFBTSxPQUFPLG9CQUFxQixTQUFRLEtBQUs7SUFDN0MsWUFBWSxPQUFPLEdBQUcsZ0RBQWdEO1FBQ3BFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFDeEMsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyxvQ0FBb0MsR0FBRyxF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RSxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSxNQUFNLElBQUksR0FBWSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7WUFBUyxDQUFDO1FBQ1QsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBSSxZQUFtQyxDQUFDO0FBRXhDLG1FQUFtRTtBQUNuRSxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLFlBQVksS0FBSyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRixPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQTRCO0lBQy9ELFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBKV0tTIGNhY2hlIGV2ZXJ5IHZlcmlmaWVyIGluIHRoZSBmbGVldCBzaGFyZXMuXG4gKlxuICogUGxhdGZvcm0gc2lnbnMgdXNlciB0b2tlbnMgd2l0aCBFUzI1NiBhbmQgcHVibGlzaGVzIHRoZSBwdWJsaWMgaGFsdmVzIGF0XG4gKiBgLy53ZWxsLWtub3duL2p3a3MuanNvbmAuIFZlcmlmaWVycyBtdXN0IG5vdCBmZXRjaCB0aGF0IHBlciByZXF1ZXN0IChwbGF0Zm9ybVxuICogd291bGQgbGFuZCBvbiB0aGUgaG90IHBhdGggb2YgdGhlIHdob2xlIGZsZWV0KSBub3IgY2FjaGUgaXQgZm9yZXZlciAoYSByb3RhdGVkXG4gKiBrZXkgd291bGQgbmV2ZXIgYmUgcGlja2VkIHVwKSwgc28gdGhlIGNvbnRyYWN0IGlzIGZpeGVkIGhlcmUgYW5kIHJldXNlZCBieVxuICogYXBpLWNvcmUncyBgcmVxdWlyZUF1dGhgLCBpbWFnZS1yZWdpc3RyeSdzIGF1dGggcmVzb2x2ZXIgYW5kIHRoZSBDTEk6XG4gKlxuICogLSAqKlJlZnJlc2ggZXZlcnkgMTAgbWludXRlcy4qKiBBIGtleSByb3RhdGVkIGluIGF0IHBsYXRmb3JtIGlzIHRydXN0ZWQgZmxlZXQtXG4gKiAgIHdpZGUgd2l0aGluIHRoYXQgd2luZG93IHdpdGhvdXQgYW55b25lIHJlc3RhcnRpbmcuXG4gKiAtICoqUmVmZXRjaCBvbmNlIG9uIGFuIHVua25vd24gYGtpZGAuKiogQSBicmFuZC1uZXcgc2lnbmluZyBrZXkgaXMgcGlja2VkIHVwXG4gKiAgIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgNDAxLWluZyBldmVyeSByZXF1ZXN0IHVudGlsIHRoZSBuZXh0IHJlZnJlc2guIFJhdGUtXG4gKiAgIGxpbWl0ZWQgKHtAbGluayBVTktOT1dOX0tJRF9SRUZFVENIX0NPT0xET1dOX01TfSkgc28gYSBmbG9vZCBvZiBmb3JnZWQgYGtpZGBzXG4gKiAgIGNhbid0IHR1cm4gaW50byBhIGZldGNoIHN0b3JtIGFnYWluc3QgcGxhdGZvcm0uXG4gKiAtICoqTmVnYXRpdmUtY2FjaGUgZmFpbHVyZXMgYnJpZWZseS4qKiBBIHBsYXRmb3JtIG91dGFnZSBkb2Vzbid0IGJlY29tZSBhXG4gKiAgIGZldGNoLXBlci1yZXF1ZXN0IGFtcGxpZmllci5cbiAqIC0gKipGYWlsIGNsb3NlZC4qKiBBbiB1bnZlcmlmaWFibGUgdG9rZW4gaXMgbm90IGFuIGlkZW50aXR5OiB3aGVuIHRoZSBrZXkgc2V0XG4gKiAgIGNhbm5vdCBiZSBvYnRhaW5lZCB0aGUgdmVyaWZpZXIgdGhyb3dzIHtAbGluayBKd2tzVW5hdmFpbGFibGVFcnJvcn0gYW5kIHRoZVxuICogICBjYWxsZXIgYW5zd2VycyA0MDEvNTAzIOKAlCBpdCBORVZFUiBmYWxscyB0aHJvdWdoIHRvIFwiYWxsb3dcIi5cbiAqICAgQSBrZXkgc2V0IGFscmVhZHkgaW4gaGFuZCBpcyBzdGlsbCB1c2VkIHdoaWxlIGEgcmVmcmVzaCBpcyBmYWlsaW5nICh0aGUga2V5c1xuICogICBhcmUgcHVibGljIGFuZCBkb24ndCBleHBpcmU7IHJlZnVzaW5nIGV2ZXJ5IHJlcXVlc3QgYmVjYXVzZSBwbGF0Zm9ybSBibGlwcGVkXG4gKiAgIHdvdWxkIGJlIGEgc2VsZi1pbmZsaWN0ZWQgb3V0YWdlKSwgd2hpY2ggaXMgd2h5IHRoZSBuZWdhdGl2ZSBjYWNoZSBleGlzdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBLZXlPYmplY3QgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgZW52SW50IH0gZnJvbSAnLi4vdXRpbHMvZW52LmpzJztcbmltcG9ydCB7XG4gIEpXS1NfUEFUSCxcbiAgaXNKd2tzRG9jdW1lbnQsXG4gIHB1YmxpY0tleUZyb21Kd2ssXG4gIHR5cGUgSndrc0RvY3VtZW50LFxuICB0eXBlIFB1YmxpY0p3ayxcbn0gZnJvbSAnLi4vdXRpbHMvandrLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcbmltcG9ydCB7IHNlcnZpY2VFbmRwb2ludCB9IGZyb20gJy4uL3V0aWxzL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2p3a3MtY2FjaGUnKTtcblxuLyoqIEhvdyBsb25nIGEgZmV0Y2hlZCBrZXkgc2V0IGlzIHNlcnZlZCBiZWZvcmUgYSByZWZyZXNoIGlzIGR1ZS4gKi9cbmV4cG9ydCBjb25zdCBKV0tTX1JFRlJFU0hfSU5URVJWQUxfTVMgPSA2MDBfMDAwOyAvLyAxMCBtaW51dGVzXG5cbi8qKiBIb3cgbG9uZyBhIGZldGNoIEZBSUxVUkUgc3VwcHJlc3NlcyBmdXJ0aGVyIGF0dGVtcHRzLiAqL1xuZXhwb3J0IGNvbnN0IEpXS1NfTkVHQVRJVkVfVFRMX01TID0gMTBfMDAwO1xuXG4vKiogTWluaW11bSBnYXAgYmV0d2VlbiB1bmtub3duLWBraWRgIHJlZmV0Y2hlcywgc28gZm9yZ2VkIGtpZHMgY2FuJ3Qgc3RhbXBlZGUgcGxhdGZvcm0uICovXG5leHBvcnQgY29uc3QgVU5LTk9XTl9LSURfUkVGRVRDSF9DT09MRE9XTl9NUyA9IDMwXzAwMDtcblxuLyoqIFRoZSBrZXkgc2V0IGNvdWxkIG5vdCBiZSBvYnRhaW5lZCDigJQgdGhlIHRva2VuJ3MgdmFsaWRpdHkgaXMgVU5LTk9XTiAoNTAzLXNoYXBlZCkuICovXG5leHBvcnQgY2xhc3MgSndrc1VuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnVG9rZW4gc2lnbmluZyBrZXlzIGFyZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnSndrc1VuYXZhaWxhYmxlRXJyb3InO1xuICB9XG59XG5cbi8qKiBUaGUga2V5IHNldCB3YXMgb2J0YWluZWQgYW5kIGRvZXMgTk9UIGNvbnRhaW4gdGhlIHRva2VuJ3MgYGtpZGAgKDQwMS1zaGFwZWQpLiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25LaWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Ioa2lkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgTm8gcHVibGlzaGVkIHNpZ25pbmcga2V5IGZvciBraWQgJHtraWR9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1Vua25vd25LaWRFcnJvcic7XG4gIH1cbn1cblxuLyoqIEZldGNoZXMgdGhlIHJhdyBKV0tTIGRvY3VtZW50LiBSZWplY3RzIG9uIGFueSB0cmFuc3BvcnQvc2hhcGUgZmFpbHVyZS4gKi9cbmV4cG9ydCB0eXBlIEp3a3NGZXRjaGVyID0gKCkgPT4gUHJvbWlzZTxKd2tzRG9jdW1lbnQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEp3a3NDYWNoZU9wdGlvbnMge1xuICBmZXRjaDogSndrc0ZldGNoZXI7XG4gIC8qKiBGb3IgbWV0cmljcy9sb2dnaW5nIChlLmcuIGAncGxhdGZvcm0nYCkuICovXG4gIHNvdXJjZT86IHN0cmluZztcbiAgcmVmcmVzaEludGVydmFsTXM/OiBudW1iZXI7XG4gIG5lZ2F0aXZlVHRsTXM/OiBudW1iZXI7XG4gIHVua25vd25LaWRDb29sZG93bk1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEga2V5IHNldCB3aXRoIHRoZSBmcmVzaG5lc3MgYm9va2tlZXBpbmcgdGhlIGNvbnRyYWN0IGFib3ZlIG5lZWRzLiBEZWxpYmVyYXRlbHlcbiAqIHRyYW5zcG9ydC1hZ25vc3RpYzogdGhlIENMSSBhbmQgdGhlIExhbWJkYSBoYW5kIGl0IHRoZWlyIG93biBmZXRjaGVyLlxuICovXG5leHBvcnQgY2xhc3MgSndrc0NhY2hlIHtcbiAgcHJpdmF0ZSBrZXlzID0gbmV3IE1hcDxzdHJpbmcsIEtleU9iamVjdD4oKTtcbiAgcHJpdmF0ZSBmZXRjaGVkQXQgPSAwO1xuICBwcml2YXRlIGZhaWxlZFVudGlsID0gMDtcbiAgcHJpdmF0ZSBsYXN0VW5rbm93bktpZEZldGNoQXQgPSAwO1xuICBwcml2YXRlIGluRmxpZ2h0OiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaEludGVydmFsTXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBuZWdhdGl2ZVR0bE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5rbm93bktpZENvb2xkb3duTXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEp3a3NDYWNoZU9wdGlvbnMpIHtcbiAgICB0aGlzLnJlZnJlc2hJbnRlcnZhbE1zID0gb3B0aW9ucy5yZWZyZXNoSW50ZXJ2YWxNcyA/PyBKV0tTX1JFRlJFU0hfSU5URVJWQUxfTVM7XG4gICAgdGhpcy5uZWdhdGl2ZVR0bE1zID0gb3B0aW9ucy5uZWdhdGl2ZVR0bE1zID8/IEpXS1NfTkVHQVRJVkVfVFRMX01TO1xuICAgIHRoaXMudW5rbm93bktpZENvb2xkb3duTXMgPSBvcHRpb25zLnVua25vd25LaWRDb29sZG93bk1zID8/IFVOS05PV05fS0lEX1JFRkVUQ0hfQ09PTERPV05fTVM7XG4gICAgdGhpcy5zb3VyY2UgPSBvcHRpb25zLnNvdXJjZSA/PyAncGxhdGZvcm0nO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJpZmljYXRpb24ga2V5IGZvciBga2lkYC5cbiAgICpcbiAgICogQHRocm93cyB7Sndrc1VuYXZhaWxhYmxlRXJyb3J9IHRoZSBrZXkgc2V0IGNvdWxkIG5vdCBiZSBvYnRhaW5lZCBhdCBhbGwuXG4gICAqIEB0aHJvd3Mge1Vua25vd25LaWRFcnJvcn0gdGhlIGtleSBzZXQgaXMgaW4gaGFuZCBidXQgaGFzIG5vIHN1Y2gga2V5LlxuICAgKi9cbiAgYXN5bmMgZ2V0S2V5KGtpZDogc3RyaW5nKTogUHJvbWlzZTxLZXlPYmplY3Q+IHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUZyZXNoKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5rZXlzLmdldChraWQpO1xuICAgIGlmIChrZXkpIHJldHVybiBrZXk7XG5cbiAgICAvLyBVbmtub3duIGtpZDogcGxhdGZvcm0gbWF5IGhhdmUgSlVTVCByb3RhdGVkLiBSZWZldGNoIG9uY2UgKHJhdGUtbGltaXRlZCksXG4gICAgLy8gdGhlbiBkZWNpZGUuIEEgY2FjaGVkLWJ1dC1zdGFsZSBzZXQgdGhhdCBzdGlsbCBsYWNrcyB0aGUga2lkIGFmdGVyIHRoZVxuICAgIC8vIHJlZmV0Y2ggaXMgYSByZWFsIHJlamVjdGlvbiwgbm90IGEgZnJlc2huZXNzIHByb2JsZW0uXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAobm93IC0gdGhpcy5sYXN0VW5rbm93bktpZEZldGNoQXQgPj0gdGhpcy51bmtub3duS2lkQ29vbGRvd25Ncykge1xuICAgICAgdGhpcy5sYXN0VW5rbm93bktpZEZldGNoQXQgPSBub3c7XG4gICAgICBlbWl0Q291bnRlcignandrc191bmtub3duX2tpZF9yZWZldGNoX3RvdGFsJywgeyBzb3VyY2U6IHRoaXMuc291cmNlIH0pO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKHsgZm9yY2U6IHRydWUgfSkuY2F0Y2goKCkgPT4geyAvKiBoYW5kbGVkIGJlbG93IGJ5IHRoZSBtaXNzICovIH0pO1xuICAgICAgY29uc3QgcmVmcmVzaGVkID0gdGhpcy5rZXlzLmdldChraWQpO1xuICAgICAgaWYgKHJlZnJlc2hlZCkgcmV0dXJuIHJlZnJlc2hlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMua2V5cy5zaXplID09PSAwKSB0aHJvdyBuZXcgSndrc1VuYXZhaWxhYmxlRXJyb3IoKTtcbiAgICB0aHJvdyBuZXcgVW5rbm93bktpZEVycm9yKGtpZCk7XG4gIH1cblxuICAvKiogRXZlcnkgY3VycmVudGx5LXRydXN0ZWQgYGtpZGAuIEV4cG9zZWQgZm9yIGRpYWdub3N0aWNzIGFuZCB0ZXN0cy4gKi9cbiAga25vd25LaWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMua2V5cy5rZXlzKCldO1xuICB9XG5cbiAgLyoqIERyb3AgZXZlcnl0aGluZywgc28gdGhlIG5leHQgbG9va3VwIHJlZmV0Y2hlcy4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5rZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5mZXRjaGVkQXQgPSAwO1xuICAgIHRoaXMuZmFpbGVkVW50aWwgPSAwO1xuICAgIHRoaXMubGFzdFVua25vd25LaWRGZXRjaEF0ID0gMDtcbiAgICB0aGlzLmluRmxpZ2h0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlZmV0Y2ggd2hlbiB0aGUgc2V0IGlzIG1pc3Npbmcgb3IgcGFzdCBpdHMgcmVmcmVzaCBpbnRlcnZhbC4gKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVGcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN0YWxlID0gbm93IC0gdGhpcy5mZXRjaGVkQXQgPj0gdGhpcy5yZWZyZXNoSW50ZXJ2YWxNcztcbiAgICBpZiAodGhpcy5rZXlzLnNpemUgPiAwICYmICFzdGFsZSkgcmV0dXJuO1xuXG4gICAgaWYgKG5vdyA8IHRoaXMuZmFpbGVkVW50aWwpIHtcbiAgICAgIC8vIEluc2lkZSB0aGUgbmVnYXRpdmUtY2FjaGUgd2luZG93LiBTZXJ2ZSBhIGtleSBzZXQgd2UgYWxyZWFkeSBob2xkXG4gICAgICAvLyAocHVibGljIGtleXMgZG9uJ3QgZXhwaXJlKTsgd2l0aCBub3RoaW5nIGluIGhhbmQsIGZhaWwgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMua2V5cy5zaXplID4gMCkgcmV0dXJuO1xuICAgICAgdGhyb3cgbmV3IEp3a3NVbmF2YWlsYWJsZUVycm9yKCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCh7IGZvcmNlOiBmYWxzZSB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRoaXMua2V5cy5zaXplID4gMCkge1xuICAgICAgICBsb2dnZXIud2FybignSldLUyByZWZyZXNoIGZhaWxlZDsgY29udGludWluZyBvbiB0aGUgY2FjaGVkIGtleSBzZXQnLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBKd2tzVW5hdmFpbGFibGVFcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBPbmUgcmVhbCBmZXRjaCwgc2hhcmVkIGJ5IGV2ZXJ5IGNvbmN1cnJlbnQgY2FsbGVyLiAqL1xuICBwcml2YXRlIHJlZnJlc2gob3B0czogeyBmb3JjZTogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaW5GbGlnaHQpIHJldHVybiB0aGlzLmluRmxpZ2h0O1xuICAgIGlmICghb3B0cy5mb3JjZSAmJiBEYXRlLm5vdygpIDwgdGhpcy5mYWlsZWRVbnRpbCkgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBKd2tzVW5hdmFpbGFibGVFcnJvcigpKTtcbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5wZXJmb3JtRmV0Y2goKS5maW5hbGx5KCgpID0+IHsgdGhpcy5pbkZsaWdodCA9IHVuZGVmaW5lZDsgfSk7XG4gICAgdGhpcy5pbkZsaWdodCA9IHByb21pc2U7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1GZXRjaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZG9jdW1lbnQ6IEp3a3NEb2N1bWVudDtcbiAgICB0cnkge1xuICAgICAgZG9jdW1lbnQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuZmV0Y2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5mYWlsZWRVbnRpbCA9IERhdGUubm93KCkgKyB0aGlzLm5lZ2F0aXZlVHRsTXM7XG4gICAgICBlbWl0Q291bnRlcignandrc19mZXRjaF90b3RhbCcsIHsgc291cmNlOiB0aGlzLnNvdXJjZSwgcmVzdWx0OiAnZXJyb3InIH0pO1xuICAgICAgbG9nZ2VyLndhcm4oJ0pXS1MgZmV0Y2ggZmFpbGVkJywge1xuICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBuZXcgTWFwPHN0cmluZywgS2V5T2JqZWN0PigpO1xuICAgIGZvciAoY29uc3QgandrIG9mIGRvY3VtZW50LmtleXMgYXMgUHVibGljSndrW10pIHtcbiAgICAgIGlmICghandrPy5raWQpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAga2V5cy5zZXQoandrLmtpZCwgcHVibGljS2V5RnJvbUp3ayhqd2spKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uZSB1bnVzYWJsZSBlbnRyeSBtdXN0IG5vdCBkaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyB1bnVzYWJsZSBKV0tTIGVudHJ5JywgeyBraWQ6IGp3ay5raWQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoa2V5cy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmZhaWxlZFVudGlsID0gRGF0ZS5ub3coKSArIHRoaXMubmVnYXRpdmVUdGxNcztcbiAgICAgIGVtaXRDb3VudGVyKCdqd2tzX2ZldGNoX3RvdGFsJywgeyBzb3VyY2U6IHRoaXMuc291cmNlLCByZXN1bHQ6ICdlbXB0eScgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pXS1MgZG9jdW1lbnQgY29udGFpbmVkIG5vIHVzYWJsZSBrZXlzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXlzID0ga2V5cztcbiAgICB0aGlzLmZldGNoZWRBdCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5mYWlsZWRVbnRpbCA9IDA7XG4gICAgZW1pdENvdW50ZXIoJ2p3a3NfZmV0Y2hfdG90YWwnLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsIHJlc3VsdDogJ3N1Y2Nlc3MnIH0pO1xuICB9XG59XG5cbi8qKlxuICogRmV0Y2ggcGxhdGZvcm0ncyBKV0tTIG92ZXIgdGhlIGluLWNsdXN0ZXIgYWRkcmVzcyBldmVyeSBvdGhlciBjYWxsZXIgdXNlc1xuICogKGBQTEFURk9STV9TRVJWSUNFX0hPU1RgIC8gYFBMQVRGT1JNX1NFUlZJQ0VfUE9SVGApLCBvciB0aGUgYWJzb2x1dGVcbiAqIGBQTEFURk9STV9KV0tTX1VSTGAgd2hlbiBvbmUgaXMgY29uZmlndXJlZCAodGhlIENMSSBhbmQgdGhlIGV2ZW50cyBMYW1iZGEgcnVuXG4gKiBvdXRzaWRlIHRoZSBjbHVzdGVyKS5cbiAqXG4gKiBVbmF1dGhlbnRpY2F0ZWQgYnkgZGVzaWduOiB0aGUga2V5IHNldCBpcyBwdWJsaWMsIGFuZCByZXF1aXJpbmcgYSBjcmVkZW50aWFsXG4gKiB0byBmZXRjaCB0aGUga2V5cyB0aGF0IHZlcmlmeSBjcmVkZW50aWFscyBpcyBhIGJvb3RzdHJhcCBjeWNsZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hQbGF0Zm9ybUp3a3MoKTogUHJvbWlzZTxKd2tzRG9jdW1lbnQ+IHtcbiAgY29uc3QgYWJzb2x1dGUgPSBwcm9jZXNzLmVudi5QTEFURk9STV9KV0tTX1VSTDtcbiAgY29uc3QgdGltZW91dCA9IGVudkludCgnSldLU19GRVRDSF9USU1FT1VUX01TJywgMzAwMCwgeyBtaW46IDEgfSk7XG4gIGlmIChhYnNvbHV0ZSkgcmV0dXJuIGZldGNoSndrc0Zyb21VcmwoYWJzb2x1dGUsIHRpbWVvdXQpO1xuXG4gIC8vIExvYWRlZCBMQVpJTFksIG9uIHRoZSBmaXJzdCBmZXRjaC4gQSBzdGF0aWMgaW1wb3J0IHdvdWxkIHB1dCB0aGUgSFRUUCBjbGllbnRcbiAgLy8gKGFuZCBwbGF0Zm9ybSdzIGFkZHJlc3MpIGludG8gdGhlIGltcG9ydCBncmFwaCBvZiBldmVyeSBtb2R1bGUgdGhhdCBtZXJlbHlcbiAgLy8gdXNlcyBgcmVxdWlyZUF1dGhgIOKAlCB0aGUgc2FtZSByZWFzb24gYGFwaS1rZXktZXhjaGFuZ2VgIGlzIGxhenksIGFuZCB3aGF0XG4gIC8vIGtlZXBzIHBhcnRpYWwgYGh0dHAtY2xpZW50LmpzYCBtb2NrcyBpbiB0aGUgc2VydmljZSBzdWl0ZXMgd29ya2luZy5cbiAgY29uc3QgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSA9IGF3YWl0IGltcG9ydCgnLi9odHRwLWNsaWVudC5qcycpO1xuICBjb25zdCBjbGllbnQgPSBuZXcgSW50ZXJuYWxIdHRwQ2xpZW50KHtcbiAgICAuLi5zZXJ2aWNlRW5kcG9pbnQoJ3BsYXRmb3JtJyksXG4gICAgdGltZW91dCxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8dW5rbm93bj4oSldLU19QQVRILCB7IGlkZW1wb3RlbnQ6IHRydWUgfSk7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwIHx8ICFpc0p3a3NEb2N1bWVudChyZXMuYm9keSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgSldLUyByZXNwb25zZSAoc3RhdHVzICR7cmVzLnN0YXR1c0NvZGV9KWApO1xuICB9XG4gIHJldHVybiByZXMuYm9keTtcbn1cblxuLyoqIEZldGNoIGEgSldLUyBkb2N1bWVudCBmcm9tIGFuIGFic29sdXRlIFVSTCAob3V0c2lkZS10aGUtY2x1c3RlciB2ZXJpZmllcnMpLiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hKd2tzRnJvbVVybCh1cmw6IHN0cmluZywgdGltZW91dE1zID0gMzAwMCk6IFByb21pc2U8Sndrc0RvY3VtZW50PiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRpbWVvdXRNcyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsIGhlYWRlcnM6IHsgYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicgfSB9KTtcbiAgICBpZiAoIXJlcy5vaykgdGhyb3cgbmV3IEVycm9yKGBKV0tTIGZldGNoIHJldHVybmVkICR7cmVzLnN0YXR1c31gKTtcbiAgICBjb25zdCBib2R5OiB1bmtub3duID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICBpZiAoIWlzSndrc0RvY3VtZW50KGJvZHkpKSB0aHJvdyBuZXcgRXJyb3IoJ0pXS1MgcmVzcG9uc2Ugd2FzIG5vdCBhIGtleSBzZXQnKTtcbiAgICByZXR1cm4gYm9keTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICB9XG59XG5cbmxldCBwbGF0Zm9ybUp3a3M6IEp3a3NDYWNoZSB8IHVuZGVmaW5lZDtcblxuLyoqIFRoZSBwcm9jZXNzLXdpZGUgY2FjaGUgb2YgcGxhdGZvcm0ncyBwdWJsaXNoZWQgc2lnbmluZyBrZXlzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYXRmb3JtSndrc0NhY2hlKCk6IEp3a3NDYWNoZSB7XG4gIHBsYXRmb3JtSndrcyA/Pz0gbmV3IEp3a3NDYWNoZSh7IGZldGNoOiBmZXRjaFBsYXRmb3JtSndrcywgc291cmNlOiAncGxhdGZvcm0nIH0pO1xuICByZXR1cm4gcGxhdGZvcm1Kd2tzO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgdGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSDigJQgdXNlZCBieSB0ZXN0cywgYW5kIGJ5IGFueSBob3N0IHRoYXQgbXVzdFxuICogc3VwcGx5IGl0cyBvd24gZmV0Y2hlci4gUGFzcyBgdW5kZWZpbmVkYCB0byBkcm9wIGJhY2sgdG8gdGhlIGRlZmF1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQbGF0Zm9ybUp3a3NDYWNoZShjYWNoZTogSndrc0NhY2hlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIHBsYXRmb3JtSndrcyA9IGNhY2hlO1xufVxuIl19
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiandrcy1jYWNoZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2p3a3MtY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTRCdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxFQUNkLGdCQUFnQixHQUdqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFMUMsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxDQUFDLGFBQWE7QUFFOUQsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUUzQywyRkFBMkY7QUFDM0YsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsTUFBTSxDQUFDO0FBRXRELHdGQUF3RjtBQUN4RixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsS0FBSztJQUM3QyxZQUFZLE9BQU8sR0FBRyxnREFBZ0Q7UUFDcEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFFRCxvRkFBb0Y7QUFDcEYsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLEdBQVc7UUFDckIsS0FBSyxDQUFDLG9DQUFvQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FB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QUUsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sSUFBSSxHQUFZLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztZQUFTLENBQUM7UUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFJLFlBQW1DLENBQUM7QUFFeEMsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxpQkFBaUI7SUFDL0IsWUFBWSxLQUFLLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBNEI7SUFDL0QsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIEpXS1MgY2FjaGUgZXZlcnkgdmVyaWZpZXIgaW4gdGhlIGZsZWV0IHNoYXJlcy5cbiAqXG4gKiBQbGF0Zm9ybSBzaWducyB1c2VyIHRva2VucyB3aXRoIEVTMjU2IGFuZCBwdWJsaXNoZXMgdGhlIHB1YmxpYyBoYWx2ZXMgYXRcbiAqIGAvLndlbGwta25vd24vandrcy5qc29uYC4gVmVyaWZpZXJzIG11c3Qgbm90IGZldGNoIHRoYXQgcGVyIHJlcXVlc3QgKHBsYXRmb3JtXG4gKiB3b3VsZCBsYW5kIG9uIHRoZSBob3QgcGF0aCBvZiB0aGUgd2hvbGUgZmxlZXQpIG5vciBjYWNoZSBpdCBmb3JldmVyIChhIHJvdGF0ZWRcbiAqIGtleSB3b3VsZCBuZXZlciBiZSBwaWNrZWQgdXApLCBzbyB0aGUgY29udHJhY3QgaXMgZml4ZWQgaGVyZSBhbmQgcmV1c2VkIGJ5XG4gKiBhcGktY29yZSdzIGByZXF1aXJlQXV0aGAsIGltYWdlLXJlZ2lzdHJ5J3MgYXV0aCByZXNvbHZlciBhbmQgdGhlIENMSTpcbiAqXG4gKiAtICoqUmVmcmVzaCBldmVyeSAxMCBtaW51dGVzLioqIEEga2V5IHJvdGF0ZWQgaW4gYXQgcGxhdGZvcm0gaXMgdHJ1c3RlZCBmbGVldC1cbiAqICAgd2lkZSB3aXRoaW4gdGhhdCB3aW5kb3cgd2l0aG91dCBhbnlvbmUgcmVzdGFydGluZy5cbiAqIC0gKipSZWZldGNoIG9uY2Ugb24gYW4gdW5rbm93biBga2lkYC4qKiBBIGJyYW5kLW5ldyBzaWduaW5nIGtleSBpcyBwaWNrZWQgdXBcbiAqICAgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiA0MDEtaW5nIGV2ZXJ5IHJlcXVlc3QgdW50aWwgdGhlIG5leHQgcmVmcmVzaC4gUmF0ZS1cbiAqICAgbGltaXRlZCAoe0BsaW5rIFVOS05PV05fS0lEX1JFRkVUQ0hfQ09PTERPV05fTVN9KSBzbyBhIGZsb29kIG9mIGZvcmdlZCBga2lkYHNcbiAqICAgY2FuJ3QgdHVybiBpbnRvIGEgZmV0Y2ggc3Rvcm0gYWdhaW5zdCBwbGF0Zm9ybS5cbiAqIC0gKipOZWdhdGl2ZS1jYWNoZSBmYWlsdXJlcyBicmllZmx5LioqIEEgcGxhdGZvcm0gb3V0YWdlIGRvZXNuJ3QgYmVjb21lIGFcbiAqICAgZmV0Y2gtcGVyLXJlcXVlc3QgYW1wbGlmaWVyLlxuICogLSAqKkZhaWwgY2xvc2VkLioqIEFuIHVudmVyaWZpYWJsZSB0b2tlbiBpcyBub3QgYW4gaWRlbnRpdHk6IHdoZW4gdGhlIGtleSBzZXRcbiAqICAgY2Fubm90IGJlIG9idGFpbmVkIHRoZSB2ZXJpZmllciB0aHJvd3Mge0BsaW5rIEp3a3NVbmF2YWlsYWJsZUVycm9yfSBhbmQgdGhlXG4gKiAgIGNhbGxlciBhbnN3ZXJzIDQwMS81MDMg4oCUIGl0IE5FVkVSIGZhbGxzIHRocm91Z2ggdG8gXCJhbGxvd1wiLlxuICogICBBIGtleSBzZXQgYWxyZWFkeSBpbiBoYW5kIGlzIHN0aWxsIHVzZWQgd2hpbGUgYSByZWZyZXNoIGlzIGZhaWxpbmcgKHRoZSBrZXlzXG4gKiAgIGFyZSBwdWJsaWMgYW5kIGRvbid0IGV4cGlyZTsgcmVmdXNpbmcgZXZlcnkgcmVxdWVzdCBiZWNhdXNlIHBsYXRmb3JtIGJsaXBwZWRcbiAqICAgd291bGQgYmUgYSBzZWxmLWluZmxpY3RlZCBvdXRhZ2UpLCB3aGljaCBpcyB3aHkgdGhlIG5lZ2F0aXZlIGNhY2hlIGV4aXN0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEtleU9iamVjdCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBlbnZJbnQgfSBmcm9tICcuLi91dGlscy9lbnYuanMnO1xuaW1wb3J0IHtcbiAgSldLU19QQVRILFxuICBpc0p3a3NEb2N1bWVudCxcbiAgcHVibGljS2V5RnJvbUp3ayxcbiAgdHlwZSBKd2tzRG9jdW1lbnQsXG4gIHR5cGUgUHVibGljSndrLFxufSBmcm9tICcuLi91dGlscy9qd2suanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgc2VydmljZUVuZHBvaW50IH0gZnJvbSAnLi4vdXRpbHMvc2VydmljZS1yZWdpc3RyeS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignandrcy1jYWNoZScpO1xuXG4vKiogSG93IGxvbmcgYSBmZXRjaGVkIGtleSBzZXQgaXMgc2VydmVkIGJlZm9yZSBhIHJlZnJlc2ggaXMgZHVlLiAqL1xuZXhwb3J0IGNvbnN0IEpXS1NfUkVGUkVTSF9JTlRFUlZBTF9NUyA9IDYwMF8wMDA7IC8vIDEwIG1pbnV0ZXNcblxuLyoqIEhvdyBsb25nIGEgZmV0Y2ggRkFJTFVSRSBzdXBwcmVzc2VzIGZ1cnRoZXIgYXR0ZW1wdHMuICovXG5leHBvcnQgY29uc3QgSldLU19ORUdBVElWRV9UVExfTVMgPSAxMF8wMDA7XG5cbi8qKiBNaW5pbXVtIGdhcCBiZXR3ZWVuIHVua25vd24tYGtpZGAgcmVmZXRjaGVzLCBzbyBmb3JnZWQga2lkcyBjYW4ndCBzdGFtcGVkZSBwbGF0Zm9ybS4gKi9cbmV4cG9ydCBjb25zdCBVTktOT1dOX0tJRF9SRUZFVENIX0NPT0xET1dOX01TID0gMzBfMDAwO1xuXG4vKiogVGhlIGtleSBzZXQgY291bGQgbm90IGJlIG9idGFpbmVkIOKAlCB0aGUgdG9rZW4ncyB2YWxpZGl0eSBpcyBVTktOT1dOICg1MDMtc2hhcGVkKS4gKi9cbmV4cG9ydCBjbGFzcyBKd2tzVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSA9ICdUb2tlbiBzaWduaW5nIGtleXMgYXJlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdKd2tzVW5hdmFpbGFibGVFcnJvcic7XG4gIH1cbn1cblxuLyoqIFRoZSBrZXkgc2V0IHdhcyBvYnRhaW5lZCBhbmQgZG9lcyBOT1QgY29udGFpbiB0aGUgdG9rZW4ncyBga2lkYCAoNDAxLXNoYXBlZCkuICovXG5leHBvcnQgY2xhc3MgVW5rbm93bktpZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihraWQ6IHN0cmluZykge1xuICAgIHN1cGVyKGBObyBwdWJsaXNoZWQgc2lnbmluZyBrZXkgZm9yIGtpZCAke2tpZH1gKTtcbiAgICB0aGlzLm5hbWUgPSAnVW5rbm93bktpZEVycm9yJztcbiAgfVxufVxuXG4vKiogRmV0Y2hlcyB0aGUgcmF3IEpXS1MgZG9jdW1lbnQuIFJlamVjdHMgb24gYW55IHRyYW5zcG9ydC9zaGFwZSBmYWlsdXJlLiAqL1xuZXhwb3J0IHR5cGUgSndrc0ZldGNoZXIgPSAoKSA9PiBQcm9taXNlPEp3a3NEb2N1bWVudD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSndrc0NhY2hlT3B0aW9ucyB7XG4gIGZldGNoOiBKd2tzRmV0Y2hlcjtcbiAgLyoqIEZvciBtZXRyaWNzL2xvZ2dpbmcgKGUuZy4gYCdwbGF0Zm9ybSdgKS4gKi9cbiAgc291cmNlPzogc3RyaW5nO1xuICByZWZyZXNoSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgbmVnYXRpdmVUdGxNcz86IG51bWJlcjtcbiAgdW5rbm93bktpZENvb2xkb3duTXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBrZXkgc2V0IHdpdGggdGhlIGZyZXNobmVzcyBib29ra2VlcGluZyB0aGUgY29udHJhY3QgYWJvdmUgbmVlZHMuIERlbGliZXJhdGVseVxuICogdHJhbnNwb3J0LWFnbm9zdGljOiB0aGUgQ0xJIGFuZCB0aGUgTGFtYmRhIGhhbmQgaXQgdGhlaXIgb3duIGZldGNoZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBKd2tzQ2FjaGUge1xuICBwcml2YXRlIGtleXMgPSBuZXcgTWFwPHN0cmluZywgS2V5T2JqZWN0PigpO1xuICBwcml2YXRlIGZldGNoZWRBdCA9IDA7XG4gIHByaXZhdGUgZmFpbGVkVW50aWwgPSAwO1xuICBwcml2YXRlIGxhc3RVbmtub3duS2lkRmV0Y2hBdCA9IDA7XG4gIHByaXZhdGUgaW5GbGlnaHQ6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZWZyZXNoSW50ZXJ2YWxNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG5lZ2F0aXZlVHRsTXM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSB1bmtub3duS2lkQ29vbGRvd25NczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogSndrc0NhY2hlT3B0aW9ucykge1xuICAgIHRoaXMucmVmcmVzaEludGVydmFsTXMgPSBvcHRpb25zLnJlZnJlc2hJbnRlcnZhbE1zID8/IEpXS1NfUkVGUkVTSF9JTlRFUlZBTF9NUztcbiAgICB0aGlzLm5lZ2F0aXZlVHRsTXMgPSBvcHRpb25zLm5lZ2F0aXZlVHRsTXMgPz8gSldLU19ORUdBVElWRV9UVExfTVM7XG4gICAgdGhpcy51bmtub3duS2lkQ29vbGRvd25NcyA9IG9wdGlvbnMudW5rbm93bktpZENvb2xkb3duTXMgPz8gVU5LTk9XTl9LSURfUkVGRVRDSF9DT09MRE9XTl9NUztcbiAgICB0aGlzLnNvdXJjZSA9IG9wdGlvbnMuc291cmNlID8/ICdwbGF0Zm9ybSc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZlcmlmaWNhdGlvbiBrZXkgZm9yIGBraWRgLlxuICAgKlxuICAgKiBAdGhyb3dzIHtKd2tzVW5hdmFpbGFibGVFcnJvcn0gdGhlIGtleSBzZXQgY291bGQgbm90IGJlIG9idGFpbmVkIGF0IGFsbC5cbiAgICogQHRocm93cyB7VW5rbm93bktpZEVycm9yfSB0aGUga2V5IHNldCBpcyBpbiBoYW5kIGJ1dCBoYXMgbm8gc3VjaCBrZXkuXG4gICAqL1xuICBhc3luYyBnZXRLZXkoa2lkOiBzdHJpbmcpOiBQcm9taXNlPEtleU9iamVjdD4ge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlRnJlc2goKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmtleXMuZ2V0KGtpZCk7XG4gICAgaWYgKGtleSkgcmV0dXJuIGtleTtcblxuICAgIC8vIFVua25vd24ga2lkOiBwbGF0Zm9ybSBtYXkgaGF2ZSBKVVNUIHJvdGF0ZWQuIFJlZmV0Y2ggb25jZSAocmF0ZS1saW1pdGVkKSxcbiAgICAvLyB0aGVuIGRlY2lkZS4gQSBjYWNoZWQtYnV0LXN0YWxlIHNldCB0aGF0IHN0aWxsIGxhY2tzIHRoZSBraWQgYWZ0ZXIgdGhlXG4gICAgLy8gcmVmZXRjaCBpcyBhIHJlYWwgcmVqZWN0aW9uLCBub3QgYSBmcmVzaG5lc3MgcHJvYmxlbS5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RVbmtub3duS2lkRmV0Y2hBdCA+PSB0aGlzLnVua25vd25LaWRDb29sZG93bk1zKSB7XG4gICAgICB0aGlzLmxhc3RVbmtub3duS2lkRmV0Y2hBdCA9IG5vdztcbiAgICAgIGVtaXRDb3VudGVyKCdqd2tzX3Vua25vd25fa2lkX3JlZmV0Y2hfdG90YWwnLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UgfSk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goeyBmb3JjZTogdHJ1ZSB9KS5jYXRjaCgoKSA9PiB7IC8qIGhhbmRsZWQgYmVsb3cgYnkgdGhlIG1pc3MgKi8gfSk7XG4gICAgICBjb25zdCByZWZyZXNoZWQgPSB0aGlzLmtleXMuZ2V0KGtpZCk7XG4gICAgICBpZiAocmVmcmVzaGVkKSByZXR1cm4gcmVmcmVzaGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5rZXlzLnNpemUgPT09IDApIHRocm93IG5ldyBKd2tzVW5hdmFpbGFibGVFcnJvcigpO1xuICAgIHRocm93IG5ldyBVbmtub3duS2lkRXJyb3Ioa2lkKTtcbiAgfVxuXG4gIC8qKiBFdmVyeSBjdXJyZW50bHktdHJ1c3RlZCBga2lkYC4gRXhwb3NlZCBmb3IgZGlhZ25vc3RpY3MgYW5kIHRlc3RzLiAqL1xuICBrbm93bktpZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5rZXlzLmtleXMoKV07XG4gIH1cblxuICAvKiogRHJvcCBldmVyeXRoaW5nLCBzbyB0aGUgbmV4dCBsb29rdXAgcmVmZXRjaGVzLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmtleXMuY2xlYXIoKTtcbiAgICB0aGlzLmZldGNoZWRBdCA9IDA7XG4gICAgdGhpcy5mYWlsZWRVbnRpbCA9IDA7XG4gICAgdGhpcy5sYXN0VW5rbm93bktpZEZldGNoQXQgPSAwO1xuICAgIHRoaXMuaW5GbGlnaHQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmVmZXRjaCB3aGVuIHRoZSBzZXQgaXMgbWlzc2luZyBvciBwYXN0IGl0cyByZWZyZXNoIGludGVydmFsLiAqL1xuICBwcml2YXRlIGFzeW5jIGVuc3VyZUZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc3RhbGUgPSBub3cgLSB0aGlzLmZldGNoZWRBdCA+PSB0aGlzLnJlZnJlc2hJbnRlcnZhbE1zO1xuICAgIGlmICh0aGlzLmtleXMuc2l6ZSA+IDAgJiYgIXN0YWxlKSByZXR1cm47XG5cbiAgICBpZiAobm93IDwgdGhpcy5mYWlsZWRVbnRpbCkge1xuICAgICAgLy8gSW5zaWRlIHRoZSBuZWdhdGl2ZS1jYWNoZSB3aW5kb3cuIFNlcnZlIGEga2V5IHNldCB3ZSBhbHJlYWR5IGhvbGRcbiAgICAgIC8vIChwdWJsaWMga2V5cyBkb24ndCBleHBpcmUpOyB3aXRoIG5vdGhpbmcgaW4gaGFuZCwgZmFpbCBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5rZXlzLnNpemUgPiAwKSByZXR1cm47XG4gICAgICB0aHJvdyBuZXcgSndrc1VuYXZhaWxhYmxlRXJyb3IoKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKHsgZm9yY2U6IGZhbHNlIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodGhpcy5rZXlzLnNpemUgPiAwKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdKV0tTIHJlZnJlc2ggZmFpbGVkOyBjb250aW51aW5nIG9uIHRoZSBjYWNoZWQga2V5IHNldCcsIHtcbiAgICAgICAgICBzb3VyY2U6IHRoaXMuc291cmNlLFxuICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEp3a3NVbmF2YWlsYWJsZUVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE9uZSByZWFsIGZldGNoLCBzaGFyZWQgYnkgZXZlcnkgY29uY3VycmVudCBjYWxsZXIuICovXG4gIHByaXZhdGUgcmVmcmVzaChvcHRzOiB7IGZvcmNlOiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbkZsaWdodCkgcmV0dXJuIHRoaXMuaW5GbGlnaHQ7XG4gICAgaWYgKCFvcHRzLmZvcmNlICYmIERhdGUubm93KCkgPCB0aGlzLmZhaWxlZFVudGlsKSByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEp3a3NVbmF2YWlsYWJsZUVycm9yKCkpO1xuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLnBlcmZvcm1GZXRjaCgpLmZpbmFsbHkoKCkgPT4geyB0aGlzLmluRmxpZ2h0ID0gdW5kZWZpbmVkOyB9KTtcbiAgICB0aGlzLmluRmxpZ2h0ID0gcHJvbWlzZTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybUZldGNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBkb2N1bWVudDogSndrc0RvY3VtZW50O1xuICAgIHRyeSB7XG4gICAgICBkb2N1bWVudCA9IGF3YWl0IHRoaXMub3B0aW9ucy5mZXRjaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmZhaWxlZFVudGlsID0gRGF0ZS5ub3coKSArIHRoaXMubmVnYXRpdmVUdGxNcztcbiAgICAgIGVtaXRDb3VudGVyKCdqd2tzX2ZldGNoX3RvdGFsJywgeyBzb3VyY2U6IHRoaXMuc291cmNlLCByZXN1bHQ6ICdlcnJvcicgfSk7XG4gICAgICBsb2dnZXIud2FybignSldLUyBmZXRjaCBmYWlsZWQnLCB7XG4gICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IG5ldyBNYXA8c3RyaW5nLCBLZXlPYmplY3Q+KCk7XG4gICAgZm9yIChjb25zdCBqd2sgb2YgZG9jdW1lbnQua2V5cyBhcyBQdWJsaWNKd2tbXSkge1xuICAgICAgaWYgKCFqd2s/LmtpZCkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBrZXlzLnNldChqd2sua2lkLCBwdWJsaWNLZXlGcm9tSndrKGp3aykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gT25lIHVudXNhYmxlIGVudHJ5IG11c3Qgbm90IGRpc2NhcmQgdGhlIHJlc3Qgb2YgdGhlIHNldC5cbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NraXBwaW5nIHVudXNhYmxlIEpXS1MgZW50cnknLCB7IGtpZDogandrLmtpZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuZmFpbGVkVW50aWwgPSBEYXRlLm5vdygpICsgdGhpcy5uZWdhdGl2ZVR0bE1zO1xuICAgICAgZW1pdENvdW50ZXIoJ2p3a3NfZmV0Y2hfdG90YWwnLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsIHJlc3VsdDogJ2VtcHR5JyB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSldLUyBkb2N1bWVudCBjb250YWluZWQgbm8gdXNhYmxlIGtleXMnKTtcbiAgICB9XG5cbiAgICB0aGlzLmtleXMgPSBrZXlzO1xuICAgIHRoaXMuZmV0Y2hlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmZhaWxlZFVudGlsID0gMDtcbiAgICBlbWl0Q291bnRlcignandrc19mZXRjaF90b3RhbCcsIHsgc291cmNlOiB0aGlzLnNvdXJjZSwgcmVzdWx0OiAnc3VjY2VzcycgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCBwbGF0Zm9ybSdzIEpXS1Mgb3ZlciB0aGUgaW4tY2x1c3RlciBhZGRyZXNzIGV2ZXJ5IG90aGVyIGNhbGxlciB1c2VzXG4gKiAoYFBMQVRGT1JNX1NFUlZJQ0VfSE9TVGAgLyBgUExBVEZPUk1fU0VSVklDRV9QT1JUYCksIG9yIHRoZSBhYnNvbHV0ZVxuICogYFBMQVRGT1JNX0pXS1NfVVJMYCB3aGVuIG9uZSBpcyBjb25maWd1cmVkICh0aGUgQ0xJIGFuZCB0aGUgZXZlbnRzIExhbWJkYSBydW5cbiAqIG91dHNpZGUgdGhlIGNsdXN0ZXIpLlxuICpcbiAqIFVuYXV0aGVudGljYXRlZCBieSBkZXNpZ246IHRoZSBrZXkgc2V0IGlzIHB1YmxpYywgYW5kIHJlcXVpcmluZyBhIGNyZWRlbnRpYWxcbiAqIHRvIGZldGNoIHRoZSBrZXlzIHRoYXQgdmVyaWZ5IGNyZWRlbnRpYWxzIGlzIGEgYm9vdHN0cmFwIGN5Y2xlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFBsYXRmb3JtSndrcygpOiBQcm9taXNlPEp3a3NEb2N1bWVudD4ge1xuICBjb25zdCBhYnNvbHV0ZSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX0pXS1NfVVJMO1xuICBjb25zdCB0aW1lb3V0ID0gZW52SW50KCdKV0tTX0ZFVENIX1RJTUVPVVRfTVMnLCAzMDAwLCB7IG1pbjogMSB9KTtcbiAgaWYgKGFic29sdXRlKSByZXR1cm4gZmV0Y2hKd2tzRnJvbVVybChhYnNvbHV0ZSwgdGltZW91dCk7XG5cbiAgLy8gTG9hZGVkIExBWklMWSwgb24gdGhlIGZpcnN0IGZldGNoLiBBIHN0YXRpYyBpbXBvcnQgd291bGQgcHV0IHRoZSBIVFRQIGNsaWVudFxuICAvLyAoYW5kIHBsYXRmb3JtJ3MgYWRkcmVzcykgaW50byB0aGUgaW1wb3J0IGdyYXBoIG9mIGV2ZXJ5IG1vZHVsZSB0aGF0IG1lcmVseVxuICAvLyB1c2VzIGByZXF1aXJlQXV0aGAg4oCUIHRoZSBzYW1lIHJlYXNvbiBgYXBpLWtleS1leGNoYW5nZWAgaXMgbGF6eSwgYW5kIHdoYXRcbiAgLy8ga2VlcHMgcGFydGlhbCBgaHR0cC1jbGllbnQuanNgIG1vY2tzIGluIHRoZSBzZXJ2aWNlIHN1aXRlcyB3b3JraW5nLlxuICBjb25zdCB7IEludGVybmFsSHR0cENsaWVudCB9ID0gYXdhaXQgaW1wb3J0KCcuL2h0dHAtY2xpZW50LmpzJyk7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBJbnRlcm5hbEh0dHBDbGllbnQoe1xuICAgIC4uLnNlcnZpY2VFbmRwb2ludCgncGxhdGZvcm0nKSxcbiAgICB0aW1lb3V0LFxuICB9KTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LmdldDx1bmtub3duPihKV0tTX1BBVEgsIHsgaWRlbXBvdGVudDogdHJ1ZSB9KTtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDAgfHwgIWlzSndrc0RvY3VtZW50KHJlcy5ib2R5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBKV0tTIHJlc3BvbnNlIChzdGF0dXMgJHtyZXMuc3RhdHVzQ29kZX0pYCk7XG4gIH1cbiAgcmV0dXJuIHJlcy5ib2R5O1xufVxuXG4vKiogRmV0Y2ggYSBKV0tTIGRvY3VtZW50IGZyb20gYW4gYWJzb2x1dGUgVVJMIChvdXRzaWRlLXRoZS1jbHVzdGVyIHZlcmlmaWVycykuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaEp3a3NGcm9tVXJsKHVybDogc3RyaW5nLCB0aW1lb3V0TXMgPSAzMDAwKTogUHJvbWlzZTxKd2tzRG9jdW1lbnQ+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGltZW91dE1zKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwsIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCwgaGVhZGVyczogeyBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyB9IH0pO1xuICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYEpXS1MgZmV0Y2ggcmV0dXJuZWQgJHtyZXMuc3RhdHVzfWApO1xuICAgIGNvbnN0IGJvZHk6IHVua25vd24gPSBhd2FpdCByZXMuanNvbigpO1xuICAgIGlmICghaXNKd2tzRG9jdW1lbnQoYm9keSkpIHRocm93IG5ldyBFcnJvcignSldLUyByZXNwb25zZSB3YXMgbm90IGEga2V5IHNldCcpO1xuICAgIHJldHVybiBib2R5O1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH1cbn1cblxubGV0IHBsYXRmb3JtSndrczogSndrc0NhY2hlIHwgdW5kZWZpbmVkO1xuXG4vKiogVGhlIHByb2Nlc3Mtd2lkZSBjYWNoZSBvZiBwbGF0Zm9ybSdzIHB1Ymxpc2hlZCBzaWduaW5nIGtleXMuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhdGZvcm1Kd2tzQ2FjaGUoKTogSndrc0NhY2hlIHtcbiAgcGxhdGZvcm1Kd2tzID8/PSBuZXcgSndrc0NhY2hlKHsgZmV0Y2g6IGZldGNoUGxhdGZvcm1Kd2tzLCBzb3VyY2U6ICdwbGF0Zm9ybScgfSk7XG4gIHJldHVybiBwbGF0Zm9ybUp3a3M7XG59XG5cbi8qKlxuICogUmVwbGFjZSB0aGUgcHJvY2Vzcy13aWRlIGNhY2hlIOKAlCB1c2VkIGJ5IHRlc3RzLCBhbmQgYnkgYW55IGhvc3QgdGhhdCBtdXN0XG4gKiBzdXBwbHkgaXRzIG93biBmZXRjaGVyLiBQYXNzIGB1bmRlZmluZWRgIHRvIGRyb3AgYmFjayB0byB0aGUgZGVmYXVsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBsYXRmb3JtSndrc0NhY2hlKGNhY2hlOiBKd2tzQ2FjaGUgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgcGxhdGZvcm1Kd2tzID0gY2FjaGU7XG59XG4iXX0=