@pipeline-builder/api-core 5.2.6 → 5.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/lib/constants/ai-providers.js +1 -1
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/constants/index.js +1 -1
  4. package/lib/constants/time.js +1 -1
  5. package/lib/errors/app-errors.js +1 -1
  6. package/lib/errors/index.js +1 -1
  7. package/lib/helpers/access-helpers.d.ts +19 -0
  8. package/lib/helpers/access-helpers.js +24 -4
  9. package/lib/helpers/content-disposition.js +1 -1
  10. package/lib/helpers/crud-helpers.js +1 -1
  11. package/lib/helpers/index.d.ts +1 -1
  12. package/lib/helpers/index.js +2 -2
  13. package/lib/helpers/org-hierarchy-http.js +1 -1
  14. package/lib/helpers/org-hierarchy.js +1 -1
  15. package/lib/helpers/restore-helpers.js +1 -1
  16. package/lib/helpers/sse-helpers.js +13 -2
  17. package/lib/helpers/support-calendar.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/middleware/ask-provenance.js +1 -1
  20. package/lib/middleware/assurance.js +1 -1
  21. package/lib/middleware/auth.js +3 -2
  22. package/lib/middleware/client-version.d.ts +45 -0
  23. package/lib/middleware/client-version.js +97 -0
  24. package/lib/middleware/deferred-quota-check.js +1 -1
  25. package/lib/middleware/ecosystem-guard.js +1 -1
  26. package/lib/middleware/index.d.ts +1 -0
  27. package/lib/middleware/index.js +2 -1
  28. package/lib/middleware/jwt-verify.js +1 -1
  29. package/lib/middleware/mongo-sanitize.js +1 -1
  30. package/lib/middleware/on-behalf.js +1 -1
  31. package/lib/middleware/permission-gates.js +1 -1
  32. package/lib/middleware/quota-exempt-routes.js +1 -1
  33. package/lib/middleware/revocation.js +1 -1
  34. package/lib/middleware/route-table.js +16 -1
  35. package/lib/middleware/service-tokens.js +1 -1
  36. package/lib/middleware/step-up.js +1 -1
  37. package/lib/middleware/system-org.d.ts +18 -5
  38. package/lib/middleware/system-org.js +19 -6
  39. package/lib/openapi/extend-zod.js +1 -1
  40. package/lib/openapi/index.js +1 -1
  41. package/lib/openapi/registry.js +1 -1
  42. package/lib/openapi/routes/ask-routes.js +1 -1
  43. package/lib/openapi/routes/billing-routes.js +1 -1
  44. package/lib/openapi/routes/image-registry-routes.js +1 -1
  45. package/lib/openapi/routes/index.js +1 -1
  46. package/lib/openapi/routes/message-routes.js +1 -1
  47. package/lib/openapi/routes/pipeline-routes.js +1 -1
  48. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  49. package/lib/openapi/routes/plugin-routes.js +1 -1
  50. package/lib/openapi/routes/quota-routes.js +1 -1
  51. package/lib/openapi/schema-registry.js +1 -1
  52. package/lib/routes/health.js +1 -1
  53. package/lib/routes/index.js +1 -1
  54. package/lib/services/ai-call-weight.js +1 -1
  55. package/lib/services/alert-delivery.js +1 -1
  56. package/lib/services/api-key-exchange.d.ts +4 -2
  57. package/lib/services/api-key-exchange.js +15 -8
  58. package/lib/services/audit-context.d.ts +3 -0
  59. package/lib/services/audit-context.js +2 -1
  60. package/lib/services/audit-spool.js +1 -1
  61. package/lib/services/cache-service.js +1 -1
  62. package/lib/services/circuit-breaker.js +1 -1
  63. package/lib/services/compliance-client.js +1 -1
  64. package/lib/services/compliance-event-subscriber.js +1 -1
  65. package/lib/services/durable-event-bus.js +1 -1
  66. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  67. package/lib/services/ecosystem-notify-client.js +9 -3
  68. package/lib/services/entity-events.js +1 -1
  69. package/lib/services/env-redis.js +1 -1
  70. package/lib/services/http-client.js +19 -3
  71. package/lib/services/index.d.ts +1 -1
  72. package/lib/services/index.js +2 -2
  73. package/lib/services/jwks-cache.js +1 -1
  74. package/lib/services/leader-lock.js +1 -1
  75. package/lib/services/notification-channels.js +1 -1
  76. package/lib/services/org-ai-client.js +1 -1
  77. package/lib/services/pagerduty-inbound.js +1 -1
  78. package/lib/services/pagerduty.js +1 -1
  79. package/lib/services/quota-increment-batcher.js +1 -1
  80. package/lib/services/quota.js +1 -1
  81. package/lib/services/remote-audit-client.js +1 -1
  82. package/lib/services/retry-forever.js +1 -1
  83. package/lib/services/retry-strategy.js +1 -1
  84. package/lib/services/s3-client.js +1 -1
  85. package/lib/services/scheduler.js +1 -1
  86. package/lib/services/service-boot.js +1 -1
  87. package/lib/services/service-keys.js +2 -2
  88. package/lib/services/sse-ticket-store.js +1 -1
  89. package/lib/services/system-notification.js +1 -1
  90. package/lib/services/token-revocation.js +1 -1
  91. package/lib/services/version-vuln-policy.d.ts +11 -0
  92. package/lib/services/version-vuln-policy.js +33 -7
  93. package/lib/types/ai-catalog.js +1 -1
  94. package/lib/types/ask-proposals.d.ts +23 -0
  95. package/lib/types/ask-proposals.js +29 -1
  96. package/lib/types/audit-events.js +1 -1
  97. package/lib/types/build-catalog.d.ts +65 -0
  98. package/lib/types/build-catalog.js +95 -1
  99. package/lib/types/catalog-metadata.js +1 -1
  100. package/lib/types/common.js +1 -1
  101. package/lib/types/compliance-exemption.js +1 -1
  102. package/lib/types/ecosystem-notifications.d.ts +9 -0
  103. package/lib/types/ecosystem-notifications.js +15 -6
  104. package/lib/types/ecosystem.d.ts +1 -6
  105. package/lib/types/ecosystem.js +18 -5
  106. package/lib/types/error-codes.d.ts +3 -0
  107. package/lib/types/error-codes.js +6 -1
  108. package/lib/types/feature-flags.d.ts +17 -1
  109. package/lib/types/feature-flags.js +1 -1
  110. package/lib/types/http.js +1 -1
  111. package/lib/types/index.d.ts +3 -3
  112. package/lib/types/index.js +4 -4
  113. package/lib/types/metadata-keys.js +1 -1
  114. package/lib/types/permissions.d.ts +60 -13
  115. package/lib/types/permissions.js +63 -14
  116. package/lib/types/pipeline-template.js +1 -1
  117. package/lib/types/pipeline.js +1 -1
  118. package/lib/types/plugin-catalog.js +1 -1
  119. package/lib/types/plugin-health.js +1 -1
  120. package/lib/types/plugin-scan.d.ts +69 -0
  121. package/lib/types/plugin-scan.js +77 -1
  122. package/lib/types/quota-catalog.js +15 -2
  123. package/lib/types/quota-tiers.d.ts +27 -160
  124. package/lib/types/quota-tiers.js +47 -255
  125. package/lib/types/remote-audit-actions.d.ts +1 -1
  126. package/lib/types/remote-audit-actions.js +9 -1
  127. package/lib/types/reserved-tags.js +1 -1
  128. package/lib/types/tier-limits.d.ts +210 -0
  129. package/lib/types/tier-limits.js +254 -0
  130. package/lib/types/usage-projection.js +1 -1
  131. package/lib/types/visibility.js +1 -1
  132. package/lib/types/wire-vocabulary.d.ts +7 -0
  133. package/lib/types/wire-vocabulary.js +7 -1
  134. package/lib/utils/alias-resolver.js +1 -1
  135. package/lib/utils/api-key.js +1 -1
  136. package/lib/utils/audit.js +1 -1
  137. package/lib/utils/aws-scrub.js +1 -1
  138. package/lib/utils/compliance-attributes.js +1 -1
  139. package/lib/utils/concurrency-gate.d.ts +98 -0
  140. package/lib/utils/concurrency-gate.js +110 -0
  141. package/lib/utils/concurrency.js +1 -1
  142. package/lib/utils/crash-handlers.js +1 -1
  143. package/lib/utils/date.js +1 -1
  144. package/lib/utils/dsse.js +1 -1
  145. package/lib/utils/env.d.ts +11 -0
  146. package/lib/utils/env.js +14 -1
  147. package/lib/utils/headers.js +1 -1
  148. package/lib/utils/identity.js +1 -1
  149. package/lib/utils/index.d.ts +2 -0
  150. package/lib/utils/index.js +3 -1
  151. package/lib/utils/jwk.js +2 -2
  152. package/lib/utils/logger.js +1 -1
  153. package/lib/utils/metric-emitter.js +1 -1
  154. package/lib/utils/object.js +1 -1
  155. package/lib/utils/params.js +1 -1
  156. package/lib/utils/plugin-compliance.d.ts +9 -1
  157. package/lib/utils/plugin-compliance.js +1 -1
  158. package/lib/utils/proof-of-work.js +1 -1
  159. package/lib/utils/response.js +1 -1
  160. package/lib/utils/retention.js +1 -1
  161. package/lib/utils/safe-require.js +1 -1
  162. package/lib/utils/secret-encryption.js +1 -1
  163. package/lib/utils/secret-rotation.js +1 -1
  164. package/lib/utils/secure-compare.js +1 -1
  165. package/lib/utils/semver.d.ts +18 -0
  166. package/lib/utils/semver.js +120 -0
  167. package/lib/utils/sensitive-patterns.js +1 -1
  168. package/lib/utils/service-registry.js +1 -1
  169. package/lib/utils/ssrf.js +1 -1
  170. package/lib/validation/ai-schemas.js +1 -1
  171. package/lib/validation/common-schemas.js +1 -1
  172. package/lib/validation/dockerfile-static.js +1 -1
  173. package/lib/validation/index.d.ts +1 -1
  174. package/lib/validation/index.js +2 -2
  175. package/lib/validation/message-schemas.d.ts +73 -0
  176. package/lib/validation/message-schemas.js +63 -2
  177. package/lib/validation/middleware.js +1 -1
  178. package/lib/validation/pipeline-schemas.js +1 -1
  179. package/lib/validation/pipeline-template-schemas.js +1 -1
  180. package/lib/validation/plugin-base-images.js +1 -1
  181. package/lib/validation/plugin-catalog-detect.js +1 -1
  182. package/lib/validation/plugin-catalog-metadata.js +1 -1
  183. package/lib/validation/plugin-heuristics.js +1 -1
  184. package/lib/validation/plugin-lint.js +1 -1
  185. package/lib/validation/plugin-name-confusable.js +1 -1
  186. package/lib/validation/plugin-schemas.js +1 -1
  187. package/lib/validation/plugin-spec-schema.js +1 -1
  188. package/lib/validation/plugin-template-contract.js +1 -1
  189. package/package.json +11 -4
@@ -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=
@@ -209,4 +209,4 @@ export async function releaseSharedEnvLock() {
209
209
  sharedLock = undefined;
210
210
  await closeLeaderLock(client);
211
211
  }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZGVyLWxvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbGVhZGVyLWxvY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBb0IvQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsS0FBbUM7SUFDdkUsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPO0lBQ25CLElBQUksQ0FBQztRQUNILElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFBQyxPQUFPO1FBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsNkJBQTZCO0lBQy9CLENBQUM7SUFDRCxJQUFJLENBQUM7UUFBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUFDLENBQUM7SUFBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRDtpRUFDaUU7QUFDakUsTUFBTSxnQkFBZ0IsR0FDcEIsbUdBQW1HLENBQUM7QUFFdEcsOERBQThEO0FBQzlELE1BQU0sZUFBZSxHQUNuQixnSEFBZ0gsQ0FBQztBQUVuSCxxRkFBcUY7QUFDckYs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QUFlLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNyZWF0ZUVudlJlZGlzQ2xpZW50LCB3aGVuUmVkaXNSZWFkeSwgdHlwZSBSZWFkeUF3YXJlUmVkaXMgfSBmcm9tICcuL2Vudi1yZWRpcy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgZW1pdENvdW50ZXIgfSBmcm9tICcuLi91dGlscy9tZXRyaWMtZW1pdHRlci5qcyc7XG5pbXBvcnQgeyBlcnJvck1lc3NhZ2UgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZS5qcyc7XG5cbmNvbnN0IGxvY2tMb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2xlYWRlci1sb2NrJyk7XG5cbi8qKlxuICogTWluaW1hbCBSZWRpcyBjbGllbnQgc3VyZmFjZSBuZWVkZWQgZm9yIGEgbGVhZGVyIGxvY2sgKGEgc3Vic2V0IG9mIGlvcmVkaXMpLlxuICogYHNldGAgaXMgdmFyaWFkaWMgc28gY2FsbGVycyBjYW4gcGFzcyBgJ1BYJywgdHRsLCAnTlgnYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NrUmVkaXMgZXh0ZW5kcyBSZWFkeUF3YXJlUmVkaXMge1xuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj47XG4gIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gIGRlbCguLi5rZXlzOiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPjtcbiAgLyoqIE9wdGlvbmFsIEx1YSBldmFsIChpb3JlZGlzIGhhcyBpdCkuIFdoZW4gcHJlc2VudCwgcmVsZWFzZSB1c2VzIGFuIGF0b21pY1xuICAgKiAgY29tcGFyZS1hbmQtZGVsZXRlIHNvIGEgbGFwc2VkIGhvbGRlciBjYW4ndCBmcmVlIGEgc3VjY2Vzc29yJ3MgbG9jay4gKi9cbiAgZXZhbD8oc2NyaXB0OiBzdHJpbmcsIG51bUtleXM6IG51bWJlciwgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgLyoqIEdyYWNlZnVsIGNsb3NlIChpb3JlZGlzIGBxdWl0YCkg4oCUIGNhbGxlZCBvbiBzaHV0ZG93biBzbyB0aGUgY29ubmVjdGlvblxuICAgKiAgZG9lc24ndCBrZWVwIHRoZSBldmVudCBsb29wIGFsaXZlLiAqL1xuICBxdWl0PygpOiBQcm9taXNlPHVua25vd24+O1xuICAvKiogSW1tZWRpYXRlIGNsb3NlIChpb3JlZGlzIGBkaXNjb25uZWN0YCkg4oCUIHRoZSBmYWxsYmFjayBpZiBgcXVpdGAgZmFpbHMuICovXG4gIGRpc2Nvbm5lY3Q/KCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgY2xvc2Ugb2YgYSBsZWFkZXItbG9jayBSZWRpcyBjbGllbnQgb24gc2h1dGRvd24uIFByZWZlcnMgZ3JhY2VmdWxcbiAqIGBxdWl0YDsgZmFsbHMgYmFjayB0byBgZGlzY29ubmVjdGAuIE5vLW9wIGZvciBhIG51bGwgY2xpZW50IC8gb25lIHdpdGhvdXRcbiAqIGVpdGhlciBtZXRob2QuIE5ldmVyIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsb3NlTGVhZGVyTG9jayhyZWRpczogTG9ja1JlZGlzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXJlZGlzKSByZXR1cm47XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiByZWRpcy5xdWl0ID09PSAnZnVuY3Rpb24nKSB7IGF3YWl0IHJlZGlzLnF1aXQoKTsgcmV0dXJuOyB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byBkaXNjb25uZWN0XG4gIH1cbiAgdHJ5IHsgcmVkaXMuZGlzY29ubmVjdD8uKCk7IH0gY2F0Y2ggeyAvKiBiZXN0LWVmZm9ydCAqLyB9XG59XG5cbi8qKiBBdG9taWMgXCJkZWxldGUgb25seSBpZiBJIHN0aWxsIG93biBpdFwiIOKAlCBjbG9zZXMgdGhlIGdldC10aGVuLWRlbCByYWNlIHdoZXJlXG4gKiAgdGhlIGxvY2sgZXhwaXJlcyBhbmQgaXMgcmUtYWNxdWlyZWQgYmV0d2VlbiB0aGUgdHdvIGNhbGxzLiAqL1xuY29uc3QgUkVMRUFTRV9JRl9PV05FUiA9XG4gICdpZiByZWRpcy5jYWxsKFwiZ2V0XCIsIEtFWVNbMV0pID09IEFSR1ZbMV0gdGhlbiByZXR1cm4gcmVkaXMuY2FsbChcImRlbFwiLCBLRVlTWzFdKSBlbHNlIHJldHVybiAwIGVuZCc7XG5cbi8qKiBBdG9taWMgXCJleHRlbmQgb25seSBpZiBJIHN0aWxsIG93biBpdFwiIOKAlCB0aGUgaGVhcnRiZWF0LiAqL1xuY29uc3QgRVhURU5EX0lGX09XTkVSID1cbiAgJ2lmIHJlZGlzLmNhbGwoXCJnZXRcIiwgS0VZU1sxXSkgPT0gQVJHVlsxXSB0aGVuIHJldHVybiByZWRpcy5jYWxsKFwicGV4cGlyZVwiLCBLRVlTWzFdLCBBUkdWWzJdKSBlbHNlIHJldHVybiAwIGVuZCc7XG5cbi8qKiBMb25nZXN0IGEgcnVuIHdhaXRzIGZvciBhIG5vdC15ZXQtY29ubmVjdGVkIGNsaWVudCBiZWZvcmUgc2tpcHBpbmcgdGhlIHdpbmRvdy4gKi9cbmNvbnN0IExPQ0tfUkVBRFlfVElNRU9VVF9NUyA9IDEwXzAwMDtcblxuLyoqXG4gKiBEZWZhdWx0IGxvY2sgbGlmZXRpbWUg4oCUIGEgQ1JBU0gtUkVDT1ZFUlkgd2luZG93LCBub3QgYSBydW4tZHVyYXRpb24gY292ZXIuXG4gKlxuICogVGhlIGhvbGRlciBoZWFydGJlYXRzIChjb21wYXJlLWFuZC1QRVhQSVJFIGV2ZXJ5IGB0dGxNcyAvIDNgKSBmb3IgYXMgbG9uZyBhc1xuICogYGZuYCBydW5zLCBzbyBhIHNpeC1ob3VyIGpvYiBob2xkcyBhIHR3by1taW51dGUgbG9jayBwZXJmZWN0bHkgd2VsbC4gV2hhdCB0aGVcbiAqIFRUTCBhY3R1YWxseSBkZWNpZGVzIGlzIGhvdyBsb25nIGEgam9iIHN0YXlzIEJMT0NLRUQgYWZ0ZXIgdGhlIHBvZCBob2xkaW5nIGl0XG4gKiBkaWVzIHdpdGhvdXQgcmVsZWFzaW5nIOKAlCB0aGUga2V5IHNpbXBseSBzaXRzIHRoZXJlIHVudGlsIGl0IGV4cGlyZXMuIFNpemluZyB0aGVcbiAqIFRUTCB0byB0aGUgZXhwZWN0ZWQgcnVuIHRpbWUgKHdoaWNoIGlzIHdoYXQgc2V2ZXJhbCBjYWxsZXJzIHVzZWQgdG8gZG8pIHR1cm5lZCBhXG4gKiBjcmFzaGVkIHBvZCBpbnRvIGhvdXJzIG9mIHNpbGVudCBpbmFjdGl2aXR5LlxuICpcbiAqIFR3byBtaW51dGVzIGxlYXZlcyB0aHJlZSBtaXNzZWQgaGVhcnRiZWF0cyBvZiBzbGFjaywgc28gYW4gZXZlbnQtbG9vcCBzdGFsbCBvciBhXG4gKiBicmllZiBSZWRpcyBibGlwIGRvZXMgbm90IGhhbmQgdGhlIGxvY2sgdG8gYSBzZWNvbmQgcG9kIG1pZC1ydW4sIHdoaWxlIHJlY292ZXJ5XG4gKiBhZnRlciBhIHJlYWwgY3Jhc2ggaXMgYm91bmRlZCBhdCB0d28gbWludXRlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEVBREVSX0xPQ0tfVFRMX01TID0gMTIwXzAwMDtcblxuLyoqXG4gKiBUaGUgb25lIHdheSB0byBidWlsZCBhIGxlYWRlci1sb2NrIGtleTogYDxzZXJ2aWNlPjo8am9iPjpsZWFkZXJgLlxuICpcbiAqIEZvdXIgY29udmVudGlvbnMgaGFkIGdyb3duIHVwIOKAlCBgcGx1Z2luOnZ1bG4tcmVzY2FuOmxlYWRlcmAsXG4gKiBgcGxhdGZvcm06bGVhZGVyOm9yZy1wdXJnZWAsIGEgYmFyZSBgZWNvc3lzdGVtLXN0YXRzOmxlYWRlcmAsIGFuZCBiaWxsaW5nJ3NcbiAqIHVubmFtZXNwYWNlZCBgc3Vic2NyaXB0aW9uLWxpZmVjeWNsZWAg4oCUIHdoaWNoIG1lYW50IG5vIHNpbmdsZSBnbG9iIGZvdW5kIGV2ZXJ5XG4gKiBsb2NrLiBgS0VZUyAnKjpsZWFkZXInYCBtaXNzZWQgYmlsbGluZydzIHRocmVlIGVudGlyZWx5LCBzbyBhbiBvcGVyYXRvciBhc2tpbmdcbiAqIFwid2hhdCBpcyBoZWxkIHJpZ2h0IG5vd1wiIGdvdCBhIHBhcnRpYWwgYW5zd2VyLiBUaGUgZW52IFJlZGlzIGNsaWVudCBzZXRzIG5vXG4gKiBga2V5UHJlZml4YCwgc28gdGhlc2Ugc2hhcmUgb25lIGZsYXQga2V5c3BhY2Ugd2l0aCBjYWNoZSwgQnVsbE1RIGFuZCBzcG9vbCBrZXlzO1xuICogdGhlIGA8c2VydmljZT46YCBzZWdtZW50IGlzIHdoYXQga2VlcHMgdGhlbSBhcGFydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlYWRlckxvY2tLZXkoc2VydmljZTogc3RyaW5nLCBqb2I6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtzZXJ2aWNlfToke2pvYn06bGVhZGVyYDtcbn1cblxuLyoqIFdoeSBhIGxlYWRlci1sb2NrZWQgcnVuIHdhcyB0b2xkIHRvIHN0b3AuICovXG5leHBvcnQgdHlwZSBMZWFkZXJMb2NrQWJvcnRSZWFzb24gPSAnbG9jay1sb3N0JyB8ICdzaHV0ZG93bic7XG5cbi8qKiBXaGF0IGEgbGVhZGVyLWxvY2tlZCBydW4gaXMgdG9sZCB3aGlsZSBpdCBydW5zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWFkZXJMb2NrUnVuIHtcbiAgLyoqXG4gICAqIEFib3J0ZWQgd2hlbiB0aGUgbG9jayBpcyBMT1NUIG1pZC1ydW4gKGEgaGVhcnRiZWF0IGZvdW5kIGFub3RoZXIgaG9sZGVyLCBvclxuICAgKiB0aGUga2V5IGdvbmUpLCBvciB3aGVuIHRoZSBjYWxsZXIgaXMgU0hVVFRJTkcgRE9XTi4gTG9uZyBydW5zIG11c3QgY2hlY2sgaXRcbiAgICogYmV0d2VlbiB1bml0cyBvZiB3b3JrIGFuZCByZXR1cm46IHBhc3QgYSBsb2NrIGxvc3MgYW5vdGhlciBwb2QgbWF5IGJlIGRvaW5nXG4gICAqIHRoZSBzYW1lIHdvcmssIGFuZCBvbiBzaHV0ZG93biByZXR1cm5pbmcgcHJvbXB0bHkgaXMgd2hhdCByZWxlYXNlcyB0aGUgbG9ja1xuICAgKiBpbnN0ZWFkIG9mIGxlYXZpbmcgaXQgdG8gZXhwaXJlLlxuICAgKlxuICAgKiBgc2lnbmFsLnJlYXNvbmAgaXMgYSB7QGxpbmsgTGVhZGVyTG9ja0Fib3J0UmVhc29ufS5cbiAgICovXG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBDYWxsZXItc3VwcGxpZWQgY29udHJvbHMgZm9yIHtAbGluayB3aXRoTGVhZGVyTG9ja30uICovXG5leHBvcnQgaW50ZXJmYWNlIExlYWRlckxvY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFib3J0ZWQgYnkgdGhlIGNhbGxlciB0byBhc2sgYSBydW5uaW5nIGpvYiB0byBzdG9wIOKAlCBhIHNjaGVkdWxlcidzIGBzdG9wKClgXG4gICAqIG9uIHNodXRkb3duLiBNZXJnZWQgaW50byB7QGxpbmsgTGVhZGVyTG9ja1J1bi5zaWduYWx9LCBzbyBhIHNpZ25hbC1hd2FyZSBgZm5gXG4gICAqIHJldHVybnMgYW5kIHRoZSBsb2NrIGlzIHJlbGVhc2VkIGluIHRoZSBgZmluYWxseWAgcmF0aGVyIHRoYW4gbGluZ2VyaW5nIGZvclxuICAgKiB0aGUgcmVzdCBvZiB0aGUgVFRMLlxuICAgKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogUnVuIGBmbmAgb25seSBpZiB0aGlzIHByb2Nlc3Mgd2lucyBhIHNob3J0LWxpdmVkIGRpc3RyaWJ1dGVkIGxvY2sg4oCUIHRoZVxuICogYWNyb3NzLXBvZHMgXCJzaW5nbGUgcnVubmVyXCIgZ3VhcmQgZm9yIHBlcmlvZGljIGpvYnMgKGRpZ2VzdCBmbHVzaGVzLCBldGMuKS5cbiAqXG4gKiBVc2VzIGBTRVQga2V5IHRva2VuIE5YIFBYIHR0bGAsIHNvIGV4YWN0bHkgb25lIGhvbGRlciBydW5zIHBlciB3aW5kb3cgYW5kIHRoZVxuICogbG9jayBhdXRvLWV4cGlyZXMgaWYgdGhhdCBob2xkZXIgZGllcyBtaWQtcnVuIChubyBzdHVjayBsb2NrKS4gV2hpbGUgYGZuYFxuICogcnVucywgdGhlIGhvbGRlciBIRUFSVEJFQVRTIChjb21wYXJlLWFuZC1QRVhQSVJFIGV2ZXJ5IGB0dGxNcyAvIDNgKSwgc28gYSBydW5cbiAqIHRoYXQgb3V0bGFzdHMgYHR0bE1zYCBrZWVwcyB0aGUgbG9jayBpbnN0ZWFkIG9mIHNpbGVudGx5IGxldHRpbmcgYSBzZWNvbmQgcG9kXG4gKiBzdGFydCB0aGUgc2FtZSB3b3JrOyBhIGhlYXJ0YmVhdCB0aGF0IGZpbmRzIHRoZSBsb2NrIGdvbmUgYWJvcnRzXG4gKiBgcnVuLnNpZ25hbGAuIFRoZSBsb2NrIGlzIHJlbGVhc2VkIG9uIGNvbXBsZXRpb24sIGJ1dCBvbmx5IGlmIHdlIHN0aWxsIG93blxuICogaXQg4oCUIGEgc2xvd2VyIHByZWRlY2Vzc29yIG5ldmVyIGRlbGV0ZXMgYSBzdWNjZXNzb3IncyBsb2NrLlxuICpcbiAqIElmIFJlZGlzIGNhbid0IGJlIHJlYWNoZWQgdGhlIHJ1biBpcyBza2lwcGVkIChyZXR1cm5zIGZhbHNlKSByYXRoZXIgdGhhblxuICogcmVqZWN0aW5nIOKAlCBjYWxsZXJzIGFyZSB0aW1lcnMsIGFuZCBhIFJlZGlzIGJsaXAgbXVzdCBub3QgY3Jhc2ggdGhlIHByb2Nlc3MuXG4gKlxuICogRVZFUlkgb3V0Y29tZSBpcyBjb3VudGVkLCBiZWNhdXNlIHRoZXkgbWVhbiB2ZXJ5IGRpZmZlcmVudCB0aGluZ3MgYW5kIHRoZVxuICogZGlmZmVyZW5jZSB1c2VkIHRvIGJlIHZpc2libGUgb25seSBpbiBhIGxvZyBsaW5lOlxuICogIC0gYGxlYWRlcl9sb2NrX2FjcXVpcmVkX3RvdGFsYCDigJQgdGhpcyBwb2QgcmFuIHRoZSB3aW5kb3cuIEEgam9iIHdob3NlIGNvdW50XG4gKiAgICBzdGF5cyBmbGF0IGlzIG5vdCBydW5uaW5nIEFOWVdIRVJFLCB3aGljaCBpcyB0aGUgY29uZGl0aW9uIHdvcnRoIGFsZXJ0aW5nIG9uLlxuICogIC0gYGxlYWRlcl9sb2NrX2NvbnRlbmRlZF90b3RhbGAg4oCUIGFub3RoZXIgcG9kIGhvbGRzIGl0LiBIZWFsdGh5IGFuZCBleHBlY3RlZFxuICogICAgd2l0aCByZXBsaWNhcyA+IDE7IGV4YWN0bHkgb25lIGFjcXVpcmUgcGVyIHdpbmRvdyBhY3Jvc3MgdGhlIGZsZWV0LlxuICogIC0gYGxlYWRlcl9sb2NrX3VuYXZhaWxhYmxlX3RvdGFsYCDigJQgUmVkaXMgdW5yZWFjaGFibGUsIHNvIE5PQk9EWSByYW4gdGhpc1xuICogICAgd2luZG93LiBBIFJlZGlzIGJsaXAgc2lsZW50bHkgc3RvcHBpbmcgZXZlcnkgc3dlZXAgZmxlZXQtd2lkZSB3YXMgcHJldmlvdXNseVxuICogICAgYSBXQVJOIGxvZyBhbmQgbm90aGluZyBlbHNlLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgd2UgaGVsZCB0aGUgbG9jayBhbmQgcmFuIGBmbmA7IGZhbHNlIGlmIGFub3RoZXIgaG9sZGVyIGRpZCBvclxuICogICB0aGUgbG9jayBjb3VsZG4ndCBiZSB0YWtlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhMZWFkZXJMb2NrKFxuICByZWRpczogTG9ja1JlZGlzLFxuICBrZXk6IHN0cmluZyxcbiAgdHRsTXM6IG51bWJlcixcbiAgZm46IChydW46IExlYWRlckxvY2tSdW4pID0+IFByb21pc2U8dm9pZD4sXG4gIG9wdHM6IExlYWRlckxvY2tPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgLy8gQXNrZWQgdG8gc3RvcCBiZWZvcmUgd2UgZXZlbiB0cmllZDogZG9uJ3QgdGFrZSBhIGxvY2sgd2UgYXJlIGFib3V0IHRvIGRyb3AuXG4gIGlmIChvcHRzLnNpZ25hbD8uYWJvcnRlZCkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHRva2VuID0gcmFuZG9tVVVJRCgpO1xuICBsZXQgYWNxdWlyZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgLy8gVGhlIGVudiBjbGllbnQgaGFzIG5vIG9mZmxpbmUgcXVldWU6IGEgU0VUIGJlZm9yZSB0aGUgZmlyc3QgY29ubmVjdGlvblxuICAgIC8vIGNvbXBsZXRlcyBpcyByZWplY3RlZCwgd2hpY2ggbWFkZSB0aGUgRklSU1QgdGljayBhZnRlciBldmVyeSBib290IGFcbiAgICAvLyBndWFyYW50ZWVkIHNraXAuIFdhaXQgKGJvdW5kZWQpIGZvciByZWFkaW5lc3MgZmlyc3QuXG4gICAgYXdhaXQgd2hlblJlZGlzUmVhZHkocmVkaXMsIE1hdGgubWluKExPQ0tfUkVBRFlfVElNRU9VVF9NUywgTWF0aC5tYXgoMSwgdHRsTXMpKSk7XG4gICAgYWNxdWlyZWQgPSBhd2FpdCByZWRpcy5zZXQoa2V5LCB0b2tlbiwgJ1BYJywgdHRsTXMsICdOWCcpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBSZWRpcyB1bnJlYWNoYWJsZSAoaW5jbHVkaW5nIGJlZm9yZSB0aGUgZmlyc3QgY29ubmVjdGlvbiBjb21wbGV0ZXMpOiBub1xuICAgIC8vIHBvZCBjYW4gcHJvdmUgaXQncyB0aGUgbGVhZGVyLCBzbyBub2JvZHkgcnVucyB0aGlzIHdpbmRvdy4gU2tpcHBpbmcgaXNcbiAgICAvLyB0aGUgc2FmZSBzaWRlIOKAlCBydW5uaW5nIGhlcmUgY291bGQgZHVwbGljYXRlIGRlc3RydWN0aXZlIHdvcmsgYWNyb3NzIHBvZHMuXG4gICAgbG9ja0xvZ2dlci53YXJuKCdMZWFkZXIgbG9jayB1bmF2YWlsYWJsZTsgc2tpcHBpbmcgdGhpcyBydW4nLCB7XG4gICAgICBrZXksIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICBlbWl0Q291bnRlcignbGVhZGVyX2xvY2tfdW5hdmFpbGFibGVfdG90YWwnLCB7IGtleSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFjcXVpcmVkICE9PSAnT0snKSB7XG4gICAgZW1pdENvdW50ZXIoJ2xlYWRlcl9sb2NrX2NvbnRlbmRlZF90b3RhbCcsIHsga2V5IH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBlbWl0Q291bnRlcignbGVhZGVyX2xvY2tfYWNxdWlyZWRfdG90YWwnLCB7IGtleSB9KTtcblxuICBjb25zdCBsb3N0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAvLyBTaHV0ZG93biBpcyBtZXJnZWQgaW50byB0aGUgU0FNRSBzaWduYWwgYSBsb2NrIGxvc3MgdXNlczogZnJvbSBgZm5gJ3MgcG9pbnQgb2ZcbiAgLy8gdmlldyBib3RoIG1lYW4gXCJzdG9wIGJldHdlZW4gdW5pdHMgb2Ygd29yayBhbmQgcmV0dXJuXCIuIGBzaWduYWwucmVhc29uYCBzYXlzXG4gIC8vIHdoaWNoLiBSZWdpc3RlcmVkIHdpdGggYG9uY2VgIHNvIGEgbG9uZy1saXZlZCBjYWxsZXIgc2lnbmFsIGRvZXNuJ3QgcmV0YWluXG4gIC8vIHRoaXMgY29udHJvbGxlciBhZnRlciB0aGUgcnVuLlxuICBjb25zdCBvbkV4dGVybmFsQWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKCFsb3N0LnNpZ25hbC5hYm9ydGVkKSBsb3N0LmFib3J0KCdzaHV0ZG93bicgc2F0aXNmaWVzIExlYWRlckxvY2tBYm9ydFJlYXNvbik7XG4gIH07XG4gIG9wdHMuc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uRXh0ZXJuYWxBYm9ydCwgeyBvbmNlOiB0cnVlIH0pO1xuXG4gIGxldCBoZWFydGJlYXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHJlZGlzLmV2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBldmFsRm4gPSByZWRpcy5ldmFsLmJpbmQocmVkaXMpO1xuICAgIGhlYXJ0YmVhdCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGV2YWxGbihFWFRFTkRfSUZfT1dORVIsIDEsIGtleSwgdG9rZW4sIHR0bE1zKS50aGVuKChleHRlbmRlZCkgPT4ge1xuICAgICAgICBpZiAoTnVtYmVyKGV4dGVuZGVkKSAhPT0gMSAmJiAhbG9zdC5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGxvY2tMb2dnZXIud2FybignTGVhZGVyIGxvY2sgbG9zdCBtaWQtcnVuIChhbm90aGVyIGhvbGRlciwgb3IgdGhlIGtleSBleHBpcmVkKScsIHsga2V5IH0pO1xuICAgICAgICAgIGVtaXRDb3VudGVyKCdsZWFkZXJfbG9ja19sb3N0X3RvdGFsJywgeyBrZXkgfSk7XG4gICAgICAgICAgbG9zdC5hYm9ydCgnbG9jay1sb3N0JyBzYXRpc2ZpZXMgTGVhZGVyTG9ja0Fib3J0UmVhc29uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAvLyBBIGJsaXA6IHRoZSBuZXh0IGJlYXQgcmV0cmllczsgdGhlIFRUTCBzdGlsbCBjb3ZlcnMgdGhpcyBpbnRlcnZhbC5cbiAgICAgICAgbG9ja0xvZ2dlci5kZWJ1ZygnTGVhZGVyIGxvY2sgaGVhcnRiZWF0IGZhaWxlZCcsIHsga2V5LCBlcnJvcjogZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICB9KTtcbiAgICB9LCBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHR0bE1zIC8gMykpKTtcbiAgICBoZWFydGJlYXQudW5yZWY/LigpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmbih7IHNpZ25hbDogbG9zdC5zaWduYWwgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGhlYXJ0YmVhdCkgY2xlYXJJbnRlcnZhbChoZWFydGJlYXQpO1xuICAgIG9wdHMuc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uRXh0ZXJuYWxBYm9ydCk7XG4gICAgLy8gUmVsZWFzZSBvbmx5IGlmIHRoZSBsb2NrIGlzIHN0aWxsIG91cnMg4oCUIGlmIG91ciBydW4gb3ZlcnJhbiB0aGUgVFRMIGFuZFxuICAgIC8vIGFub3RoZXIgaG9sZGVyIHRvb2sgb3ZlciwgcmVsZWFzaW5nIGhlcmUgd291bGQgZnJlZSB0aGVpciBsb2NrIGVhcmx5LlxuICAgIC8vIFByZWZlciBhbiBhdG9taWMgQ0FTIChMdWEpOyBmYWxsIGJhY2sgdG8gZ2V0LXRoZW4tZGVsIGZvciBjbGllbnRzIHdpdGhvdXRcbiAgICAvLyBldmFsICh0aGUgc21hbGwgbm9uLWF0b21pYyB3aW5kb3cgaXMgVFRMLWJvdW5kZWQpLlxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHJlZGlzLmV2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXdhaXQgcmVkaXMuZXZhbChSRUxFQVNFX0lGX09XTkVSLCAxLCBrZXksIHRva2VuKTtcbiAgICAgIH0gZWxzZSBpZiAoKGF3YWl0IHJlZGlzLmdldChrZXkpKSA9PT0gdG9rZW4pIHtcbiAgICAgICAgYXdhaXQgcmVkaXMuZGVsKGtleSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCZXN0LWVmZm9ydDogdGhlIFRUTCBleHBpcmVzIHRoZSBsb2NrIHJlZ2FyZGxlc3MuXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEEgYExvY2tSZWRpc2AgYmFja2VkIGJ5IHRoZSBzaGFyZWQgZW52IFJlZGlzIGNsaWVudCAoc2VlIGVudi1yZWRpcy50cykg4oCUIHRoZSBsZWFkZXItbG9jayBjb3VudGVycGFydCB0byBgY3JlYXRlRW52UmVkaXNBdWRpdFNwb29sYCAvXG4gKiBgY3JlYXRlRW52UmVkaXNUb2tlblJldm9jYXRpb25TdG9yZWAsIGZvciBhIHNlcnZpY2UgdGhhdCBoYXMgbm8gQnVsbE1RIGNsaWVudCB0b1xuICogYm9ycm93LiBSZXR1cm5zIGBudWxsYCB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQsIHNvIGEgY2FsbGVyIGNhbiBkZWdyYWRlIHRvXG4gKiBydW5uaW5nIG9uIGV2ZXJ5IHBvZCAodGhlIGF0b21pYyBndWFyZHMgaXQgd3JhcHMgbXVzdCBzdGlsbCBtYWtlIHRoYXQgc2FmZSkuXG4gKiBUaGUgY2xpZW50IGlzIGEgcmVhbCBpb3JlZGlzIGluc3RhbmNlOyBpb3JlZGlzIGV4cG9zZXMgYHNldGAvYGdldGAvYGRlbGAvYGV2YWxgLFxuICogc2F0aXNmeWluZyBgTG9ja1JlZGlzYCBpbmNsdWRpbmcgdGhlIGF0b21pYyBDQVMgcmVsZWFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudlJlZGlzTG9jaygpOiBMb2NrUmVkaXMgfCBudWxsIHtcbiAgY29uc3QgaW5zdCA9IGNyZWF0ZUVudlJlZGlzQ2xpZW50PExvY2tSZWRpcz4oJ2xlYWRlci1sb2NrJyk7XG4gIGlmIChpbnN0KSBsb2NrTG9nZ2VyLmluZm8oJ1JlZGlzIGxlYWRlci1sb2NrIGNsaWVudCBpbml0aWFsaXplZCcpO1xuICByZXR1cm4gaW5zdDtcbn1cblxuLy8gT25lIGVudi1jb25maWd1cmVkIGxvY2sgY2xpZW50IHBlciBwcm9jZXNzLCBzaGFyZWQgYnkgZXZlcnkgc2NoZWR1bGVyIHRoYXRcbi8vIGFza3MgZm9yIGEgbG9jayB3aXRob3V0IHN1cHBseWluZyBpdHMgb3duIGNsaWVudC4gUmVmZXJlbmNlLWNvdW50ZWQgc28gdGhlXG4vLyBjb25uZWN0aW9uIGlzIGNsb3NlZCB3aGVuIHRoZSBsYXN0IHN1Y2ggc2NoZWR1bGVyIHN0b3BzLlxubGV0IHNoYXJlZExvY2s6IExvY2tSZWRpcyB8IG51bGwgfCB1bmRlZmluZWQ7XG5sZXQgc2hhcmVkTG9ja1VzZXJzID0gMDtcblxuLyoqIFRha2UgYSByZWZlcmVuY2Ugb24gdGhlIHNoYXJlZCBlbnYgbG9jayBjbGllbnQgKGBudWxsYCB3aGVuIFJlZGlzIGlzbid0IGNvbmZpZ3VyZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFjcXVpcmVTaGFyZWRFbnZMb2NrKCk6IExvY2tSZWRpcyB8IG51bGwge1xuICBpZiAoc2hhcmVkTG9jayA9PT0gdW5kZWZpbmVkKSBzaGFyZWRMb2NrID0gY3JlYXRlRW52UmVkaXNMb2NrKCk7XG4gIHNoYXJlZExvY2tVc2VycysrO1xuICByZXR1cm4gc2hhcmVkTG9jaztcbn1cblxuLyoqIERyb3AgYSByZWZlcmVuY2UgdGFrZW4gYnkge0BsaW5rIGFjcXVpcmVTaGFyZWRFbnZMb2NrfTsgdGhlIGxhc3Qgb25lIGNsb3NlcyB0aGUgY2xpZW50LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbGVhc2VTaGFyZWRFbnZMb2NrKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoc2hhcmVkTG9ja1VzZXJzID09PSAwKSByZXR1cm47XG4gIHNoYXJlZExvY2tVc2Vycy0tO1xuICBpZiAoc2hhcmVkTG9ja1VzZXJzID4gMCkgcmV0dXJuO1xuICBjb25zdCBjbGllbnQgPSBzaGFyZWRMb2NrO1xuICBzaGFyZWRMb2NrID0gdW5kZWZpbmVkO1xuICBhd2FpdCBjbG9zZUxlYWRlckxvY2soY2xpZW50KTtcbn1cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZGVyLWxvY2suanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9sZWFkZXItbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7QUFvQi9DOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxLQUFtQztJQUN2RSxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU87SUFDbkIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLE9BQU87UUFBQyxDQUFDO0lBQ3ZFLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCw2QkFBNkI7SUFDL0IsQ0FBQztJQUNELElBQUksQ0FBQztRQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQUMsQ0FBQztJQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEO2lFQUNpRTtBQUNqRSxNQUFNLGdCQUFnQixHQUNwQixtR0FBbUcsQ0FBQztBQUV0Ryw4REFBOEQ7QUFDOUQsTUFBTSxlQUFlLEdBQ25CLGdIQUFnSCxDQUFDO0FBRW5ILHFGQUFxRjtBQUNyRixNQUFNLHFCQUFxQixHQUFH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QUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgY3JlYXRlRW52UmVkaXNDbGllbnQsIHdoZW5SZWRpc1JlYWR5LCB0eXBlIFJlYWR5QXdhcmVSZWRpcyB9IGZyb20gJy4vZW52LXJlZGlzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9ja0xvZ2dlciA9IGNyZWF0ZUxvZ2dlcignbGVhZGVyLWxvY2snKTtcblxuLyoqXG4gKiBNaW5pbWFsIFJlZGlzIGNsaWVudCBzdXJmYWNlIG5lZWRlZCBmb3IgYSBsZWFkZXIgbG9jayAoYSBzdWJzZXQgb2YgaW9yZWRpcykuXG4gKiBgc2V0YCBpcyB2YXJpYWRpYyBzbyBjYWxsZXJzIGNhbiBwYXNzIGAnUFgnLCB0dGwsICdOWCdgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2tSZWRpcyBleHRlbmRzIFJlYWR5QXdhcmVSZWRpcyB7XG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPjtcbiAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgZGVsKC4uLmtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxudW1iZXI+O1xuICAvKiogT3B0aW9uYWwgTHVhIGV2YWwgKGlvcmVkaXMgaGFzIGl0KS4gV2hlbiBwcmVzZW50LCByZWxlYXNlIHVzZXMgYW4gYXRvbWljXG4gICAqICBjb21wYXJlLWFuZC1kZWxldGUgc28gYSBsYXBzZWQgaG9sZGVyIGNhbid0IGZyZWUgYSBzdWNjZXNzb3IncyBsb2NrLiAqL1xuICBldmFsPyhzY3JpcHQ6IHN0cmluZywgbnVtS2V5czogbnVtYmVyLCAuLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHVua25vd24+O1xuICAvKiogR3JhY2VmdWwgY2xvc2UgKGlvcmVkaXMgYHF1aXRgKSDigJQgY2FsbGVkIG9uIHNodXRkb3duIHNvIHRoZSBjb25uZWN0aW9uXG4gICAqICBkb2Vzbid0IGtlZXAgdGhlIGV2ZW50IGxvb3AgYWxpdmUuICovXG4gIHF1aXQ/KCk6IFByb21pc2U8dW5rbm93bj47XG4gIC8qKiBJbW1lZGlhdGUgY2xvc2UgKGlvcmVkaXMgYGRpc2Nvbm5lY3RgKSDigJQgdGhlIGZhbGxiYWNrIGlmIGBxdWl0YCBmYWlscy4gKi9cbiAgZGlzY29ubmVjdD8oKTogdm9pZDtcbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBjbG9zZSBvZiBhIGxlYWRlci1sb2NrIFJlZGlzIGNsaWVudCBvbiBzaHV0ZG93bi4gUHJlZmVycyBncmFjZWZ1bFxuICogYHF1aXRgOyBmYWxscyBiYWNrIHRvIGBkaXNjb25uZWN0YC4gTm8tb3AgZm9yIGEgbnVsbCBjbGllbnQgLyBvbmUgd2l0aG91dFxuICogZWl0aGVyIG1ldGhvZC4gTmV2ZXIgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2VMZWFkZXJMb2NrKHJlZGlzOiBMb2NrUmVkaXMgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghcmVkaXMpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIHJlZGlzLnF1aXQgPT09ICdmdW5jdGlvbicpIHsgYXdhaXQgcmVkaXMucXVpdCgpOyByZXR1cm47IH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gZmFsbCB0aHJvdWdoIHRvIGRpc2Nvbm5lY3RcbiAgfVxuICB0cnkgeyByZWRpcy5kaXNjb25uZWN0Py4oKTsgfSBjYXRjaCB7IC8qIGJlc3QtZWZmb3J0ICovIH1cbn1cblxuLyoqIEF0b21pYyBcImRlbGV0ZSBvbmx5IGlmIEkgc3RpbGwgb3duIGl0XCIg4oCUIGNsb3NlcyB0aGUgZ2V0LXRoZW4tZGVsIHJhY2Ugd2hlcmVcbiAqICB0aGUgbG9jayBleHBpcmVzIGFuZCBpcyByZS1hY3F1aXJlZCBiZXR3ZWVuIHRoZSB0d28gY2FsbHMuICovXG5jb25zdCBSRUxFQVNFX0lGX09XTkVSID1cbiAgJ2lmIHJlZGlzLmNhbGwoXCJnZXRcIiwgS0VZU1sxXSkgPT0gQVJHVlsxXSB0aGVuIHJldHVybiByZWRpcy5jYWxsKFwiZGVsXCIsIEtFWVNbMV0pIGVsc2UgcmV0dXJuIDAgZW5kJztcblxuLyoqIEF0b21pYyBcImV4dGVuZCBvbmx5IGlmIEkgc3RpbGwgb3duIGl0XCIg4oCUIHRoZSBoZWFydGJlYXQuICovXG5jb25zdCBFWFRFTkRfSUZfT1dORVIgPVxuICAnaWYgcmVkaXMuY2FsbChcImdldFwiLCBLRVlTWzFdKSA9PSBBUkdWWzFdIHRoZW4gcmV0dXJuIHJlZGlzLmNhbGwoXCJwZXhwaXJlXCIsIEtFWVNbMV0sIEFSR1ZbMl0pIGVsc2UgcmV0dXJuIDAgZW5kJztcblxuLyoqIExvbmdlc3QgYSBydW4gd2FpdHMgZm9yIGEgbm90LXlldC1jb25uZWN0ZWQgY2xpZW50IGJlZm9yZSBza2lwcGluZyB0aGUgd2luZG93LiAqL1xuY29uc3QgTE9DS19SRUFEWV9USU1FT1VUX01TID0gMTBfMDAwO1xuXG4vKipcbiAqIERlZmF1bHQgbG9jayBsaWZldGltZSDigJQgYSBDUkFTSC1SRUNPVkVSWSB3aW5kb3csIG5vdCBhIHJ1bi1kdXJhdGlvbiBjb3Zlci5cbiAqXG4gKiBUaGUgaG9sZGVyIGhlYXJ0YmVhdHMgKGNvbXBhcmUtYW5kLVBFWFBJUkUgZXZlcnkgYHR0bE1zIC8gM2ApIGZvciBhcyBsb25nIGFzXG4gKiBgZm5gIHJ1bnMsIHNvIGEgc2l4LWhvdXIgam9iIGhvbGRzIGEgdHdvLW1pbnV0ZSBsb2NrIHBlcmZlY3RseSB3ZWxsLiBXaGF0IHRoZVxuICogVFRMIGFjdHVhbGx5IGRlY2lkZXMgaXMgaG93IGxvbmcgYSBqb2Igc3RheXMgQkxPQ0tFRCBhZnRlciB0aGUgcG9kIGhvbGRpbmcgaXRcbiAqIGRpZXMgd2l0aG91dCByZWxlYXNpbmcg4oCUIHRoZSBrZXkgc2ltcGx5IHNpdHMgdGhlcmUgdW50aWwgaXQgZXhwaXJlcy4gU2l6aW5nIHRoZVxuICogVFRMIHRvIHRoZSBleHBlY3RlZCBydW4gdGltZSAod2hpY2ggaXMgd2hhdCBzZXZlcmFsIGNhbGxlcnMgdXNlZCB0byBkbykgdHVybmVkIGFcbiAqIGNyYXNoZWQgcG9kIGludG8gaG91cnMgb2Ygc2lsZW50IGluYWN0aXZpdHkuXG4gKlxuICogVHdvIG1pbnV0ZXMgbGVhdmVzIHRocmVlIG1pc3NlZCBoZWFydGJlYXRzIG9mIHNsYWNrLCBzbyBhbiBldmVudC1sb29wIHN0YWxsIG9yIGFcbiAqIGJyaWVmIFJlZGlzIGJsaXAgZG9lcyBub3QgaGFuZCB0aGUgbG9jayB0byBhIHNlY29uZCBwb2QgbWlkLXJ1biwgd2hpbGUgcmVjb3ZlcnlcbiAqIGFmdGVyIGEgcmVhbCBjcmFzaCBpcyBib3VuZGVkIGF0IHR3byBtaW51dGVzLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MRUFERVJfTE9DS19UVExfTVMgPSAxMjBfMDAwO1xuXG4vKipcbiAqIFRoZSBvbmUgd2F5IHRvIGJ1aWxkIGEgbGVhZGVyLWxvY2sga2V5OiBgPHNlcnZpY2U+Ojxqb2I+OmxlYWRlcmAuXG4gKlxuICogRm91ciBjb252ZW50aW9ucyBoYWQgZ3Jvd24gdXAg4oCUIGBwbHVnaW46dnVsbi1yZXNjYW46bGVhZGVyYCxcbiAqIGBwbGF0Zm9ybTpsZWFkZXI6b3JnLXB1cmdlYCwgYSBiYXJlIGBlY29zeXN0ZW0tc3RhdHM6bGVhZGVyYCwgYW5kIGJpbGxpbmcnc1xuICogdW5uYW1lc3BhY2VkIGBzdWJzY3JpcHRpb24tbGlmZWN5Y2xlYCDigJQgd2hpY2ggbWVhbnQgbm8gc2luZ2xlIGdsb2IgZm91bmQgZXZlcnlcbiAqIGxvY2suIGBLRVlTICcqOmxlYWRlcidgIG1pc3NlZCBiaWxsaW5nJ3MgdGhyZWUgZW50aXJlbHksIHNvIGFuIG9wZXJhdG9yIGFza2luZ1xuICogXCJ3aGF0IGlzIGhlbGQgcmlnaHQgbm93XCIgZ290IGEgcGFydGlhbCBhbnN3ZXIuIFRoZSBlbnYgUmVkaXMgY2xpZW50IHNldHMgbm9cbiAqIGBrZXlQcmVmaXhgLCBzbyB0aGVzZSBzaGFyZSBvbmUgZmxhdCBrZXlzcGFjZSB3aXRoIGNhY2hlLCBCdWxsTVEgYW5kIHNwb29sIGtleXM7XG4gKiB0aGUgYDxzZXJ2aWNlPjpgIHNlZ21lbnQgaXMgd2hhdCBrZWVwcyB0aGVtIGFwYXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVhZGVyTG9ja0tleShzZXJ2aWNlOiBzdHJpbmcsIGpvYjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3NlcnZpY2V9OiR7am9ifTpsZWFkZXJgO1xufVxuXG4vKiogV2h5IGEgbGVhZGVyLWxvY2tlZCBydW4gd2FzIHRvbGQgdG8gc3RvcC4gKi9cbmV4cG9ydCB0eXBlIExlYWRlckxvY2tBYm9ydFJlYXNvbiA9ICdsb2NrLWxvc3QnIHwgJ3NodXRkb3duJztcblxuLyoqIFdoYXQgYSBsZWFkZXItbG9ja2VkIHJ1biBpcyB0b2xkIHdoaWxlIGl0IHJ1bnMuICovXG5leHBvcnQgaW50ZXJmYWNlIExlYWRlckxvY2tSdW4ge1xuICAvKipcbiAgICogQWJvcnRlZCB3aGVuIHRoZSBsb2NrIGlzIExPU1QgbWlkLXJ1biAoYSBoZWFydGJlYXQgZm91bmQgYW5vdGhlciBob2xkZXIsIG9yXG4gICAqIHRoZSBrZXkgZ29uZSksIG9yIHdoZW4gdGhlIGNhbGxlciBpcyBTSFVUVElORyBET1dOLiBMb25nIHJ1bnMgbXVzdCBjaGVjayBpdFxuICAgKiBiZXR3ZWVuIHVuaXRzIG9mIHdvcmsgYW5kIHJldHVybjogcGFzdCBhIGxvY2sgbG9zcyBhbm90aGVyIHBvZCBtYXkgYmUgZG9pbmdcbiAgICogdGhlIHNhbWUgd29yaywgYW5kIG9uIHNodXRkb3duIHJldHVybmluZyBwcm9tcHRseSBpcyB3aGF0IHJlbGVhc2VzIHRoZSBsb2NrXG4gICAqIGluc3RlYWQgb2YgbGVhdmluZyBpdCB0byBleHBpcmUuXG4gICAqXG4gICAqIGBzaWduYWwucmVhc29uYCBpcyBhIHtAbGluayBMZWFkZXJMb2NrQWJvcnRSZWFzb259LlxuICAgKi9cbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIENhbGxlci1zdXBwbGllZCBjb250cm9scyBmb3Ige0BsaW5rIHdpdGhMZWFkZXJMb2NrfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVhZGVyTG9ja09wdGlvbnMge1xuICAvKipcbiAgICogQWJvcnRlZCBieSB0aGUgY2FsbGVyIHRvIGFzayBhIHJ1bm5pbmcgam9iIHRvIHN0b3Ag4oCUIGEgc2NoZWR1bGVyJ3MgYHN0b3AoKWBcbiAgICogb24gc2h1dGRvd24uIE1lcmdlZCBpbnRvIHtAbGluayBMZWFkZXJMb2NrUnVuLnNpZ25hbH0sIHNvIGEgc2lnbmFsLWF3YXJlIGBmbmBcbiAgICogcmV0dXJucyBhbmQgdGhlIGxvY2sgaXMgcmVsZWFzZWQgaW4gdGhlIGBmaW5hbGx5YCByYXRoZXIgdGhhbiBsaW5nZXJpbmcgZm9yXG4gICAqIHRoZSByZXN0IG9mIHRoZSBUVEwuXG4gICAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCBvbmx5IGlmIHRoaXMgcHJvY2VzcyB3aW5zIGEgc2hvcnQtbGl2ZWQgZGlzdHJpYnV0ZWQgbG9jayDigJQgdGhlXG4gKiBhY3Jvc3MtcG9kcyBcInNpbmdsZSBydW5uZXJcIiBndWFyZCBmb3IgcGVyaW9kaWMgam9icyAoZGlnZXN0IGZsdXNoZXMsIGV0Yy4pLlxuICpcbiAqIFVzZXMgYFNFVCBrZXkgdG9rZW4gTlggUFggdHRsYCwgc28gZXhhY3RseSBvbmUgaG9sZGVyIHJ1bnMgcGVyIHdpbmRvdyBhbmQgdGhlXG4gKiBsb2NrIGF1dG8tZXhwaXJlcyBpZiB0aGF0IGhvbGRlciBkaWVzIG1pZC1ydW4gKG5vIHN0dWNrIGxvY2spLiBXaGlsZSBgZm5gXG4gKiBydW5zLCB0aGUgaG9sZGVyIEhFQVJUQkVBVFMgKGNvbXBhcmUtYW5kLVBFWFBJUkUgZXZlcnkgYHR0bE1zIC8gM2ApLCBzbyBhIHJ1blxuICogdGhhdCBvdXRsYXN0cyBgdHRsTXNgIGtlZXBzIHRoZSBsb2NrIGluc3RlYWQgb2Ygc2lsZW50bHkgbGV0dGluZyBhIHNlY29uZCBwb2RcbiAqIHN0YXJ0IHRoZSBzYW1lIHdvcms7IGEgaGVhcnRiZWF0IHRoYXQgZmluZHMgdGhlIGxvY2sgZ29uZSBhYm9ydHNcbiAqIGBydW4uc2lnbmFsYC4gVGhlIGxvY2sgaXMgcmVsZWFzZWQgb24gY29tcGxldGlvbiwgYnV0IG9ubHkgaWYgd2Ugc3RpbGwgb3duXG4gKiBpdCDigJQgYSBzbG93ZXIgcHJlZGVjZXNzb3IgbmV2ZXIgZGVsZXRlcyBhIHN1Y2Nlc3NvcidzIGxvY2suXG4gKlxuICogSWYgUmVkaXMgY2FuJ3QgYmUgcmVhY2hlZCB0aGUgcnVuIGlzIHNraXBwZWQgKHJldHVybnMgZmFsc2UpIHJhdGhlciB0aGFuXG4gKiByZWplY3Rpbmcg4oCUIGNhbGxlcnMgYXJlIHRpbWVycywgYW5kIGEgUmVkaXMgYmxpcCBtdXN0IG5vdCBjcmFzaCB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBFVkVSWSBvdXRjb21lIGlzIGNvdW50ZWQsIGJlY2F1c2UgdGhleSBtZWFuIHZlcnkgZGlmZmVyZW50IHRoaW5ncyBhbmQgdGhlXG4gKiBkaWZmZXJlbmNlIHVzZWQgdG8gYmUgdmlzaWJsZSBvbmx5IGluIGEgbG9nIGxpbmU6XG4gKiAgLSBgbGVhZGVyX2xvY2tfYWNxdWlyZWRfdG90YWxgIOKAlCB0aGlzIHBvZCByYW4gdGhlIHdpbmRvdy4gQSBqb2Igd2hvc2UgY291bnRcbiAqICAgIHN0YXlzIGZsYXQgaXMgbm90IHJ1bm5pbmcgQU5ZV0hFUkUsIHdoaWNoIGlzIHRoZSBjb25kaXRpb24gd29ydGggYWxlcnRpbmcgb24uXG4gKiAgLSBgbGVhZGVyX2xvY2tfY29udGVuZGVkX3RvdGFsYCDigJQgYW5vdGhlciBwb2QgaG9sZHMgaXQuIEhlYWx0aHkgYW5kIGV4cGVjdGVkXG4gKiAgICB3aXRoIHJlcGxpY2FzID4gMTsgZXhhY3RseSBvbmUgYWNxdWlyZSBwZXIgd2luZG93IGFjcm9zcyB0aGUgZmxlZXQuXG4gKiAgLSBgbGVhZGVyX2xvY2tfdW5hdmFpbGFibGVfdG90YWxgIOKAlCBSZWRpcyB1bnJlYWNoYWJsZSwgc28gTk9CT0RZIHJhbiB0aGlzXG4gKiAgICB3aW5kb3cuIEEgUmVkaXMgYmxpcCBzaWxlbnRseSBzdG9wcGluZyBldmVyeSBzd2VlcCBmbGVldC13aWRlIHdhcyBwcmV2aW91c2x5XG4gKiAgICBhIFdBUk4gbG9nIGFuZCBub3RoaW5nIGVsc2UuXG4gKlxuICogQHJldHVybnMgdHJ1ZSBpZiB3ZSBoZWxkIHRoZSBsb2NrIGFuZCByYW4gYGZuYDsgZmFsc2UgaWYgYW5vdGhlciBob2xkZXIgZGlkIG9yXG4gKiAgIHRoZSBsb2NrIGNvdWxkbid0IGJlIHRha2VuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aExlYWRlckxvY2soXG4gIHJlZGlzOiBMb2NrUmVkaXMsXG4gIGtleTogc3RyaW5nLFxuICB0dGxNczogbnVtYmVyLFxuICBmbjogKHJ1bjogTGVhZGVyTG9ja1J1bikgPT4gUHJvbWlzZTx2b2lkPixcbiAgb3B0czogTGVhZGVyTG9ja09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyBBc2tlZCB0byBzdG9wIGJlZm9yZSB3ZSBldmVuIHRyaWVkOiBkb24ndCB0YWtlIGEgbG9jayB3ZSBhcmUgYWJvdXQgdG8gZHJvcC5cbiAgaWYgKG9wdHMuc2lnbmFsPy5hYm9ydGVkKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgdG9rZW4gPSByYW5kb21VVUlEKCk7XG4gIGxldCBhY3F1aXJlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICAvLyBUaGUgZW52IGNsaWVudCBoYXMgbm8gb2ZmbGluZSBxdWV1ZTogYSBTRVQgYmVmb3JlIHRoZSBmaXJzdCBjb25uZWN0aW9uXG4gICAgLy8gY29tcGxldGVzIGlzIHJlamVjdGVkLCB3aGljaCBtYWRlIHRoZSBGSVJTVCB0aWNrIGFmdGVyIGV2ZXJ5IGJvb3QgYVxuICAgIC8vIGd1YXJhbnRlZWQgc2tpcC4gV2FpdCAoYm91bmRlZCkgZm9yIHJlYWRpbmVzcyBmaXJzdC5cbiAgICBhd2FpdCB3aGVuUmVkaXNSZWFkeShyZWRpcywgTWF0aC5taW4oTE9DS19SRUFEWV9USU1FT1VUX01TLCBNYXRoLm1heCgxLCB0dGxNcykpKTtcbiAgICBhY3F1aXJlZCA9IGF3YWl0IHJlZGlzLnNldChrZXksIHRva2VuLCAnUFgnLCB0dGxNcywgJ05YJyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFJlZGlzIHVucmVhY2hhYmxlIChpbmNsdWRpbmcgYmVmb3JlIHRoZSBmaXJzdCBjb25uZWN0aW9uIGNvbXBsZXRlcyk6IG5vXG4gICAgLy8gcG9kIGNhbiBwcm92ZSBpdCdzIHRoZSBsZWFkZXIsIHNvIG5vYm9keSBydW5zIHRoaXMgd2luZG93LiBTa2lwcGluZyBpc1xuICAgIC8vIHRoZSBzYWZlIHNpZGUg4oCUIHJ1bm5pbmcgaGVyZSBjb3VsZCBkdXBsaWNhdGUgZGVzdHJ1Y3RpdmUgd29yayBhY3Jvc3MgcG9kcy5cbiAgICBsb2NrTG9nZ2VyLndhcm4oJ0xlYWRlciBsb2NrIHVuYXZhaWxhYmxlOyBza2lwcGluZyB0aGlzIHJ1bicsIHtcbiAgICAgIGtleSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIGVtaXRDb3VudGVyKCdsZWFkZXJfbG9ja191bmF2YWlsYWJsZV90b3RhbCcsIHsga2V5IH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYWNxdWlyZWQgIT09ICdPSycpIHtcbiAgICBlbWl0Q291bnRlcignbGVhZGVyX2xvY2tfY29udGVuZGVkX3RvdGFsJywgeyBrZXkgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGVtaXRDb3VudGVyKCdsZWFkZXJfbG9ja19hY3F1aXJlZF90b3RhbCcsIHsga2V5IH0pO1xuXG4gIGNvbnN0IGxvc3QgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIC8vIFNodXRkb3duIGlzIG1lcmdlZCBpbnRvIHRoZSBTQU1FIHNpZ25hbCBhIGxvY2sgbG9zcyB1c2VzOiBmcm9tIGBmbmAncyBwb2ludCBvZlxuICAvLyB2aWV3IGJvdGggbWVhbiBcInN0b3AgYmV0d2VlbiB1bml0cyBvZiB3b3JrIGFuZCByZXR1cm5cIi4gYHNpZ25hbC5yZWFzb25gIHNheXNcbiAgLy8gd2hpY2guIFJlZ2lzdGVyZWQgd2l0aCBgb25jZWAgc28gYSBsb25nLWxpdmVkIGNhbGxlciBzaWduYWwgZG9lc24ndCByZXRhaW5cbiAgLy8gdGhpcyBjb250cm9sbGVyIGFmdGVyIHRoZSBydW4uXG4gIGNvbnN0IG9uRXh0ZXJuYWxBYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIWxvc3Quc2lnbmFsLmFib3J0ZWQpIGxvc3QuYWJvcnQoJ3NodXRkb3duJyBzYXRpc2ZpZXMgTGVhZGVyTG9ja0Fib3J0UmVhc29uKTtcbiAgfTtcbiAgb3B0cy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25FeHRlcm5hbEFib3J0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgbGV0IGhlYXJ0YmVhdDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgcmVkaXMuZXZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGV2YWxGbiA9IHJlZGlzLmV2YWwuYmluZChyZWRpcyk7XG4gICAgaGVhcnRiZWF0ID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgZXZhbEZuKEVYVEVORF9JRl9PV05FUiwgMSwga2V5LCB0b2tlbiwgdHRsTXMpLnRoZW4oKGV4dGVuZGVkKSA9PiB7XG4gICAgICAgIGlmIChOdW1iZXIoZXh0ZW5kZWQpICE9PSAxICYmICFsb3N0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgbG9ja0xvZ2dlci53YXJuKCdMZWFkZXIgbG9jayBsb3N0IG1pZC1ydW4gKGFub3RoZXIgaG9sZGVyLCBvciB0aGUga2V5IGV4cGlyZWQpJywgeyBrZXkgfSk7XG4gICAgICAgICAgZW1pdENvdW50ZXIoJ2xlYWRlcl9sb2NrX2xvc3RfdG90YWwnLCB7IGtleSB9KTtcbiAgICAgICAgICBsb3N0LmFib3J0KCdsb2NrLWxvc3QnIHNhdGlzZmllcyBMZWFkZXJMb2NrQWJvcnRSZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIC8vIEEgYmxpcDogdGhlIG5leHQgYmVhdCByZXRyaWVzOyB0aGUgVFRMIHN0aWxsIGNvdmVycyB0aGlzIGludGVydmFsLlxuICAgICAgICBsb2NrTG9nZ2VyLmRlYnVnKCdMZWFkZXIgbG9jayBoZWFydGJlYXQgZmFpbGVkJywgeyBrZXksIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgIH0pO1xuICAgIH0sIE1hdGgubWF4KDEsIE1hdGguZmxvb3IodHRsTXMgLyAzKSkpO1xuICAgIGhlYXJ0YmVhdC51bnJlZj8uKCk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGZuKHsgc2lnbmFsOiBsb3N0LnNpZ25hbCB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoaGVhcnRiZWF0KSBjbGVhckludGVydmFsKGhlYXJ0YmVhdCk7XG4gICAgb3B0cy5zaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25FeHRlcm5hbEFib3J0KTtcbiAgICAvLyBSZWxlYXNlIG9ubHkgaWYgdGhlIGxvY2sgaXMgc3RpbGwgb3VycyDigJQgaWYgb3VyIHJ1biBvdmVycmFuIHRoZSBUVEwgYW5kXG4gICAgLy8gYW5vdGhlciBob2xkZXIgdG9vayBvdmVyLCByZWxlYXNpbmcgaGVyZSB3b3VsZCBmcmVlIHRoZWlyIGxvY2sgZWFybHkuXG4gICAgLy8gUHJlZmVyIGFuIGF0b21pYyBDQVMgKEx1YSk7IGZhbGwgYmFjayB0byBnZXQtdGhlbi1kZWwgZm9yIGNsaWVudHMgd2l0aG91dFxuICAgIC8vIGV2YWwgKHRoZSBzbWFsbCBub24tYXRvbWljIHdpbmRvdyBpcyBUVEwtYm91bmRlZCkuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgcmVkaXMuZXZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhd2FpdCByZWRpcy5ldmFsKFJFTEVBU0VfSUZfT1dORVIsIDEsIGtleSwgdG9rZW4pO1xuICAgICAgfSBlbHNlIGlmICgoYXdhaXQgcmVkaXMuZ2V0KGtleSkpID09PSB0b2tlbikge1xuICAgICAgICBhd2FpdCByZWRpcy5kZWwoa2V5KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEJlc3QtZWZmb3J0OiB0aGUgVFRMIGV4cGlyZXMgdGhlIGxvY2sgcmVnYXJkbGVzcy5cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQSBgTG9ja1JlZGlzYCBiYWNrZWQgYnkgdGhlIHNoYXJlZCBlbnYgUmVkaXMgY2xpZW50IChzZWUgZW52LXJlZGlzLnRzKSDigJQgdGhlIGxlYWRlci1sb2NrIGNvdW50ZXJwYXJ0IHRvIGBjcmVhdGVFbnZSZWRpc0F1ZGl0U3Bvb2xgIC9cbiAqIGBjcmVhdGVFbnZSZWRpc1Rva2VuUmV2b2NhdGlvblN0b3JlYCwgZm9yIGEgc2VydmljZSB0aGF0IGhhcyBubyBCdWxsTVEgY2xpZW50IHRvXG4gKiBib3Jyb3cuIFJldHVybnMgYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCwgc28gYSBjYWxsZXIgY2FuIGRlZ3JhZGUgdG9cbiAqIHJ1bm5pbmcgb24gZXZlcnkgcG9kICh0aGUgYXRvbWljIGd1YXJkcyBpdCB3cmFwcyBtdXN0IHN0aWxsIG1ha2UgdGhhdCBzYWZlKS5cbiAqIFRoZSBjbGllbnQgaXMgYSByZWFsIGlvcmVkaXMgaW5zdGFuY2U7IGlvcmVkaXMgZXhwb3NlcyBgc2V0YC9gZ2V0YC9gZGVsYC9gZXZhbGAsXG4gKiBzYXRpc2Z5aW5nIGBMb2NrUmVkaXNgIGluY2x1ZGluZyB0aGUgYXRvbWljIENBUyByZWxlYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW52UmVkaXNMb2NrKCk6IExvY2tSZWRpcyB8IG51bGwge1xuICBjb25zdCBpbnN0ID0gY3JlYXRlRW52UmVkaXNDbGllbnQ8TG9ja1JlZGlzPignbGVhZGVyLWxvY2snKTtcbiAgaWYgKGluc3QpIGxvY2tMb2dnZXIuaW5mbygnUmVkaXMgbGVhZGVyLWxvY2sgY2xpZW50IGluaXRpYWxpemVkJyk7XG4gIHJldHVybiBpbnN0O1xufVxuXG4vLyBPbmUgZW52LWNvbmZpZ3VyZWQgbG9jayBjbGllbnQgcGVyIHByb2Nlc3MsIHNoYXJlZCBieSBldmVyeSBzY2hlZHVsZXIgdGhhdFxuLy8gYXNrcyBmb3IgYSBsb2NrIHdpdGhvdXQgc3VwcGx5aW5nIGl0cyBvd24gY2xpZW50LiBSZWZlcmVuY2UtY291bnRlZCBzbyB0aGVcbi8vIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHdoZW4gdGhlIGxhc3Qgc3VjaCBzY2hlZHVsZXIgc3RvcHMuXG5sZXQgc2hhcmVkTG9jazogTG9ja1JlZGlzIHwgbnVsbCB8IHVuZGVmaW5lZDtcbmxldCBzaGFyZWRMb2NrVXNlcnMgPSAwO1xuXG4vKiogVGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgc2hhcmVkIGVudiBsb2NrIGNsaWVudCAoYG51bGxgIHdoZW4gUmVkaXMgaXNuJ3QgY29uZmlndXJlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNoYXJlZEVudkxvY2soKTogTG9ja1JlZGlzIHwgbnVsbCB7XG4gIGlmIChzaGFyZWRMb2NrID09PSB1bmRlZmluZWQpIHNoYXJlZExvY2sgPSBjcmVhdGVFbnZSZWRpc0xvY2soKTtcbiAgc2hhcmVkTG9ja1VzZXJzKys7XG4gIHJldHVybiBzaGFyZWRMb2NrO1xufVxuXG4vKiogRHJvcCBhIHJlZmVyZW5jZSB0YWtlbiBieSB7QGxpbmsgYWNxdWlyZVNoYXJlZEVudkxvY2t9OyB0aGUgbGFzdCBvbmUgY2xvc2VzIHRoZSBjbGllbnQuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVsZWFzZVNoYXJlZEVudkxvY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChzaGFyZWRMb2NrVXNlcnMgPT09IDApIHJldHVybjtcbiAgc2hhcmVkTG9ja1VzZXJzLS07XG4gIGlmIChzaGFyZWRMb2NrVXNlcnMgPiAwKSByZXR1cm47XG4gIGNvbnN0IGNsaWVudCA9IHNoYXJlZExvY2s7XG4gIHNoYXJlZExvY2sgPSB1bmRlZmluZWQ7XG4gIGF3YWl0IGNsb3NlTGVhZGVyTG9jayhjbGllbnQpO1xufVxuIl19