@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
@@ -67,4 +67,4 @@ export function isValidQuotaType(value) {
67
67
  export function effectiveRootOrgId(payload) {
68
68
  return payload.rootOrganizationId ?? payload.organizationId;
69
69
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQXlCbkQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBMEIsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFpRGpHLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTZCLENBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hHLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBd0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEwQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFnRHhHOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUc7SUFDL0IsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGNBQWM7SUFDaEYsWUFBWTtJQUNaLFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsWUFBWTtJQUM3RCxVQUFVO0NBQ0YsQ0FBQztBQUVYOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXdDLE1BQU0sQ0FBQyxXQUFXLENBQ3JGLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUEyQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUUsQ0FBQztBQUV6Qzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsb0JBQW9CLENBQUM7QUFFdkQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQWtCLENBQUMsQ0FBQztBQUNyRixDQUFDO0FBMlBEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxPQUFrRTtJQUVsRSxPQUFPLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucy5qcyc7XG5pbXBvcnQgeyBRVU9UQV9DQVRBTE9HIH0gZnJvbSAnLi9xdW90YS1jYXRhbG9nLmpzJztcbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8qKlxuICogQ2FwYWJpbGl0eSBzY29wZSBjYXRhbG9nIGZvciBtYWNoaW5lL2F1dG9tYXRpb24gdG9rZW5zLiBBIHNjb3BlZCB0b2tlbiBjYXJyaWVzXG4gKiBleGFjdGx5IG9uZSBvZiB0aGVzZSBpbnN0ZWFkIG9mIHJvbGUtYmFzZWQgcGVybWlzc2lvbnM7IGVuZHBvaW50cyB0aGF0IGFjY2VwdCBhXG4gKiBzY29wZWQgaWRlbnRpdHkgY2hlY2sgaXQgdmlhIGBoYXNTY29wZWAuIEtlcHQgYSBjbG9zZWQgdW5pb24gKG1pcnJvcmluZ1xuICoge0BsaW5rIFBlcm1pc3Npb259KSBzbyBhIHR5cG8gb24gZWl0aGVyIHRoZSBtaW50IG9yIHRoZSBjaGVjayBzaWRlIGlzIGEgY29tcGlsZVxuICogZXJyb3IuIEFkZCBhIHZhbHVlIGhlcmUgd2hlbiBpbnRyb2R1Y2luZyBhIG5ldyBzY29wZWQtdG9rZW4gc3VyZmFjZS5cbiAqXG4gKiAtIGByZXBvcnRpbmc6aW5nZXN0YCDigJQgdGhlIEFXUyBldmVudC1pbmdlc3Rpb24gTGFtYmRhJ3Mgd3JpdGVzIChgL3JlcG9ydHMvZXZlbnRzYCxcbiAqICAgYC9yZXBvcnRzL2luZ2VzdC1oZWFsdGhgKSBhbmQgdGhlIGluY2lkZW50IHdlYmhvb2suXG4gKiAtIGByZWdpc3RyeTpwdXNoYCAgICDigJQgYGRvY2tlciBwdXNoYCBpbnRvIHRoZSBvd25pbmcgb3JnJ3Mgb3duIG5hbWVzcGFjZSB2aWFcbiAqICAgaW1hZ2UtcmVnaXN0cnkncyBgL3Rva2VuYCBlbmRwb2ludC4gR3JhbnRzIHRoZSByYXctaW1hZ2Ugd3JpdGUgdGhhdFxuICogICBgcGx1Z2luczp3cml0ZWAgZ3JhbnRzIGEgcGVyc29uLCBhbmQgbm90aGluZyBlbHNlOiBhIHNjb3BlZCB0b2tlbiBjYXJyaWVzIG5vXG4gKiAgIHBlcm1pc3Npb25zLCBzbyBpdCBjYW4gbmVpdGhlciByZWFkIHRoZSBBUEkgbm9yIHB1c2ggb3V0c2lkZSBpdHMgb3JnLlxuICogLSBgc2NpbWAgICAgICAgICAgICAg4oCUIGFuIGlkZW50aXR5IHByb3ZpZGVyJ3MgU0NJTSAyLjAgY2xpZW50ICgzYikgZHJpdmluZ1xuICogICBgL3NjaW0vdjIvVXNlcnNgIGFuZCBgL3NjaW0vdjIvR3JvdXBzYCBmb3IgdGhlIGtleSdzIE9XTiBvcmcuIEl0IHByb3Zpc2lvbnNcbiAqICAgYW5kIGRlYWN0aXZhdGVzIG1lbWJlcnNoaXBzIGFuZCBtb3ZlcyBwZW9wbGUgYmV0d2VlbiBkaXJlY3RvcnkgZ3JvdXBzOyBpdFxuICogICBjYW4gbmV2ZXIgcmVhZCBvciB3cml0ZSBhbnl0aGluZyBlbHNlLCBhbmQg4oCUIGJlY2F1c2UgYSBzY29wZWQgdG9rZW4gY2Fycmllc1xuICogICBubyBwZXJtaXNzaW9ucyDigJQgaXQgY2Fubm90IGF1dGhvciB0aGUgZ3JvdXAg4oaSIFJvbGUgcnVsZXMgaXRzIHN5bmNzIHJlc29sdmVcbiAqICAgdGhyb3VnaC4gT25seSBhIHNlcnZpY2UtYWNjb3VudCBrZXkgbWF5IGNhcnJ5IGl0OyBhIHBlcnNvbidzIHRva2VuIG5ldmVyIGRvZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuU2NvcGUgPSAncmVwb3J0aW5nOmluZ2VzdCcgfCAncmVnaXN0cnk6cHVzaCcgfCAnc2NpbSc7XG5cbi8qKlxuICogUnVudGltZSBjYXRhbG9nIG9mIHtAbGluayBUb2tlblNjb3BlfSAoYSB1bmlvbiBpcyBlcmFzZWQgYXQgcnVudGltZSkuIFRoaXMgaXNcbiAqIHRoZSBPTkUgYWxsb3dsaXN0IGV2ZXJ5IG1pbnQgcGF0aCB2YWxpZGF0ZXMgYWdhaW5zdCDigJQgcGxhdGZvcm0ncyBrZXkvdG9rZW5cbiAqIGlzc3VlIHJvdXRlcyBpbmNsdWRlZCDigJQgc28gYSBuZXcgc2NvcGUgaXMgYWRkZWQgaW4gZXhhY3RseSBvbmUgcGxhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBUT0tFTl9TQ09QRVM6IHJlYWRvbmx5IFRva2VuU2NvcGVbXSA9IFsncmVwb3J0aW5nOmluZ2VzdCcsICdyZWdpc3RyeTpwdXNoJywgJ3NjaW0nXTtcblxuLyoqXG4gKiBXaGF0IGtpbmQgb2YgcHJpbmNpcGFsIGEgdG9rZW4gc3BlYWtzIGZvci4gQXV0aCBkZWNpc2lvbnMgYnJhbmNoIG9uIHRoaXMgY2xhaW1cbiAqIOKAlCBuZXZlciBvbiB0aGUgc2hhcGUgb2YgYHN1YmAgb3Igb24gd2hpY2ggb3B0aW9uYWwgY2xhaW1zIGhhcHBlbiB0byBiZSBwcmVzZW50LlxuICpcbiAqIC0gYHVzZXJgICAgICAgICAgICAg4oCUIGEgcGVyc29uIChzZXNzaW9uLCBtYWNoaW5lIHNlc3Npb24sIFBBVCBvciBpbXBlcnNvbmF0aW9uKS5cbiAqIC0gYHNlcnZpY2VfYWNjb3VudGAg4oCUIGEgbm9uLWh1bWFuIGFjY291bnQgb3duZWQgYnkgT05FIG9yZywgaG9sZGluZyBvcmcgUm9sZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICBhbmQgYXV0aGVudGljYXRpbmcgd2l0aCBhIGBwYl9zYV/igKZgIGtleSBleGNoYW5nZWQgYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS4gTmV2ZXIgc2F0aXNmaWVzIGFuIGFzc3VyYW5jZS9zdGVwLXVwIGdhdGUuXG4gKiAtIGBzZXJ2aWNlYCAgICAgICAgIOKAlCBhbiBpbnRlcm5hbCBQaXBlbGluZSBCdWlsZGVyIHNlcnZpY2UgKHtAbGluayBzaWduU2VydmljZVRva2VufSkuXG4gKi9cbmV4cG9ydCB0eXBlIFByaW5jaXBhbFR5cGUgPSAndXNlcicgfCAnc2VydmljZV9hY2NvdW50JyB8ICdzZXJ2aWNlJztcblxuLyoqXG4gKiBIb3cgYSB0b2tlbiBpcyB1c2VkLiBgYWNjZXNzYCBpcyBhIHNlc3Npb24tc3R5bGUgYWNjZXNzIHRva2VuIChpbnRlcmFjdGl2ZSxcbiAqIG1hY2hpbmUtc2Vzc2lvbiBvciBzZXJ2aWNlKTsgYGFwaV9rZXlgIGlzIGEgc3RhbmRhbG9uZSBjcmVkZW50aWFsIHRyYWNrZWQgYnlcbiAqIGl0cyBvd24gcmVjb3JkIOKAlCBhIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiBvciBhIHNlcnZpY2UtYWNjb3VudCBrZXksIG5hbWVkIGJ5XG4gKiBganRpYC5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5Vc2UgPSAnYWNjZXNzJyB8ICdhcGlfa2V5JztcblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBtZXRob2RzIChgYW1yYCwgUkZDIDgxNzYgc3R5bGUpIHRoYXQgZXN0YWJsaXNoZWQgYSB1c2VyJ3NcbiAqIHNlc3Npb24uIGBwd2RgIHBhc3N3b3JkIHNpZ24taW47IGBvYXV0aGAgc29jaWFsIHNpZ24taW4gKEdvb2dsZSwgR2l0SHViIOKApik7XG4gKiBgc3NvYCBwZXItb3JnIE9JREMgc2luZ2xlIHNpZ24tb247IGB3ZWJhdXRobmAgYSBwYXNza2V5IChXZWJBdXRobiBhc3NlcnRpb25cbiAqIHdpdGggdXNlciB2ZXJpZmljYXRpb24pOyBgc3RlcHVwYCBhIHN0ZXAtdXAgcmUtdmVyaWZpY2F0aW9uIHRva2VuOyBgbWZhYCBhXG4gKiBzZWNvbmQgZmFjdG9yIHdhcyBwcmVzZW50ZWQgYXMgd2VsbCDigJQgdG9kYXkgYW4gYXV0aGVudGljYXRvci1hcHAgY29kZSAoVE9UUClcbiAqIG9yIG9uZSBvZiBpdHMgcmVjb3ZlcnkgY29kZXMsIHNvIGl0IGFwcGVhcnMgQUxPTkdTSURFIHRoZSBtZXRob2QgdGhhdFxuICogaWRlbnRpZmllZCB0aGUgdXNlciAoYFsncHdkJywgJ21mYSddYCksIG5ldmVyIG9uIGl0cyBvd24uXG4gKi9cbmV4cG9ydCB0eXBlIEF1dGhNZXRob2QgPSAncHdkJyB8ICdvYXV0aCcgfCAnc3NvJyB8ICd3ZWJhdXRobicgfCAnc3RlcHVwJyB8ICdtZmEnO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0b3IgYXNzdXJhbmNlIGxldmVsIG9mIHRoZSBzZXNzaW9uIGEgdG9rZW4gc3BlYWtzIGZvci5cbiAqXG4gKiAtIGAxYCDigJQgb25lIGZhY3RvcjogYSBwYXNzd29yZCwgYSBzb2NpYWwgc2lnbi1pbiwgb3IgU1NPIHRocm91Z2ggYW4gSWRQIHRoZVxuICogICBvcmcgaGFzIE5PVCBtYXJrZWQgYXMgZW5mb3JjaW5nIE1GQS5cbiAqIC0gYDJgIOKAlCBNRkEtZ3JhZGU6IGEgcGFzc2tleSBhc3NlcnRlZCB3aXRoIHVzZXIgdmVyaWZpY2F0aW9uLCBhIHBhc3N3b3JkIHBsdXNcbiAqICAgYW4gYXV0aGVudGljYXRvci1hcHAgY29kZSwgb3IgU1NPIHRocm91Z2ggYW4gSWRQIHRoZSBvcmcgSEFTIG1hcmtlZCBhc1xuICogICBlbmZvcmNpbmcgTUZBIChwcm92aWRlcnMgZG9uJ3Qgc2VuZCBgYW1yYCByZWxpYWJseSwgc28gdGhlIG9yZydzIG93blxuICogICBzdGF0ZW1lbnQgYWJvdXQgaXRzIElkUCBpcyB0aGUgc2lnbmFsKS5cbiAqXG4gKiBGaXhlZCB3aGVuIHRoZSBzZXNzaW9uIGlzIG9wZW5lZCBhbmQgc3RvcmVkIG9uIGl0cyByZWZyZXNoLXNlc3Npb24gc2xvdCwgc29cbiAqIHJlZnJlc2ggLyByZW5ld2FsIC8gc3dpdGNoLW9yZyBjb3B5IGl0IHZlcmJhdGltIGFuZCBjYW4gbmV2ZXIgUkFJU0UgaXQg4oCUXG4gKiBlYXJuaW5nIGFhbCAyIGFsd2F5cyBtZWFucyBhdXRoZW50aWNhdGluZyBhZ2FpbiB3aXRoIGEgc2Vjb25kIGZhY3Rvci5cbiAqL1xuZXhwb3J0IHR5cGUgQXNzdXJhbmNlTGV2ZWwgPSAxIHwgMjtcblxuLyoqIFJ1bnRpbWUgY2F0YWxvZ3MgZm9yIHRoZSBjbGFpbSB1bmlvbnMgYWJvdmUgKGEgdW5pb24gaXMgZXJhc2VkIGF0IHJ1bnRpbWUpLiAqL1xuZXhwb3J0IGNvbnN0IFBSSU5DSVBBTF9UWVBFUzogcmVhZG9ubHkgUHJpbmNpcGFsVHlwZVtdID0gWyd1c2VyJywgJ3NlcnZpY2VfYWNjb3VudCcsICdzZXJ2aWNlJ107XG5leHBvcnQgY29uc3QgVE9LRU5fVVNFUzogcmVhZG9ubHkgVG9rZW5Vc2VbXSA9IFsnYWNjZXNzJywgJ2FwaV9rZXknXTtcbmV4cG9ydCBjb25zdCBBVVRIX01FVEhPRFM6IHJlYWRvbmx5IEF1dGhNZXRob2RbXSA9IFsncHdkJywgJ29hdXRoJywgJ3NzbycsICd3ZWJhdXRobicsICdzdGVwdXAnLCAnbWZhJ107XG5cbi8qKlxuICogUXVvdGEgdHlwZSBpZGVudGlmaWVycy5cbiAqXG4gKiAtIGBwbHVnaW5zYCAvIGBwaXBlbGluZXNgIOKAlCBjb3VudCBvZiBjcmVhdGVkIGVudGl0aWVzXG4gKiAtIGBhcGlDYWxsc2Ag4oCUIGdlbmVyaWMgQVBJIGNhbGwgY291bnQgKHJlYWQtaGVhdnkgcGF0aHMpIG1hZGUgYnkgUEVPUExFIGluXG4gKiAgIElOVEVSQUNUSVZFIFNFU1NJT05TLiBQZXJzb25hbCBhY2Nlc3MgdG9rZW5zIGFyZSBOT1QgaGVyZTogdGhpcyBlbnRyeSB1c2VkXG4gKiAgIHRvIHNheSB0aGV5IHdlcmUsIGFuZCB7QGxpbmsgbWV0ZXJlZFF1b3RhVHlwZUZvcn0gc2F5cyBvdGhlcndpc2UuXG4gKiAtIGBhdXRvbWF0aW9uQ2FsbHNgIOKAlCB0aGUgc2FtZSBtZXRlcmVkIEFQSSBjYWxscyB3aGVuIHRoZSBjYWxsZXIgaXMgbm90IGFuXG4gKiAgIGludGVyYWN0aXZlIHNlc3Npb246IGFuIE9SRyBTRVJWSUNFIEFDQ09VTlRcbiAqICAgKGBwcmluY2lwYWxUeXBlOiAnc2VydmljZV9hY2NvdW50J2Ag4oCUIHBsYXRmb3JtLWF1dG9tYXRpb24sXG4gKiAgIHBpcGVsaW5lLXJlZ2lzdGVyLCByZXBvcnRpbmctaW5nZXN0IGFuZCByZWdpc3RyeS1wdXNoIGtleXMpLCBhIFBFUlNPTkFMXG4gKiAgIEFDQ0VTUyBLRVkgKGB0b2tlbl91c2U6ICdhcGlfa2V5J2ApLCBvciBhbnkgdG9rZW4gbWludGVkIHdoaWxlIGhvbGRpbmcgb25lXG4gKiAgIChgcGFyZW50S2V5SWRgKS4gQ291bnRlZCBJTlNURUFEIG9mIGBhcGlDYWxsc2AsIG5ldmVyIGFzIHdlbGwsIHNvIGFcbiAqICAgc2VsZi1tdXRhdGluZyBwaXBlbGluZSBkb2luZyBvbmUgcGx1Z2luIGxvb2t1cCBwZXIgc3RlcCBwZXIgcnVuIGNhbm5vdCBsb2NrXG4gKiAgIGl0cyBvd24gaHVtYW5zIG91dCBvZiB0aGUgY29uc29sZSAoc2VlIHtAbGluayBtZXRlcmVkUXVvdGFUeXBlRm9yfSwgd2hpY2ggaXNcbiAqICAgdGhlIGF1dGhvcml0eSBmb3IgdGhlIHNwbGl0IOKAlCBgZG9jcy9xdW90YXMubWRgIGFncmVlcyB3aXRoIGl0KS4gU2l6ZWQgZm9yXG4gKiAgIHRoYXQgdHJhZmZpYyBwZXIgdGllci5cbiAqIC0gYGFpQ2FsbHNgIOKAlCBBSSBwcm92aWRlciBpbnZvY2F0aW9ucyAoY291bnRlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgZWFjaCBjYWxsXG4gKiAgIGhhcyBleHRlcm5hbCBkb2xsYXIgY29zdDsgc2l6ZWQgc21hbGxlciB0aGFuIGFwaUNhbGxzIHBlciB0aWVyKVxuICogLSBgc3RvcmFnZUJ5dGVzYCDigJQgcmVnaXN0cnkgc3RvcmFnZSBidWRnZXQgcGVyIG9yZy4gVW5saWtlIHRoZSBvdGhlcnNcbiAqICAgKHdoaWNoIGNvdW50IGRpc2NyZXRlIGV2ZW50cyksIHRoaXMgaXMgYSBtZWFzdXJlZCB0b3RhbCByZWNvbXB1dGVkXG4gKiAgIG9uIGRlbWFuZC4gSW5jcmVtZW50ZWQgYnkgdGhlIGltYWdlLXJlZ2lzdHJ5J3MgcHVzaC1nYXRlIGJlZm9yZVxuICogICBpc3N1aW5nIGEgdG9rZW4gd2hvc2Ugc2NvcGUgaW5jbHVkZXMgYHB1c2hgOyB0aGUgR0Mgc2NoZWR1bGVyXG4gKiAgIGV2ZW50dWFsbHkgZnJlZXMgdGhlIGJ5dGVzLCB0aGVuIHRoZSBuZXh0IHB1c2gtZ2F0ZSBjaGVjayByZWFkc1xuICogICB0aGUgbG93ZXIgdmFsdWUuIE5PVCBhIGNvdW50ZXItc3R5bGUgcXVvdGEgaW4gdGhlIHNlbnNlIG9mXG4gKiAgIGBpbmNyZW1lbnRVc2FnZWAg4oCUIHRoZSByZWdpc3RyeSBwdXNoZXMgdGhlIG1lYXN1cmVkIHRvdGFsIHZpYVxuICogICBgdXBkYXRlTGltaXRzYC9gcmVzZXRVc2FnZWAgZmxvd3MuIFRpZXIgbGltaXRzIGFyZSBieXRlcy5cbiAqIC0gYGRhc2hib2FyZHNgIC8gYGFsZXJ0UnVsZXNgIC8gYGFsZXJ0RGVzdGluYXRpb25zYCAvIGBpZHBDb25maWdzYCDigJRcbiAqICAgcmVzb3VyY2UtY291bnQgcXVvdGFzIGFkZGVkIHRvIGNsb3NlIHBlci1vcmcgRG9TIHN1cmZhY2VzIGluIHRoZVxuICogICB1c2VyLWVkaXRhYmxlIGZlYXR1cmUgdGFibGVzLiBXaXRob3V0IHRoZXNlIGNhcHMgYSBzaW5nbGUgb3JnIGNvdWxkXG4gKiAgIHNwYW0gdGhvdXNhbmRzIG9mIGRhc2hib2FyZHMgLyBydWxlcyBhbmQgYmxvYXQgdGhlIHNoYXJlZCBQb3N0Z3JlcyAvXG4gKiAgIE1vbmdvIHdvcmtpbmcgc2V0cy4gQ291bnRlZCBhdCBjcmVhdGUgdGltZTsgZGVjcmVtZW50ZWQgb24gZGVsZXRlLlxuICogLSBgbGlzdGluZ3NgIOKAlCBhY3RpdmUsIG5vbi1zdXNwZW5kZWQgcGx1Z2luLWVjb3N5c3RlbSBsaXN0aW5ncyBhIChyb290KSBvcmdcbiAqICAgcHVibGlzaGVzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gQSBDT1VOVCBxdW90YSBsaWtlXG4gKiAgIGBwbHVnaW5zYDogY2hlY2tlZCBhdCBwdWJsaXNoLXJlcXVlc3Qgc3VibWl0IGFuZCByZS1jaGVja2VkIGF0IGFwcHJvdmFsO1xuICogICBpbnN0YWxscyBuZXZlciBjb3VudC5cbiAqL1xuLy8gTk9URTogYHNlYXRzYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBoZXJlLiBJdCdzIGEgdGllciBsaW1pdCAoUXVvdGFUaWVyTGltaXRzKVxuLy8gZW5mb3JjZWQgYnkgY29tcGFyaW5nIHRoZSBvcmcncyBMSVZFIG1lbWJlciBjb3VudCBhdCBpbnZpdGUgdGltZSDigJQgbm90IGFuXG4vLyBpbmNyZW1lbnRpbmcgcGVyLXBlcmlvZCBjb3VudGVyIGxpa2UgdGhlIGNvbnN1bWFibGUgcXVvdGFzIGJlbG93LlxuZXhwb3J0IHR5cGUgUXVvdGFUeXBlID1cbiAgfCAncGx1Z2lucycgfCAncGlwZWxpbmVzJyB8ICdhcGlDYWxscycgfCAnYXV0b21hdGlvbkNhbGxzJyB8ICdhaUNhbGxzJyB8ICdzdG9yYWdlQnl0ZXMnXG4gIHwgJ2NwdUNyZWRpdHMnXG4gIHwgJ2Rhc2hib2FyZHMnIHwgJ2FsZXJ0UnVsZXMnIHwgJ2FsZXJ0RGVzdGluYXRpb25zJyB8ICdpZHBDb25maWdzJ1xuICB8ICdsaXN0aW5ncyc7XG5cbi8qKlxuICogVmFsaWQgcXVvdGEgdHlwZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJRF9RVU9UQV9UWVBFUyA9IFtcbiAgJ3BsdWdpbnMnLCAncGlwZWxpbmVzJywgJ2FwaUNhbGxzJywgJ2F1dG9tYXRpb25DYWxscycsICdhaUNhbGxzJywgJ3N0b3JhZ2VCeXRlcycsXG4gICdjcHVDcmVkaXRzJyxcbiAgJ2Rhc2hib2FyZHMnLCAnYWxlcnRSdWxlcycsICdhbGVydERlc3RpbmF0aW9ucycsICdpZHBDb25maWdzJyxcbiAgJ2xpc3RpbmdzJyxcbl0gYXMgY29uc3Q7XG5cbi8qKlxuICogSHVtYW4gbGFiZWwgZm9yIGVhY2ggcXVvdGEgdHlwZSwgc2luZ3VsYXIg4oCUIHRoZSBvbmUgc3BlbGxpbmcgZXZlcnkgNDI5IGJvZHksXG4gKiBub3RpZmljYXRpb24gYW5kIGRhc2hib2FyZCB1c2VzIChcIkFQSSBjYWxsIHF1b3RhIHJlYWNoZWQg4oCmXCIpLlxuICpcbiAqIERFUklWRUQgZnJvbSBgdHlwZXMvcXVvdGEtY2F0YWxvZy50c2AsIHdoaWNoIGlzIHRoZSBvbmUgcGxhY2UgYSBxdW90YSB0eXBlJ3NcbiAqIGRpc3BsYXkgZmFjdHMgbGl2ZSBhbmQgdGhlIG9uZSB0aGUgYnJvd3NlciBpbXBvcnRzIGRpcmVjdGx5LiBUaGlzIHN0YXlzIGhlcmVcbiAqIGFzIHRoZSBzZXJ2ZXItc2lkZSBuYW1lIGJlY2F1c2UgZXZlcnkgc2VydmljZSBhbHJlYWR5IHJlYWRzIGl0IGZyb20gdGhlXG4gKiBiYXJyZWw7IGl0IGlzIGEgcHJvamVjdGlvbiBvZiB0aGUgY2F0YWxvZywgbm90IGEgc2Vjb25kIGNvcHkgb2YgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBRVU9UQV9UWVBFX0xBQkVMUzogUmVhZG9ubHk8UmVjb3JkPFF1b3RhVHlwZSwgc3RyaW5nPj4gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIChPYmplY3QuZW50cmllcyhRVU9UQV9DQVRBTE9HKSBhcyBBcnJheTxbUXVvdGFUeXBlLCB7IGxhYmVsOiBzdHJpbmcgfV0+KS5tYXAoKFt0eXBlLCBtZXRhXSkgPT4gW3R5cGUsIG1ldGEubGFiZWxdKSxcbikgYXMgUmVhZG9ubHk8UmVjb3JkPFF1b3RhVHlwZSwgc3RyaW5nPj47XG5cbi8qKlxuICogV2hlcmUgYSBwZXJzb24gZ29lcyB0byByYWlzZSBhIGxpbWl0LiBSZWxhdGl2ZSBvbiBwdXJwb3NlOiB0aGUgZGFzaGJvYXJkIGFuZFxuICogdGhlIEFQSSBzaGFyZSBhbiBvcmlnaW4gYmVoaW5kIG5naW54LCBhbmQgYSBDTEkgLyBMYW1iZGEgdGhhdCByZW5kZXJzIGEgNDI5XG4gKiBwcmVmaXhlcyBpdCB3aXRoIHRoZSBwbGF0Zm9ybSBVUkwgaXQgYWxyZWFkeSB0YWxrcyB0by5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVT1RBX1VQR1JBREVfUEFUSCA9ICcvZGFzaGJvYXJkL2JpbGxpbmcnO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhIHZhbGlkIFF1b3RhVHlwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZhbGlkIFF1b3RhVHlwZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpZiAoaXNWYWxpZFF1b3RhVHlwZShyZXEuYm9keS5xdW90YVR5cGUpKSB7XG4gKiAgIC8vIHF1b3RhVHlwZSBpcyBndWFyYW50ZWVkIHRvIGJlIFF1b3RhVHlwZVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUXVvdGFUeXBlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUXVvdGFUeXBlIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVkFMSURfUVVPVEFfVFlQRVMuaW5jbHVkZXModmFsdWUgYXMgUXVvdGFUeXBlKTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgZnJvbSBxdW90YSBjaGVjayBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFDaGVja1Jlc3VsdCB7XG4gIC8qKiBXaGV0aGVyIHRoZSByZXF1ZXN0IGlzIGFsbG93ZWQgKi9cbiAgYWxsb3dlZDogYm9vbGVhbjtcbiAgLyoqIE1heGltdW0gcXVvdGEgbGltaXQgKC0xIGZvciB1bmxpbWl0ZWQpICovXG4gIGxpbWl0OiBudW1iZXI7XG4gIC8qKiBDdXJyZW50IHVzYWdlIGNvdW50ICovXG4gIHVzZWQ6IG51bWJlcjtcbiAgLyoqIFJlbWFpbmluZyBxdW90YSAoLTEgZm9yIHVubGltaXRlZCkgKi9cbiAgcmVtYWluaW5nOiBudW1iZXI7XG4gIC8qKiBJU08gdGltZXN0YW1wIHdoZW4gcXVvdGEgcmVzZXRzICovXG4gIHJlc2V0QXQ6IHN0cmluZztcbiAgLyoqIFdoZXRoZXIgcXVvdGEgaXMgdW5saW1pdGVkICovXG4gIHVubGltaXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgT05MWSB3aGVuIHRoaXMgcmVzdWx0IGlzIHRoZSBmYWlsLW9wZW4gc2VudGluZWwgcmV0dXJuZWQgYmVjYXVzZSB0aGVcbiAgICogcXVvdGEgc2VydmljZSB3YXMgdW5yZWFjaGFibGUgLyByZXR1cm5lZCBub24tb2sgKG5vdCBhIHJlYWwgcXVvdGEgcmVhZGluZykuXG4gICAqIExldHMgZmFpbC1jbG9zZWQgY2FsbGVycyAoZS5nLiB0aGUgcmVnaXN0cnkgc3RvcmFnZSBwdXNoLWdhdGUpIGRpc3Rpbmd1aXNoXG4gICAqIGFuIG91dGFnZSBmcm9tIGEgZ2VudWluZSBgbGltaXQ6IC0xYCAodW5saW1pdGVkKSBvcmcuIEFic2VudCBvbiByZWFsIHJlc3VsdHMuXG4gICAqL1xuICBmYWlsT3Blbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUXVvdGEgaW5mb3JtYXRpb24gZm9yIGVycm9yIHJlc3BvbnNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YUluZm8ge1xuICB0eXBlOiBRdW90YVR5cGU7XG4gIGxpbWl0OiBudW1iZXI7XG4gIHVzZWQ6IG51bWJlcjtcbiAgcmVtYWluaW5nOiBudW1iZXI7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQVBJIHN1Y2Nlc3MgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU3VjY2Vzc1Jlc3BvbnNlPFQgPSB1bmtub3duPiB7XG4gIHN1Y2Nlc3M6IHRydWU7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgZGF0YT86IFQ7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgQVBJIGVycm9yIHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUVycm9yUmVzcG9uc2Uge1xuICBzdWNjZXNzOiBmYWxzZTtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGRldGFpbHM/OiB1bmtub3duO1xuICBxdW90YT86IFF1b3RhSW5mbztcbn1cblxuLyoqXG4gKiBDb21iaW5lZCBBUEkgcmVzcG9uc2UgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpUmVzcG9uc2U8VCA9IHVua25vd24+ID0gQXBpU3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgQXBpRXJyb3JSZXNwb25zZTtcblxuLyoqXG4gKiBKV1QgcGF5bG9hZCBmcm9tIGFjY2VzcyB0b2tlbnMuXG4gKlxuICogVXNlcnMgY2FuIGJlbG9uZyB0byBtdWx0aXBsZSBvcmdhbml6YXRpb25zLiBUaGUgdG9rZW4gaXMgc2NvcGVkIHRvIG9uZVxuICogYWN0aXZlIG9yZ2FuaXphdGlvbiBhdCBhIHRpbWUuIFRoZSBgcm9sZWAgZmllbGQgaXMgdGhlIHVzZXIncyBwZXItb3JnXG4gKiByb2xlIGluIHRoYXQgb3JnYW5pemF0aW9uIChmcm9tIHRoZSBVc2VyT3JnYW5pemF0aW9uIGp1bmN0aW9uIGNvbGxlY3Rpb24pLFxuICogYW5kIGBpc0FkbWluYCBpcyBkZXJpdmVkIGFzIGByb2xlID09PSAnYWRtaW4nIHx8IHJvbGUgPT09ICdvd25lcidgLlxuICpcbiAqIFVzZSBgUE9TVCAvYXV0aC9zd2l0Y2gtb3JnYCB0byBjaGFuZ2UgdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24sIHdoaWNoXG4gKiByZS1pc3N1ZXMgdG9rZW5zIHdpdGggdGhlIG5ldyBvcmcncyByb2xlIGFuZCBjb250ZXh0LlxuICovXG4vKipcbiAqIENvYXJzZSBwZXItb3JnIG1lbWJlcnNoaXAgbGFiZWwsIERFUklWRUQgZnJvbSB0aGUgUm9sZXMgYSB1c2VyIGlzIGFzc2lnbmVkXG4gKiAodGhlIGhpZ2hlc3QgYGdyYW50c1JvbGVgIGFtb25nIHRoZW07IGBvd25lcmAgaXMgc2V0IG9ubHkgYnkgb3duZXJzaGlwXG4gKiB0cmFuc2ZlcikuIEl0IGlzIGEgZGlzcGxheS9hdXRob3JpdHkgbGFiZWwg4oCUIGRyaXZpbmcgYGlzQWRtaW5gLCBvd25lcnNoaXAsXG4gKiBhbmQgc2VhdCBhY2NvdW50aW5nIOKAlCBOT1QgYSBwZXJtaXNzaW9uIHNvdXJjZS4gRWZmZWN0aXZlIHBlcm1pc3Npb25zIGNvbWVcbiAqIHNvbGVseSBmcm9tIHRoZSB1c2VyJ3MgYXNzaWduZWQgUm9sZXMgKHNlZSBgcmVzb2x2ZVVzZXJQZXJtaXNzaW9uc2ApLiBOb3QgYVxuICogZ2xvYmFsIHJvbGUuXG4gKi9cbmV4cG9ydCB0eXBlIE9yZ1JvbGUgPSAnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEp3dFBheWxvYWQge1xuICAvKiogVXNlciBJRCAoc3ViamVjdCkgKi9cbiAgc3ViOiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSAqL1xuICB1c2VybmFtZTogc3RyaW5nO1xuICAvKiogVXNlciBlbWFpbCAqL1xuICBlbWFpbDogc3RyaW5nO1xuICAvKiogV2hpY2gga2luZCBvZiBwcmluY2lwYWwgdGhpcyB0b2tlbiBzcGVha3MgZm9yIChzZWUge0BsaW5rIFByaW5jaXBhbFR5cGV9KS4gKi9cbiAgcHJpbmNpcGFsVHlwZTogUHJpbmNpcGFsVHlwZTtcbiAgLyoqIEhvdyB0aGUgdG9rZW4gaXMgdXNlZCAoc2VlIHtAbGluayBUb2tlblVzZX0pOyBQQVRzIGFyZSBgYXBpX2tleWAuICovXG4gIHRva2VuX3VzZTogVG9rZW5Vc2U7XG4gIC8qKlxuICAgKiBNZXRob2RzIHRoYXQgYXV0aGVudGljYXRlZCB0aGUgc2Vzc2lvbiAodXNlciBwcmluY2lwYWxzKS4gS2VwdCBvbiB0aGVcbiAgICogcmVmcmVzaC1zZXNzaW9uIHNsb3QsIHNvIHJlZnJlc2ggLyByZW5ldyAvIHN3aXRjaC1vcmcgY2FycnkgaXQgdW5jaGFuZ2VkLlxuICAgKiBBYnNlbnQgb24gc2VydmljZSB0b2tlbnMuXG4gICAqL1xuICBhbXI/OiBBdXRoTWV0aG9kW107XG4gIC8qKiBBc3N1cmFuY2UgbGV2ZWwgKHVzZXIgcHJpbmNpcGFscykuIE5ldmVyIHJhaXNlZCBieSByZWZyZXNoIC8gcmVuZXcgLyBzd2l0Y2gtb3JnLiAqL1xuICBhYWw/OiBBc3N1cmFuY2VMZXZlbDtcbiAgLyoqIEVwb2NoIHNlY29uZHMgb2YgdGhlIHNpZ24taW4gdGhhdCBlc3RhYmxpc2hlZCB0aGUgc2Vzc2lvbiAodXNlciBwcmluY2lwYWxzKS5cbiAgICogIE5ldmVyIHJlc2V0IGJ5IHJlZnJlc2ggLyByZW5ldyAvIHN3aXRjaC1vcmcuICovXG4gIGF1dGhfdGltZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhY3RpdmUgb3JnIFJFUVVJUkVTIE1GQSBhbmQgaXRzIGdyYWNlIHBlcmlvZCBoYXMgcGFzc2VkLlxuICAgKlxuICAgKiBDYXJyaWVkIGFzIGEgY2xhaW0gc28gbm8gc2VydmljZSBoYXMgdG8gbG9vayB0aGUgcG9saWN5IHVwOiB0aGUgb3JnIHBvbGljeVxuICAgKiBpcyBlbmZvcmNlZCB3aGVyZSB0aGUgdG9rZW4gaXMgSVNTVUVEIChhIHNlc3Npb24gc2NvcGVkIHRvIHN1Y2ggYW4gb3JnIGdldHNcbiAgICogYGFhbDogMmAgb3IgaXMgcmVmdXNlZCksIGFuZCB0aGlzIGNsYWltIGlzIHRoZSByZWNvcmQgb2YgdGhhdCBkZWNpc2lvbiwgZm9yXG4gICAqIFVJIGNvcHkgYW5kIGF1ZGl0IHJhdGhlciB0aGFuIGZvciBhIHNlY29uZCBlbmZvcmNlbWVudCBwb2ludC5cbiAgICovXG4gIG1mYVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBhY3RpdmUgb3JnJ3MgXCJhZG1pbmlzdHJhdGl2ZSBhY3Rpb25zIHJlcXVpcmUgTUZBXCIgcG9saWN5XG4gICAqIChgYWRtaW5BY3Rpb25zUmVxdWlyZU1mYWAsIHN0cmljdGVzdCBhY3Jvc3MgdGhlIG9yZyBhbmQgaXRzIGFuY2VzdG9ycykuXG4gICAqIFByZXNlbnQg4oCUIGFuZCBhbHdheXMgYDJgIOKAlCBvbmx5IHdoZW4gdGhlIHBvbGljeSBpcyBvbi4gSXQgaXMgcmVzb2x2ZWQgd2hlblxuICAgKiB0aGUgdG9rZW4gaXMgSVNTVUVELCBzbyBzZXJ2aWNlcyB0aGF0IGNhbid0IHJlYWQgdGhlIG9yZyBkb2N1bWVudCBzdGlsbCBrbm93XG4gICAqIHRoZSBwb2xpY3k6IGByZXF1aXJlT3JnQWRtaW5Bc3N1cmFuY2VgIHJlZnVzZXMgYW4gYGFhbDogMWAgc2Vzc2lvbiBvbiBhblxuICAgKiBhZG1pbmlzdHJhdGl2ZSByb3V0ZSB3aGVuIHRoaXMgY2xhaW0gaXMgcHJlc2VudC4gQ2hhbmdpbmcgdGhlIHBvbGljeSBidW1wc1xuICAgKiBldmVyeSBhZmZlY3RlZCBtZW1iZXIncyBgdG9rZW5WZXJzaW9uYCwgc28gdGhlIGNsYWltIGNhbid0IGdvIHN0YWxlLlxuICAgKi9cbiAgb3JnX2FkbWluX2FhbD86IDI7XG4gIC8qKlxuICAgKiBCT09UU1RSQVAtQURNSU4gRVhDRVBUSU9OLiBTZXQgb25seSBvbiBhIHNlc3Npb24gb3BlbmVkIGJ5XG4gICAqIHRoZSBpbnN0YWxsJ3MgYm9vdHN0cmFwIGFkbWluIChgQk9PVFNUUkFQX1NVUEVSQURNSU5fRU1BSUxTYCwgc3lzdGVtIG9yZylcbiAgICogd2hpbGUgdGhleSBzdGlsbCBoYXZlIG5vIGVucm9sbGVkIGZhY3Rvci4gU3VjaCBhIHNlc3Npb24gaXMgYGFhbDogMWAgYW5kIG1heVxuICAgKiByZWFjaCBPTkxZIGVucm9sbWVudCwgc2lnbi1vdXQgYW5kIHRoZSByb3V0ZXMgYGluaXQtcGxhdGZvcm0uc2hgIGNhbGxzO1xuICAgKiBldmVyeSBvdGhlciBzZXJ2aWNlIHJlZnVzZXMgaXQgb3V0cmlnaHQgKHNlZSBgcmVxdWlyZUF1dGhgKS4gVGhlIGV4Y2VwdGlvblxuICAgKiBjbG9zZXMgcGVybWFuZW50bHkgYXQgdGhlIGZpcnN0IGVucm9sbWVudCBhbmQgbmV2ZXIgcmVvcGVucy5cbiAgICovXG4gIG1mYUVucm9sbG1lbnRQZW5kaW5nPzogYm9vbGVhbjtcbiAgLyoqIFBlci1vcmcgcm9sZSBpbiB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiAoJ293bmVyJyB8ICdhZG1pbicgfCAnbWVtYmVyJykuIE5vdCBhIGdsb2JhbCByb2xlLiAqL1xuICByb2xlOiBPcmdSb2xlO1xuICAvKiogRGVyaXZlZDogdHJ1ZSB3aGVuIHJvbGUgaXMgJ2FkbWluJyBvciAnb3duZXInIGluIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uICovXG4gIGlzQWRtaW4/OiBib29sZWFuO1xuICAvKipcbiAgICogUmVzb2x2ZWQgZmluZS1ncmFpbmVkIHBlcm1pc3Npb25zIGZvciB0aGUgYWN0aXZlIG9yZy90ZWFtIOKAlCB0aGUgdW5pb24gb2ZcbiAgICogdGhlIHBlcm1pc3Npb25zIGNhcnJpZWQgYnkgZXZlcnkgUm9sZSB0aGUgdXNlciBpcyBhc3NpZ25lZCAoc2VlXG4gICAqIGByZXNvbHZlVXNlclBlcm1pc3Npb25zYCkuIEFic2VudCBvbiBtYWNoaW5lL3Njb3BlZCB0b2tlbnMuIFN1cGVyYWRtaW5zIGFyZVxuICAgKiBncmFudGVkIGFsbCBwZXJtaXNzaW9ucyBpbXBsaWNpdGx5IGFuZCBtYXkgb21pdCB0aGlzLiBFbmRwb2ludHMgZW5mb3JjZSB2aWFcbiAgICogYHJlcXVpcmVQZXJtaXNzaW9uKC4uLilgLlxuICAgKi9cbiAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gIC8qKlxuICAgKiBHbG9iYWwgc3VwZXItYWRtaW4gZmxhZyAoY3Jvc3Mtb3JnKS4gV2hlbiBgdHJ1ZWAsIHRoZSB1c2VyIGlzIHRyZWF0ZWRcbiAgICogYXMgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvciByZWdhcmRsZXNzIG9mIHdoaWNoIG9yZyB0aGV5J3JlIGN1cnJlbnRseVxuICAgKiBhY3RpbmcgdW5kZXIuIFRoaXMgaXMgdGhlIFNPTEUgc2lnbmFsIGZvciBzeXNhZG1pbiBhdXRob3JpdHkg4oCUIG1lbWJlcnNoaXAgaW5cbiAgICogdGhlIHdlbGwta25vd24gXCJzeXN0ZW1cIiBvcmcgZ3JhbnRzIG5vdGhpbmcsIGJlY2F1c2UgdGhhdCB3b3VsZCBjb25mbGF0ZVxuICAgKiBcIlBpcGVsaW5lIEJ1aWxkZXIgb3BlcmF0b3JcIiB3aXRoIFwiY3VzdG9tZXIgdGVuYW50XCIgaW4gdGhlIGRhdGEgbW9kZWwuXG4gICAqL1xuICBpc1N1cGVyQWRtaW4/OiBib29sZWFuO1xuICAvKiogT3JnYW5pemF0aW9uJ3MgcXVvdGEgdGllci4gKi9cbiAgdGllcj86IFF1b3RhVGllcjtcbiAgLyoqIFJlc29sdmVkIGZlYXR1cmUgZmxhZ3MgZm9yIHRoaXMgdXNlci9vcmcgKi9cbiAgZmVhdHVyZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE5hcnJvdyBjYXBhYmlsaXR5IHNjb3BlIGZvciBtYWNoaW5lL2F1dG9tYXRpb24gdG9rZW5zIChlLmcuXG4gICAqIGAncmVwb3J0aW5nOmluZ2VzdCdgKS4gQWJzZW50IG9uIG5vcm1hbCBpbnRlcmFjdGl2ZSB1c2VyIHRva2Vucy4gRW5kcG9pbnRzXG4gICAqIHRoYXQgYWNjZXB0IGEgc2NvcGVkIGlkZW50aXR5IGNoZWNrIHRoaXMgKHNlZSBgaGFzU2NvcGVgKSBpbnN0ZWFkIG9mIHJvbGU7XG4gICAqIGEgc2NvcGVkIHRva2VuIGlzIG1pbnRlZCB3aXRoIG1pbmltYWwgcm9sZSBmb3IgbGVhc3QtcHJpdmlsZWdlLlxuICAgKi9cbiAgc2NvcGU/OiBUb2tlblNjb3BlO1xuICAvKipcbiAgICogVGhlIHRva2VuJ3MgYHBlcm1pc3Npb25zYCB3ZXJlIE5BUlJPV0VEIHRvIGEgY2F0YWxvZyBzdWJzZXQgY2hvc2VuIHdoZW4gdGhlXG4gICAqIGNyZWRlbnRpYWwgd2FzIGNyZWF0ZWQgKGEgcGVybWlzc2lvbi1zY29wZWQgcGVyc29uYWwgYWNjZXNzIGtleSBvciBtYWNoaW5lXG4gICAqIHRva2VuKS4gVGhlIGNsYWltIGlzIHRoZSByZWNvcmQgdGhhdCBgcGVybWlzc2lvbnNgIGlzIHRoZSBJTlRFUlNFQ1RJT04gb2ZcbiAgICogdGhhdCBzdWJzZXQgd2l0aCB0aGUgaG9sZGVyJ3MgY3VycmVudCBSb2xlcyDigJQgbm90IHRoZWlyIGZ1bGwgYXV0aG9yaXR5IOKAlCBzb1xuICAgKiBhbnl0aGluZyB0aGUgdG9rZW4gbWludHMgY2FuIG9ubHkgYmUgbmFycm93ZXIgc3RpbGwsIGFuZCBpdCBuZXZlciBjYXJyaWVzXG4gICAqIGBpc1N1cGVyQWRtaW5gIG9yIGFuIGFkbWluIGByb2xlYCAoYm90aCB3b3VsZCBieXBhc3MgdGhlIHN1YnNldCkuIE9ubHkgZXZlclxuICAgKiBgdHJ1ZWA7IGFic2VudCBvbiB1bnJlc3RyaWN0ZWQgdG9rZW5zLlxuICAgKi9cbiAgcGVybWlzc2lvbnNSZXN0cmljdGVkPzogYm9vbGVhbjtcbiAgLyoqIEFjdGl2ZSBvcmdhbml6YXRpb24gSUQgKGZyb20gVXNlck9yZ2FuaXphdGlvbiBtZW1iZXJzaGlwKSAqL1xuICBvcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqIEFjdGl2ZSBvcmdhbml6YXRpb24gbmFtZSAqL1xuICBvcmdhbml6YXRpb25OYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogT3JnIOKGkiB0ZWFtIGhpZXJhcmNoeSAob3JnLXRlYW0taGllcmFyY2h5IHByb3Bvc2FsLCBwaGFzZSAxKS5cbiAgICogYHBhcmVudE9yZ2FuaXphdGlvbklkYCBpcyB0aGUgYWN0aXZlIG9yZydzIGRpcmVjdCBwYXJlbnQ7IGByb290T3JnYW5pemF0aW9uSWRgXG4gICAqIGlzIHRoZSB0b3Agb2YgaXRzIGFuY2VzdHJ5IGNoYWluLiBCb3RoIGFyZSAqKm9taXR0ZWQgZm9yIGZsYXQgKHJvb3QpIG9yZ3MqKiDigJRcbiAgICogY29uc3VtZXJzIHNob3VsZCB0cmVhdCB0aGUgZWZmZWN0aXZlIHJvb3QgYXMgYHJvb3RPcmdhbml6YXRpb25JZCA/PyBvcmdhbml6YXRpb25JZGBcbiAgICogKHVzZSB0aGUgc2hhcmVkIHtAbGluayBlZmZlY3RpdmVSb290T3JnSWR9IGFjY2Vzc29yIHJhdGhlciB0aGFuIGNvYWxlc2NpbmcgaW5saW5lKS5cbiAgICogQ3VycmVudGx5IGV2ZXJ5IG9yZyBpcyBmbGF0LCBzbyB0aGVzZSBhcmUgYWJzZW50IG9uIGFsbCB0b2tlbnMgdG9kYXkuXG4gICAqL1xuICBwYXJlbnRPcmdhbml6YXRpb25JZD86IHN0cmluZztcbiAgLyoqIFJvb3Qgb3JnYW5pemF0aW9uIElEIG9mIHRoZSBhY3RpdmUgb3JnJ3MgYW5jZXN0cnkgY2hhaW4gKHNlZSBgcGFyZW50T3JnYW5pemF0aW9uSWRgKS4gKi9cbiAgcm9vdE9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKipcbiAgICogU2V0IG9uIHRva2VucyBpc3N1ZWQgYnkgdGhlIHN5c2FkbWluIGltcGVyc29uYXRpb24gZmxvd1xuICAgKiAoYFBPU1QgL2FkbWluL2ltcGVyc29uYXRlLzp1c2VySWRgKS4gQ2FycmllcyB0aGUgb3JpZ2luYWwgc3lzYWRtaW4nc1xuICAgKiB1c2VyIGlkIHNvIGF1ZGl0IGV2ZW50cyBzdGlsbCBhdHRyaWJ1dGUgYWN0aW9ucyBjb3JyZWN0bHkuXG4gICAqL1xuICBpbXBlcnNvbmF0b3JJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFVuaXF1ZSB0b2tlbiBpZC4gT24gYW4gaW1wZXJzb25hdGlvbiB0b2tlbiBpdCBpZGVudGlmaWVzIHRoZSBTRVNTSU9OLCBzbyBpdFxuICAgKiBjYW4gYmUgcmV2b2tlZCBvbiBpdHMgb3duIGFjcm9zcyBldmVyeSBzZXJ2aWNlIChzZWVcbiAgICogYFRva2VuUmV2b2NhdGlvblN0b3JlLmdldFNlc3Npb25SZXZvY2F0aW9uYCkuIFBlcnNvbmFsIEFjY2VzcyBUb2tlbnNcbiAgICogKGB0b2tlbl91c2U6ICdhcGlfa2V5J2ApIGNhcnJ5IG9uZSB0b28sIHZhbGlkYXRlZCBhZ2FpbnN0IHRoZWlyIG93biByZWNvcmQuXG4gICAqIEEgYGp0aWAgYWxvbmUgbmV2ZXIgY2xhc3NpZmllcyBhIHRva2VuIOKAlCBgdG9rZW5fdXNlYCBhbmQgYGltcGVyc29uYXRvcklkYCBkby5cbiAgICovXG4gIGp0aT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHRva2VuIGlzIHJlYWQtb25seSDigJQgYW55IG5vbi1HRVQgcmVxdWVzdCBpcyByZWplY3RlZFxuICAgKiB1cHN0cmVhbSBieSB0aGUgcGxhdGZvcm0ncyByZWFkLW9ubHkgaW1wZXJzb25hdGlvbiBnYXRlLiBMZXRzXG4gICAqIHN5c2FkbWlucyBcInZpZXcgYXMgdXNlciBYXCIgd2l0aG91dCByaXNraW5nIGEgZGVzdHJ1Y3RpdmUgYWN0aW9uLlxuICAgKi9cbiAgaW1wZXJzb25hdGlvblJlYWRPbmx5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSByZWZyZXNoLXNlc3Npb24gc2xvdCAoaW50ZXJhY3RpdmUgb3IgbWFjaGluZSkgdGhpcyBhY2Nlc3MgdG9rZW4gd2FzXG4gICAqIG1pbnRlZCB3aXRoLiBSZXZva2luZyB0aGF0IE9ORSBzbG90IHB1Ymxpc2hlcyBgcmV2b2tlOnNpZDo8c2lkPmAgKHNlZVxuICAgKiBgY3JlZGVudGlhbFJldm9jYXRpb25LZXlgKSwgd2hpY2ggZXZlcnkgc2VydmljZSBjaGVja3MgaW4gYHJlcXVpcmVBdXRoYCwgc29cbiAgICogYSBzaW5nbGUgc2lnbmVkLW91dCBkZXZpY2UgLyBtYWNoaW5lIGNyZWRlbnRpYWwgc3RvcHMgd29ya2luZyBldmVyeXdoZXJlXG4gICAqIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgYXQgbmF0dXJhbCBleHBpcnkuIEFic2VudCBvbiBQQVRzIGFuZCBpbXBlcnNvbmF0aW9uLlxuICAgKi9cbiAgc2lkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGFjY2VzcyBrZXkgKFBBVCAvIHNlcnZpY2UtYWNjb3VudCBrZXkgaWQpIHRoaXMgdG9rZW4gd2FzIERFUklWRUQgZnJvbSxcbiAgICogd2hlbiBpdCBpcyBub3QgaXRzZWxmIHRoZSBleGNoYW5nZWQga2V5IHRva2VuICh3aG9zZSBrZXkgaWQgaXMgaXRzIGBqdGlgKSDigJRcbiAgICogZS5nLiBhIHN3aXRjaC1vcmcgb3IgZ2VuZXJhdGUtdG9rZW4gbWludCBtYWRlIHdoaWxlIGhvbGRpbmcgYW4gZXhjaGFuZ2VkXG4gICAqIGtleSB0b2tlbi4gUmV2b2tpbmcgdGhlIGtleSBwdWJsaXNoZXMgYHJldm9rZTprZXk6PGtleUlkPmAsIHdoaWNoIHJlamVjdHNcbiAgICogZXZlcnkgdG9rZW4gdGhhdCBuYW1lcyBpdCBoZXJlIG9yIGFzIGl0cyBganRpYC5cbiAgICovXG4gIHBhcmVudEtleUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogU0VSVklDRSB0b2tlbnMgb25seTogdGhpcyBhdWRpdCBkZWxpdmVyeSBtYXkgcmVjb3JkIGFuIGBhZmZlY3RlZE9yZ0lkYFxuICAgKiBvdXRzaWRlIHRoZSB0b2tlbidzIG9yZyAoc2VlIGBTZXJ2aWNlVG9rZW5PcHRpb25zLmF1ZGl0Q3Jvc3NPcmdgKS4gSG9ub3VyZWRcbiAgICogYnkgcGxhdGZvcm0ncyBgL2F1ZGl0L2V2ZW50c2AgaW5nZXN0IGFsb25lLlxuICAgKi9cbiAgYXVkaXRDcm9zc09yZz86IHRydWU7XG4gIC8qKlxuICAgKiBUaGUgdXNlcidzIEFDQ0VTUyB2ZXJzaW9uIGF0IHRoZSBtb21lbnQgdGhpcyB0b2tlbiB3YXMgaXNzdWVkOiB0aGUgaGFyZFxuICAgKiBgdG9rZW5WZXJzaW9uYCAoZGVhY3RpdmF0ZSAvIHBhc3N3b3JkIGNoYW5nZSAvIGxvZ291dC1hbGwg4oCUIGNsZWFycyBzbG90cylcbiAgICogcGx1cyBgY2xhaW1zVmVyc2lvbmAgKHJvbGUsIHRpZXIsIG1lbWJlcnNoaXAgb3Igb3duZXJzaGlwIGNoYW5nZXMg4oCUIHJlLW1pbnRlZFxuICAgKiBvbiByZWZyZXNoKS4gQm90aCBvbmx5IGdyb3csIHNvIGEgdG9rZW4gd2hvc2UgZW1iZWRkZWQgdmVyc2lvbiBpcyBiZWhpbmQgdGhlXG4gICAqIGN1cnJlbnQgb25lIGhhcyBiZWVuIFJFVk9LRUQuIFBsYXRmb3JtIHZhbGlkYXRlcyB0aGlzIGFnYWluc3QgTW9uZ287IHRoZVxuICAgKiBzdGF0ZWxlc3Mgc2VydmljZXMgdmFsaWRhdGUgaXQgYWdhaW5zdCBhIFJlZGlzLXB1Ymxpc2hlZCBjdXJyZW50LXZlcnNpb25cbiAgICogc3RvcmUgKHNlZSBgc2V0VG9rZW5SZXZvY2F0aW9uU3RvcmVgKS4gQWJzZW50IG9uIG1hY2hpbmUvc2VydmljZSB0b2tlbnMuXG4gICAqL1xuICB0b2tlblZlcnNpb24/OiBudW1iZXI7XG4gIC8qKiBUb2tlbiB0eXBlICovXG4gIHR5cGU6ICdhY2Nlc3MnIHwgJ3JlZnJlc2gnO1xuICAvKiogSXNzdWVkIGF0IHRpbWVzdGFtcCAqL1xuICBpYXQ/OiBudW1iZXI7XG4gIC8qKiBFeHBpcmF0aW9uIHRpbWVzdGFtcCAqL1xuICBleHA/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGFjY291bnQgYm91bmRhcnkgKHJvb3Qgb3JnKSBmb3IgYSB0b2tlbidzIGFjdGl2ZSBvcmcuXG4gKlxuICogVGhlIGFjY291bnQgcm9vdCBpcyBgcm9vdE9yZ2FuaXphdGlvbklkID8/IG9yZ2FuaXphdGlvbklkYDogYSBmbGF0IChyb290KSBvcmdcbiAqIG9taXRzIGByb290T3JnYW5pemF0aW9uSWRgLCBzbyBpdCBJUyBpdHMgb3duIHJvb3Q7IGEgdGVhbSAoY2hpbGQpIG9yZyBjYXJyaWVzXG4gKiB0aGUgdG9wIG9mIGl0cyBhbmNlc3RyeSBjaGFpbi4gRXZlcnkgYWNjb3VudC1zY29wZWQgcmVhZCAocXVvdGEvc2VhdC9iaWxsaW5nXG4gKiBwb29saW5nKSBtdXN0IHJlc29sdmUgdGhyb3VnaCB0aGlzIGNvYWxlc2NlIHJhdGhlciB0aGFuIHJlYWRpbmdcbiAqIGBvcmdhbml6YXRpb25JZGAgZGlyZWN0bHkg4oCUIHRoZSBsYXR0ZXIgc2lsZW50bHkgd29ya3MgdG9kYXkgKGFsbCBvcmdzIGZsYXQpXG4gKiBidXQgd291bGQgYmluZCB0byB0aGUgdGVhbSBpbnN0ZWFkIG9mIHRoZSBhY2NvdW50IG9uY2UgdGVhbXMgZXhpc3QuXG4gKlxuICogQHJldHVybnMgdGhlIGVmZmVjdGl2ZSByb290IG9yZyBpZCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBuZWl0aGVyIGZpZWxkIGlzIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVmZmVjdGl2ZVJvb3RPcmdJZChcbiAgcGF5bG9hZDogUGljazxKd3RQYXlsb2FkLCAnb3JnYW5pemF0aW9uSWQnIHwgJ3Jvb3RPcmdhbml6YXRpb25JZCc+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHBheWxvYWQucm9vdE9yZ2FuaXphdGlvbklkID8/IHBheWxvYWQub3JnYW5pemF0aW9uSWQ7XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgRXhwcmVzcyBSZXF1ZXN0IHdpdGggdXNlciBwcm9wZXJ0eS5cbiAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgRXhwcmVzcyB7XG4gICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgdXNlcj86IEp3dFBheWxvYWQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogU2VydmljZSBjb25maWd1cmF0aW9uIGZvciBpbnRlcm5hbCBIVFRQIGNsaWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgaG9zdG5hbWUgKi9cbiAgaG9zdDogc3RyaW5nO1xuICAvKiogU2VydmljZSBwb3J0ICovXG4gIHBvcnQ6IG51bWJlcjtcbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgKi9cbiAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBIZWFsdGggY2hlY2sgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2tSZXNwb25zZSB7XG4gIHN0YXR1czogJ2hlYWx0aHknIHwgJ3VuaGVhbHRoeSc7XG4gIHNlcnZpY2U6IHN0cmluZztcbiAgdGltZXN0YW1wOiBzdHJpbmc7XG4gIHVwdGltZTogbnVtYmVyO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ3Vua25vd24nPjtcbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFHdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBeUJuRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUEwQixDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQWlEakcsa0ZBQWtGO0FBQ2xGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBNkIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEcsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUF3QixDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTBCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQWdEeEc7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsY0FBYztJQUNoRixZQUFZO0lBQ1osWUFBWSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxZQUFZO0lBQzdELFVBQVU7Q0FDRixDQUFDO0FBRVg7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBd0MsTUFBTSxDQUFDLFdBQVcsQ0FDckYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQTJDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM1RSxDQUFDO0FBRXpDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQztBQUV2RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYztJQUM3QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBa0IsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUEyUEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQWtFO0lBRWxFLE9BQU8sT0FBTyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDOUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb25zLmpzJztcbmltcG9ydCB7IFFVT1RBX0NBVEFMT0cgfSBmcm9tICcuL3F1b3RhLWNhdGFsb2cuanMnO1xuaW1wb3J0IHR5cGUgeyBRdW90YVRpZXIgfSBmcm9tICcuL3F1b3RhLXRpZXJzLmpzJztcblxuLyoqXG4gKiBDYXBhYmlsaXR5IHNjb3BlIGNhdGFsb2cgZm9yIG1hY2hpbmUvYXV0b21hdGlvbiB0b2tlbnMuIEEgc2NvcGVkIHRva2VuIGNhcnJpZXNcbiAqIGV4YWN0bHkgb25lIG9mIHRoZXNlIGluc3RlYWQgb2Ygcm9sZS1iYXNlZCBwZXJtaXNzaW9uczsgZW5kcG9pbnRzIHRoYXQgYWNjZXB0IGFcbiAqIHNjb3BlZCBpZGVudGl0eSBjaGVjayBpdCB2aWEgYGhhc1Njb3BlYC4gS2VwdCBhIGNsb3NlZCB1bmlvbiAobWlycm9yaW5nXG4gKiB7QGxpbmsgUGVybWlzc2lvbn0pIHNvIGEgdHlwbyBvbiBlaXRoZXIgdGhlIG1pbnQgb3IgdGhlIGNoZWNrIHNpZGUgaXMgYSBjb21waWxlXG4gKiBlcnJvci4gQWRkIGEgdmFsdWUgaGVyZSB3aGVuIGludHJvZHVjaW5nIGEgbmV3IHNjb3BlZC10b2tlbiBzdXJmYWNlLlxuICpcbiAqIC0gYHJlcG9ydGluZzppbmdlc3RgIOKAlCB0aGUgQVdTIGV2ZW50LWluZ2VzdGlvbiBMYW1iZGEncyB3cml0ZXMgKGAvcmVwb3J0cy9ldmVudHNgLFxuICogICBgL3JlcG9ydHMvaW5nZXN0LWhlYWx0aGApIGFuZCB0aGUgaW5jaWRlbnQgd2ViaG9vay5cbiAqIC0gYHJlZ2lzdHJ5OnB1c2hgICAgIOKAlCBgZG9ja2VyIHB1c2hgIGludG8gdGhlIG93bmluZyBvcmcncyBvd24gbmFtZXNwYWNlIHZpYVxuICogICBpbWFnZS1yZWdpc3RyeSdzIGAvdG9rZW5gIGVuZHBvaW50LiBHcmFudHMgdGhlIHJhdy1pbWFnZSB3cml0ZSB0aGF0XG4gKiAgIGBwbHVnaW5zOndyaXRlYCBncmFudHMgYSBwZXJzb24sIGFuZCBub3RoaW5nIGVsc2U6IGEgc2NvcGVkIHRva2VuIGNhcnJpZXMgbm9cbiAqICAgcGVybWlzc2lvbnMsIHNvIGl0IGNhbiBuZWl0aGVyIHJlYWQgdGhlIEFQSSBub3IgcHVzaCBvdXRzaWRlIGl0cyBvcmcuXG4gKiAtIGBzY2ltYCAgICAgICAgICAgICDigJQgYW4gaWRlbnRpdHkgcHJvdmlkZXIncyBTQ0lNIDIuMCBjbGllbnQgKDNiKSBkcml2aW5nXG4gKiAgIGAvc2NpbS92Mi9Vc2Vyc2AgYW5kIGAvc2NpbS92Mi9Hcm91cHNgIGZvciB0aGUga2V5J3MgT1dOIG9yZy4gSXQgcHJvdmlzaW9uc1xuICogICBhbmQgZGVhY3RpdmF0ZXMgbWVtYmVyc2hpcHMgYW5kIG1vdmVzIHBlb3BsZSBiZXR3ZWVuIGRpcmVjdG9yeSBncm91cHM7IGl0XG4gKiAgIGNhbiBuZXZlciByZWFkIG9yIHdyaXRlIGFueXRoaW5nIGVsc2UsIGFuZCDigJQgYmVjYXVzZSBhIHNjb3BlZCB0b2tlbiBjYXJyaWVzXG4gKiAgIG5vIHBlcm1pc3Npb25zIOKAlCBpdCBjYW5ub3QgYXV0aG9yIHRoZSBncm91cCDihpIgUm9sZSBydWxlcyBpdHMgc3luY3MgcmVzb2x2ZVxuICogICB0aHJvdWdoLiBPbmx5IGEgc2VydmljZS1hY2NvdW50IGtleSBtYXkgY2FycnkgaXQ7IGEgcGVyc29uJ3MgdG9rZW4gbmV2ZXIgZG9lcy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5TY29wZSA9ICdyZXBvcnRpbmc6aW5nZXN0JyB8ICdyZWdpc3RyeTpwdXNoJyB8ICdzY2ltJztcblxuLyoqXG4gKiBSdW50aW1lIGNhdGFsb2cgb2Yge0BsaW5rIFRva2VuU2NvcGV9IChhIHVuaW9uIGlzIGVyYXNlZCBhdCBydW50aW1lKS4gVGhpcyBpc1xuICogdGhlIE9ORSBhbGxvd2xpc3QgZXZlcnkgbWludCBwYXRoIHZhbGlkYXRlcyBhZ2FpbnN0IOKAlCBwbGF0Zm9ybSdzIGtleS90b2tlblxuICogaXNzdWUgcm91dGVzIGluY2x1ZGVkIOKAlCBzbyBhIG5ldyBzY29wZSBpcyBhZGRlZCBpbiBleGFjdGx5IG9uZSBwbGFjZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRPS0VOX1NDT1BFUzogcmVhZG9ubHkgVG9rZW5TY29wZVtdID0gWydyZXBvcnRpbmc6aW5nZXN0JywgJ3JlZ2lzdHJ5OnB1c2gnLCAnc2NpbSddO1xuXG4vKipcbiAqIFdoYXQga2luZCBvZiBwcmluY2lwYWwgYSB0b2tlbiBzcGVha3MgZm9yLiBBdXRoIGRlY2lzaW9ucyBicmFuY2ggb24gdGhpcyBjbGFpbVxuICog4oCUIG5ldmVyIG9uIHRoZSBzaGFwZSBvZiBgc3ViYCBvciBvbiB3aGljaCBvcHRpb25hbCBjbGFpbXMgaGFwcGVuIHRvIGJlIHByZXNlbnQuXG4gKlxuICogLSBgdXNlcmAgICAgICAgICAgICDigJQgYSBwZXJzb24gKHNlc3Npb24sIG1hY2hpbmUgc2Vzc2lvbiwgUEFUIG9yIGltcGVyc29uYXRpb24pLlxuICogLSBgc2VydmljZV9hY2NvdW50YCDigJQgYSBub24taHVtYW4gYWNjb3VudCBvd25lZCBieSBPTkUgb3JnLCBob2xkaW5nIG9yZyBSb2xlc1xuICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBhdXRoZW50aWNhdGluZyB3aXRoIGEgYHBiX3NhX+KApmAga2V5IGV4Y2hhbmdlZCBhdFxuICogICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLiBOZXZlciBzYXRpc2ZpZXMgYW4gYXNzdXJhbmNlL3N0ZXAtdXAgZ2F0ZS5cbiAqIC0gYHNlcnZpY2VgICAgICAgICAg4oCUIGFuIGludGVybmFsIFBpcGVsaW5lIEJ1aWxkZXIgc2VydmljZSAoe0BsaW5rIHNpZ25TZXJ2aWNlVG9rZW59KS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJpbmNpcGFsVHlwZSA9ICd1c2VyJyB8ICdzZXJ2aWNlX2FjY291bnQnIHwgJ3NlcnZpY2UnO1xuXG4vKipcbiAqIEhvdyBhIHRva2VuIGlzIHVzZWQuIGBhY2Nlc3NgIGlzIGEgc2Vzc2lvbi1zdHlsZSBhY2Nlc3MgdG9rZW4gKGludGVyYWN0aXZlLFxuICogbWFjaGluZS1zZXNzaW9uIG9yIHNlcnZpY2UpOyBgYXBpX2tleWAgaXMgYSBzdGFuZGFsb25lIGNyZWRlbnRpYWwgdHJhY2tlZCBieVxuICogaXRzIG93biByZWNvcmQg4oCUIGEgUGVyc29uYWwgQWNjZXNzIFRva2VuIG9yIGEgc2VydmljZS1hY2NvdW50IGtleSwgbmFtZWQgYnlcbiAqIGBqdGlgLlxuICovXG5leHBvcnQgdHlwZSBUb2tlblVzZSA9ICdhY2Nlc3MnIHwgJ2FwaV9rZXknO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKGBhbXJgLCBSRkMgODE3NiBzdHlsZSkgdGhhdCBlc3RhYmxpc2hlZCBhIHVzZXInc1xuICogc2Vzc2lvbi4gYHB3ZGAgcGFzc3dvcmQgc2lnbi1pbjsgYG9hdXRoYCBzb2NpYWwgc2lnbi1pbiAoR29vZ2xlLCBHaXRIdWIg4oCmKTtcbiAqIGBzc29gIHBlci1vcmcgT0lEQyBzaW5nbGUgc2lnbi1vbjsgYHdlYmF1dGhuYCBhIHBhc3NrZXkgKFdlYkF1dGhuIGFzc2VydGlvblxuICogd2l0aCB1c2VyIHZlcmlmaWNhdGlvbik7IGBzdGVwdXBgIGEgc3RlcC11cCByZS12ZXJpZmljYXRpb24gdG9rZW47IGBtZmFgIGFcbiAqIHNlY29uZCBmYWN0b3Igd2FzIHByZXNlbnRlZCBhcyB3ZWxsIOKAlCB0b2RheSBhbiBhdXRoZW50aWNhdG9yLWFwcCBjb2RlIChUT1RQKVxuICogb3Igb25lIG9mIGl0cyByZWNvdmVyeSBjb2Rlcywgc28gaXQgYXBwZWFycyBBTE9OR1NJREUgdGhlIG1ldGhvZCB0aGF0XG4gKiBpZGVudGlmaWVkIHRoZSB1c2VyIChgWydwd2QnLCAnbWZhJ11gKSwgbmV2ZXIgb24gaXRzIG93bi5cbiAqL1xuZXhwb3J0IHR5cGUgQXV0aE1ldGhvZCA9ICdwd2QnIHwgJ29hdXRoJyB8ICdzc28nIHwgJ3dlYmF1dGhuJyB8ICdzdGVwdXAnIHwgJ21mYSc7XG5cbi8qKlxuICogQXV0aGVudGljYXRvciBhc3N1cmFuY2UgbGV2ZWwgb2YgdGhlIHNlc3Npb24gYSB0b2tlbiBzcGVha3MgZm9yLlxuICpcbiAqIC0gYDFgIOKAlCBvbmUgZmFjdG9yOiBhIHBhc3N3b3JkLCBhIHNvY2lhbCBzaWduLWluLCBvciBTU08gdGhyb3VnaCBhbiBJZFAgdGhlXG4gKiAgIG9yZyBoYXMgTk9UIG1hcmtlZCBhcyBlbmZvcmNpbmcgTUZBLlxuICogLSBgMmAg4oCUIE1GQS1ncmFkZTogYSBwYXNza2V5IGFzc2VydGVkIHdpdGggdXNlciB2ZXJpZmljYXRpb24sIGEgcGFzc3dvcmQgcGx1c1xuICogICBhbiBhdXRoZW50aWNhdG9yLWFwcCBjb2RlLCBvciBTU08gdGhyb3VnaCBhbiBJZFAgdGhlIG9yZyBIQVMgbWFya2VkIGFzXG4gKiAgIGVuZm9yY2luZyBNRkEgKHByb3ZpZGVycyBkb24ndCBzZW5kIGBhbXJgIHJlbGlhYmx5LCBzbyB0aGUgb3JnJ3Mgb3duXG4gKiAgIHN0YXRlbWVudCBhYm91dCBpdHMgSWRQIGlzIHRoZSBzaWduYWwpLlxuICpcbiAqIEZpeGVkIHdoZW4gdGhlIHNlc3Npb24gaXMgb3BlbmVkIGFuZCBzdG9yZWQgb24gaXRzIHJlZnJlc2gtc2Vzc2lvbiBzbG90LCBzb1xuICogcmVmcmVzaCAvIHJlbmV3YWwgLyBzd2l0Y2gtb3JnIGNvcHkgaXQgdmVyYmF0aW0gYW5kIGNhbiBuZXZlciBSQUlTRSBpdCDigJRcbiAqIGVhcm5pbmcgYWFsIDIgYWx3YXlzIG1lYW5zIGF1dGhlbnRpY2F0aW5nIGFnYWluIHdpdGggYSBzZWNvbmQgZmFjdG9yLlxuICovXG5leHBvcnQgdHlwZSBBc3N1cmFuY2VMZXZlbCA9IDEgfCAyO1xuXG4vKiogUnVudGltZSBjYXRhbG9ncyBmb3IgdGhlIGNsYWltIHVuaW9ucyBhYm92ZSAoYSB1bmlvbiBpcyBlcmFzZWQgYXQgcnVudGltZSkuICovXG5leHBvcnQgY29uc3QgUFJJTkNJUEFMX1RZUEVTOiByZWFkb25seSBQcmluY2lwYWxUeXBlW10gPSBbJ3VzZXInLCAnc2VydmljZV9hY2NvdW50JywgJ3NlcnZpY2UnXTtcbmV4cG9ydCBjb25zdCBUT0tFTl9VU0VTOiByZWFkb25seSBUb2tlblVzZVtdID0gWydhY2Nlc3MnLCAnYXBpX2tleSddO1xuZXhwb3J0IGNvbnN0IEFVVEhfTUVUSE9EUzogcmVhZG9ubHkgQXV0aE1ldGhvZFtdID0gWydwd2QnLCAnb2F1dGgnLCAnc3NvJywgJ3dlYmF1dGhuJywgJ3N0ZXB1cCcsICdtZmEnXTtcblxuLyoqXG4gKiBRdW90YSB0eXBlIGlkZW50aWZpZXJzLlxuICpcbiAqIC0gYHBsdWdpbnNgIC8gYHBpcGVsaW5lc2Ag4oCUIGNvdW50IG9mIGNyZWF0ZWQgZW50aXRpZXNcbiAqIC0gYGFwaUNhbGxzYCDigJQgZ2VuZXJpYyBBUEkgY2FsbCBjb3VudCAocmVhZC1oZWF2eSBwYXRocykgbWFkZSBieSBQRU9QTEUgaW5cbiAqICAgSU5URVJBQ1RJVkUgU0VTU0lPTlMuIFBlcnNvbmFsIGFjY2VzcyB0b2tlbnMgYXJlIE5PVCBoZXJlOiB0aGlzIGVudHJ5IHVzZWRcbiAqICAgdG8gc2F5IHRoZXkgd2VyZSwgYW5kIHtAbGluayBtZXRlcmVkUXVvdGFUeXBlRm9yfSBzYXlzIG90aGVyd2lzZS5cbiAqIC0gYGF1dG9tYXRpb25DYWxsc2Ag4oCUIHRoZSBzYW1lIG1ldGVyZWQgQVBJIGNhbGxzIHdoZW4gdGhlIGNhbGxlciBpcyBub3QgYW5cbiAqICAgaW50ZXJhY3RpdmUgc2Vzc2lvbjogYW4gT1JHIFNFUlZJQ0UgQUNDT1VOVFxuICogICAoYHByaW5jaXBhbFR5cGU6ICdzZXJ2aWNlX2FjY291bnQnYCDigJQgcGxhdGZvcm0tYXV0b21hdGlvbixcbiAqICAgcGlwZWxpbmUtcmVnaXN0ZXIsIHJlcG9ydGluZy1pbmdlc3QgYW5kIHJlZ2lzdHJ5LXB1c2gga2V5cyksIGEgUEVSU09OQUxcbiAqICAgQUNDRVNTIEtFWSAoYHRva2VuX3VzZTogJ2FwaV9rZXknYCksIG9yIGFueSB0b2tlbiBtaW50ZWQgd2hpbGUgaG9sZGluZyBvbmVcbiAqICAgKGBwYXJlbnRLZXlJZGApLiBDb3VudGVkIElOU1RFQUQgb2YgYGFwaUNhbGxzYCwgbmV2ZXIgYXMgd2VsbCwgc28gYVxuICogICBzZWxmLW11dGF0aW5nIHBpcGVsaW5lIGRvaW5nIG9uZSBwbHVnaW4gbG9va3VwIHBlciBzdGVwIHBlciBydW4gY2Fubm90IGxvY2tcbiAqICAgaXRzIG93biBodW1hbnMgb3V0IG9mIHRoZSBjb25zb2xlIChzZWUge0BsaW5rIG1ldGVyZWRRdW90YVR5cGVGb3J9LCB3aGljaCBpc1xuICogICB0aGUgYXV0aG9yaXR5IGZvciB0aGUgc3BsaXQg4oCUIGBkb2NzL3F1b3Rhcy5tZGAgYWdyZWVzIHdpdGggaXQpLiBTaXplZCBmb3JcbiAqICAgdGhhdCB0cmFmZmljIHBlciB0aWVyLlxuICogLSBgYWlDYWxsc2Ag4oCUIEFJIHByb3ZpZGVyIGludm9jYXRpb25zIChjb3VudGVkIHNlcGFyYXRlbHkgYmVjYXVzZSBlYWNoIGNhbGxcbiAqICAgaGFzIGV4dGVybmFsIGRvbGxhciBjb3N0OyBzaXplZCBzbWFsbGVyIHRoYW4gYXBpQ2FsbHMgcGVyIHRpZXIpXG4gKiAtIGBzdG9yYWdlQnl0ZXNgIOKAlCByZWdpc3RyeSBzdG9yYWdlIGJ1ZGdldCBwZXIgb3JnLiBVbmxpa2UgdGhlIG90aGVyc1xuICogICAod2hpY2ggY291bnQgZGlzY3JldGUgZXZlbnRzKSwgdGhpcyBpcyBhIG1lYXN1cmVkIHRvdGFsIHJlY29tcHV0ZWRcbiAqICAgb24gZGVtYW5kLiBJbmNyZW1lbnRlZCBieSB0aGUgaW1hZ2UtcmVnaXN0cnkncyBwdXNoLWdhdGUgYmVmb3JlXG4gKiAgIGlzc3VpbmcgYSB0b2tlbiB3aG9zZSBzY29wZSBpbmNsdWRlcyBgcHVzaGA7IHRoZSBHQyBzY2hlZHVsZXJcbiAqICAgZXZlbnR1YWxseSBmcmVlcyB0aGUgYnl0ZXMsIHRoZW4gdGhlIG5leHQgcHVzaC1nYXRlIGNoZWNrIHJlYWRzXG4gKiAgIHRoZSBsb3dlciB2YWx1ZS4gTk9UIGEgY291bnRlci1zdHlsZSBxdW90YSBpbiB0aGUgc2Vuc2Ugb2ZcbiAqICAgYGluY3JlbWVudFVzYWdlYCDigJQgdGhlIHJlZ2lzdHJ5IHB1c2hlcyB0aGUgbWVhc3VyZWQgdG90YWwgdmlhXG4gKiAgIGB1cGRhdGVMaW1pdHNgL2ByZXNldFVzYWdlYCBmbG93cy4gVGllciBsaW1pdHMgYXJlIGJ5dGVzLlxuICogLSBgZGFzaGJvYXJkc2AgLyBgYWxlcnRSdWxlc2AgLyBgYWxlcnREZXN0aW5hdGlvbnNgIC8gYGlkcENvbmZpZ3NgIOKAlFxuICogICByZXNvdXJjZS1jb3VudCBxdW90YXMgYWRkZWQgdG8gY2xvc2UgcGVyLW9yZyBEb1Mgc3VyZmFjZXMgaW4gdGhlXG4gKiAgIHVzZXItZWRpdGFibGUgZmVhdHVyZSB0YWJsZXMuIFdpdGhvdXQgdGhlc2UgY2FwcyBhIHNpbmdsZSBvcmcgY291bGRcbiAqICAgc3BhbSB0aG91c2FuZHMgb2YgZGFzaGJvYXJkcyAvIHJ1bGVzIGFuZCBibG9hdCB0aGUgc2hhcmVkIFBvc3RncmVzIC9cbiAqICAgTW9uZ28gd29ya2luZyBzZXRzLiBDb3VudGVkIGF0IGNyZWF0ZSB0aW1lOyBkZWNyZW1lbnRlZCBvbiBkZWxldGUuXG4gKiAtIGBsaXN0aW5nc2Ag4oCUIGFjdGl2ZSwgbm9uLXN1c3BlbmRlZCBwbHVnaW4tZWNvc3lzdGVtIGxpc3RpbmdzIGEgKHJvb3QpIG9yZ1xuICogICBwdWJsaXNoZXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBBIENPVU5UIHF1b3RhIGxpa2VcbiAqICAgYHBsdWdpbnNgOiBjaGVja2VkIGF0IHB1Ymxpc2gtcmVxdWVzdCBzdWJtaXQgYW5kIHJlLWNoZWNrZWQgYXQgYXBwcm92YWw7XG4gKiAgIGluc3RhbGxzIG5ldmVyIGNvdW50LlxuICovXG4vLyBOT1RFOiBgc2VhdHNgIGlzIGludGVudGlvbmFsbHkgTk9UIGhlcmUuIEl0J3MgYSB0aWVyIGxpbWl0IChRdW90YVRpZXJMaW1pdHMpXG4vLyBlbmZvcmNlZCBieSBjb21wYXJpbmcgdGhlIG9yZydzIExJVkUgbWVtYmVyIGNvdW50IGF0IGludml0ZSB0aW1lIOKAlCBub3QgYW5cbi8vIGluY3JlbWVudGluZyBwZXItcGVyaW9kIGNvdW50ZXIgbGlrZSB0aGUgY29uc3VtYWJsZSBxdW90YXMgYmVsb3cuXG5leHBvcnQgdHlwZSBRdW90YVR5cGUgPVxuICB8ICdwbHVnaW5zJyB8ICdwaXBlbGluZXMnIHwgJ2FwaUNhbGxzJyB8ICdhdXRvbWF0aW9uQ2FsbHMnIHwgJ2FpQ2FsbHMnIHwgJ3N0b3JhZ2VCeXRlcydcbiAgfCAnY3B1Q3JlZGl0cydcbiAgfCAnZGFzaGJvYXJkcycgfCAnYWxlcnRSdWxlcycgfCAnYWxlcnREZXN0aW5hdGlvbnMnIHwgJ2lkcENvbmZpZ3MnXG4gIHwgJ2xpc3RpbmdzJztcblxuLyoqXG4gKiBWYWxpZCBxdW90YSB0eXBlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFZBTElEX1FVT1RBX1RZUEVTID0gW1xuICAncGx1Z2lucycsICdwaXBlbGluZXMnLCAnYXBpQ2FsbHMnLCAnYXV0b21hdGlvbkNhbGxzJywgJ2FpQ2FsbHMnLCAnc3RvcmFnZUJ5dGVzJyxcbiAgJ2NwdUNyZWRpdHMnLFxuICAnZGFzaGJvYXJkcycsICdhbGVydFJ1bGVzJywgJ2FsZXJ0RGVzdGluYXRpb25zJywgJ2lkcENvbmZpZ3MnLFxuICAnbGlzdGluZ3MnLFxuXSBhcyBjb25zdDtcblxuLyoqXG4gKiBIdW1hbiBsYWJlbCBmb3IgZWFjaCBxdW90YSB0eXBlLCBzaW5ndWxhciDigJQgdGhlIG9uZSBzcGVsbGluZyBldmVyeSA0MjkgYm9keSxcbiAqIG5vdGlmaWNhdGlvbiBhbmQgZGFzaGJvYXJkIHVzZXMgKFwiQVBJIGNhbGwgcXVvdGEgcmVhY2hlZCDigKZcIikuXG4gKlxuICogREVSSVZFRCBmcm9tIGB0eXBlcy9xdW90YS1jYXRhbG9nLnRzYCwgd2hpY2ggaXMgdGhlIG9uZSBwbGFjZSBhIHF1b3RhIHR5cGUnc1xuICogZGlzcGxheSBmYWN0cyBsaXZlIGFuZCB0aGUgb25lIHRoZSBicm93c2VyIGltcG9ydHMgZGlyZWN0bHkuIFRoaXMgc3RheXMgaGVyZVxuICogYXMgdGhlIHNlcnZlci1zaWRlIG5hbWUgYmVjYXVzZSBldmVyeSBzZXJ2aWNlIGFscmVhZHkgcmVhZHMgaXQgZnJvbSB0aGVcbiAqIGJhcnJlbDsgaXQgaXMgYSBwcm9qZWN0aW9uIG9mIHRoZSBjYXRhbG9nLCBub3QgYSBzZWNvbmQgY29weSBvZiBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFFVT1RBX1RZUEVfTEFCRUxTOiBSZWFkb25seTxSZWNvcmQ8UXVvdGFUeXBlLCBzdHJpbmc+PiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgKE9iamVjdC5lbnRyaWVzKFFVT1RBX0NBVEFMT0cpIGFzIEFycmF5PFtRdW90YVR5cGUsIHsgbGFiZWw6IHN0cmluZyB9XT4pLm1hcCgoW3R5cGUsIG1ldGFdKSA9PiBbdHlwZSwgbWV0YS5sYWJlbF0pLFxuKSBhcyBSZWFkb25seTxSZWNvcmQ8UXVvdGFUeXBlLCBzdHJpbmc+PjtcblxuLyoqXG4gKiBXaGVyZSBhIHBlcnNvbiBnb2VzIHRvIHJhaXNlIGEgbGltaXQuIFJlbGF0aXZlIG9uIHB1cnBvc2U6IHRoZSBkYXNoYm9hcmQgYW5kXG4gKiB0aGUgQVBJIHNoYXJlIGFuIG9yaWdpbiBiZWhpbmQgbmdpbngsIGFuZCBhIENMSSAvIExhbWJkYSB0aGF0IHJlbmRlcnMgYSA0MjlcbiAqIHByZWZpeGVzIGl0IHdpdGggdGhlIHBsYXRmb3JtIFVSTCBpdCBhbHJlYWR5IHRhbGtzIHRvLlxuICovXG5leHBvcnQgY29uc3QgUVVPVEFfVVBHUkFERV9QQVRIID0gJy9kYXNoYm9hcmQvYmlsbGluZyc7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgUXVvdGFUeXBlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHZhbHVlIGlzIGEgdmFsaWQgUXVvdGFUeXBlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGlmIChpc1ZhbGlkUXVvdGFUeXBlKHJlcS5ib2R5LnF1b3RhVHlwZSkpIHtcbiAqICAgLy8gcXVvdGFUeXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgUXVvdGFUeXBlXG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRRdW90YVR5cGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBRdW90YVR5cGUge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBWQUxJRF9RVU9UQV9UWVBFUy5pbmNsdWRlcyh2YWx1ZSBhcyBRdW90YVR5cGUpO1xufVxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIHF1b3RhIGNoZWNrIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YUNoZWNrUmVzdWx0IHtcbiAgLyoqIFdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgYWxsb3dlZCAqL1xuICBhbGxvd2VkOiBib29sZWFuO1xuICAvKiogTWF4aW11bSBxdW90YSBsaW1pdCAoLTEgZm9yIHVubGltaXRlZCkgKi9cbiAgbGltaXQ6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgdXNhZ2UgY291bnQgKi9cbiAgdXNlZDogbnVtYmVyO1xuICAvKiogUmVtYWluaW5nIHF1b3RhICgtMSBmb3IgdW5saW1pdGVkKSAqL1xuICByZW1haW5pbmc6IG51bWJlcjtcbiAgLyoqIElTTyB0aW1lc3RhbXAgd2hlbiBxdW90YSByZXNldHMgKi9cbiAgcmVzZXRBdDogc3RyaW5nO1xuICAvKiogV2hldGhlciBxdW90YSBpcyB1bmxpbWl0ZWQgKi9cbiAgdW5saW1pdGVkOiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBPTkxZIHdoZW4gdGhpcyByZXN1bHQgaXMgdGhlIGZhaWwtb3BlbiBzZW50aW5lbCByZXR1cm5lZCBiZWNhdXNlIHRoZVxuICAgKiBxdW90YSBzZXJ2aWNlIHdhcyB1bnJlYWNoYWJsZSAvIHJldHVybmVkIG5vbi1vayAobm90IGEgcmVhbCBxdW90YSByZWFkaW5nKS5cbiAgICogTGV0cyBmYWlsLWNsb3NlZCBjYWxsZXJzIChlLmcuIHRoZSByZWdpc3RyeSBzdG9yYWdlIHB1c2gtZ2F0ZSkgZGlzdGluZ3Vpc2hcbiAgICogYW4gb3V0YWdlIGZyb20gYSBnZW51aW5lIGBsaW1pdDogLTFgICh1bmxpbWl0ZWQpIG9yZy4gQWJzZW50IG9uIHJlYWwgcmVzdWx0cy5cbiAgICovXG4gIGZhaWxPcGVuPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBRdW90YSBpbmZvcm1hdGlvbiBmb3IgZXJyb3IgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhSW5mbyB7XG4gIHR5cGU6IFF1b3RhVHlwZTtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdXNlZDogbnVtYmVyO1xuICByZW1haW5pbmc6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBBUEkgc3VjY2VzcyByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlTdWNjZXNzUmVzcG9uc2U8VCA9IHVua25vd24+IHtcbiAgc3VjY2VzczogdHJ1ZTtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBkYXRhPzogVDtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBBUEkgZXJyb3IgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpRXJyb3JSZXNwb25zZSB7XG4gIHN1Y2Nlc3M6IGZhbHNlO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbiAgZGV0YWlscz86IHVua25vd247XG4gIHF1b3RhPzogUXVvdGFJbmZvO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIEFQSSByZXNwb25zZSB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBBcGlSZXNwb25zZTxUID0gdW5rbm93bj4gPSBBcGlTdWNjZXNzUmVzcG9uc2U8VD4gfCBBcGlFcnJvclJlc3BvbnNlO1xuXG4vKipcbiAqIEpXVCBwYXlsb2FkIGZyb20gYWNjZXNzIHRva2Vucy5cbiAqXG4gKiBVc2VycyBjYW4gYmVsb25nIHRvIG11bHRpcGxlIG9yZ2FuaXphdGlvbnMuIFRoZSB0b2tlbiBpcyBzY29wZWQgdG8gb25lXG4gKiBhY3RpdmUgb3JnYW5pemF0aW9uIGF0IGEgdGltZS4gVGhlIGByb2xlYCBmaWVsZCBpcyB0aGUgdXNlcidzIHBlci1vcmdcbiAqIHJvbGUgaW4gdGhhdCBvcmdhbml6YXRpb24gKGZyb20gdGhlIFVzZXJPcmdhbml6YXRpb24ganVuY3Rpb24gY29sbGVjdGlvbiksXG4gKiBhbmQgYGlzQWRtaW5gIGlzIGRlcml2ZWQgYXMgYHJvbGUgPT09ICdhZG1pbicgfHwgcm9sZSA9PT0gJ293bmVyJ2AuXG4gKlxuICogVXNlIGBQT1NUIC9hdXRoL3N3aXRjaC1vcmdgIHRvIGNoYW5nZSB0aGUgYWN0aXZlIG9yZ2FuaXphdGlvbiwgd2hpY2hcbiAqIHJlLWlzc3VlcyB0b2tlbnMgd2l0aCB0aGUgbmV3IG9yZydzIHJvbGUgYW5kIGNvbnRleHQuXG4gKi9cbi8qKlxuICogQ29hcnNlIHBlci1vcmcgbWVtYmVyc2hpcCBsYWJlbCwgREVSSVZFRCBmcm9tIHRoZSBSb2xlcyBhIHVzZXIgaXMgYXNzaWduZWRcbiAqICh0aGUgaGlnaGVzdCBgZ3JhbnRzUm9sZWAgYW1vbmcgdGhlbTsgYG93bmVyYCBpcyBzZXQgb25seSBieSBvd25lcnNoaXBcbiAqIHRyYW5zZmVyKS4gSXQgaXMgYSBkaXNwbGF5L2F1dGhvcml0eSBsYWJlbCDigJQgZHJpdmluZyBgaXNBZG1pbmAsIG93bmVyc2hpcCxcbiAqIGFuZCBzZWF0IGFjY291bnRpbmcg4oCUIE5PVCBhIHBlcm1pc3Npb24gc291cmNlLiBFZmZlY3RpdmUgcGVybWlzc2lvbnMgY29tZVxuICogc29sZWx5IGZyb20gdGhlIHVzZXIncyBhc3NpZ25lZCBSb2xlcyAoc2VlIGByZXNvbHZlVXNlclBlcm1pc3Npb25zYCkuIE5vdCBhXG4gKiBnbG9iYWwgcm9sZS5cbiAqL1xuZXhwb3J0IHR5cGUgT3JnUm9sZSA9ICdvd25lcicgfCAnYWRtaW4nIHwgJ21lbWJlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnd0UGF5bG9hZCB7XG4gIC8qKiBVc2VyIElEIChzdWJqZWN0KSAqL1xuICBzdWI6IHN0cmluZztcbiAgLyoqIFVzZXJuYW1lICovXG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIC8qKiBVc2VyIGVtYWlsICovXG4gIGVtYWlsOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBraW5kIG9mIHByaW5jaXBhbCB0aGlzIHRva2VuIHNwZWFrcyBmb3IgKHNlZSB7QGxpbmsgUHJpbmNpcGFsVHlwZX0pLiAqL1xuICBwcmluY2lwYWxUeXBlOiBQcmluY2lwYWxUeXBlO1xuICAvKiogSG93IHRoZSB0b2tlbiBpcyB1c2VkIChzZWUge0BsaW5rIFRva2VuVXNlfSk7IFBBVHMgYXJlIGBhcGlfa2V5YC4gKi9cbiAgdG9rZW5fdXNlOiBUb2tlblVzZTtcbiAgLyoqXG4gICAqIE1ldGhvZHMgdGhhdCBhdXRoZW50aWNhdGVkIHRoZSBzZXNzaW9uICh1c2VyIHByaW5jaXBhbHMpLiBLZXB0IG9uIHRoZVxuICAgKiByZWZyZXNoLXNlc3Npb24gc2xvdCwgc28gcmVmcmVzaCAvIHJlbmV3IC8gc3dpdGNoLW9yZyBjYXJyeSBpdCB1bmNoYW5nZWQuXG4gICAqIEFic2VudCBvbiBzZXJ2aWNlIHRva2Vucy5cbiAgICovXG4gIGFtcj86IEF1dGhNZXRob2RbXTtcbiAgLyoqIEFzc3VyYW5jZSBsZXZlbCAodXNlciBwcmluY2lwYWxzKS4gTmV2ZXIgcmFpc2VkIGJ5IHJlZnJlc2ggLyByZW5ldyAvIHN3aXRjaC1vcmcuICovXG4gIGFhbD86IEFzc3VyYW5jZUxldmVsO1xuICAvKiogRXBvY2ggc2Vjb25kcyBvZiB0aGUgc2lnbi1pbiB0aGF0IGVzdGFibGlzaGVkIHRoZSBzZXNzaW9uICh1c2VyIHByaW5jaXBhbHMpLlxuICAgKiAgTmV2ZXIgcmVzZXQgYnkgcmVmcmVzaCAvIHJlbmV3IC8gc3dpdGNoLW9yZy4gKi9cbiAgYXV0aF90aW1lPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGFjdGl2ZSBvcmcgUkVRVUlSRVMgTUZBIGFuZCBpdHMgZ3JhY2UgcGVyaW9kIGhhcyBwYXNzZWQuXG4gICAqXG4gICAqIENhcnJpZWQgYXMgYSBjbGFpbSBzbyBubyBzZXJ2aWNlIGhhcyB0byBsb29rIHRoZSBwb2xpY3kgdXA6IHRoZSBvcmcgcG9saWN5XG4gICAqIGlzIGVuZm9yY2VkIHdoZXJlIHRoZSB0b2tlbiBpcyBJU1NVRUQgKGEgc2Vzc2lvbiBzY29wZWQgdG8gc3VjaCBhbiBvcmcgZ2V0c1xuICAgKiBgYWFsOiAyYCBvciBpcyByZWZ1c2VkKSwgYW5kIHRoaXMgY2xhaW0gaXMgdGhlIHJlY29yZCBvZiB0aGF0IGRlY2lzaW9uLCBmb3JcbiAgICogVUkgY29weSBhbmQgYXVkaXQgcmF0aGVyIHRoYW4gZm9yIGEgc2Vjb25kIGVuZm9yY2VtZW50IHBvaW50LlxuICAgKi9cbiAgbWZhUmVxdWlyZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFjdGl2ZSBvcmcncyBcImFkbWluaXN0cmF0aXZlIGFjdGlvbnMgcmVxdWlyZSBNRkFcIiBwb2xpY3lcbiAgICogKGBhZG1pbkFjdGlvbnNSZXF1aXJlTWZhYCwgc3RyaWN0ZXN0IGFjcm9zcyB0aGUgb3JnIGFuZCBpdHMgYW5jZXN0b3JzKS5cbiAgICogUHJlc2VudCDigJQgYW5kIGFsd2F5cyBgMmAg4oCUIG9ubHkgd2hlbiB0aGUgcG9saWN5IGlzIG9uLiBJdCBpcyByZXNvbHZlZCB3aGVuXG4gICAqIHRoZSB0b2tlbiBpcyBJU1NVRUQsIHNvIHNlcnZpY2VzIHRoYXQgY2FuJ3QgcmVhZCB0aGUgb3JnIGRvY3VtZW50IHN0aWxsIGtub3dcbiAgICogdGhlIHBvbGljeTogYHJlcXVpcmVPcmdBZG1pbkFzc3VyYW5jZWAgcmVmdXNlcyBhbiBgYWFsOiAxYCBzZXNzaW9uIG9uIGFuXG4gICAqIGFkbWluaXN0cmF0aXZlIHJvdXRlIHdoZW4gdGhpcyBjbGFpbSBpcyBwcmVzZW50LiBDaGFuZ2luZyB0aGUgcG9saWN5IGJ1bXBzXG4gICAqIGV2ZXJ5IGFmZmVjdGVkIG1lbWJlcidzIGB0b2tlblZlcnNpb25gLCBzbyB0aGUgY2xhaW0gY2FuJ3QgZ28gc3RhbGUuXG4gICAqL1xuICBvcmdfYWRtaW5fYWFsPzogMjtcbiAgLyoqXG4gICAqIEJPT1RTVFJBUC1BRE1JTiBFWENFUFRJT04uIFNldCBvbmx5IG9uIGEgc2Vzc2lvbiBvcGVuZWQgYnlcbiAgICogdGhlIGluc3RhbGwncyBib290c3RyYXAgYWRtaW4gKGBCT09UU1RSQVBfU1VQRVJBRE1JTl9FTUFJTFNgLCBzeXN0ZW0gb3JnKVxuICAgKiB3aGlsZSB0aGV5IHN0aWxsIGhhdmUgbm8gZW5yb2xsZWQgZmFjdG9yLiBTdWNoIGEgc2Vzc2lvbiBpcyBgYWFsOiAxYCBhbmQgbWF5XG4gICAqIHJlYWNoIE9OTFkgZW5yb2xtZW50LCBzaWduLW91dCBhbmQgdGhlIHJvdXRlcyBgaW5pdC1wbGF0Zm9ybS5zaGAgY2FsbHM7XG4gICAqIGV2ZXJ5IG90aGVyIHNlcnZpY2UgcmVmdXNlcyBpdCBvdXRyaWdodCAoc2VlIGByZXF1aXJlQXV0aGApLiBUaGUgZXhjZXB0aW9uXG4gICAqIGNsb3NlcyBwZXJtYW5lbnRseSBhdCB0aGUgZmlyc3QgZW5yb2xtZW50IGFuZCBuZXZlciByZW9wZW5zLlxuICAgKi9cbiAgbWZhRW5yb2xsbWVudFBlbmRpbmc/OiBib29sZWFuO1xuICAvKiogUGVyLW9yZyByb2xlIGluIHRoZSBhY3RpdmUgb3JnYW5pemF0aW9uICgnb3duZXInIHwgJ2FkbWluJyB8ICdtZW1iZXInKS4gTm90IGEgZ2xvYmFsIHJvbGUuICovXG4gIHJvbGU6IE9yZ1JvbGU7XG4gIC8qKiBEZXJpdmVkOiB0cnVlIHdoZW4gcm9sZSBpcyAnYWRtaW4nIG9yICdvd25lcicgaW4gdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gKi9cbiAgaXNBZG1pbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSZXNvbHZlZCBmaW5lLWdyYWluZWQgcGVybWlzc2lvbnMgZm9yIHRoZSBhY3RpdmUgb3JnL3RlYW0g4oCUIHRoZSB1bmlvbiBvZlxuICAgKiB0aGUgcGVybWlzc2lvbnMgY2FycmllZCBieSBldmVyeSBSb2xlIHRoZSB1c2VyIGlzIGFzc2lnbmVkIChzZWVcbiAgICogYHJlc29sdmVVc2VyUGVybWlzc2lvbnNgKS4gQWJzZW50IG9uIG1hY2hpbmUvc2NvcGVkIHRva2Vucy4gU3VwZXJhZG1pbnMgYXJlXG4gICAqIGdyYW50ZWQgYWxsIHBlcm1pc3Npb25zIGltcGxpY2l0bHkgYW5kIG1heSBvbWl0IHRoaXMuIEVuZHBvaW50cyBlbmZvcmNlIHZpYVxuICAgKiBgcmVxdWlyZVBlcm1pc3Npb24oLi4uKWAuXG4gICAqL1xuICBwZXJtaXNzaW9ucz86IFBlcm1pc3Npb25bXTtcbiAgLyoqXG4gICAqIEdsb2JhbCBzdXBlci1hZG1pbiBmbGFnIChjcm9zcy1vcmcpLiBXaGVuIGB0cnVlYCwgdGhlIHVzZXIgaXMgdHJlYXRlZFxuICAgKiBhcyBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggb3JnIHRoZXkncmUgY3VycmVudGx5XG4gICAqIGFjdGluZyB1bmRlci4gVGhpcyBpcyB0aGUgU09MRSBzaWduYWwgZm9yIHN5c2FkbWluIGF1dGhvcml0eSDigJQgbWVtYmVyc2hpcCBpblxuICAgKiB0aGUgd2VsbC1rbm93biBcInN5c3RlbVwiIG9yZyBncmFudHMgbm90aGluZywgYmVjYXVzZSB0aGF0IHdvdWxkIGNvbmZsYXRlXG4gICAqIFwiUGlwZWxpbmUgQnVpbGRlciBvcGVyYXRvclwiIHdpdGggXCJjdXN0b21lciB0ZW5hbnRcIiBpbiB0aGUgZGF0YSBtb2RlbC5cbiAgICovXG4gIGlzU3VwZXJBZG1pbj86IGJvb2xlYW47XG4gIC8qKiBPcmdhbml6YXRpb24ncyBxdW90YSB0aWVyLiAqL1xuICB0aWVyPzogUXVvdGFUaWVyO1xuICAvKiogUmVzb2x2ZWQgZmVhdHVyZSBmbGFncyBmb3IgdGhpcyB1c2VyL29yZyAqL1xuICBmZWF0dXJlcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogTmFycm93IGNhcGFiaWxpdHkgc2NvcGUgZm9yIG1hY2hpbmUvYXV0b21hdGlvbiB0b2tlbnMgKGUuZy5cbiAgICogYCdyZXBvcnRpbmc6aW5nZXN0J2ApLiBBYnNlbnQgb24gbm9ybWFsIGludGVyYWN0aXZlIHVzZXIgdG9rZW5zLiBFbmRwb2ludHNcbiAgICogdGhhdCBhY2NlcHQgYSBzY29wZWQgaWRlbnRpdHkgY2hlY2sgdGhpcyAoc2VlIGBoYXNTY29wZWApIGluc3RlYWQgb2Ygcm9sZTtcbiAgICogYSBzY29wZWQgdG9rZW4gaXMgbWludGVkIHdpdGggbWluaW1hbCByb2xlIGZvciBsZWFzdC1wcml2aWxlZ2UuXG4gICAqL1xuICBzY29wZT86IFRva2VuU2NvcGU7XG4gIC8qKlxuICAgKiBUaGUgdG9rZW4ncyBgcGVybWlzc2lvbnNgIHdlcmUgTkFSUk9XRUQgdG8gYSBjYXRhbG9nIHN1YnNldCBjaG9zZW4gd2hlbiB0aGVcbiAgICogY3JlZGVudGlhbCB3YXMgY3JlYXRlZCAoYSBwZXJtaXNzaW9uLXNjb3BlZCBwZXJzb25hbCBhY2Nlc3Mga2V5IG9yIG1hY2hpbmVcbiAgICogdG9rZW4pLiBUaGUgY2xhaW0gaXMgdGhlIHJlY29yZCB0aGF0IGBwZXJtaXNzaW9uc2AgaXMgdGhlIElOVEVSU0VDVElPTiBvZlxuICAgKiB0aGF0IHN1YnNldCB3aXRoIHRoZSBob2xkZXIncyBjdXJyZW50IFJvbGVzIOKAlCBub3QgdGhlaXIgZnVsbCBhdXRob3JpdHkg4oCUIHNvXG4gICAqIGFueXRoaW5nIHRoZSB0b2tlbiBtaW50cyBjYW4gb25seSBiZSBuYXJyb3dlciBzdGlsbCwgYW5kIGl0IG5ldmVyIGNhcnJpZXNcbiAgICogYGlzU3VwZXJBZG1pbmAgb3IgYW4gYWRtaW4gYHJvbGVgIChib3RoIHdvdWxkIGJ5cGFzcyB0aGUgc3Vic2V0KS4gT25seSBldmVyXG4gICAqIGB0cnVlYDsgYWJzZW50IG9uIHVucmVzdHJpY3RlZCB0b2tlbnMuXG4gICAqL1xuICBwZXJtaXNzaW9uc1Jlc3RyaWN0ZWQ/OiBib29sZWFuO1xuICAvKiogQWN0aXZlIG9yZ2FuaXphdGlvbiBJRCAoZnJvbSBVc2VyT3JnYW5pemF0aW9uIG1lbWJlcnNoaXApICovXG4gIG9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKiogQWN0aXZlIG9yZ2FuaXphdGlvbiBuYW1lICovXG4gIG9yZ2FuaXphdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5IChvcmctdGVhbS1oaWVyYXJjaHkgcHJvcG9zYWwsIHBoYXNlIDEpLlxuICAgKiBgcGFyZW50T3JnYW5pemF0aW9uSWRgIGlzIHRoZSBhY3RpdmUgb3JnJ3MgZGlyZWN0IHBhcmVudDsgYHJvb3RPcmdhbml6YXRpb25JZGBcbiAgICogaXMgdGhlIHRvcCBvZiBpdHMgYW5jZXN0cnkgY2hhaW4uIEJvdGggYXJlICoqb21pdHRlZCBmb3IgZmxhdCAocm9vdCkgb3JncyoqIOKAlFxuICAgKiBjb25zdW1lcnMgc2hvdWxkIHRyZWF0IHRoZSBlZmZlY3RpdmUgcm9vdCBhcyBgcm9vdE9yZ2FuaXphdGlvbklkID8/IG9yZ2FuaXphdGlvbklkYFxuICAgKiAodXNlIHRoZSBzaGFyZWQge0BsaW5rIGVmZmVjdGl2ZVJvb3RPcmdJZH0gYWNjZXNzb3IgcmF0aGVyIHRoYW4gY29hbGVzY2luZyBpbmxpbmUpLlxuICAgKiBDdXJyZW50bHkgZXZlcnkgb3JnIGlzIGZsYXQsIHNvIHRoZXNlIGFyZSBhYnNlbnQgb24gYWxsIHRva2VucyB0b2RheS5cbiAgICovXG4gIHBhcmVudE9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICAvKiogUm9vdCBvcmdhbml6YXRpb24gSUQgb2YgdGhlIGFjdGl2ZSBvcmcncyBhbmNlc3RyeSBjaGFpbiAoc2VlIGBwYXJlbnRPcmdhbml6YXRpb25JZGApLiAqL1xuICByb290T3JnYW5pemF0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXQgb24gdG9rZW5zIGlzc3VlZCBieSB0aGUgc3lzYWRtaW4gaW1wZXJzb25hdGlvbiBmbG93XG4gICAqIChgUE9TVCAvYWRtaW4vaW1wZXJzb25hdGUvOnVzZXJJZGApLiBDYXJyaWVzIHRoZSBvcmlnaW5hbCBzeXNhZG1pbidzXG4gICAqIHVzZXIgaWQgc28gYXVkaXQgZXZlbnRzIHN0aWxsIGF0dHJpYnV0ZSBhY3Rpb25zIGNvcnJlY3RseS5cbiAgICovXG4gIGltcGVyc29uYXRvcklkPzogc3RyaW5nO1xuICAvKipcbiAgICogVW5pcXVlIHRva2VuIGlkLiBPbiBhbiBpbXBlcnNvbmF0aW9uIHRva2VuIGl0IGlkZW50aWZpZXMgdGhlIFNFU1NJT04sIHNvIGl0XG4gICAqIGNhbiBiZSByZXZva2VkIG9uIGl0cyBvd24gYWNyb3NzIGV2ZXJ5IHNlcnZpY2UgKHNlZVxuICAgKiBgVG9rZW5SZXZvY2F0aW9uU3RvcmUuZ2V0U2Vzc2lvblJldm9jYXRpb25gKS4gUGVyc29uYWwgQWNjZXNzIFRva2Vuc1xuICAgKiAoYHRva2VuX3VzZTogJ2FwaV9rZXknYCkgY2Fycnkgb25lIHRvbywgdmFsaWRhdGVkIGFnYWluc3QgdGhlaXIgb3duIHJlY29yZC5cbiAgICogQSBganRpYCBhbG9uZSBuZXZlciBjbGFzc2lmaWVzIGEgdG9rZW4g4oCUIGB0b2tlbl91c2VgIGFuZCBgaW1wZXJzb25hdG9ySWRgIGRvLlxuICAgKi9cbiAganRpPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgdG9rZW4gaXMgcmVhZC1vbmx5IOKAlCBhbnkgbm9uLUdFVCByZXF1ZXN0IGlzIHJlamVjdGVkXG4gICAqIHVwc3RyZWFtIGJ5IHRoZSBwbGF0Zm9ybSdzIHJlYWQtb25seSBpbXBlcnNvbmF0aW9uIGdhdGUuIExldHNcbiAgICogc3lzYWRtaW5zIFwidmlldyBhcyB1c2VyIFhcIiB3aXRob3V0IHJpc2tpbmcgYSBkZXN0cnVjdGl2ZSBhY3Rpb24uXG4gICAqL1xuICBpbXBlcnNvbmF0aW9uUmVhZE9ubHk/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIHJlZnJlc2gtc2Vzc2lvbiBzbG90IChpbnRlcmFjdGl2ZSBvciBtYWNoaW5lKSB0aGlzIGFjY2VzcyB0b2tlbiB3YXNcbiAgICogbWludGVkIHdpdGguIFJldm9raW5nIHRoYXQgT05FIHNsb3QgcHVibGlzaGVzIGByZXZva2U6c2lkOjxzaWQ+YCAoc2VlXG4gICAqIGBjcmVkZW50aWFsUmV2b2NhdGlvbktleWApLCB3aGljaCBldmVyeSBzZXJ2aWNlIGNoZWNrcyBpbiBgcmVxdWlyZUF1dGhgLCBzb1xuICAgKiBhIHNpbmdsZSBzaWduZWQtb3V0IGRldmljZSAvIG1hY2hpbmUgY3JlZGVudGlhbCBzdG9wcyB3b3JraW5nIGV2ZXJ5d2hlcmVcbiAgICogaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBhdCBuYXR1cmFsIGV4cGlyeS4gQWJzZW50IG9uIFBBVHMgYW5kIGltcGVyc29uYXRpb24uXG4gICAqL1xuICBzaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIGtleSAoUEFUIC8gc2VydmljZS1hY2NvdW50IGtleSBpZCkgdGhpcyB0b2tlbiB3YXMgREVSSVZFRCBmcm9tLFxuICAgKiB3aGVuIGl0IGlzIG5vdCBpdHNlbGYgdGhlIGV4Y2hhbmdlZCBrZXkgdG9rZW4gKHdob3NlIGtleSBpZCBpcyBpdHMgYGp0aWApIOKAlFxuICAgKiBlLmcuIGEgc3dpdGNoLW9yZyBvciBnZW5lcmF0ZS10b2tlbiBtaW50IG1hZGUgd2hpbGUgaG9sZGluZyBhbiBleGNoYW5nZWRcbiAgICoga2V5IHRva2VuLiBSZXZva2luZyB0aGUga2V5IHB1Ymxpc2hlcyBgcmV2b2tlOmtleTo8a2V5SWQ+YCwgd2hpY2ggcmVqZWN0c1xuICAgKiBldmVyeSB0b2tlbiB0aGF0IG5hbWVzIGl0IGhlcmUgb3IgYXMgaXRzIGBqdGlgLlxuICAgKi9cbiAgcGFyZW50S2V5SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTRVJWSUNFIHRva2VucyBvbmx5OiB0aGlzIGF1ZGl0IGRlbGl2ZXJ5IG1heSByZWNvcmQgYW4gYGFmZmVjdGVkT3JnSWRgXG4gICAqIG91dHNpZGUgdGhlIHRva2VuJ3Mgb3JnIChzZWUgYFNlcnZpY2VUb2tlbk9wdGlvbnMuYXVkaXRDcm9zc09yZ2ApLiBIb25vdXJlZFxuICAgKiBieSBwbGF0Zm9ybSdzIGAvYXVkaXQvZXZlbnRzYCBpbmdlc3QgYWxvbmUuXG4gICAqL1xuICBhdWRpdENyb3NzT3JnPzogdHJ1ZTtcbiAgLyoqXG4gICAqIFRoZSB1c2VyJ3MgQUNDRVNTIHZlcnNpb24gYXQgdGhlIG1vbWVudCB0aGlzIHRva2VuIHdhcyBpc3N1ZWQ6IHRoZSBoYXJkXG4gICAqIGB0b2tlblZlcnNpb25gIChkZWFjdGl2YXRlIC8gcGFzc3dvcmQgY2hhbmdlIC8gbG9nb3V0LWFsbCDigJQgY2xlYXJzIHNsb3RzKVxuICAgKiBwbHVzIGBjbGFpbXNWZXJzaW9uYCAocm9sZSwgdGllciwgbWVtYmVyc2hpcCBvciBvd25lcnNoaXAgY2hhbmdlcyDigJQgcmUtbWludGVkXG4gICAqIG9uIHJlZnJlc2gpLiBCb3RoIG9ubHkgZ3Jvdywgc28gYSB0b2tlbiB3aG9zZSBlbWJlZGRlZCB2ZXJzaW9uIGlzIGJlaGluZCB0aGVcbiAgICogY3VycmVudCBvbmUgaGFzIGJlZW4gUkVWT0tFRC4gUGxhdGZvcm0gdmFsaWRhdGVzIHRoaXMgYWdhaW5zdCBNb25nbzsgdGhlXG4gICAqIHN0YXRlbGVzcyBzZXJ2aWNlcyB2YWxpZGF0ZSBpdCBhZ2FpbnN0IGEgUmVkaXMtcHVibGlzaGVkIGN1cnJlbnQtdmVyc2lvblxuICAgKiBzdG9yZSAoc2VlIGBzZXRUb2tlblJldm9jYXRpb25TdG9yZWApLiBBYnNlbnQgb24gbWFjaGluZS9zZXJ2aWNlIHRva2Vucy5cbiAgICovXG4gIHRva2VuVmVyc2lvbj86IG51bWJlcjtcbiAgLyoqIFRva2VuIHR5cGUgKi9cbiAgdHlwZTogJ2FjY2VzcycgfCAncmVmcmVzaCc7XG4gIC8qKiBJc3N1ZWQgYXQgdGltZXN0YW1wICovXG4gIGlhdD86IG51bWJlcjtcbiAgLyoqIEV4cGlyYXRpb24gdGltZXN0YW1wICovXG4gIGV4cD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgYWNjb3VudCBib3VuZGFyeSAocm9vdCBvcmcpIGZvciBhIHRva2VuJ3MgYWN0aXZlIG9yZy5cbiAqXG4gKiBUaGUgYWNjb3VudCByb290IGlzIGByb290T3JnYW5pemF0aW9uSWQgPz8gb3JnYW5pemF0aW9uSWRgOiBhIGZsYXQgKHJvb3QpIG9yZ1xuICogb21pdHMgYHJvb3RPcmdhbml6YXRpb25JZGAsIHNvIGl0IElTIGl0cyBvd24gcm9vdDsgYSB0ZWFtIChjaGlsZCkgb3JnIGNhcnJpZXNcbiAqIHRoZSB0b3Agb2YgaXRzIGFuY2VzdHJ5IGNoYWluLiBFdmVyeSBhY2NvdW50LXNjb3BlZCByZWFkIChxdW90YS9zZWF0L2JpbGxpbmdcbiAqIHBvb2xpbmcpIG11c3QgcmVzb2x2ZSB0aHJvdWdoIHRoaXMgY29hbGVzY2UgcmF0aGVyIHRoYW4gcmVhZGluZ1xuICogYG9yZ2FuaXphdGlvbklkYCBkaXJlY3RseSDigJQgdGhlIGxhdHRlciBzaWxlbnRseSB3b3JrcyB0b2RheSAoYWxsIG9yZ3MgZmxhdClcbiAqIGJ1dCB3b3VsZCBiaW5kIHRvIHRoZSB0ZWFtIGluc3RlYWQgb2YgdGhlIGFjY291bnQgb25jZSB0ZWFtcyBleGlzdC5cbiAqXG4gKiBAcmV0dXJucyB0aGUgZWZmZWN0aXZlIHJvb3Qgb3JnIGlkLCBvciBgdW5kZWZpbmVkYCB3aGVuIG5laXRoZXIgZmllbGQgaXMgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWZmZWN0aXZlUm9vdE9yZ0lkKFxuICBwYXlsb2FkOiBQaWNrPEp3dFBheWxvYWQsICdvcmdhbml6YXRpb25JZCcgfCAncm9vdE9yZ2FuaXphdGlvbklkJz4sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGF5bG9hZC5yb290T3JnYW5pemF0aW9uSWQgPz8gcGF5bG9hZC5vcmdhbml6YXRpb25JZDtcbn1cblxuLyoqXG4gKiBFeHRlbmRlZCBFeHByZXNzIFJlcXVlc3Qgd2l0aCB1c2VyIHByb3BlcnR5LlxuICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIG5hbWVzcGFjZSBFeHByZXNzIHtcbiAgICBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgICB1c2VyPzogSnd0UGF5bG9hZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIEhUVFAgY2xpZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDb25maWcge1xuICAvKiogU2VydmljZSBob3N0bmFtZSAqL1xuICBob3N0OiBzdHJpbmc7XG4gIC8qKiBTZXJ2aWNlIHBvcnQgKi9cbiAgcG9ydDogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEhlYWx0aCBjaGVjayByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja1Jlc3BvbnNlIHtcbiAgc3RhdHVzOiAnaGVhbHRoeScgfCAndW5oZWFsdGh5JztcbiAgc2VydmljZTogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdXB0aW1lOiBudW1iZXI7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGRlcGVuZGVuY2llcz86IFJlY29yZDxzdHJpbmcsICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAndW5rbm93bic+O1xufVxuIl19
@@ -1,4 +1,4 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  export {};
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxpYW5jZS1leGVtcHRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvY29tcGxpYW5jZS1leGVtcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBgUE9TVCAvY29tcGxpYW5jZS9leGVtcHRpb25zYCByZXF1ZXN0IGJvZHkuXG4gKlxuICogSXQgbGl2ZXMgaGVyZSBiZWNhdXNlIGl0IGNyb3NzZXMgYSBTRVJWSUNFIGJvdW5kYXJ5OiB0aGUgQXNrIGFnZW50IGRyYWZ0cyBvbmVcbiAqIChgYXBpL2Fza2Ag4oCUIGEgcHJvcG9zYWwgdGhlIHVzZXIgcmV2aWV3cyBhbmQgY29tbWl0cyB0aHJvdWdoIHRoZWlyIG93blxuICogc2Vzc2lvbikgYW5kIHRoZSBjb21wbGlhbmNlIHNlcnZpY2UgaW5zZXJ0cyBpdCAoYGFwaS9jb21wbGlhbmNlYCkuIEVhY2ggc2lkZVxuICogaGFkIGl0cyBvd24gc2l4LWZpZWxkIGRlY2xhcmF0aW9uLCBzbyBhIGZpZWxkIGFkZGVkIG9uIG9uZSBzaWRlIHdhcyBpbnZpc2libGVcbiAqIHRvIHRoZSBvdGhlciB1bnRpbCBhIHJlcXVlc3QgZmFpbGVkIHZhbGlkYXRpb24gYXQgcnVudGltZS5cbiAqL1xuXG4vKiogQSByZXF1ZXN0IHRvIHdhaXZlIG9uZSBjb21wbGlhbmNlIHJ1bGUgZm9yIG9uZSBlbnRpdHkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VFeGVtcHRpb25SZXF1ZXN0IHtcbiAgLyoqIFRoZSBydWxlIGJlaW5nIHdhaXZlZC4gKi9cbiAgcnVsZUlkOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBraW5kIG9mIGVudGl0eSB0aGUgd2FpdmVyIGNvdmVycy4gKi9cbiAgZW50aXR5VHlwZTogJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuICAvKiogVGhlIGVudGl0eSB0aGUgd2FpdmVyIGFwcGxpZXMgdG8uICovXG4gIGVudGl0eUlkOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciB0aGUgZW50aXR5LCBmb3IgdGhlIHJldmlldyBxdWV1ZSBhbmQgdGhlIGF1ZGl0IHRyYWlsLiAqL1xuICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICAvKiogV2h5IHRoZSB3YWl2ZXIgaXMgYmVpbmcgYXNrZWQgZm9yOyBzaG93biB0byB0aGUgYXBwcm92ZXIuICovXG4gIHJlYXNvbjogc3RyaW5nO1xuICAvKiogSVNPLTg2MDEgZXhwaXJ5LiBPbWl0dGVkIG1lYW5zIHRoZSB3YWl2ZXIgZG9lcyBub3Qgc2VsZi1leHBpcmUuICovXG4gIGV4cGlyZXNBdD86IHN0cmluZztcbn1cbiJdfQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGxpYW5jZS1leGVtcHRpb24uanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jb21wbGlhbmNlLWV4ZW1wdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIGBQT1NUIC9jb21wbGlhbmNlL2V4ZW1wdGlvbnNgIHJlcXVlc3QgYm9keS5cbiAqXG4gKiBJdCBsaXZlcyBoZXJlIGJlY2F1c2UgaXQgY3Jvc3NlcyBhIFNFUlZJQ0UgYm91bmRhcnk6IHRoZSBBc2sgYWdlbnQgZHJhZnRzIG9uZVxuICogKGBhcGkvYXNrYCDigJQgYSBwcm9wb3NhbCB0aGUgdXNlciByZXZpZXdzIGFuZCBjb21taXRzIHRocm91Z2ggdGhlaXIgb3duXG4gKiBzZXNzaW9uKSBhbmQgdGhlIGNvbXBsaWFuY2Ugc2VydmljZSBpbnNlcnRzIGl0IChgYXBpL2NvbXBsaWFuY2VgKS4gRWFjaCBzaWRlXG4gKiBoYWQgaXRzIG93biBzaXgtZmllbGQgZGVjbGFyYXRpb24sIHNvIGEgZmllbGQgYWRkZWQgb24gb25lIHNpZGUgd2FzIGludmlzaWJsZVxuICogdG8gdGhlIG90aGVyIHVudGlsIGEgcmVxdWVzdCBmYWlsZWQgdmFsaWRhdGlvbiBhdCBydW50aW1lLlxuICovXG5cbi8qKiBBIHJlcXVlc3QgdG8gd2FpdmUgb25lIGNvbXBsaWFuY2UgcnVsZSBmb3Igb25lIGVudGl0eS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUV4ZW1wdGlvblJlcXVlc3Qge1xuICAvKiogVGhlIHJ1bGUgYmVpbmcgd2FpdmVkLiAqL1xuICBydWxlSWQ6IHN0cmluZztcbiAgLyoqIFdoaWNoIGtpbmQgb2YgZW50aXR5IHRoZSB3YWl2ZXIgY292ZXJzLiAqL1xuICBlbnRpdHlUeXBlOiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIC8qKiBUaGUgZW50aXR5IHRoZSB3YWl2ZXIgYXBwbGllcyB0by4gKi9cbiAgZW50aXR5SWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbGFiZWwgZm9yIHRoZSBlbnRpdHksIGZvciB0aGUgcmV2aWV3IHF1ZXVlIGFuZCB0aGUgYXVkaXQgdHJhaWwuICovXG4gIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBXaHkgdGhlIHdhaXZlciBpcyBiZWluZyBhc2tlZCBmb3I7IHNob3duIHRvIHRoZSBhcHByb3Zlci4gKi9cbiAgcmVhc29uOiBzdHJpbmc7XG4gIC8qKiBJU08tODYwMSBleHBpcnkuIE9taXR0ZWQgbWVhbnMgdGhlIHdhaXZlciBkb2VzIG5vdCBzZWxmLWV4cGlyZS4gKi9cbiAgZXhwaXJlc0F0Pzogc3RyaW5nO1xufVxuIl19
@@ -146,6 +146,15 @@ export declare function renderEcosystemManagerChange(input: {
146
146
  added: boolean;
147
147
  /** Who made the change (superadmins only can), when known. */
148
148
  actor?: string;
149
+ /**
150
+ * The Role actually granted. This notice fires for ANY Role carrying a
151
+ * system-org-only permission — `ecosystemRoleName` returns whichever one it
152
+ * is — so hard-coding "Ecosystem Manager" announced staffing **Console
153
+ * Administrator** (a read/write shell over every tenant's rows) or **Support
154
+ * Lead** (`impersonation:open`) as a plugin-moderation grant. The audit row
155
+ * had the name all along; the message operators actually read did not.
156
+ */
157
+ role?: string;
149
158
  }): EcosystemNotificationContent;
150
159
  /**
151
160
  * Coalesce several queued notices into one digest email: a count-bearing
@@ -208,13 +208,22 @@ export function nextEcosystemDigestTime(cadence, now = new Date()) {
208
208
  export function renderEcosystemManagerChange(input) {
209
209
  const verb = input.added ? 'added to' : 'removed from';
210
210
  const by = input.actor ? ` by ${input.actor}` : '';
211
+ const role = input.role ?? 'Ecosystem Manager';
212
+ // The body describes what the ROLE does, so it can only speak for the one it
213
+ // was written about. For any other, say what happened and leave the
214
+ // capabilities to the Role itself rather than describing the wrong ones.
215
+ const ecosystem = role === 'Ecosystem Manager';
211
216
  return {
212
- subject: `${input.user} was ${verb} the Ecosystem Manager role`,
217
+ subject: `${input.user} was ${verb} the ${role} role`,
213
218
  text: input.added
214
- ? `${input.user} was ${verb} the Ecosystem Manager role${by}. Ecosystem Managers decide publish requests, `
215
- + 'moderate submissions and reviews, verify publishers and publish advisories for the whole plugin ecosystem. '
216
- + 'The role works only from the system organization and requires a two-factor sign-in.'
217
- : `${input.user} was ${verb} the Ecosystem Manager role${by} and can no longer manage or approve anything in the plugin ecosystem.`,
219
+ ? `${input.user} was ${verb} the ${role} role${by}.`
220
+ + (ecosystem
221
+ ? ' Ecosystem Managers decide publish requests, moderate submissions and reviews, verify publishers'
222
+ + ' and publish advisories for the whole plugin ecosystem.'
223
+ : ' It carries system-org-only permissions.')
224
+ + ' The role works only from the system organization and requires a two-factor sign-in.'
225
+ : `${input.user} was ${verb} the ${role} role${by}`
226
+ + (ecosystem ? ' and can no longer manage or approve anything in the plugin ecosystem.' : '.'),
218
227
  };
219
228
  }
220
229
  /**
@@ -231,4 +240,4 @@ export function renderEcosystemDigest(event, items) {
231
240
  text: items.map((i) => `• ${i.subject}`).join('\n').slice(0, ECOSYSTEM_NOTIFY_TEXT_MAX),
232
241
  };
233
242
  }
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQWdDdEM7MEVBQzBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUE4RTtJQUMxSCx5QkFBeUIsRUFBRSxjQUFjO0lBQ3pDLDBCQUEwQixFQUFFLGVBQWU7SUFDM0MsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQyxrQ0FBa0MsRUFBRSx1QkFBdUI7Q0FDNUQsQ0FBQztBQUtGLHFEQUFxRDtBQUNyRCxNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FDakQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBd0JuRCw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQXVFO0lBQy9HLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSw0Q0FBNEMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDN0gsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLG1EQUFtRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUN4SyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQ3BILEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFB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TSxJQUFJLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3BHLE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxPQUFPLFlBQVksS0FBSyxDQUFDLE1BQU0sTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSw0QkFBNEIsQ0FBQztRQUMxRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4tZWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBjb250cmFjdCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCksXG4gKiBzaGFyZWQgYnkgdGhlIHNlbmRlciAodGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZW5xdWV1ZSBBUEkgYW5kIGRpZ2VzdFxuICogZGlzcGF0Y2hlcikgYW5kIHRoZSByZWxheSAocGxhdGZvcm0gYFBPU1QgL2ludGVybmFsL25vdGlmeS1lbWFpbGApLlxuICpcbiAqIFJlY2lwaWVudHMgdHJhdmVsIGFzIFJVTEVTLCBuZXZlciBhcyBsaXN0czogcGxhdGZvcm0gcmVzb2x2ZXMgZWFjaFxuICoge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGFnYWluc3QgaXRzIHVzZXIvUm9sZSBkaXJlY3RvcnkgQVQgU0VORCBUSU1FLFxuICogc28gYSBkaWdlc3QgdGhhdCBmbHVzaGVzIHRvbW9ycm93IHJlYWNoZXMgdG9tb3Jyb3cncyBtb2RlcmF0b3JzLCB0aGUgcGx1Z2luXG4gKiBzZXJ2aWNlIG5ldmVyIGhhbmRsZXMgYW4gZW1haWwgYWRkcmVzcyBvciBhIG1lbWJlcnNoaXAgbGlzdCwgYW5kIGEgcHVibGlzaGVyXG4gKiBjYW4gbmV2ZXIgbGVhcm4gd2hvIGluc3RhbGxlZCB0aGVpciBwbHVnaW4gKHRoZSByZWxheSBtYWlscyBlYWNoIHJlY2lwaWVudFxuICogaW5kaXZpZHVhbGx5IOKAlCBubyBzaGFyZWQgVG86IGxpbmUpLlxuICovXG5cbi8qKiBBIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkID1cbiAgfCAnTjEnIHwgJ04yJyB8ICdOMycgfCAnTjQnIHwgJ041JyB8ICdONicgfCAnTjcnIHwgJ044JyB8ICdOOScgfCAnTjEwJ1xuICB8ICdOMTEnIHwgJ04xMicgfCAnTjEzJyB8ICdOMTQnIHwgJ04xNScgfCAnTjE2JyB8ICdOMTcnIHwgJ04xOCcgfCAnTjE5JyB8ICdOMjAnXG4gIHwgJ04yMScgfCAnTjIyJyB8ICdOMjMnIHwgJ04yNCcgfCAnTjI1JyB8ICdOMjYnIHwgJ04yNycgfCAnTjI4JyB8ICdOMjknXG4gIHwgJ04zMCcgfCAnTjMxJyB8ICdOMzInIHwgJ04zMyc7XG5cbi8qKiBBIGRlbGl2ZXJ5IGNoYW5uZWwuIEluLWFwcCBpcyB0aGUgc291cmNlIG9mIHRydXRoOyBlbWFpbCBpcyB0aGUgY291cnRlc3kgY29weS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwgPSAnaW5fYXBwJyB8ICdlbWFpbCc7XG5cbi8qKiBBIHBlci11c2VyIEVNQUlMIG9wdC1vdXQga2V5LiBJbi1hcHAgaXMgbmV2ZXIgb3B0aW9uYWwuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgPVxuICB8ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0uaW5zdGFsbHMuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJztcblxuLyoqIFRoZSBmaWVsZCBlYWNoIHByZWZlcmVuY2Uga2V5IGlzIHN0b3JlZCB1bmRlciBpbiB0aGUgdXNlcidzIHBlci1vcmdcbiAqICBgbm90aWZpY2F0aW9ucy5lY29zeXN0ZW1gIHByZWZlcmVuY2VzIChwbGF0Zm9ybSBgVXNlclByZWZlcmVuY2VzYCkuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlLCBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2VGaWVsZD4+ID0ge1xuICAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnOiAncmV2aWV3c0VtYWlsJyxcbiAgJ2Vjb3N5c3RlbS51cGdyYWRlcy5lbWFpbCc6ICd1cGdyYWRlc0VtYWlsJyxcbiAgJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCc6ICdpbnN0YWxsc0VtYWlsJyxcbiAgJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJzogJ21vZGVyYXRpb25EaWdlc3RFbWFpbCcsXG59O1xuXG4vKiogU3RvcmVkIGZpZWxkIG5hbWVzIG9mIHRoZSBlY29zeXN0ZW0gZW1haWwgcHJlZmVyZW5jZXMgKGFsbCBkZWZhdWx0IGB0cnVlYCkuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2VGaWVsZCA9ICdyZXZpZXdzRW1haWwnIHwgJ3VwZ3JhZGVzRW1haWwnIHwgJ2luc3RhbGxzRW1haWwnIHwgJ21vZGVyYXRpb25EaWdlc3RFbWFpbCc7XG5cbi8qKiBFdmVyeSBzdG9yZWQgZWNvc3lzdGVtIGVtYWlsLXByZWZlcmVuY2UgZmllbGQuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERfTkFNRVM6IHJlYWRvbmx5IEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkW10gPVxuICBPYmplY3QudmFsdWVzKEVDT1NZU1RFTV9FTUFJTF9QUkVGRVJFTkNFX0ZJRUxEUyk7XG5cbi8qKiBIb3cgb2Z0ZW4gYSBiYXRjaGVkIGVtYWlsIGlzIGZsdXNoZWQuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlID0gJ2hvdXJseScgfCAnZGFpbHknIHwgJ3dlZWtseSc7XG5cbi8qKiBPbmUgZXZlbnQncyBkZWxpdmVyeSBydWxlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtRXZlbnRTcGVjIHtcbiAgLyoqIE9uZS1saW5lIGRlc2NyaXB0aW9uIChkb2NzLCBsb2dzKS4gKi9cbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgLyoqIENoYW5uZWxzIHRoZSBldmVudCBpcyBkZWxpdmVyZWQgb24uICovXG4gIGNoYW5uZWxzOiByZWFkb25seSBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsW107XG4gIC8qKlxuICAgKiBFbWFpbCBvcHQtb3V0IGtleSwgb3IgYG51bGxgIHdoZW4gdGhlIGVtYWlsIGlzIFRSQU5TQUNUSU9OQUwgLyBzZWN1cml0eVxuICAgKiAoTjEsIE4z4oCTTjUsIE434oCTTjEwLCBOMTjigJNOMjMsIE4yNSwgTjI44oCTTjMzIGNhbid0IGJlIHR1cm5lZCBvZmYpLlxuICAgKi9cbiAgcHJlZmVyZW5jZTogRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlIHwgbnVsbDtcbiAgLyoqIFdoZW4gdGhlIGVtYWlsIGlzIGJhdGNoZWQgcmF0aGVyIHRoYW4gaW1tZWRpYXRlLCBpdHMgY2FkZW5jZS4gKi9cbiAgZGlnZXN0PzogRWNvc3lzdGVtRGlnZXN0Q2FkZW5jZTtcbiAgLyoqIEFsbG93ZWQgdG8gYWRkcmVzcyBhIHJhdyBlbWFpbDogdGhlIGFub255bW91cyBTVUJNSVRURVIgKHRoZVxuICAgKiAgdHJhbnNhY3Rpb25hbCBzdWJtaXNzaW9uIG5vdGljZXMpIGFuZCBhbiBvcmcncyBWRVJJRklFRCBleHRlcm5hbFxuICAgKiAgc2VjdXJpdHkgYWRkcmVzcyAodGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIE4zMOKAk04zMykuICovXG4gIGFsbG93c0FkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKiogVGhlIG5vdGlmaWNhdGlvbiBldmVudCB0YWJsZSwgYXMgZGF0YS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UUzogUmVhZG9ubHk8UmVjb3JkPEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQsIEVjb3N5c3RlbUV2ZW50U3BlYz4+ID0ge1xuICBOMTogeyBkZXNjcmlwdGlvbjogJ0Fub255bW91cyBzdWJtaXNzaW9uIHJlY2VpdmVkIChtYWdpYyBsaW5rKScsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjI6IHsgZGVzY3JpcHRpb246ICdTdWJtaXNzaW9uIHZlcmlmaWVkLCBlbnRlcmVkIHRoZSBtb2RlcmF0aW9uIHF1ZXVlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMzogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gZmFpbGVkIGF1dG9tYXRlZCBnYXRlcycsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjQ6IHsgZGVzY3JpcHRpb246ICdTdWJtaXNzaW9uIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONTogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gY2xhaW1lZCBieSBhbiBhY2NvdW50JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjY6IHsgZGVzY3JpcHRpb246ICdWZXJpZmllZC1wdWJsaXNoZXIgYXBwbGljYXRpb24gc3VibWl0dGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBONzogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkIGFwcGxpY2F0aW9uIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjg6IHsgZGVzY3JpcHRpb246ICdNb2RlcmF0aW9uIGFjdGlvbiBvbiBhIGxpc3RpbmcgKHN1c3BlbmQsIHlhbmssIHRha2Vkb3duKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE45OiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIHJlcXVlc3RlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xMDogeyBkZXNjcmlwdGlvbjogJ093bmVyc2hpcCB0cmFuc2ZlciBhY2NlcHRlZCwgZGVjbGluZWQsIGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjExOiB7IGRlc2NyaXB0aW9uOiAnSW5zdGFsbCByZXF1ZXN0ZWQgKHBvbGljeSByZXF1aXJlcyBhcHByb3ZhbCknLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCcgfSxcbiAgTjEyOiB7IGRlc2NyaXB0aW9uOiAnSW5zdGFsbCBhcHByb3ZlZCBvciBkZW5pZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCcgfSxcbiAgTjEzOiB7IGRlc2NyaXB0aW9uOiAnTmV3IHZlcnNpb24gYXZhaWxhYmxlIHdpdGhpbiBhbiBpbnN0YWxsXFwncyBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS51cGdyYWRlcy5lbWFpbCcsIGRpZ2VzdDogJ3dlZWtseScgfSxcbiAgTjE0OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBkZXByZWNhdGVkIG9yIHVubWFpbnRhaW5lZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJyB9LFxuICBOMTU6IHsgZGVzY3JpcHRpb246ICdOZXcgb3IgZWRpdGVkIHJldmlldyBvbiBhIGxpc3RpbmcnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJywgZGlnZXN0OiAnaG91cmx5JyB9LFxuICBOMTY6IHsgZGVzY3JpcHRpb246ICdQdWJsaXNoZXIgcmVwbGllZCB0byB5b3VyIHJldmlldycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnIH0sXG4gIE4xNzogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBoZWxkIChyZXBvcnRzLCBidXJzdCwgZmlsdGVyKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjE4OiB7IGRlc2NyaXB0aW9uOiAnWW91ciByZXZpZXcgd2FzIHJlbW92ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTk6IHsgZGVzY3JpcHRpb246ICdSZXZpZXcgZmxhZ2dlZCBhcyBhIHNlY3VyaXR5IGlzc3VlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIwOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgZHJhZnQgYXV0by1jcmVhdGVkIChDVkUgcmVzY2FuKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMTogeyBkZXNjcmlwdGlvbjogJ0Fkdmlzb3J5IHB1Ymxpc2hlZCBvciB3aXRoZHJhd24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjI6IHsgZGVzY3JpcHRpb246ICdNb2RlcmF0aW9uIFNMQSBicmVhY2gnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMzogeyBkZXNjcmlwdGlvbjogJ0FkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgRWNvc3lzdGVtIE1hbmFnZXIgcm9sZScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yNDogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2ggcmVxdWVzdCBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4yNTogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2ggcmVxdWVzdCBhcHByb3ZlZCBvciByZWplY3RlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yNjogeyBkZXNjcmlwdGlvbjogJ0xpc3Rpbmcgb3IgdmVyc2lvbiBwYXVzZWQgYnkgaXRzIHB1Ymxpc2hlcicsIGNoYW5uZWxzOiBbJ2luX2FwcCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJyB9LFxuICBOMjc6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsZWQgbGlzdGluZyBhdXRvLXVwZGF0ZWQgd2l0aGluIGl0cyByYW5nZScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMjg6IHsgZGVzY3JpcHRpb246ICdBIHJlcXVlc3QgbmVlZHMgYSBzZWNvbmQgYXBwcm92YWwnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjk6IHsgZGVzY3JpcHRpb246ICdQbGFuIGNoYW5nZSBhZmZlY3RzIHB1Ymxpc2hpbmcnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICAvLyBQZXItb3JnIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kIFwiU2NhbiBnYXRlc1wiKS5cbiAgLy8gUmVjaXBpZW50cyBmb2xsb3cgdGhlIG9yZydzIHBsdWdpbiBzZWN1cml0eSBub3RpZmljYXRpb24gc2V0dGluZ3M7IHRoZSBvcmcnc1xuICAvLyB3ZWJob29rIChpZiBhbnkpIGlzIHNlbnQgYnkgdGhlIHBsdWdpbiBzZXJ2aWNlIGl0c2VsZi4gTjMxJ3MgZW1haWwgaG9ub3JzXG4gIC8vIHRoZSBvcmcncyBkaWdlc3Qgc2V0dGluZyAodGhlIHNlbmRlciBiYXRjaGVzIGl0KSwgTjMwIGlzIGFsd2F5cyBpbW1lZGlhdGUuXG4gIE4zMDogeyBkZXNjcmlwdGlvbjogJ1BsdWdpbiB2ZXJzaW9uIGJsb2NrZWQgKHVuc2Nhbm5lZCBvciBmaXhhYmxlIENyaXRpY2FsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE4zMTogeyBkZXNjcmlwdGlvbjogJ1Jlc2NhbiBmb3VuZCBuZXcgQ3JpdGljYWwvSGlnaCBpbiBhIHBsdWdpbiB2ZXJzaW9uJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgLy8gUGlwZWxpbmUtb3duZXIgbm90aWNlczogYSBsb29rdXAgLyBydW50aW1lIGNoZWNrIFJFRlVTRUQgYSBwaXBlbGluZSdzIHBsdWdpblxuICAvLyB2ZXJzaW9uIChkZWR1cGxpY2F0ZWQgcGVyIHBpcGVsaW5lICsgdmVyc2lvbiBwZXIgZGF5KSwgYW5kIGEgdGltZS1ib3hlZCByaXNrXG4gIC8vIGFjY2VwdGFuY2Ugb2YgYSBwaXBlbGluZSdzIGZpbmRpbmdzIExBUFNFRCAodGhlIGZpbmRpbmdzIGFyZSBsaXZlIGFnYWluKS5cbiAgLy8gUm91dGVkIHRvIHRoZSBvcmcncyBwaXBlbGluZSB3cml0ZXJzIHVuZGVyIHRoZSBzYW1lIHNlY3VyaXR5IHNldHRpbmdzLlxuICBOMzI6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSBibG9ja2VkIGJ5IGEgcGx1Z2luIHZ1bG5lcmFiaWxpdHkgcG9saWN5JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMzOiB7IGRlc2NyaXB0aW9uOiAnUGlwZWxpbmUgdnVsbmVyYWJpbGl0eSByaXNrIGFjY2VwdGFuY2UgbGFwc2VkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbn07XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub3RpZmljYXRpb24gZXZlbnQgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTLCB2YWx1ZSk7XG59XG5cbi8qKiBPcmctbG9jYWwgcGVybWlzc2lvbnMgYW4ge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGBvcmdfcGVybWlzc2lvbmAgcnVsZSBtYXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24gPSAncHVibGlzaGVyczptYW5hZ2UnIHwgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnIHwgJ3BsdWdpbnM6d3JpdGUnIHwgJ3BpcGVsaW5lczp3cml0ZSc7XG4vKiogU3lzdGVtLW9yZyBwZXJtaXNzaW9ucyBhIGBtb2RlcmF0b3JzYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbiA9ICdwbHVnaW5zOm1vZGVyYXRlJyB8ICdwdWJsaXNoZXJzOnZlcmlmeSc7XG5cbi8qKlxuICogQSByZWNpcGllbnQgUlVMRSwgcmVzb2x2ZWQgYnkgcGxhdGZvcm0gYXQgc2VuZCB0aW1lOlxuICpcbiAqICAtIGB1c2VyYCDigJQgb25lIHVzZXIgKFJlcXVlc3RlciwgUmV2aWV3IGF1dGhvciwgdGhlIGFmZmVjdGVkIHVzZXIgb2YgTjIzKS5cbiAqICAgIGBvcmdJZGAgcGlja3MgdGhlIGluYm94OyBkZWZhdWx0cyB0byB0aGUgdXNlcidzIGxhc3QgYWN0aXZlIG9yZy5cbiAqICAtIGBvcmdfcGVybWlzc2lvbmAg4oCUIGFjdGl2ZSBtZW1iZXJzIG9mIGBvcmdJZGAgaG9sZGluZyBgcGVybWlzc2lvbmBcbiAqICAgIChQdWJsaXNoZXIgbWFuYWdlcnMgPSBgcHVibGlzaGVyczptYW5hZ2VgLCBPcmcgYXBwcm92ZXJzID1cbiAqICAgIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCwgcGx1Z2luIHdyaXRlcnMgPSBgcGx1Z2luczp3cml0ZWApLiBXaXRoXG4gKiAgICBgaW5oZXJpdEZyb21Sb290YCwgYSB0ZWFtIHdpdGggbm8gaG9sZGVycyBmYWxscyBiYWNrIHRvIGl0cyByb290IG9yZydzXG4gKiAgICBob2xkZXJzOyB3aXRoIG5vbmUgYW55d2hlcmUsIHRoZSBvcmcncyBvd25lcnMuXG4gKiAgLSBgb3JnX21lbWJlcnNgIOKAlCB0aGUgbmFtZWQgdXNlcnMsIGJ1dCBvbmx5IHRob3NlIHdobyBhcmUgQUNUSVZFIG1lbWJlcnMgb2ZcbiAqICAgIGBvcmdJZGAgYXQgc2VuZCB0aW1lIChhbiBvcmcncyBjaG9zZW4gc2VjdXJpdHkgcmVjaXBpZW50czogYSBzdGFsZSBpZCwgb3JcbiAqICAgIHNvbWVvbmUgd2hvIGxlZnQsIHJlY2VpdmVzIG5vdGhpbmcpLlxuICogIC0gYG1vZGVyYXRvcnNgIOKAlCB0aGUgc3lzdGVtIG9yZydzIGhvbGRlcnMgb2YgYHBlcm1pc3Npb25gICh0aGUgRWNvc3lzdGVtXG4gKiAgICBNYW5hZ2VyIHJvbGUpLCBtaW51cyBhbnlvbmUgd2l0aCBhIGNvbmZsaWN0IG9mIGludGVyZXN0IChtZW1iZXJzIG9mXG4gKiAgICBgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkYCwgb3IgdGhlIGxpc3RlZCB1c2Vycyk7IHN1cGVyYWRtaW5zIHdoZW4gZW1wdHkuXG4gKiAgLSBgc3VwZXJhZG1pbnNgIOKAlCBldmVyeSBwbGF0Zm9ybSBzdXBlcmFkbWluLlxuICogIC0gYGFkZHJlc3NgIOKAlCBhIHJhdyBhZGRyZXNzOyBvbmx5IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSIG5vdGljZXMgKE4xLCBOMyxcbiAqICAgIE40KSwgd2hvc2UgcmVjaXBpZW50IGhhcyBubyBhY2NvdW50LCBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAqICAgIHNlY3VyaXR5IGFkZHJlc3Mgb24gdGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChOMzDigJNOMzMpLlxuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjID1cbiAgfCB7IGtpbmQ6ICd1c2VyJzsgdXNlcklkOiBzdHJpbmc7IG9yZ0lkPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdvcmdfcGVybWlzc2lvbic7IG9yZ0lkOiBzdHJpbmc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb247IGluaGVyaXRGcm9tUm9vdD86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ29yZ19tZW1iZXJzJzsgb3JnSWQ6IHN0cmluZzsgdXNlcklkczogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ21vZGVyYXRvcnMnOyBwZXJtaXNzaW9uOiBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uOyBleGNsdWRlTWVtYmVyc09mT3JnSWQ/OiBzdHJpbmc7IGV4Y2x1ZGVVc2VySWRzPzogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N1cGVyYWRtaW5zJyB9XG4gIHwgeyBraW5kOiAnYWRkcmVzcyc7IGVtYWlsOiBzdHJpbmcgfTtcblxuLyoqIFRoZSBib2R5IG9mIGFuIGVjb3N5c3RlbSBzZW5kIHRocm91Z2ggcGxhdGZvcm0ncyBub3RpZnkgcmVsYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3Qge1xuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZDtcbiAgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiBQbGFpbi10ZXh0IGJvZHkgKGVtYWlsIGJvZHkgYW5kIGluLWFwcCBjb250ZW50KS4gKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogU3Vic2V0IG9mIHRoZSBldmVudCdzIGNoYW5uZWxzIHRvIGRlbGl2ZXIgb24gKGRlZmF1bHQ6IGFsbCBvZiB0aGVtKS4gVGhlXG4gICAqICBkaWdlc3QgZGlzcGF0Y2hlciBzZW5kcyBgWydlbWFpbCddYCBiZWNhdXNlIGluLWFwcCB3ZW50IG91dCBhdCBlbnF1ZXVlLiAqL1xuICBjaGFubmVscz86IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqIERlbGl2ZXIgdGhlIGVtYWlsIGV2ZW4gdG8gdXNlcnMgd2hvIG9wdGVkIG91dCDigJQgZm9yIGFuIGV2ZW50IHdob3NlXG4gICAqICBub3JtYWxseS1vcHRpb25hbCBlbWFpbCBpcyBtYW5kYXRvcnkgaW4gdGhpcyBpbnN0YW5jZSAoTjI0IHlhbmssIGFkdmlzb3J5XG4gICAqICBhbmQgc2VjdXJpdHktZml4IHJlcXVlc3RzKS4gKi9cbiAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuLyoqIEhhcmQgY2FwcywgbWF0Y2hpbmcgdGhlIG1lc3NhZ2Ugc2VydmljZSdzIG93biBsaW1pdHMuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYID0gMTAwMDA7XG5jb25zdCBNQVhfUkVDSVBJRU5UX1JVTEVTID0gNTA7XG5cbmNvbnN0IE9SR19QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3B1Ymxpc2hlcnM6bWFuYWdlJywgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnLCAncGx1Z2luczp3cml0ZScsICdwaXBlbGluZXM6d3JpdGUnXTtcbi8qKiBBdCBtb3N0IHRoaXMgbWFueSB1c2VycyBpbiBvbmUgYG9yZ19tZW1iZXJzYCBydWxlLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVggPSAxMDA7XG5jb25zdCBNT0RFUkFUT1JfUEVSTUlTU0lPTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydwbHVnaW5zOm1vZGVyYXRlJywgJ3B1Ymxpc2hlcnM6dmVyaWZ5J107XG5jb25zdCBFTUFJTF9TSEFQRSA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvO1xuXG5mdW5jdGlvbiBub25FbXB0eVN0cmluZyh2OiB1bmtub3duLCBtYXggPSAyNTUpOiB2IGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgdi50cmltKCkubGVuZ3RoID4gMCAmJiB2Lmxlbmd0aCA8PSBtYXg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjaXBpZW50KHJhdzogdW5rbm93biwgc3BlYzogRWNvc3lzdGVtRXZlbnRTcGVjKTogRWNvc3lzdGVtUmVjaXBpZW50U3BlYyB8IHN0cmluZyB7XG4gIGlmICghcmF3IHx8IHR5cGVvZiByYXcgIT09ICdvYmplY3QnKSByZXR1cm4gJ2VhY2ggcmVjaXBpZW50IG11c3QgYmUgYW4gb2JqZWN0JztcbiAgY29uc3QgciA9IHJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgc3dpdGNoIChyLmtpbmQpIHtcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci51c2VySWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG5lZWRzIHVzZXJJZCc7XG4gICAgICBpZiAoci5vcmdJZCAhPT0gdW5kZWZpbmVkICYmICFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICd1c2VyIHJlY2lwaWVudCBvcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIHJldHVybiB7IGtpbmQ6ICd1c2VyJywgdXNlcklkOiByLnVzZXJJZCwgLi4uKHIub3JnSWQgPyB7IG9yZ0lkOiByLm9yZ0lkIGFzIHN0cmluZyB9IDoge30pIH07XG4gICAgY2FzZSAnb3JnX3Blcm1pc3Npb24nOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICdvcmdfcGVybWlzc2lvbiByZWNpcGllbnQgbmVlZHMgb3JnSWQnO1xuICAgICAgaWYgKHR5cGVvZiByLnBlcm1pc3Npb24gIT09ICdzdHJpbmcnIHx8ICFPUkdfUEVSTUlTU0lPTlMuaW5jbHVkZXMoci5wZXJtaXNzaW9uKSkgcmV0dXJuICdvcmdfcGVybWlzc2lvbiByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnb3JnX3Blcm1pc3Npb24nLFxuICAgICAgICBvcmdJZDogci5vcmdJZCxcbiAgICAgICAgcGVybWlzc2lvbjogci5wZXJtaXNzaW9uIGFzIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24sXG4gICAgICAgIC4uLihyLmluaGVyaXRGcm9tUm9vdCA9PT0gdHJ1ZSA/IHsgaW5oZXJpdEZyb21Sb290OiB0cnVlIH0gOiB7fSksXG4gICAgICB9O1xuICAgIGNhc2UgJ29yZ19tZW1iZXJzJzoge1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLm9yZ0lkKSkgcmV0dXJuICdvcmdfbWVtYmVycyByZWNpcGllbnQgbmVlZHMgb3JnSWQnO1xuICAgICAgY29uc3QgdXNlcnMgPSByLnVzZXJJZHM7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodXNlcnMpIHx8IHVzZXJzLmxlbmd0aCA9PT0gMCB8fCAhdXNlcnMuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkgcmV0dXJuICdvcmdfbWVtYmVycyByZWNpcGllbnQgbmVlZHMgYSBub24tZW1wdHkgdXNlcklkcyBhcnJheSc7XG4gICAgICBpZiAodXNlcnMubGVuZ3RoID4gRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCkgcmV0dXJuIGBvcmdfbWVtYmVycyByZWNpcGllbnQgbmFtZXMgYXQgbW9zdCAke0VDT1NZU1RFTV9PUkdfTUVNQkVSU19NQVh9IHVzZXJzYDtcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdvcmdfbWVtYmVycycsIG9yZ0lkOiByLm9yZ0lkLCB1c2VySWRzOiBbLi4ubmV3IFNldCh1c2VycyBhcyBzdHJpbmdbXSldIH07XG4gICAgfVxuICAgIGNhc2UgJ21vZGVyYXRvcnMnOiB7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIU1PREVSQVRPUl9QRVJNSVNTSU9OUy5pbmNsdWRlcyhyLnBlcm1pc3Npb24pKSByZXR1cm4gJ21vZGVyYXRvcnMgcmVjaXBpZW50IG5hbWVzIGFuIHVuc3VwcG9ydGVkIHBlcm1pc3Npb24nO1xuICAgICAgaWYgKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkICE9PSB1bmRlZmluZWQgJiYgIW5vbkVtcHR5U3RyaW5nKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkKSkgcmV0dXJuICdleGNsdWRlTWVtYmVyc09mT3JnSWQgbXVzdCBiZSBhIHN0cmluZyc7XG4gICAgICBjb25zdCBleGNsdWRlID0gci5leGNsdWRlVXNlcklkcztcbiAgICAgIGlmIChleGNsdWRlICE9PSB1bmRlZmluZWQgJiYgKCFBcnJheS5pc0FycmF5KGV4Y2x1ZGUpIHx8ICFleGNsdWRlLmV2ZXJ5KCh1KSA9PiBub25FbXB0eVN0cmluZyh1KSkpKSByZXR1cm4gJ2V4Y2x1ZGVVc2VySWRzIG11c3QgYmUgYW4gYXJyYXkgb2YgaWRzJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdtb2RlcmF0b3JzJyxcbiAgICAgICAgcGVybWlzc2lvbjogci5wZXJtaXNzaW9uIGFzIEVjb3N5c3RlbU1vZGVyYXRvclBlcm1pc3Npb24sXG4gICAgICAgIC4uLihyLmV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCA/IHsgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkOiByLmV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBhcyBzdHJpbmcgfSA6IHt9KSxcbiAgICAgICAgLi4uKGV4Y2x1ZGUgPyB7IGV4Y2x1ZGVVc2VySWRzOiBleGNsdWRlIGFzIHN0cmluZ1tdIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdzdXBlcmFkbWlucyc6XG4gICAgICByZXR1cm4geyBraW5kOiAnc3VwZXJhZG1pbnMnIH07XG4gICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBpZiAoIXNwZWMuYWxsb3dzQWRkcmVzcykgcmV0dXJuICdhZGRyZXNzIHJlY2lwaWVudHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgYW5vbnltb3VzLXN1Ym1pc3Npb24gYW5kIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzJztcbiAgICAgIGlmICghbm9uRW1wdHlTdHJpbmcoci5lbWFpbCwgMzIwKSB8fCAhRU1BSUxfU0hBUEUudGVzdChyLmVtYWlsKSkgcmV0dXJuICdhZGRyZXNzIHJlY2lwaWVudCBuZWVkcyBhIHZhbGlkIGVtYWlsJztcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdhZGRyZXNzJywgZW1haWw6IHIuZW1haWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd1bmtub3duIHJlY2lwaWVudCBraW5kJztcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuIHtAbGluayBFY29zeXN0ZW1Ob3RpZnlSZXF1ZXN0fS4gUmV0dXJucyB0aGUgbm9ybWFsaXplZCByZXF1ZXN0LFxuICogb3IgYW4gZXJyb3Igc3RyaW5nICh0aGUgcmVsYXkncyA0MDApLiBQdXJlLCBzbyBib3RoIHRoZSBzZW5kZXIgKGZhaWwgYXRcbiAqIGVucXVldWUsIG5vdCBhdCAwOTowMCB0b21vcnJvdykgYW5kIHRoZSByZWxheSB1c2UgdGhlIHNhbWUgcnVsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVjb3N5c3RlbU5vdGlmeVJlcXVlc3QoYm9keTogdW5rbm93bik6IEVjb3N5c3RlbU5vdGlmeVJlcXVlc3QgfCBzdHJpbmcge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdvYmplY3QnKSByZXR1cm4gJ2JvZHkgbXVzdCBiZSBhbiBvYmplY3QnO1xuICBjb25zdCBiID0gYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFpc0Vjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50KGIuZXZlbnQpKSByZXR1cm4gJ2V2ZW50IG11c3QgYmUgb25lIG9mIE4xLi5OMzMnO1xuICBjb25zdCBzcGVjID0gRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFNbYi5ldmVudF07XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi5zdWJqZWN0LCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSkgcmV0dXJuIGBzdWJqZWN0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYfSlgO1xuICBpZiAoIW5vbkVtcHR5U3RyaW5nKGIudGV4dCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCkpIHJldHVybiBgdGV4dCBpcyByZXF1aXJlZCAobWF4ICR7RUNPU1lTVEVNX05PVElGWV9URVhUX01BWH0pYDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGIucmVjaXBpZW50cykgfHwgYi5yZWNpcGllbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdyZWNpcGllbnRzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICBpZiAoYi5yZWNpcGllbnRzLmxlbmd0aCA+IE1BWF9SRUNJUElFTlRfUlVMRVMpIHJldHVybiBgYXQgbW9zdCAke01BWF9SRUNJUElFTlRfUlVMRVN9IHJlY2lwaWVudCBydWxlc2A7XG4gIGNvbnN0IHJlY2lwaWVudHM6IEVjb3N5c3RlbVJlY2lwaWVudFNwZWNbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJhdyBvZiBiLnJlY2lwaWVudHMpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVJlY2lwaWVudChyYXcsIHNwZWMpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykgcmV0dXJuIHBhcnNlZDtcbiAgICByZWNpcGllbnRzLnB1c2gocGFyc2VkKTtcbiAgfVxuICBsZXQgY2hhbm5lbHM6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKGIuY2hhbm5lbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShiLmNoYW5uZWxzKSB8fCBiLmNoYW5uZWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdjaGFubmVscyBtdXN0IGJlIGEgbm9uLWVtcHR5IGFycmF5JztcbiAgICBjb25zdCBiYWQgPSBiLmNoYW5uZWxzLmZpbHRlcigoYykgPT4gIXNwZWMuY2hhbm5lbHMuaW5jbHVkZXMoYyBhcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsKSk7XG4gICAgaWYgKGJhZC5sZW5ndGggPiAwKSByZXR1cm4gYGV2ZW50ICR7Yi5ldmVudH0gaXMgbm90IGRlbGl2ZXJlZCBvbjogJHtiYWQuam9pbignLCAnKX1gO1xuICAgIGNoYW5uZWxzID0gWy4uLm5ldyBTZXQoYi5jaGFubmVscyBhcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25DaGFubmVsW10pXTtcbiAgfVxuICBpZiAoYi5tYW5kYXRvcnkgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgYi5tYW5kYXRvcnkgIT09ICdib29sZWFuJykgcmV0dXJuICdtYW5kYXRvcnkgbXVzdCBiZSBhIGJvb2xlYW4nO1xuICByZXR1cm4ge1xuICAgIGV2ZW50OiBiLmV2ZW50LFxuICAgIHJlY2lwaWVudHMsXG4gICAgc3ViamVjdDogYi5zdWJqZWN0LnRyaW0oKSxcbiAgICB0ZXh0OiBiLnRleHQudHJpbSgpLFxuICAgIC4uLihjaGFubmVscyA/IHsgY2hhbm5lbHMgfSA6IHt9KSxcbiAgICAuLi4oYi5tYW5kYXRvcnkgPT09IHRydWUgPyB7IG1hbmRhdG9yeTogdHJ1ZSB9IDoge30pLFxuICB9O1xufVxuXG4vKiogVGhlIFVUQyBob3VyIGRpZ2VzdHMgZmx1c2ggYXQgKFwiZGFpbHkgZGlnZXN0IGVtYWlsICgwOTowMCBVVEMpXCIpLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMgPSA5O1xuXG4vKipcbiAqIFRoZSBuZXh0IGZsdXNoIHRpbWUgZm9yIGEgZGlnZXN0IGNhZGVuY2UsIHN0cmljdGx5IGFmdGVyIGBub3dgOlxuICogYGhvdXJseWAg4oaSIHRoZSBuZXh0IHRvcCBvZiB0aGUgaG91cjsgYGRhaWx5YCDihpIgdGhlIG5leHQgMDk6MDAgVVRDO1xuICogYHdlZWtseWAg4oaSIHRoZSBuZXh0IE1vbmRheSAwOTowMCBVVEMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0RWNvc3lzdGVtRGlnZXN0VGltZShjYWRlbmNlOiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlLCBub3c6IERhdGUgPSBuZXcgRGF0ZSgpKTogRGF0ZSB7XG4gIGNvbnN0IHQgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpKTtcbiAgaWYgKGNhZGVuY2UgPT09ICdob3VybHknKSB7XG4gICAgdC5zZXRVVENNaW51dGVzKDAsIDAsIDApO1xuICAgIHQuc2V0VVRDSG91cnModC5nZXRVVENIb3VycygpICsgMSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdC5zZXRVVENIb3VycyhFQ09TWVNURU1fRElHRVNUX0hPVVJfVVRDLCAwLCAwLCAwKTtcbiAgaWYgKHQuZ2V0VGltZSgpIDw9IG5vdy5nZXRUaW1lKCkpIHQuc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSArIDEpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ3dlZWtseScpIHtcbiAgICAvLyBnZXRVVENEYXk6IDAgPSBTdW5kYXkg4oCmIDEgPSBNb25kYXkuXG4gICAgd2hpbGUgKHQuZ2V0VVRDRGF5KCkgIT09IDEpIHQuc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSArIDEpO1xuICB9XG4gIHJldHVybiB0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlbXBsYXRlc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBIHJlbmRlcmVkIG5vdGljZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE4yMyDigJQgc29tZW9uZSB3YXMgYWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0gb3JnJ3MgRWNvc3lzdGVtXG4gKiBNYW5hZ2VyIHJvbGUuIFNlbnQgdG8gZXZlcnkgc3VwZXJhZG1pbiBhbmQgdG8gdGhlIGFmZmVjdGVkIHVzZXI7XG4gKiB0cmFuc2FjdGlvbmFsIChubyBvcHQtb3V0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVjb3N5c3RlbU1hbmFnZXJDaGFuZ2UoaW5wdXQ6IHtcbiAgLyoqIFRoZSBhZmZlY3RlZCB1c2VyJ3MgZGlzcGxheSBuYW1lIG9yIGVtYWlsLiAqL1xuICB1c2VyOiBzdHJpbmc7XG4gIGFkZGVkOiBib29sZWFuO1xuICAvKiogV2hvIG1hZGUgdGhlIGNoYW5nZSAoc3VwZXJhZG1pbnMgb25seSBjYW4pLCB3aGVuIGtub3duLiAqL1xuICBhY3Rvcj86IHN0cmluZztcbn0pOiBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgY29uc3QgdmVyYiA9IGlucHV0LmFkZGVkID8gJ2FkZGVkIHRvJyA6ICdyZW1vdmVkIGZyb20nO1xuICBjb25zdCBieSA9IGlucHV0LmFjdG9yID8gYCBieSAke2lucHV0LmFjdG9yfWAgOiAnJztcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgRWNvc3lzdGVtIE1hbmFnZXIgcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlIEVjb3N5c3RlbSBNYW5hZ2VyIHJvbGUke2J5fS4gRWNvc3lzdGVtIE1hbmFnZXJzIGRlY2lkZSBwdWJsaXNoIHJlcXVlc3RzLCBgXG4gICAgICAgICsgJ21vZGVyYXRlIHN1Ym1pc3Npb25zIGFuZCByZXZpZXdzLCB2ZXJpZnkgcHVibGlzaGVycyBhbmQgcHVibGlzaCBhZHZpc29yaWVzIGZvciB0aGUgd2hvbGUgcGx1Z2luIGVjb3N5c3RlbS4gJ1xuICAgICAgICArICdUaGUgcm9sZSB3b3JrcyBvbmx5IGZyb20gdGhlIHN5c3RlbSBvcmdhbml6YXRpb24gYW5kIHJlcXVpcmVzIGEgdHdvLWZhY3RvciBzaWduLWluLidcbiAgICAgIDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlIEVjb3N5c3RlbSBNYW5hZ2VyIHJvbGUke2J5fSBhbmQgY2FuIG5vIGxvbmdlciBtYW5hZ2Ugb3IgYXBwcm92ZSBhbnl0aGluZyBpbiB0aGUgcGx1Z2luIGVjb3N5c3RlbS5gLFxuICB9O1xufVxuXG4vKipcbiAqIENvYWxlc2NlIHNldmVyYWwgcXVldWVkIG5vdGljZXMgaW50byBvbmUgZGlnZXN0IGVtYWlsOiBhIGNvdW50LWJlYXJpbmdcbiAqIHN1YmplY3QgYW5kIG9uZSBsaW5lIHBlciBpdGVtIChlYWNoIGl0ZW0ncyBzdWJqZWN0KSwgb2xkZXN0IGZpcnN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtRGlnZXN0KFxuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCxcbiAgaXRlbXM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnRbXSxcbik6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSByZXR1cm4gaXRlbXNbMF0hO1xuICBjb25zdCBzcGVjID0gRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFNbZXZlbnRdO1xuICBjb25zdCBjYWRlbmNlID0gc3BlYy5kaWdlc3QgPT09ICdob3VybHknID8gJ0hvdXJseScgOiBzcGVjLmRpZ2VzdCA9PT0gJ3dlZWtseScgPyAnV2Vla2x5JyA6ICdEYWlseSc7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7Y2FkZW5jZX0gZGlnZXN0OiAke2l0ZW1zLmxlbmd0aH0gw5cgJHtzcGVjLmRlc2NyaXB0aW9ufWAuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCksXG4gICAgdGV4dDogaXRlbXMubWFwKChpKSA9PiBg4oCiICR7aS5zdWJqZWN0fWApLmpvaW4oJ1xcbicpLnNsaWNlKDAsIEVDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVgpLFxuICB9O1xufVxuIl19
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lY29zeXN0ZW0tbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBZ0N0QzswRUFDMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQThFO0lBQzFILHlCQUF5QixFQUFFLGNBQWM7SUFDekMsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQywwQkFBMEIsRUFBRSxlQUFlO0lBQzNDLGtDQUFrQyxFQUFFLHVCQUF1QjtDQUM1RCxDQUFDO0FBS0YscURBQXFEO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUF3Qm5ELDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBdUU7SUFDL0csRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDRDQUE0QyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtJQUM3SCxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQ3hLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDcEgsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtJQUNsSCxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDeEcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDBDQUEwQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUMvSixFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsMkNBQTJDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDakgsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDBEQUEwRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ2hJLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUNwRyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsNkRBQTZELEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDcEksR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDhDQUE4QyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUU7SUFDM0ksR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLDRCQUE0QixFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUU7SUFDekgsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG1EQUFtRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtJQUNsSyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsRUFBRTtJQUNqSSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsbUNBQW1DLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQ2pKLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxrQ0FBa0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFO0lBQzlILEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7SUFDNUosR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ2hHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUMzRyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsMENBQTBDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7SUFDakgsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ3hHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQ3BGLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxxREFBcUQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUM1SCxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQ2pKLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxzQ0FBc0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUM3RyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsNENBQTRDLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLDBCQUEwQixFQUFFO0lBQ2hJLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxpREFBaUQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLDBCQUEwQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7SUFDaEssR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO0lBQzFHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtJQUN2Ryw0RUFBNEU7SUFDNUUsK0VBQStFO0lBQy9FLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLHdEQUF3RCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDcEosR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLG9EQUFvRCxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDaEosK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUseUVBQXlFO0lBQ3pFLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxtREFBbUQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQy9JLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSwrQ0FBK0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0NBQzVJLENBQUM7QUFFRixzREFBc0Q7QUFDdEQsTUFBTSxVQUFVLDRCQUE0QixDQUFDLEtBQWM7SUFDekQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pILENBQUM7QUFvREQsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLEdBQUcsQ0FBQztBQUNoRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLENBQUM7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFFL0IsTUFBTSxlQUFlLEdBQXNCLENBQUMsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDL0gseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUM3QyxNQUFNLHFCQUFxQixHQUFzQixDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDM0YsTUFBTSxXQUFXLEdBQUcsNEJBQTRCLENBQUM7QUFFakQsU0FBUyxjQUFjLENBQUMsQ0FBVSxFQUFFLEdBQUcsR0FBRyxHQUFHO0lBQzNDLE9BQU8sT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxHQUFZLEVBQUUsSUFBd0I7SUFDNUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsT0FBTyxrQ0FBa0MsQ0FBQztJQUMvRSxNQUFNLENBQUMsR0FBRyxHQUE4QixDQUFDO0lBQ3pDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2YsS0FBSyxNQUFNO1lBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUFFLE9BQU8sNkJBQTZCLENBQUM7WUFDcEUsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sdUNBQXVDLENBQUM7WUFDdEcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM5RixLQUFLLGdCQUFnQjtZQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxzQ0FBc0MsQ0FBQztZQUM1RSxJQUFJLE9BQU8sQ0FBQyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQUUsT0FBTywwREFBMEQsQ0FBQztZQUNuSixPQUFPO2dCQUNMLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztnQkFDZCxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQTZDO2dCQUMzRCxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDakUsQ0FBQztRQUNKLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUFFLE9BQU8sbUNBQW1DLENBQUM7WUFDekUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLHVEQUF1RCxDQUFDO1lBQzFKLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyx5QkFBeUI7Z0JBQUUsT0FBTyx1Q0FBdUMseUJBQXlCLFFBQVEsQ0FBQztZQUM5SCxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0YsQ0FBQztRQUNELEtBQUssWUFBWSxFQUFFLENBQUM7WUFDbEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQUUsT0FBTyxzREFBc0QsQ0FBQztZQUNySixJQUFJLENBQUMsQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO2dCQUFFLE9BQU8sd0NBQXdDLENBQUM7WUFDdkksTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUNqQyxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxPQUFPLHdDQUF3QyxDQUFDO1lBQ3BKLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBMEM7Z0JBQ3hELEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLHFCQUErQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsT0FBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDNUQsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLGFBQWE7WUFDaEIsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUNqQyxLQUFLLFNBQVM7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7Z0JBQUUsT0FBTywwRkFBMEYsQ0FBQztZQUMzSCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyx1Q0FBdUMsQ0FBQztZQUNoSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1FBQ2xFO1lBQ0UsT0FBTyx3QkFBd0IsQ0FBQztJQUNwQyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsSUFBYTtJQUN2RCxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLHdCQUF3QixDQUFDO0lBQ3ZFLE1BQU0sQ0FBQyxHQUFHLElBQStCLENBQUM7SUFDMUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLDhCQUE4QixDQUFDO0lBQ2xGLE1BQU0sSUFBSSxHQUFHLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUM7UUFBRSxPQUFPLDRCQUE0Qiw0QkFBNEIsR0FBRyxDQUFDO0lBQ2pJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSx5QkFBeUIsQ0FBQztRQUFFLE9BQU8seUJBQXlCLHlCQUF5QixHQUFHLENBQUM7SUFDckgsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLHNDQUFzQyxDQUFDO0lBQzdHLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsbUJBQW1CO1FBQUUsT0FBTyxXQUFXLG1CQUFtQixrQkFBa0IsQ0FBQztJQUN2RyxNQUFNLFVBQVUsR0FBNkIsRUFBRSxDQUFDO0lBQ2hELEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxRQUFvRCxDQUFDO0lBQ3pELElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sb0NBQW9DLENBQUM7UUFDdkcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBaUMsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLEtBQUsseUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyRixRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUEwQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUztRQUFFLE9BQU8sNkJBQTZCLENBQUM7SUFDeEcsT0FBTztRQUNMLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztRQUNkLFVBQVU7UUFDVixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7UUFDekIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDckQsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBK0IsRUFBRSxHQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUU7SUFDN0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEMsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELENBQUMsQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1FBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBSSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekIsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7WUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBWUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxLQWU1QztJQUNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3ZELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQztJQUMvQyw2RUFBNkU7SUFDN0Usb0VBQW9FO0lBQ3BFLHlFQUF5RTtJQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssbUJBQW1CLENBQUM7SUFDL0MsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTztRQUNyRCxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDZixDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxHQUFHO2tCQUNoRCxDQUFDLFNBQVM7b0JBQ1YsQ0FBQyxDQUFDLGtHQUFrRzswQkFDaEcseURBQXlEO29CQUM3RCxDQUFDLENBQUMsMENBQTBDLENBQUM7a0JBQzdDLHNGQUFzRjtZQUMxRixDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxFQUFFO2tCQUMvQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsd0VBQXdFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUNuRyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsS0FBbUMsRUFDbkMsS0FBOEM7SUFFOUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDcEcsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLE9BQU8sWUFBWSxLQUFLLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLDRCQUE0QixDQUFDO1FBQzFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0tBQ3hGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHBsdWdpbi1lY29zeXN0ZW0gbm90aWZpY2F0aW9uIGNvbnRyYWN0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKSxcbiAqIHNoYXJlZCBieSB0aGUgc2VuZGVyICh0aGUgcGx1Z2luIHNlcnZpY2UncyBlbnF1ZXVlIEFQSSBhbmQgZGlnZXN0XG4gKiBkaXNwYXRjaGVyKSBhbmQgdGhlIHJlbGF5IChwbGF0Zm9ybSBgUE9TVCAvaW50ZXJuYWwvbm90aWZ5LWVtYWlsYCkuXG4gKlxuICogUmVjaXBpZW50cyB0cmF2ZWwgYXMgUlVMRVMsIG5ldmVyIGFzIGxpc3RzOiBwbGF0Zm9ybSByZXNvbHZlcyBlYWNoXG4gKiB7QGxpbmsgRWNvc3lzdGVtUmVjaXBpZW50U3BlY30gYWdhaW5zdCBpdHMgdXNlci9Sb2xlIGRpcmVjdG9yeSBBVCBTRU5EIFRJTUUsXG4gKiBzbyBhIGRpZ2VzdCB0aGF0IGZsdXNoZXMgdG9tb3Jyb3cgcmVhY2hlcyB0b21vcnJvdydzIG1vZGVyYXRvcnMsIHRoZSBwbHVnaW5cbiAqIHNlcnZpY2UgbmV2ZXIgaGFuZGxlcyBhbiBlbWFpbCBhZGRyZXNzIG9yIGEgbWVtYmVyc2hpcCBsaXN0LCBhbmQgYSBwdWJsaXNoZXJcbiAqIGNhbiBuZXZlciBsZWFybiB3aG8gaW5zdGFsbGVkIHRoZWlyIHBsdWdpbiAodGhlIHJlbGF5IG1haWxzIGVhY2ggcmVjaXBpZW50XG4gKiBpbmRpdmlkdWFsbHkg4oCUIG5vIHNoYXJlZCBUbzogbGluZSkuXG4gKi9cblxuLyoqIEEgbm90aWZpY2F0aW9uIGV2ZW50IG51bWJlci4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQgPVxuICB8ICdOMScgfCAnTjInIHwgJ04zJyB8ICdONCcgfCAnTjUnIHwgJ042JyB8ICdONycgfCAnTjgnIHwgJ045JyB8ICdOMTAnXG4gIHwgJ04xMScgfCAnTjEyJyB8ICdOMTMnIHwgJ04xNCcgfCAnTjE1JyB8ICdOMTYnIHwgJ04xNycgfCAnTjE4JyB8ICdOMTknIHwgJ04yMCdcbiAgfCAnTjIxJyB8ICdOMjInIHwgJ04yMycgfCAnTjI0JyB8ICdOMjUnIHwgJ04yNicgfCAnTjI3JyB8ICdOMjgnIHwgJ04yOSdcbiAgfCAnTjMwJyB8ICdOMzEnIHwgJ04zMicgfCAnTjMzJztcblxuLyoqIEEgZGVsaXZlcnkgY2hhbm5lbC4gSW4tYXBwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGg7IGVtYWlsIGlzIHRoZSBjb3VydGVzeSBjb3B5LiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbCA9ICdpbl9hcHAnIHwgJ2VtYWlsJztcblxuLyoqIEEgcGVyLXVzZXIgRU1BSUwgb3B0LW91dCBrZXkuIEluLWFwcCBpcyBuZXZlciBvcHRpb25hbC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZSA9XG4gIHwgJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnO1xuXG4vKiogVGhlIGZpZWxkIGVhY2ggcHJlZmVyZW5jZSBrZXkgaXMgc3RvcmVkIHVuZGVyIGluIHRoZSB1c2VyJ3MgcGVyLW9yZ1xuICogIGBub3RpZmljYXRpb25zLmVjb3N5c3RlbWAgcHJlZmVyZW5jZXMgKHBsYXRmb3JtIGBVc2VyUHJlZmVyZW5jZXNgKS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFM6IFJlYWRvbmx5PFJlY29yZDxFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UsIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkPj4gPSB7XG4gICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCc6ICdyZXZpZXdzRW1haWwnLFxuICAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJzogJ3VwZ3JhZGVzRW1haWwnLFxuICAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJzogJ2luc3RhbGxzRW1haWwnLFxuICAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnOiAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJyxcbn07XG5cbi8qKiBTdG9yZWQgZmllbGQgbmFtZXMgb2YgdGhlIGVjb3N5c3RlbSBlbWFpbCBwcmVmZXJlbmNlcyAoYWxsIGRlZmF1bHQgYHRydWVgKS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkID0gJ3Jldmlld3NFbWFpbCcgfCAndXBncmFkZXNFbWFpbCcgfCAnaW5zdGFsbHNFbWFpbCcgfCAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJztcblxuLyoqIEV2ZXJ5IHN0b3JlZCBlY29zeXN0ZW0gZW1haWwtcHJlZmVyZW5jZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRF9OQU1FUzogcmVhZG9ubHkgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGRbXSA9XG4gIE9iamVjdC52YWx1ZXMoRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTKTtcblxuLyoqIEhvdyBvZnRlbiBhIGJhdGNoZWQgZW1haWwgaXMgZmx1c2hlZC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbURpZ2VzdENhZGVuY2UgPSAnaG91cmx5JyB8ICdkYWlseScgfCAnd2Vla2x5JztcblxuLyoqIE9uZSBldmVudCdzIGRlbGl2ZXJ5IHJ1bGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1FdmVudFNwZWMge1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24gKGRvY3MsIGxvZ3MpLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbHMgdGhlIGV2ZW50IGlzIGRlbGl2ZXJlZCBvbi4gKi9cbiAgY2hhbm5lbHM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqXG4gICAqIEVtYWlsIG9wdC1vdXQga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgZW1haWwgaXMgVFJBTlNBQ1RJT05BTCAvIHNlY3VyaXR5XG4gICAqIChOMSwgTjPigJNONSwgTjfigJNOMTAsIE4xOOKAk04yMywgTjI1LCBOMjjigJNOMzMgY2FuJ3QgYmUgdHVybmVkIG9mZikuXG4gICAqL1xuICBwcmVmZXJlbmNlOiBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgfCBudWxsO1xuICAvKiogV2hlbiB0aGUgZW1haWwgaXMgYmF0Y2hlZCByYXRoZXIgdGhhbiBpbW1lZGlhdGUsIGl0cyBjYWRlbmNlLiAqL1xuICBkaWdlc3Q/OiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlO1xuICAvKiogQWxsb3dlZCB0byBhZGRyZXNzIGEgcmF3IGVtYWlsOiB0aGUgYW5vbnltb3VzIFNVQk1JVFRFUiAodGhlXG4gICAqICB0cmFuc2FjdGlvbmFsIHN1Ym1pc3Npb24gbm90aWNlcykgYW5kIGFuIG9yZydzIFZFUklGSUVEIGV4dGVybmFsXG4gICAqICBzZWN1cml0eSBhZGRyZXNzICh0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgTjMw4oCTTjMzKS4gKi9cbiAgYWxsb3dzQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCwgRWNvc3lzdGVtRXZlbnRTcGVjPj4gPSB7XG4gIE4xOiB7IGRlc2NyaXB0aW9uOiAnQW5vbnltb3VzIHN1Ym1pc3Npb24gcmVjZWl2ZWQgKG1hZ2ljIGxpbmspJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMjogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gdmVyaWZpZWQsIGVudGVyZWQgdGhlIG1vZGVyYXRpb24gcXVldWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4zOiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBmYWlsZWQgYXV0b21hdGVkIGdhdGVzJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONDogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE41OiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBjbGFpbWVkIGJ5IGFuIGFjY291bnQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBONjogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE43OiB7IGRlc2NyaXB0aW9uOiAnVmVyaWZpZWQgYXBwbGljYXRpb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOODogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gYWN0aW9uIG9uIGEgbGlzdGluZyAoc3VzcGVuZCwgeWFuaywgdGFrZWRvd24pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjk6IHsgZGVzY3JpcHRpb246ICdPd25lcnNoaXAgdHJhbnNmZXIgcmVxdWVzdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjEwOiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIGFjY2VwdGVkLCBkZWNsaW5lZCwgYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTE6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIHJlcXVlc3RlZCAocG9saWN5IHJlcXVpcmVzIGFwcHJvdmFsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTI6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIGFwcHJvdmVkIG9yIGRlbmllZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTM6IHsgZGVzY3JpcHRpb246ICdOZXcgdmVyc2lvbiBhdmFpbGFibGUgd2l0aGluIGFuIGluc3RhbGxcXCdzIHBvbGljeScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMTQ6IHsgZGVzY3JpcHRpb246ICdMaXN0aW5nIGRlcHJlY2F0ZWQgb3IgdW5tYWludGFpbmVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4xNTogeyBkZXNjcmlwdGlvbjogJ05ldyBvciBlZGl0ZWQgcmV2aWV3IG9uIGEgbGlzdGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnLCBkaWdlc3Q6ICdob3VybHknIH0sXG4gIE4xNjogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2hlciByZXBsaWVkIHRvIHlvdXIgcmV2aWV3JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCcgfSxcbiAgTjE3OiB7IGRlc2NyaXB0aW9uOiAnUmV2aWV3IGhlbGQgKHJlcG9ydHMsIGJ1cnN0LCBmaWx0ZXIpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMTg6IHsgZGVzY3JpcHRpb246ICdZb3VyIHJldmlldyB3YXMgcmVtb3ZlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xOTogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBmbGFnZ2VkIGFzIGEgc2VjdXJpdHkgaXNzdWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjA6IHsgZGVzY3JpcHRpb246ICdBZHZpc29yeSBkcmFmdCBhdXRvLWNyZWF0ZWQgKENWRSByZXNjYW4pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIxOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgcHVibGlzaGVkIG9yIHdpdGhkcmF3bicsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMjogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gU0xBIGJyZWFjaCcsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIzOiB7IGRlc2NyaXB0aW9uOiAnQWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI0OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IHN1Ym1pdHRlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjI1OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI2OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBvciB2ZXJzaW9uIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4yNzogeyBkZXNjcmlwdGlvbjogJ0luc3RhbGxlZCBsaXN0aW5nIGF1dG8tdXBkYXRlZCB3aXRoaW4gaXRzIHJhbmdlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnLCBkaWdlc3Q6ICd3ZWVrbHknIH0sXG4gIE4yODogeyBkZXNjcmlwdGlvbjogJ0EgcmVxdWVzdCBuZWVkcyBhIHNlY29uZCBhcHByb3ZhbCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yOTogeyBkZXNjcmlwdGlvbjogJ1BsYW4gY2hhbmdlIGFmZmVjdHMgcHVibGlzaGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQgXCJTY2FuIGdhdGVzXCIpLlxuICAvLyBSZWNpcGllbnRzIGZvbGxvdyB0aGUgb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbiBzZXR0aW5nczsgdGhlIG9yZydzXG4gIC8vIHdlYmhvb2sgKGlmIGFueSkgaXMgc2VudCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgaXRzZWxmLiBOMzEncyBlbWFpbCBob25vcnNcbiAgLy8gdGhlIG9yZydzIGRpZ2VzdCBzZXR0aW5nICh0aGUgc2VuZGVyIGJhdGNoZXMgaXQpLCBOMzAgaXMgYWx3YXlzIGltbWVkaWF0ZS5cbiAgTjMwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHZlcnNpb24gYmxvY2tlZCAodW5zY2FubmVkIG9yIGZpeGFibGUgQ3JpdGljYWwpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMxOiB7IGRlc2NyaXB0aW9uOiAnUmVzY2FuIGZvdW5kIG5ldyBDcml0aWNhbC9IaWdoIGluIGEgcGx1Z2luIHZlcnNpb24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICAvLyBQaXBlbGluZS1vd25lciBub3RpY2VzOiBhIGxvb2t1cCAvIHJ1bnRpbWUgY2hlY2sgUkVGVVNFRCBhIHBpcGVsaW5lJ3MgcGx1Z2luXG4gIC8vIHZlcnNpb24gKGRlZHVwbGljYXRlZCBwZXIgcGlwZWxpbmUgKyB2ZXJzaW9uIHBlciBkYXkpLCBhbmQgYSB0aW1lLWJveGVkIHJpc2tcbiAgLy8gYWNjZXB0YW5jZSBvZiBhIHBpcGVsaW5lJ3MgZmluZGluZ3MgTEFQU0VEICh0aGUgZmluZGluZ3MgYXJlIGxpdmUgYWdhaW4pLlxuICAvLyBSb3V0ZWQgdG8gdGhlIG9yZydzIHBpcGVsaW5lIHdyaXRlcnMgdW5kZXIgdGhlIHNhbWUgc2VjdXJpdHkgc2V0dGluZ3MuXG4gIE4zMjogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGJsb2NrZWQgYnkgYSBwbHVnaW4gdnVsbmVyYWJpbGl0eSBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMzM6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSB2dWxuZXJhYmlsaXR5IHJpc2sgYWNjZXB0YW5jZSBsYXBzZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxufTtcblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBpcyBhIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFMsIHZhbHVlKTtcbn1cblxuLyoqIE9yZy1sb2NhbCBwZXJtaXNzaW9ucyBhbiB7QGxpbmsgRWNvc3lzdGVtUmVjaXBpZW50U3BlY30gYG9yZ19wZXJtaXNzaW9uYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbiA9ICdwdWJsaXNoZXJzOm1hbmFnZScgfCAncGx1Z2luX2luc3RhbGxzOm1hbmFnZScgfCAncGx1Z2luczp3cml0ZScgfCAncGlwZWxpbmVzOndyaXRlJztcbi8qKiBTeXN0ZW0tb3JnIHBlcm1pc3Npb25zIGEgYG1vZGVyYXRvcnNgIHJ1bGUgbWF5IG5hbWUuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uID0gJ3BsdWdpbnM6bW9kZXJhdGUnIHwgJ3B1Ymxpc2hlcnM6dmVyaWZ5JztcblxuLyoqXG4gKiBBIHJlY2lwaWVudCBSVUxFLCByZXNvbHZlZCBieSBwbGF0Zm9ybSBhdCBzZW5kIHRpbWU6XG4gKlxuICogIC0gYHVzZXJgIOKAlCBvbmUgdXNlciAoUmVxdWVzdGVyLCBSZXZpZXcgYXV0aG9yLCB0aGUgYWZmZWN0ZWQgdXNlciBvZiBOMjMpLlxuICogICAgYG9yZ0lkYCBwaWNrcyB0aGUgaW5ib3g7IGRlZmF1bHRzIHRvIHRoZSB1c2VyJ3MgbGFzdCBhY3RpdmUgb3JnLlxuICogIC0gYG9yZ19wZXJtaXNzaW9uYCDigJQgYWN0aXZlIG1lbWJlcnMgb2YgYG9yZ0lkYCBob2xkaW5nIGBwZXJtaXNzaW9uYFxuICogICAgKFB1Ymxpc2hlciBtYW5hZ2VycyA9IGBwdWJsaXNoZXJzOm1hbmFnZWAsIE9yZyBhcHByb3ZlcnMgPVxuICogICAgYHBsdWdpbl9pbnN0YWxsczptYW5hZ2VgLCBwbHVnaW4gd3JpdGVycyA9IGBwbHVnaW5zOndyaXRlYCkuIFdpdGhcbiAqICAgIGBpbmhlcml0RnJvbVJvb3RgLCBhIHRlYW0gd2l0aCBubyBob2xkZXJzIGZhbGxzIGJhY2sgdG8gaXRzIHJvb3Qgb3JnJ3NcbiAqICAgIGhvbGRlcnM7IHdpdGggbm9uZSBhbnl3aGVyZSwgdGhlIG9yZydzIG93bmVycy5cbiAqICAtIGBvcmdfbWVtYmVyc2Ag4oCUIHRoZSBuYW1lZCB1c2VycywgYnV0IG9ubHkgdGhvc2Ugd2hvIGFyZSBBQ1RJVkUgbWVtYmVycyBvZlxuICogICAgYG9yZ0lkYCBhdCBzZW5kIHRpbWUgKGFuIG9yZydzIGNob3NlbiBzZWN1cml0eSByZWNpcGllbnRzOiBhIHN0YWxlIGlkLCBvclxuICogICAgc29tZW9uZSB3aG8gbGVmdCwgcmVjZWl2ZXMgbm90aGluZykuXG4gKiAgLSBgbW9kZXJhdG9yc2Ag4oCUIHRoZSBzeXN0ZW0gb3JnJ3MgaG9sZGVycyBvZiBgcGVybWlzc2lvbmAgKHRoZSBFY29zeXN0ZW1cbiAqICAgIE1hbmFnZXIgcm9sZSksIG1pbnVzIGFueW9uZSB3aXRoIGEgY29uZmxpY3Qgb2YgaW50ZXJlc3QgKG1lbWJlcnMgb2ZcbiAqICAgIGBleGNsdWRlTWVtYmVyc09mT3JnSWRgLCBvciB0aGUgbGlzdGVkIHVzZXJzKTsgc3VwZXJhZG1pbnMgd2hlbiBlbXB0eS5cbiAqICAtIGBzdXBlcmFkbWluc2Ag4oCUIGV2ZXJ5IHBsYXRmb3JtIHN1cGVyYWRtaW4uXG4gKiAgLSBgYWRkcmVzc2Ag4oCUIGEgcmF3IGFkZHJlc3M7IG9ubHkgdGhlIGFub255bW91cyBTVUJNSVRURVIgbm90aWNlcyAoTjEsIE4zLFxuICogICAgTjQpLCB3aG9zZSByZWNpcGllbnQgaGFzIG5vIGFjY291bnQsIGFuZCBhbiBvcmcncyBWRVJJRklFRCBleHRlcm5hbFxuICogICAgc2VjdXJpdHkgYWRkcmVzcyBvbiB0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKE4zMOKAk04zMykuXG4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbVJlY2lwaWVudFNwZWMgPVxuICB8IHsga2luZDogJ3VzZXInOyB1c2VySWQ6IHN0cmluZzsgb3JnSWQ/OiBzdHJpbmcgfVxuICB8IHsga2luZDogJ29yZ19wZXJtaXNzaW9uJzsgb3JnSWQ6IHN0cmluZzsgcGVybWlzc2lvbjogRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbjsgaW5oZXJpdEZyb21Sb290PzogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiAnb3JnX21lbWJlcnMnOyBvcmdJZDogc3RyaW5nOyB1c2VySWRzOiBzdHJpbmdbXSB9XG4gIHwgeyBraW5kOiAnbW9kZXJhdG9ycyc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU1vZGVyYXRvclBlcm1pc3Npb247IGV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZD86IHN0cmluZzsgZXhjbHVkZVVzZXJJZHM/OiBzdHJpbmdbXSB9XG4gIHwgeyBraW5kOiAnc3VwZXJhZG1pbnMnIH1cbiAgfCB7IGtpbmQ6ICdhZGRyZXNzJzsgZW1haWw6IHN0cmluZyB9O1xuXG4vKiogVGhlIGJvZHkgb2YgYW4gZWNvc3lzdGVtIHNlbmQgdGhyb3VnaCBwbGF0Zm9ybSdzIG5vdGlmeSByZWxheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB7XG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkO1xuICByZWNpcGllbnRzOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjW107XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgLyoqIFBsYWluLXRleHQgYm9keSAoZW1haWwgYm9keSBhbmQgaW4tYXBwIGNvbnRlbnQpLiAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBTdWJzZXQgb2YgdGhlIGV2ZW50J3MgY2hhbm5lbHMgdG8gZGVsaXZlciBvbiAoZGVmYXVsdDogYWxsIG9mIHRoZW0pLiBUaGVcbiAgICogIGRpZ2VzdCBkaXNwYXRjaGVyIHNlbmRzIGBbJ2VtYWlsJ11gIGJlY2F1c2UgaW4tYXBwIHdlbnQgb3V0IGF0IGVucXVldWUuICovXG4gIGNoYW5uZWxzPzogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdO1xuICAvKiogRGVsaXZlciB0aGUgZW1haWwgZXZlbiB0byB1c2VycyB3aG8gb3B0ZWQgb3V0IOKAlCBmb3IgYW4gZXZlbnQgd2hvc2VcbiAgICogIG5vcm1hbGx5LW9wdGlvbmFsIGVtYWlsIGlzIG1hbmRhdG9yeSBpbiB0aGlzIGluc3RhbmNlIChOMjQgeWFuaywgYWR2aXNvcnlcbiAgICogIGFuZCBzZWN1cml0eS1maXggcmVxdWVzdHMpLiAqL1xuICBtYW5kYXRvcnk/OiBib29sZWFuO1xufVxuXG4vKiogSGFyZCBjYXBzLCBtYXRjaGluZyB0aGUgbWVzc2FnZSBzZXJ2aWNlJ3Mgb3duIGxpbWl0cy4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYID0gNTAwO1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVggPSAxMDAwMDtcbmNvbnN0IE1BWF9SRUNJUElFTlRfUlVMRVMgPSA1MDtcblxuY29uc3QgT1JHX1BFUk1JU1NJT05TOiByZWFkb25seSBzdHJpbmdbXSA9IFsncHVibGlzaGVyczptYW5hZ2UnLCAncGx1Z2luX2luc3RhbGxzOm1hbmFnZScsICdwbHVnaW5zOndyaXRlJywgJ3BpcGVsaW5lczp3cml0ZSddO1xuLyoqIEF0IG1vc3QgdGhpcyBtYW55IHVzZXJzIGluIG9uZSBgb3JnX21lbWJlcnNgIHJ1bGUuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCA9IDEwMDtcbmNvbnN0IE1PREVSQVRPUl9QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3BsdWdpbnM6bW9kZXJhdGUnLCAncHVibGlzaGVyczp2ZXJpZnknXTtcbmNvbnN0IEVNQUlMX1NIQVBFID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG5cbmZ1bmN0aW9uIG5vbkVtcHR5U3RyaW5nKHY6IHVua25vd24sIG1heCA9IDI1NSk6IHYgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LnRyaW0oKS5sZW5ndGggPiAwICYmIHYubGVuZ3RoIDw9IG1heDtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNpcGllbnQocmF3OiB1bmtub3duLCBzcGVjOiBFY29zeXN0ZW1FdmVudFNwZWMpOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjIHwgc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiAnZWFjaCByZWNpcGllbnQgbXVzdCBiZSBhbiBvYmplY3QnO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzd2l0Y2ggKHIua2luZCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLnVzZXJJZCkpIHJldHVybiAndXNlciByZWNpcGllbnQgbmVlZHMgdXNlcklkJztcbiAgICAgIGlmIChyLm9yZ0lkICE9PSB1bmRlZmluZWQgJiYgIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG9yZ0lkIG11c3QgYmUgYSBzdHJpbmcnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ3VzZXInLCB1c2VySWQ6IHIudXNlcklkLCAuLi4oci5vcmdJZCA/IHsgb3JnSWQ6IHIub3JnSWQgYXMgc3RyaW5nIH0gOiB7fSkgfTtcbiAgICBjYXNlICdvcmdfcGVybWlzc2lvbic6XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIU9SR19QRVJNSVNTSU9OUy5pbmNsdWRlcyhyLnBlcm1pc3Npb24pKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuYW1lcyBhbiB1bnN1cHBvcnRlZCBwZXJtaXNzaW9uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdvcmdfcGVybWlzc2lvbicsXG4gICAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuaW5oZXJpdEZyb21Sb290ID09PSB0cnVlID8geyBpbmhlcml0RnJvbVJvb3Q6IHRydWUgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgY2FzZSAnb3JnX21lbWJlcnMnOiB7XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBjb25zdCB1c2VycyA9IHIudXNlcklkcztcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh1c2VycykgfHwgdXNlcnMubGVuZ3RoID09PSAwIHx8ICF1c2Vycy5ldmVyeSgodSkgPT4gbm9uRW1wdHlTdHJpbmcodSkpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBhIG5vbi1lbXB0eSB1c2VySWRzIGFycmF5JztcbiAgICAgIGlmICh1c2Vycy5sZW5ndGggPiBFQ09TWVNURU1fT1JHX01FTUJFUlNfTUFYKSByZXR1cm4gYG9yZ19tZW1iZXJzIHJlY2lwaWVudCBuYW1lcyBhdCBtb3N0ICR7RUNPU1lTVEVNX09SR19NRU1CRVJTX01BWH0gdXNlcnNgO1xuICAgICAgcmV0dXJuIHsga2luZDogJ29yZ19tZW1iZXJzJywgb3JnSWQ6IHIub3JnSWQsIHVzZXJJZHM6IFsuLi5uZXcgU2V0KHVzZXJzIGFzIHN0cmluZ1tdKV0gfTtcbiAgICB9XG4gICAgY2FzZSAnbW9kZXJhdG9ycyc6IHtcbiAgICAgIGlmICh0eXBlb2Ygci5wZXJtaXNzaW9uICE9PSAnc3RyaW5nJyB8fCAhTU9ERVJBVE9SX1BFUk1JU1NJT05TLmluY2x1ZGVzKHIucGVybWlzc2lvbikpIHJldHVybiAnbW9kZXJhdG9ycyByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICBpZiAoci5leGNsdWRlTWVtYmVyc09mT3JnSWQgIT09IHVuZGVmaW5lZCAmJiAhbm9uRW1wdHlTdHJpbmcoci5leGNsdWRlTWVtYmVyc09mT3JnSWQpKSByZXR1cm4gJ2V4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4Y2x1ZGUgPSByLmV4Y2x1ZGVVc2VySWRzO1xuICAgICAgaWYgKGV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoZXhjbHVkZSkgfHwgIWV4Y2x1ZGUuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkpIHJldHVybiAnZXhjbHVkZVVzZXJJZHMgbXVzdCBiZSBhbiBhcnJheSBvZiBpZHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ21vZGVyYXRvcnMnLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkID8geyBleGNsdWRlTWVtYmVyc09mT3JnSWQ6IHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkIGFzIHN0cmluZyB9IDoge30pLFxuICAgICAgICAuLi4oZXhjbHVkZSA/IHsgZXhjbHVkZVVzZXJJZHM6IGV4Y2x1ZGUgYXMgc3RyaW5nW10gfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ3N1cGVyYWRtaW5zJzpcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdzdXBlcmFkbWlucycgfTtcbiAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGlmICghc3BlYy5hbGxvd3NBZGRyZXNzKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBhbm9ueW1vdXMtc3VibWlzc2lvbiBhbmQgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMnO1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLmVtYWlsLCAzMjApIHx8ICFFTUFJTF9TSEFQRS50ZXN0KHIuZW1haWwpKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50IG5lZWRzIGEgdmFsaWQgZW1haWwnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ2FkZHJlc3MnLCBlbWFpbDogci5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3Vua25vd24gcmVjaXBpZW50IGtpbmQnO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4ge0BsaW5rIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3R9LiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHJlcXVlc3QsXG4gKiBvciBhbiBlcnJvciBzdHJpbmcgKHRoZSByZWxheSdzIDQwMCkuIFB1cmUsIHNvIGJvdGggdGhlIHNlbmRlciAoZmFpbCBhdFxuICogZW5xdWV1ZSwgbm90IGF0IDA5OjAwIHRvbW9ycm93KSBhbmQgdGhlIHJlbGF5IHVzZSB0aGUgc2FtZSBydWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChib2R5OiB1bmtub3duKTogRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB8IHN0cmluZyB7XG4gIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHJldHVybiAnYm9keSBtdXN0IGJlIGFuIG9iamVjdCc7XG4gIGNvbnN0IGIgPSBib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIWlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQoYi5ldmVudCkpIHJldHVybiAnZXZlbnQgbXVzdCBiZSBvbmUgb2YgTjEuLk4zMyc7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tiLmV2ZW50XTtcbiAgaWYgKCFub25FbXB0eVN0cmluZyhiLnN1YmplY3QsIEVDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVgpKSByZXR1cm4gYHN1YmplY3QgaXMgcmVxdWlyZWQgKG1heCAke0VDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVh9KWA7XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi50ZXh0LCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYKSkgcmV0dXJuIGB0ZXh0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYfSlgO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYi5yZWNpcGllbnRzKSB8fCBiLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3JlY2lwaWVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSc7XG4gIGlmIChiLnJlY2lwaWVudHMubGVuZ3RoID4gTUFYX1JFQ0lQSUVOVF9SVUxFUykgcmV0dXJuIGBhdCBtb3N0ICR7TUFYX1JFQ0lQSUVOVF9SVUxFU30gcmVjaXBpZW50IHJ1bGVzYDtcbiAgY29uc3QgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdID0gW107XG4gIGZvciAoY29uc3QgcmF3IG9mIGIucmVjaXBpZW50cykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVjaXBpZW50KHJhdywgc3BlYyk7XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VkO1xuICAgIHJlY2lwaWVudHMucHVzaChwYXJzZWQpO1xuICB9XG4gIGxldCBjaGFubmVsczogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdIHwgdW5kZWZpbmVkO1xuICBpZiAoYi5jaGFubmVscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGIuY2hhbm5lbHMpIHx8IGIuY2hhbm5lbHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2NoYW5uZWxzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICAgIGNvbnN0IGJhZCA9IGIuY2hhbm5lbHMuZmlsdGVyKChjKSA9PiAhc3BlYy5jaGFubmVscy5pbmNsdWRlcyhjIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwpKTtcbiAgICBpZiAoYmFkLmxlbmd0aCA+IDApIHJldHVybiBgZXZlbnQgJHtiLmV2ZW50fSBpcyBub3QgZGVsaXZlcmVkIG9uOiAke2JhZC5qb2luKCcsICcpfWA7XG4gICAgY2hhbm5lbHMgPSBbLi4ubmV3IFNldChiLmNoYW5uZWxzIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSldO1xuICB9XG4gIGlmIChiLm1hbmRhdG9yeSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiLm1hbmRhdG9yeSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ21hbmRhdG9yeSBtdXN0IGJlIGEgYm9vbGVhbic7XG4gIHJldHVybiB7XG4gICAgZXZlbnQ6IGIuZXZlbnQsXG4gICAgcmVjaXBpZW50cyxcbiAgICBzdWJqZWN0OiBiLnN1YmplY3QudHJpbSgpLFxuICAgIHRleHQ6IGIudGV4dC50cmltKCksXG4gICAgLi4uKGNoYW5uZWxzID8geyBjaGFubmVscyB9IDoge30pLFxuICAgIC4uLihiLm1hbmRhdG9yeSA9PT0gdHJ1ZSA/IHsgbWFuZGF0b3J5OiB0cnVlIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUaGUgVVRDIGhvdXIgZGlnZXN0cyBmbHVzaCBhdCAoXCJkYWlseSBkaWdlc3QgZW1haWwgKDA5OjAwIFVUQylcIikuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0RJR0VTVF9IT1VSX1VUQyA9IDk7XG5cbi8qKlxuICogVGhlIG5leHQgZmx1c2ggdGltZSBmb3IgYSBkaWdlc3QgY2FkZW5jZSwgc3RyaWN0bHkgYWZ0ZXIgYG5vd2A6XG4gKiBgaG91cmx5YCDihpIgdGhlIG5leHQgdG9wIG9mIHRoZSBob3VyOyBgZGFpbHlgIOKGkiB0aGUgbmV4dCAwOTowMCBVVEM7XG4gKiBgd2Vla2x5YCDihpIgdGhlIG5leHQgTW9uZGF5IDA5OjAwIFVUQy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lKGNhZGVuY2U6IEVjb3N5c3RlbURpZ2VzdENhZGVuY2UsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ2hvdXJseScpIHtcbiAgICB0LnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG4gICAgdC5zZXRVVENIb3Vycyh0LmdldFVUQ0hvdXJzKCkgKyAxKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0LnNldFVUQ0hvdXJzKEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMsIDAsIDAsIDApO1xuICBpZiAodC5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIC8vIGdldFVUQ0RheTogMCA9IFN1bmRheSDigKYgMSA9IE1vbmRheS5cbiAgICB3aGlsZSAodC5nZXRVVENEYXkoKSAhPT0gMSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcmVuZGVyZWQgbm90aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgc3ViamVjdDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTjIzIOKAlCBzb21lb25lIHdhcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSBvcmcncyBFY29zeXN0ZW1cbiAqIE1hbmFnZXIgcm9sZS4gU2VudCB0byBldmVyeSBzdXBlcmFkbWluIGFuZCB0byB0aGUgYWZmZWN0ZWQgdXNlcjtcbiAqIHRyYW5zYWN0aW9uYWwgKG5vIG9wdC1vdXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtTWFuYWdlckNoYW5nZShpbnB1dDoge1xuICAvKiogVGhlIGFmZmVjdGVkIHVzZXIncyBkaXNwbGF5IG5hbWUgb3IgZW1haWwuICovXG4gIHVzZXI6IHN0cmluZztcbiAgYWRkZWQ6IGJvb2xlYW47XG4gIC8qKiBXaG8gbWFkZSB0aGUgY2hhbmdlIChzdXBlcmFkbWlucyBvbmx5IGNhbiksIHdoZW4ga25vd24uICovXG4gIGFjdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFJvbGUgYWN0dWFsbHkgZ3JhbnRlZC4gVGhpcyBub3RpY2UgZmlyZXMgZm9yIEFOWSBSb2xlIGNhcnJ5aW5nIGFcbiAgICogc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb24g4oCUIGBlY29zeXN0ZW1Sb2xlTmFtZWAgcmV0dXJucyB3aGljaGV2ZXIgb25lIGl0XG4gICAqIGlzIOKAlCBzbyBoYXJkLWNvZGluZyBcIkVjb3N5c3RlbSBNYW5hZ2VyXCIgYW5ub3VuY2VkIHN0YWZmaW5nICoqQ29uc29sZVxuICAgKiBBZG1pbmlzdHJhdG9yKiogKGEgcmVhZC93cml0ZSBzaGVsbCBvdmVyIGV2ZXJ5IHRlbmFudCdzIHJvd3MpIG9yICoqU3VwcG9ydFxuICAgKiBMZWFkKiogKGBpbXBlcnNvbmF0aW9uOm9wZW5gKSBhcyBhIHBsdWdpbi1tb2RlcmF0aW9uIGdyYW50LiBUaGUgYXVkaXQgcm93XG4gICAqIGhhZCB0aGUgbmFtZSBhbGwgYWxvbmc7IHRoZSBtZXNzYWdlIG9wZXJhdG9ycyBhY3R1YWxseSByZWFkIGRpZCBub3QuXG4gICAqL1xuICByb2xlPzogc3RyaW5nO1xufSk6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBjb25zdCB2ZXJiID0gaW5wdXQuYWRkZWQgPyAnYWRkZWQgdG8nIDogJ3JlbW92ZWQgZnJvbSc7XG4gIGNvbnN0IGJ5ID0gaW5wdXQuYWN0b3IgPyBgIGJ5ICR7aW5wdXQuYWN0b3J9YCA6ICcnO1xuICBjb25zdCByb2xlID0gaW5wdXQucm9sZSA/PyAnRWNvc3lzdGVtIE1hbmFnZXInO1xuICAvLyBUaGUgYm9keSBkZXNjcmliZXMgd2hhdCB0aGUgUk9MRSBkb2VzLCBzbyBpdCBjYW4gb25seSBzcGVhayBmb3IgdGhlIG9uZSBpdFxuICAvLyB3YXMgd3JpdHRlbiBhYm91dC4gRm9yIGFueSBvdGhlciwgc2F5IHdoYXQgaGFwcGVuZWQgYW5kIGxlYXZlIHRoZVxuICAvLyBjYXBhYmlsaXRpZXMgdG8gdGhlIFJvbGUgaXRzZWxmIHJhdGhlciB0aGFuIGRlc2NyaWJpbmcgdGhlIHdyb25nIG9uZXMuXG4gIGNvbnN0IGVjb3N5c3RlbSA9IHJvbGUgPT09ICdFY29zeXN0ZW0gTWFuYWdlcic7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZSR7Ynl9LmBcbiAgICAgICAgKyAoZWNvc3lzdGVtXG4gICAgICAgICAgPyAnIEVjb3N5c3RlbSBNYW5hZ2VycyBkZWNpZGUgcHVibGlzaCByZXF1ZXN0cywgbW9kZXJhdGUgc3VibWlzc2lvbnMgYW5kIHJldmlld3MsIHZlcmlmeSBwdWJsaXNoZXJzJ1xuICAgICAgICAgICAgKyAnIGFuZCBwdWJsaXNoIGFkdmlzb3JpZXMgZm9yIHRoZSB3aG9sZSBwbHVnaW4gZWNvc3lzdGVtLidcbiAgICAgICAgICA6ICcgSXQgY2FycmllcyBzeXN0ZW0tb3JnLW9ubHkgcGVybWlzc2lvbnMuJylcbiAgICAgICAgKyAnIFRoZSByb2xlIHdvcmtzIG9ubHkgZnJvbSB0aGUgc3lzdGVtIG9yZ2FuaXphdGlvbiBhbmQgcmVxdWlyZXMgYSB0d28tZmFjdG9yIHNpZ24taW4uJ1xuICAgICAgOiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgJHtyb2xlfSByb2xlJHtieX1gXG4gICAgICAgICsgKGVjb3N5c3RlbSA/ICcgYW5kIGNhbiBubyBsb25nZXIgbWFuYWdlIG9yIGFwcHJvdmUgYW55dGhpbmcgaW4gdGhlIHBsdWdpbiBlY29zeXN0ZW0uJyA6ICcuJyksXG4gIH07XG59XG5cbi8qKlxuICogQ29hbGVzY2Ugc2V2ZXJhbCBxdWV1ZWQgbm90aWNlcyBpbnRvIG9uZSBkaWdlc3QgZW1haWw6IGEgY291bnQtYmVhcmluZ1xuICogc3ViamVjdCBhbmQgb25lIGxpbmUgcGVyIGl0ZW0gKGVhY2ggaXRlbSdzIHN1YmplY3QpLCBvbGRlc3QgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFY29zeXN0ZW1EaWdlc3QoXG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkLFxuICBpdGVtczogcmVhZG9ubHkgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudFtdLFxuKTogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHJldHVybiBpdGVtc1swXSE7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tldmVudF07XG4gIGNvbnN0IGNhZGVuY2UgPSBzcGVjLmRpZ2VzdCA9PT0gJ2hvdXJseScgPyAnSG91cmx5JyA6IHNwZWMuZGlnZXN0ID09PSAnd2Vla2x5JyA/ICdXZWVrbHknIDogJ0RhaWx5JztcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtjYWRlbmNlfSBkaWdlc3Q6ICR7aXRlbXMubGVuZ3RofSDDlyAke3NwZWMuZGVzY3JpcHRpb259YC5zbGljZSgwLCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSxcbiAgICB0ZXh0OiBpdGVtcy5tYXAoKGkpID0+IGDigKIgJHtpLnN1YmplY3R9YCkuam9pbignXFxuJykuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCksXG4gIH07XG59XG4iXX0=
@@ -31,12 +31,7 @@ export declare function publisherHandleProblem(handle: string): string | null;
31
31
  * still be requested through a `claim` request, decided by the system org.
32
32
  */
33
33
  export declare const BUILTIN_RESERVED_HANDLES: readonly string[];
34
- /**
35
- * Request kinds a TENANT may submit (`moderation` is system-org-created). An
36
- * `advisory` request carries a security-advisory DRAFT; only the system org
37
- * publishes it (approving the request) or withdraws it.
38
- */
39
- export declare const TENANT_REQUEST_KINDS: readonly ['new_listing', 'new_version', 'listing_update', 'yank', 'unpause', 'transfer', 'claim', 'profile_change', 'verify', 'advisory'];
34
+ export declare const TENANT_REQUEST_KINDS: ("advisory" | "claim" | "listing_update" | "new_listing" | "new_version" | "profile_change" | "transfer" | "unpause" | "verify" | "yank")[];
40
35
  /** Kinds submitted under `plugins:publish` (the rest need `publishers:manage`). */
41
36
  export declare const PUBLISH_PERMISSION_REQUEST_KINDS: readonly string[];
42
37
  /** Kinds DECIDED with `publishers:verify` (the rest need `plugins:moderate`). */
@@ -1,5 +1,6 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
+ import { PUBLISH_REQUEST_KINDS } from './wire-vocabulary.js';
3
4
  /**
4
5
  * Plugin-ecosystem constants shared by the plugin service (publishers, the
5
6
  * publish-request queue, auto-approval) and its callers
@@ -62,10 +63,22 @@ export const BUILTIN_RESERVED_HANDLES = [
62
63
  * `advisory` request carries a security-advisory DRAFT; only the system org
63
64
  * publishes it (approving the request) or withdraws it.
64
65
  */
65
- export const TENANT_REQUEST_KINDS = [
66
- 'new_listing', 'new_version', 'listing_update', 'yank', 'unpause',
67
- 'transfer', 'claim', 'profile_change', 'verify', 'advisory',
68
- ];
66
+ /**
67
+ * DERIVED from `PUBLISH_REQUEST_KINDS` by exclusion, not hand-copied.
68
+ *
69
+ * This is the TENANT submit gate (`requests.ts` checks membership before
70
+ * accepting a request), and it was a transcription of the canonical list minus
71
+ * two entries. A kind added to the canonical list therefore needed a second,
72
+ * entirely un-enforced edit here before a publisher could submit it — the kind
73
+ * would exist, be decidable in the console, and be rejected at the door.
74
+ *
75
+ * Stating the EXCLUSIONS instead makes the relationship the code: `moderation`
76
+ * and `submission` are opened by the system org on a tenant's behalf, never
77
+ * submitted by the tenant, so they are the two that do not belong here.
78
+ */
79
+ const SYSTEM_OPENED_REQUEST_KINDS = ['moderation', 'submission'];
80
+ export const TENANT_REQUEST_KINDS = PUBLISH_REQUEST_KINDS
81
+ .filter((k) => !SYSTEM_OPENED_REQUEST_KINDS.includes(k));
69
82
  /** Kinds submitted under `plugins:publish` (the rest need `publishers:manage`). */
70
83
  export const PUBLISH_PERMISSION_REQUEST_KINDS = [
71
84
  'new_listing', 'new_version', 'listing_update', 'yank', 'unpause',
@@ -116,4 +129,4 @@ export function isAnonymousSubmissionsEnabled() {
116
129
  export function isPluginReviewsEnabled() {
117
130
  return flag('PLUGIN_REVIEWS_ENABLED', true);
118
131
  }
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2Vjb3N5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyx5QkFBeUIsQ0FBQztBQUV6RTs7aURBRWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLFlBQVksQ0FBQztBQUU1RCw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBYztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2pGLE9BQU8sV0FBVyxvQkFBb0IsSUFBSSxvQkFBb0IsYUFBYSxDQUFDO0lBQzlFLENBQUM7SUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDM0MsT0FBTyw4RUFBOEUsQ0FBQztJQUN4RixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBc0I7SUFDekQsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlO0lBQzNGLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTO0lBQ3JGLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ3BGLHFGQUFxRjtJQUNyRixRQUFRLEVBQUUsVUFBVTtDQUNyQixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFNBQVM7SUFDakUsVUFBVSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsVUFBVTtDQUNuRCxDQUFDO0FBRVgsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFzQjtJQUNqRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxTQUFTO0NBQ2xFLENBQUM7QUFFRixpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQXNCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUV6RywrR0FBK0c7QUFDL0csTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXNCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRWhJLDJGQUEyRjtBQUMzRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBVyxDQUFDO0FBRXhFLFNBQVMsSUFBSSxDQUFDLElBQVksRUFBRSxJQUFhO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzRCxJQUFJLEdBQUcsS0FBSyxFQUFFO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUIsT0FBTyxHQUFHLEtBQUssT0FBTyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDO0FBQ3pFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QjtJQUMzQyxPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCO0lBQzNDLE9BQU8sSUFBSSxDQUFDLCtCQUErQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQjtJQUNwQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogUGx1Z2luLWVjb3N5c3RlbSBjb25zdGFudHMgc2hhcmVkIGJ5IHRoZSBwbHVnaW4gc2VydmljZSAocHVibGlzaGVycywgdGhlXG4gKiBwdWJsaXNoLXJlcXVlc3QgcXVldWUsIGF1dG8tYXBwcm92YWwpIGFuZCBpdHMgY2FsbGVyc1xuICogKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQpLiBEZXBlbmRlbmN5LWZyZWUgc29cbiAqIHRoZSBmcm9udGVuZCBhbmQgdGhlIENMSSBjYW4gaW1wb3J0IGl0IHRvby5cbiAqL1xuXG5pbXBvcnQgeyBpc0JpbGxpbmdFbmFibGVkIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHN5c3RlbS1vcmcgU0VSVklDRSBBQ0NPVU5UIHRoZSBPZmZpY2lhbCBjYXRhbG9nIGxvYWRlclxuICogKGBkZXBsb3kvYmluL2xvYWQtcGx1Z2lucy5zaGAsIGRyaXZlbiBieSBgaW5pdC1wbGF0Zm9ybS5zaGApIHJ1bnMgYXMuIE9ubHkgYVxuICogcmVxdWVzdCBzdWJtaXR0ZWQgYnkgdGhpcyBpZGVudGl0eSwgZnJvbSB0aGUgc3lzdGVtIG9yZywgY2FuIHJpZGUgdGhlXG4gKiBib290c3RyYXAgZXhjZXB0aW9uIG9yIHRoZSBPZmZpY2lhbCBjYXRhbG9nIGF1dG8tYXBwcm92YWwgcnVsZSDigJRcbiAqIG5ldmVyIGEgcGVyc29uLCB3aGljaCBrZWVwcyBcImEgc3VwZXJhZG1pbiB1cGxvYWRzIGFuZCBhcHByb3ZlcyBhbG9uZVwiIGNsb3NlZC5cbiAqIFNlcnZpY2UtYWNjb3VudCBuYW1lcyBhcmUgdW5pcXVlIHBlciBvcmcgYW5kIG9ubHkgc3lzdGVtLW9yZyBhZG1pbnNcbiAqIGNhbiBjcmVhdGUgb25lIHRoZXJlLlxuICovXG5leHBvcnQgY29uc3QgT0ZGSUNJQUxfQ0FUQUxPR19MT0FERVJfQUNDT1VOVCA9ICdvZmZpY2lhbC1jYXRhbG9nLWxvYWRlcic7XG5cbi8qKiBUaGUgcHVibGlzaGVyIHRlcm1zIHZlcnNpb24gaW4gZm9yY2Ugd2hlbiB0aGUgb3BlcmF0b3Igc2V0cyBub25lLiBCdW1waW5nIGl0XG4gKiAgKGBQVUJMSVNIRVJfVEVSTVNfVkVSU0lPTmApIG1ha2VzIGV2ZXJ5IHB1Ymxpc2hlciByZS1hY2NlcHQgYmVmb3JlIGl0cyBuZXh0XG4gKiAgcmVxdWVzdDsgZXhpc3RpbmcgbGlzdGluZ3MgYXJlIHVuYWZmZWN0ZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QVUJMSVNIRVJfVEVSTVNfVkVSU0lPTiA9ICcyMDI2LTA5LTIxJztcblxuLyoqIFRoZSBwdWJsaXNoZXIgdGVybXMgdmVyc2lvbiBpbiBmb3JjZSBvbiB0aGlzIGluc3RhbmNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hlclRlcm1zVmVyc2lvbigpOiBzdHJpbmcge1xuICBjb25zdCB2ID0gKHByb2Nlc3MuZW52LlBVQkxJU0hFUl9URVJNU19WRVJTSU9OID8/ICcnKS50cmltKCk7XG4gIHJldHVybiB2ICE9PSAnJyA/IHYuc2xpY2UoMCwgNTApIDogREVGQVVMVF9QVUJMSVNIRVJfVEVSTVNfVkVSU0lPTjtcbn1cblxuLyoqXG4gKiBBIHB1Ymxpc2hlciBoYW5kbGU6IG9uZSBsb3dlcmNhc2UgcmVnaXN0cnkgcGF0aCBjb21wb25lbnQsIGJlY2F1c2UgaXQgbmFtZXNcbiAqIHRoZSBgcHVibGljLzxoYW5kbGU+LzxuYW1lPmAgcmVwb3NpdG9yeSDigJQgbGV0dGVycywgZGlnaXRzIGFuZCBzaW5nbGVcbiAqIGh5cGhlbnMgYmV0d2VlbiB0aGVtLCAy4oCTMzkgY2hhcmFjdGVycy5cbiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTiA9IC9eW2EtejAtOV0rKD86LVthLXowLTldKykqJC87XG5leHBvcnQgY29uc3QgUFVCTElTSEVSX0hBTkRMRV9NSU4gPSAyO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9IQU5ETEVfTUFYID0gMzk7XG5cbi8qKiBXaHkgYGhhbmRsZWAgaXNuJ3QgYSB2YWxpZCBwdWJsaXNoZXIgaGFuZGxlLCBvciBudWxsIHdoZW4gaXQgaXMuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaGVySGFuZGxlUHJvYmxlbShoYW5kbGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoaGFuZGxlLmxlbmd0aCA8IFBVQkxJU0hFUl9IQU5ETEVfTUlOIHx8IGhhbmRsZS5sZW5ndGggPiBQVUJMSVNIRVJfSEFORExFX01BWCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke1BVQkxJU0hFUl9IQU5ETEVfTUlOfS0ke1BVQkxJU0hFUl9IQU5ETEVfTUFYfSBjaGFyYWN0ZXJzYDtcbiAgfVxuICBpZiAoIVBVQkxJU0hFUl9IQU5ETEVfUEFUVEVSTi50ZXN0KGhhbmRsZSkpIHtcbiAgICByZXR1cm4gJ211c3QgYmUgbG93ZXJjYXNlIGxldHRlcnMgYW5kIGRpZ2l0cywgb3B0aW9uYWxseSBzZXBhcmF0ZWQgYnkgc2luZ2xlIGh5cGhlbnMnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgbm8gdGVuYW50IG1heSBjbGFpbSBkaXJlY3RseSwgb24gdG9wIG9mIHRoZSBzeXN0ZW0gb3JnJ3NcbiAqIGBlY29zeXN0ZW1fcmVzZXJ2ZWRfbmFtZXNgIHRhYmxlOiB0aGUgcGxhdGZvcm0ncyBvd24gcHVibGlzaGVycywgd29yZHMgdGhhdFxuICogd291bGQgcmVhZCBhcyBhbiBlbmRvcnNlbWVudCwgYW5kIGluZnJhc3RydWN0dXJlIG5hbWVzLiBBIHJlc2VydmVkIGhhbmRsZSBjYW5cbiAqIHN0aWxsIGJlIHJlcXVlc3RlZCB0aHJvdWdoIGEgYGNsYWltYCByZXF1ZXN0LCBkZWNpZGVkIGJ5IHRoZSBzeXN0ZW0gb3JnLlxuICovXG5leHBvcnQgY29uc3QgQlVJTFRJTl9SRVNFUlZFRF9IQU5ETEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ3BpcGVsaW5lLWJ1aWxkZXInLCAnY29tbXVuaXR5JywgJ29mZmljaWFsJywgJ3ZlcmlmaWVkJywgJ3N5c3RlbScsICdhZG1pbicsICdhZG1pbmlzdHJhdG9yJyxcbiAgJ3Jvb3QnLCAnc3VwcG9ydCcsICdzZWN1cml0eScsICdzdGFmZicsICdtb2RlcmF0b3InLCAnZWNvc3lzdGVtJywgJ3B1YmxpYycsICdsaWJyYXJ5JyxcbiAgJ2Fub255bW91cycsICd1bnZlcmlmaWVkJywgJ3BsYXRmb3JtJywgJ3JlZ2lzdHJ5JywgJ3BsdWdpbnMnLCAncGx1Z2luJywgJ2FwaScsICd3d3cnLFxuICAvLyBTdGF0aWMgc2VnbWVudHMgb2YgdGhlIHB1YmxpYyBkaXJlY3RvcnkncyBgL3BsdWdpbnMvPHB1Ymxpc2hlcj4vPG5hbWU+YCBVUkwgc3BhY2UuXG4gICdzdWJtaXQnLCAnY2F0ZWdvcnknLFxuXTtcblxuLyoqXG4gKiBSZXF1ZXN0IGtpbmRzIGEgVEVOQU5UIG1heSBzdWJtaXQgKGBtb2RlcmF0aW9uYCBpcyBzeXN0ZW0tb3JnLWNyZWF0ZWQpLiBBblxuICogYGFkdmlzb3J5YCByZXF1ZXN0IGNhcnJpZXMgYSBzZWN1cml0eS1hZHZpc29yeSBEUkFGVDsgb25seSB0aGUgc3lzdGVtIG9yZ1xuICogcHVibGlzaGVzIGl0IChhcHByb3ZpbmcgdGhlIHJlcXVlc3QpIG9yIHdpdGhkcmF3cyBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRFTkFOVF9SRVFVRVNUX0tJTkRTID0gW1xuICAnbmV3X2xpc3RpbmcnLCAnbmV3X3ZlcnNpb24nLCAnbGlzdGluZ191cGRhdGUnLCAneWFuaycsICd1bnBhdXNlJyxcbiAgJ3RyYW5zZmVyJywgJ2NsYWltJywgJ3Byb2ZpbGVfY2hhbmdlJywgJ3ZlcmlmeScsICdhZHZpc29yeScsXG5dIGFzIGNvbnN0O1xuXG4vKiogS2luZHMgc3VibWl0dGVkIHVuZGVyIGBwbHVnaW5zOnB1Ymxpc2hgICh0aGUgcmVzdCBuZWVkIGBwdWJsaXNoZXJzOm1hbmFnZWApLiAqL1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hfUEVSTUlTU0lPTl9SRVFVRVNUX0tJTkRTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgJ25ld19saXN0aW5nJywgJ25ld192ZXJzaW9uJywgJ2xpc3RpbmdfdXBkYXRlJywgJ3lhbmsnLCAndW5wYXVzZScsXG5dO1xuXG4vKiogS2luZHMgREVDSURFRCB3aXRoIGBwdWJsaXNoZXJzOnZlcmlmeWAgKHRoZSByZXN0IG5lZWQgYHBsdWdpbnM6bW9kZXJhdGVgKS4gKi9cbmV4cG9ydCBjb25zdCBWRVJJRllfUkVRVUVTVF9LSU5EUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3RyYW5zZmVyJywgJ2NsYWltJywgJ3Byb2ZpbGVfY2hhbmdlJywgJ3ZlcmlmeSddO1xuXG4vKiogS2luZHMgd2hvc2UgZGVjaXNpb24gcmVxdWlyZXMgYSBzdGVwLXVwIChzdXNwZW5kL3lhbmsvdGFrZWRvd24sIGFuZCBldmVyeSBgcHVibGlzaGVyczp2ZXJpZnlgIGRlY2lzaW9uKS4gKi9cbmV4cG9ydCBjb25zdCBTVEVQX1VQX1JFUVVFU1RfS0lORFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyd5YW5rJywgJ3RyYW5zZmVyJywgJ2NsYWltJywgJ3Byb2ZpbGVfY2hhbmdlJywgJ3ZlcmlmeScsICdtb2RlcmF0aW9uJ107XG5cbi8qKiBNb2RlcmF0aW9uLXF1ZXVlIFNMQSBwZXIgbGFuZSwgaW4gaG91cnMgKDIgYnVzaW5lc3MgZGF5cyDiiYggNDggaDsgc2VjdXJpdHkgbGFuZSA0IGgpLiAqL1xuZXhwb3J0IGNvbnN0IFJFUVVFU1RfU0xBX0hPVVJTID0geyBzdGFuZGFyZDogNDgsIHNlY3VyaXR5OiA0IH0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGZsYWcobmFtZTogc3RyaW5nLCBkZmx0OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJhdyA9IChwcm9jZXNzLmVudltuYW1lXSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYXcgPT09ICcnKSByZXR1cm4gZGZsdDtcbiAgcmV0dXJuIHJhdyAhPT0gJ2ZhbHNlJyAmJiByYXcgIT09ICcwJyAmJiByYXcgIT09ICdvZmYnICYmIHJhdyAhPT0gJ25vJztcbn1cblxuLyoqXG4gKiBgT0ZGSUNJQUxfQVVUT19BUFBST1ZBTF9FTkFCTEVEYCAoZGVmYXVsdCBPTik6IHdoZW4gb2ZmLCB0aGUgc2VlZGVkXG4gKiBPZmZpY2lhbCBjYXRhbG9nIGF1dG8tYXBwcm92YWwgcnVsZSBuZXZlciBmaXJlcyBhbmQgZXZlcnkgT2ZmaWNpYWwgdXBkYXRlXG4gKiB3YWl0cyBmb3IgdHdvLXBlcnNvbiBhcHByb3ZhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2ZmaWNpYWxBdXRvQXBwcm92YWxFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhZygnT0ZGSUNJQUxfQVVUT19BUFBST1ZBTF9FTkFCTEVEJywgdHJ1ZSk7XG59XG5cbi8qKlxuICogYFBMVUdJTl9QVUJMSVNISU5HX0VOQUJMRURgOiB3aGV0aGVyIFRFTkFOVCBvcmdzIG1heSBzdWJtaXQgcHVibGlzaFxuICogcmVxdWVzdHMuIERlZmF1bHRzIG9uIGZvciB0aGUgaG9zdGVkIGluc3RhbmNlIChiaWxsaW5nIG9uKSBhbmQgb2ZmIGZvciBhXG4gKiBzZWxmLWhvc3RlZCBvbmUgKGJpbGxpbmcgb2ZmKS4gVGhlIHN5c3RlbSBvcmcncyBPZmZpY2lhbCBjYXRhbG9nIGlzIG5ldmVyXG4gKiBhZmZlY3RlZCDigJQgaXQgaXMgdGhlIGluc3RhbmNlJ3Mgb3duIGNhdGFsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsdWdpblB1Ymxpc2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhZygnUExVR0lOX1BVQkxJU0hJTkdfRU5BQkxFRCcsIGlzQmlsbGluZ0VuYWJsZWQoKSk7XG59XG5cbi8qKlxuICogYEFOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEYCAoZGVmYXVsdCBPRkYpOiB3aGV0aGVyIHRoZVxuICogbm90LWxvZ2dlZC1pbiBwbHVnaW4gc3VibWlzc2lvbiBBUEkgaXMgc2VydmVkLiBFdmVuIHdoZW4gb24sIHN1Ym1pc3Npb25zXG4gKiBzdGF5IHVuYXZhaWxhYmxlIHdoaWxlIG91dGJvdW5kIGVtYWlsIGlzIG5vdCBjb25maWd1cmVkICh0aGUgbWFnaWMgbGluayBpc1xuICogdGhlIHN1Ym1pdHRlcidzIG9ubHkgdmVyaWZpY2F0aW9uKSDigJQgdGhlIHBsdWdpbiBzZXJ2aWNlIGNoZWNrcyB0aGF0IHRvby5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW5vbnltb3VzU3VibWlzc2lvbnNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhZygnQU5PTllNT1VTX1NVQk1JU1NJT05TX0VOQUJMRUQnLCBmYWxzZSk7XG59XG5cbi8qKlxuICogYFBMVUdJTl9SRVZJRVdTX0VOQUJMRURgIChkZWZhdWx0IE9OKTogd2hlbiBvZmYsIHJldmlld3MgYXJlIFJFQUQtT05MWSDigJRcbiAqIHdyaXRpbmcsIGVkaXRpbmcsIHZvdGluZywgcmVwb3J0aW5nIGFuZCByZXBseWluZyBhbnN3ZXJcbiAqIGBQTFVHSU5fUkVWSUVXU19ESVNBQkxFRGA7IG1vZGVyYXRpb24ga2VlcHMgd29ya2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGx1Z2luUmV2aWV3c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBmbGFnKCdQTFVHSU5fUkVWSUVXU19FTkFCTEVEJywgdHJ1ZSk7XG59XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvZWNvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLHFCQUFxQixFQUEyQixNQUFNLHNCQUFzQixDQUFDO0FBRXRGOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyx5QkFBeUIsQ0FBQztBQUV6RTs7aURBRWlEO0FBQ2pELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLFlBQVksQ0FBQztBQUU1RCw2REFBNkQ7QUFDN0QsTUFBTSxVQUFVLHFCQUFxQjtJQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDdEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBRXZDLHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBYztJQUNuRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsb0JBQW9CLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2pGLE9BQU8sV0FBVyxvQkFBb0IsSUFBSSxvQkFBb0IsYUFB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Ii8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBQVUJMSVNIX1JFUVVFU1RfS0lORFMsIHR5cGUgUHVibGlzaFJlcXVlc3RLaW5kIH0gZnJvbSAnLi93aXJlLXZvY2FidWxhcnkuanMnO1xuXG4vKipcbiAqIFBsdWdpbi1lY29zeXN0ZW0gY29uc3RhbnRzIHNoYXJlZCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgKHB1Ymxpc2hlcnMsIHRoZVxuICogcHVibGlzaC1yZXF1ZXN0IHF1ZXVlLCBhdXRvLWFwcHJvdmFsKSBhbmQgaXRzIGNhbGxlcnNcbiAqIChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKS4gRGVwZW5kZW5jeS1mcmVlIHNvXG4gKiB0aGUgZnJvbnRlbmQgYW5kIHRoZSBDTEkgY2FuIGltcG9ydCBpdCB0b28uXG4gKi9cblxuaW1wb3J0IHsgaXNCaWxsaW5nRW5hYmxlZCB9IGZyb20gJy4vcXVvdGEtdGllcnMuanMnO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBzeXN0ZW0tb3JnIFNFUlZJQ0UgQUNDT1VOVCB0aGUgT2ZmaWNpYWwgY2F0YWxvZyBsb2FkZXJcbiAqIChgZGVwbG95L2Jpbi9sb2FkLXBsdWdpbnMuc2hgLCBkcml2ZW4gYnkgYGluaXQtcGxhdGZvcm0uc2hgKSBydW5zIGFzLiBPbmx5IGFcbiAqIHJlcXVlc3Qgc3VibWl0dGVkIGJ5IHRoaXMgaWRlbnRpdHksIGZyb20gdGhlIHN5c3RlbSBvcmcsIGNhbiByaWRlIHRoZVxuICogYm9vdHN0cmFwIGV4Y2VwdGlvbiBvciB0aGUgT2ZmaWNpYWwgY2F0YWxvZyBhdXRvLWFwcHJvdmFsIHJ1bGUg4oCUXG4gKiBuZXZlciBhIHBlcnNvbiwgd2hpY2gga2VlcHMgXCJhIHN1cGVyYWRtaW4gdXBsb2FkcyBhbmQgYXBwcm92ZXMgYWxvbmVcIiBjbG9zZWQuXG4gKiBTZXJ2aWNlLWFjY291bnQgbmFtZXMgYXJlIHVuaXF1ZSBwZXIgb3JnIGFuZCBvbmx5IHN5c3RlbS1vcmcgYWRtaW5zXG4gKiBjYW4gY3JlYXRlIG9uZSB0aGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE9GRklDSUFMX0NBVEFMT0dfTE9BREVSX0FDQ09VTlQgPSAnb2ZmaWNpYWwtY2F0YWxvZy1sb2FkZXInO1xuXG4vKiogVGhlIHB1Ymxpc2hlciB0ZXJtcyB2ZXJzaW9uIGluIGZvcmNlIHdoZW4gdGhlIG9wZXJhdG9yIHNldHMgbm9uZS4gQnVtcGluZyBpdFxuICogIChgUFVCTElTSEVSX1RFUk1TX1ZFUlNJT05gKSBtYWtlcyBldmVyeSBwdWJsaXNoZXIgcmUtYWNjZXB0IGJlZm9yZSBpdHMgbmV4dFxuICogIHJlcXVlc3Q7IGV4aXN0aW5nIGxpc3RpbmdzIGFyZSB1bmFmZmVjdGVkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT04gPSAnMjAyNi0wOS0yMSc7XG5cbi8qKiBUaGUgcHVibGlzaGVyIHRlcm1zIHZlcnNpb24gaW4gZm9yY2Ugb24gdGhpcyBpbnN0YW5jZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoZXJUZXJtc1ZlcnNpb24oKTogc3RyaW5nIHtcbiAgY29uc3QgdiA9IChwcm9jZXNzLmVudi5QVUJMSVNIRVJfVEVSTVNfVkVSU0lPTiA/PyAnJykudHJpbSgpO1xuICByZXR1cm4gdiAhPT0gJycgPyB2LnNsaWNlKDAsIDUwKSA6IERFRkFVTFRfUFVCTElTSEVSX1RFUk1TX1ZFUlNJT047XG59XG5cbi8qKlxuICogQSBwdWJsaXNoZXIgaGFuZGxlOiBvbmUgbG93ZXJjYXNlIHJlZ2lzdHJ5IHBhdGggY29tcG9uZW50LCBiZWNhdXNlIGl0IG5hbWVzXG4gKiB0aGUgYHB1YmxpYy88aGFuZGxlPi88bmFtZT5gIHJlcG9zaXRvcnkg4oCUIGxldHRlcnMsIGRpZ2l0cyBhbmQgc2luZ2xlXG4gKiBoeXBoZW5zIGJldHdlZW4gdGhlbSwgMuKAkzM5IGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfSEFORExFX1BBVFRFUk4gPSAvXlthLXowLTldKyg/Oi1bYS16MC05XSspKiQvO1xuZXhwb3J0IGNvbnN0IFBVQkxJU0hFUl9IQU5ETEVfTUlOID0gMjtcbmV4cG9ydCBjb25zdCBQVUJMSVNIRVJfSEFORExFX01BWCA9IDM5O1xuXG4vKiogV2h5IGBoYW5kbGVgIGlzbid0IGEgdmFsaWQgcHVibGlzaGVyIGhhbmRsZSwgb3IgbnVsbCB3aGVuIGl0IGlzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hlckhhbmRsZVByb2JsZW0oaGFuZGxlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKGhhbmRsZS5sZW5ndGggPCBQVUJMSVNIRVJfSEFORExFX01JTiB8fCBoYW5kbGUubGVuZ3RoID4gUFVCTElTSEVSX0hBTkRMRV9NQVgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHtQVUJMSVNIRVJfSEFORExFX01JTn0tJHtQVUJMSVNIRVJfSEFORExFX01BWH0gY2hhcmFjdGVyc2A7XG4gIH1cbiAgaWYgKCFQVUJMSVNIRVJfSEFORExFX1BBVFRFUk4udGVzdChoYW5kbGUpKSB7XG4gICAgcmV0dXJuICdtdXN0IGJlIGxvd2VyY2FzZSBsZXR0ZXJzIGFuZCBkaWdpdHMsIG9wdGlvbmFsbHkgc2VwYXJhdGVkIGJ5IHNpbmdsZSBoeXBoZW5zJztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIG5vIHRlbmFudCBtYXkgY2xhaW0gZGlyZWN0bHksIG9uIHRvcCBvZiB0aGUgc3lzdGVtIG9yZydzXG4gKiBgZWNvc3lzdGVtX3Jlc2VydmVkX25hbWVzYCB0YWJsZTogdGhlIHBsYXRmb3JtJ3Mgb3duIHB1Ymxpc2hlcnMsIHdvcmRzIHRoYXRcbiAqIHdvdWxkIHJlYWQgYXMgYW4gZW5kb3JzZW1lbnQsIGFuZCBpbmZyYXN0cnVjdHVyZSBuYW1lcy4gQSByZXNlcnZlZCBoYW5kbGUgY2FuXG4gKiBzdGlsbCBiZSByZXF1ZXN0ZWQgdGhyb3VnaCBhIGBjbGFpbWAgcmVxdWVzdCwgZGVjaWRlZCBieSB0aGUgc3lzdGVtIG9yZy5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxUSU5fUkVTRVJWRURfSEFORExFUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICdwaXBlbGluZS1idWlsZGVyJywgJ2NvbW11bml0eScsICdvZmZpY2lhbCcsICd2ZXJpZmllZCcsICdzeXN0ZW0nLCAnYWRtaW4nLCAnYWRtaW5pc3RyYXRvcicsXG4gICdyb290JywgJ3N1cHBvcnQnLCAnc2VjdXJpdHknLCAnc3RhZmYnLCAnbW9kZXJhdG9yJywgJ2Vjb3N5c3RlbScsICdwdWJsaWMnLCAnbGlicmFyeScsXG4gICdhbm9ueW1vdXMnLCAndW52ZXJpZmllZCcsICdwbGF0Zm9ybScsICdyZWdpc3RyeScsICdwbHVnaW5zJywgJ3BsdWdpbicsICdhcGknLCAnd3d3JyxcbiAgLy8gU3RhdGljIHNlZ21lbnRzIG9mIHRoZSBwdWJsaWMgZGlyZWN0b3J5J3MgYC9wbHVnaW5zLzxwdWJsaXNoZXI+LzxuYW1lPmAgVVJMIHNwYWNlLlxuICAnc3VibWl0JywgJ2NhdGVnb3J5Jyxcbl07XG5cbi8qKlxuICogUmVxdWVzdCBraW5kcyBhIFRFTkFOVCBtYXkgc3VibWl0IChgbW9kZXJhdGlvbmAgaXMgc3lzdGVtLW9yZy1jcmVhdGVkKS4gQW5cbiAqIGBhZHZpc29yeWAgcmVxdWVzdCBjYXJyaWVzIGEgc2VjdXJpdHktYWR2aXNvcnkgRFJBRlQ7IG9ubHkgdGhlIHN5c3RlbSBvcmdcbiAqIHB1Ymxpc2hlcyBpdCAoYXBwcm92aW5nIHRoZSByZXF1ZXN0KSBvciB3aXRoZHJhd3MgaXQuXG4gKi9cbi8qKlxuICogREVSSVZFRCBmcm9tIGBQVUJMSVNIX1JFUVVFU1RfS0lORFNgIGJ5IGV4Y2x1c2lvbiwgbm90IGhhbmQtY29waWVkLlxuICpcbiAqIFRoaXMgaXMgdGhlIFRFTkFOVCBzdWJtaXQgZ2F0ZSAoYHJlcXVlc3RzLnRzYCBjaGVja3MgbWVtYmVyc2hpcCBiZWZvcmVcbiAqIGFjY2VwdGluZyBhIHJlcXVlc3QpLCBhbmQgaXQgd2FzIGEgdHJhbnNjcmlwdGlvbiBvZiB0aGUgY2Fub25pY2FsIGxpc3QgbWludXNcbiAqIHR3byBlbnRyaWVzLiBBIGtpbmQgYWRkZWQgdG8gdGhlIGNhbm9uaWNhbCBsaXN0IHRoZXJlZm9yZSBuZWVkZWQgYSBzZWNvbmQsXG4gKiBlbnRpcmVseSB1bi1lbmZvcmNlZCBlZGl0IGhlcmUgYmVmb3JlIGEgcHVibGlzaGVyIGNvdWxkIHN1Ym1pdCBpdCDigJQgdGhlIGtpbmRcbiAqIHdvdWxkIGV4aXN0LCBiZSBkZWNpZGFibGUgaW4gdGhlIGNvbnNvbGUsIGFuZCBiZSByZWplY3RlZCBhdCB0aGUgZG9vci5cbiAqXG4gKiBTdGF0aW5nIHRoZSBFWENMVVNJT05TIGluc3RlYWQgbWFrZXMgdGhlIHJlbGF0aW9uc2hpcCB0aGUgY29kZTogYG1vZGVyYXRpb25gXG4gKiBhbmQgYHN1Ym1pc3Npb25gIGFyZSBvcGVuZWQgYnkgdGhlIHN5c3RlbSBvcmcgb24gYSB0ZW5hbnQncyBiZWhhbGYsIG5ldmVyXG4gKiBzdWJtaXR0ZWQgYnkgdGhlIHRlbmFudCwgc28gdGhleSBhcmUgdGhlIHR3byB0aGF0IGRvIG5vdCBiZWxvbmcgaGVyZS5cbiAqL1xuY29uc3QgU1lTVEVNX09QRU5FRF9SRVFVRVNUX0tJTkRTID0gWydtb2RlcmF0aW9uJywgJ3N1Ym1pc3Npb24nXSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFRFTkFOVF9SRVFVRVNUX0tJTkRTID0gUFVCTElTSF9SRVFVRVNUX0tJTkRTXG4gIC5maWx0ZXIoKGspOiBrIGlzIEV4Y2x1ZGU8UHVibGlzaFJlcXVlc3RLaW5kLCB0eXBlb2YgU1lTVEVNX09QRU5FRF9SRVFVRVNUX0tJTkRTW251bWJlcl0+ID0+XG4gICAgIShTWVNURU1fT1BFTkVEX1JFUVVFU1RfS0lORFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKGspKTtcblxuLyoqIEtpbmRzIHN1Ym1pdHRlZCB1bmRlciBgcGx1Z2luczpwdWJsaXNoYCAodGhlIHJlc3QgbmVlZCBgcHVibGlzaGVyczptYW5hZ2VgKS4gKi9cbmV4cG9ydCBjb25zdCBQVUJMSVNIX1BFUk1JU1NJT05fUkVRVUVTVF9LSU5EUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICduZXdfbGlzdGluZycsICduZXdfdmVyc2lvbicsICdsaXN0aW5nX3VwZGF0ZScsICd5YW5rJywgJ3VucGF1c2UnLFxuXTtcblxuLyoqIEtpbmRzIERFQ0lERUQgd2l0aCBgcHVibGlzaGVyczp2ZXJpZnlgICh0aGUgcmVzdCBuZWVkIGBwbHVnaW5zOm1vZGVyYXRlYCkuICovXG5leHBvcnQgY29uc3QgVkVSSUZZX1JFUVVFU1RfS0lORFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWyd0cmFuc2ZlcicsICdjbGFpbScsICdwcm9maWxlX2NoYW5nZScsICd2ZXJpZnknXTtcblxuLyoqIEtpbmRzIHdob3NlIGRlY2lzaW9uIHJlcXVpcmVzIGEgc3RlcC11cCAoc3VzcGVuZC95YW5rL3Rha2Vkb3duLCBhbmQgZXZlcnkgYHB1Ymxpc2hlcnM6dmVyaWZ5YCBkZWNpc2lvbikuICovXG5leHBvcnQgY29uc3QgU1RFUF9VUF9SRVFVRVNUX0tJTkRTOiByZWFkb25seSBzdHJpbmdbXSA9IFsneWFuaycsICd0cmFuc2ZlcicsICdjbGFpbScsICdwcm9maWxlX2NoYW5nZScsICd2ZXJpZnknLCAnbW9kZXJhdGlvbiddO1xuXG4vKiogTW9kZXJhdGlvbi1xdWV1ZSBTTEEgcGVyIGxhbmUsIGluIGhvdXJzICgyIGJ1c2luZXNzIGRheXMg4omIIDQ4IGg7IHNlY3VyaXR5IGxhbmUgNCBoKS4gKi9cbmV4cG9ydCBjb25zdCBSRVFVRVNUX1NMQV9IT1VSUyA9IHsgc3RhbmRhcmQ6IDQ4LCBzZWN1cml0eTogNCB9IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBmbGFnKG5hbWU6IHN0cmluZywgZGZsdDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSAocHJvY2Vzcy5lbnZbbmFtZV0gPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAocmF3ID09PSAnJykgcmV0dXJuIGRmbHQ7XG4gIHJldHVybiByYXcgIT09ICdmYWxzZScgJiYgcmF3ICE9PSAnMCcgJiYgcmF3ICE9PSAnb2ZmJyAmJiByYXcgIT09ICdubyc7XG59XG5cbi8qKlxuICogYE9GRklDSUFMX0FVVE9fQVBQUk9WQUxfRU5BQkxFRGAgKGRlZmF1bHQgT04pOiB3aGVuIG9mZiwgdGhlIHNlZWRlZFxuICogT2ZmaWNpYWwgY2F0YWxvZyBhdXRvLWFwcHJvdmFsIHJ1bGUgbmV2ZXIgZmlyZXMgYW5kIGV2ZXJ5IE9mZmljaWFsIHVwZGF0ZVxuICogd2FpdHMgZm9yIHR3by1wZXJzb24gYXBwcm92YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09mZmljaWFsQXV0b0FwcHJvdmFsRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ09GRklDSUFMX0FVVE9fQVBQUk9WQUxfRU5BQkxFRCcsIHRydWUpO1xufVxuXG4vKipcbiAqIGBQTFVHSU5fUFVCTElTSElOR19FTkFCTEVEYDogd2hldGhlciBURU5BTlQgb3JncyBtYXkgc3VibWl0IHB1Ymxpc2hcbiAqIHJlcXVlc3RzLiBEZWZhdWx0cyBvbiBmb3IgdGhlIGhvc3RlZCBpbnN0YW5jZSAoYmlsbGluZyBvbikgYW5kIG9mZiBmb3IgYVxuICogc2VsZi1ob3N0ZWQgb25lIChiaWxsaW5nIG9mZikuIFRoZSBzeXN0ZW0gb3JnJ3MgT2ZmaWNpYWwgY2F0YWxvZyBpcyBuZXZlclxuICogYWZmZWN0ZWQg4oCUIGl0IGlzIHRoZSBpbnN0YW5jZSdzIG93biBjYXRhbG9nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQbHVnaW5QdWJsaXNoaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ1BMVUdJTl9QVUJMSVNISU5HX0VOQUJMRUQnLCBpc0JpbGxpbmdFbmFibGVkKCkpO1xufVxuXG4vKipcbiAqIGBBTk9OWU1PVVNfU1VCTUlTU0lPTlNfRU5BQkxFRGAgKGRlZmF1bHQgT0ZGKTogd2hldGhlciB0aGVcbiAqIG5vdC1sb2dnZWQtaW4gcGx1Z2luIHN1Ym1pc3Npb24gQVBJIGlzIHNlcnZlZC4gRXZlbiB3aGVuIG9uLCBzdWJtaXNzaW9uc1xuICogc3RheSB1bmF2YWlsYWJsZSB3aGlsZSBvdXRib3VuZCBlbWFpbCBpcyBub3QgY29uZmlndXJlZCAodGhlIG1hZ2ljIGxpbmsgaXNcbiAqIHRoZSBzdWJtaXR0ZXIncyBvbmx5IHZlcmlmaWNhdGlvbikg4oCUIHRoZSBwbHVnaW4gc2VydmljZSBjaGVja3MgdGhhdCB0b28uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fub255bW91c1N1Ym1pc3Npb25zRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZsYWcoJ0FOT05ZTU9VU19TVUJNSVNTSU9OU19FTkFCTEVEJywgZmFsc2UpO1xufVxuXG4vKipcbiAqIGBQTFVHSU5fUkVWSUVXU19FTkFCTEVEYCAoZGVmYXVsdCBPTik6IHdoZW4gb2ZmLCByZXZpZXdzIGFyZSBSRUFELU9OTFkg4oCUXG4gKiB3cml0aW5nLCBlZGl0aW5nLCB2b3RpbmcsIHJlcG9ydGluZyBhbmQgcmVwbHlpbmcgYW5zd2VyXG4gKiBgUExVR0lOX1JFVklFV1NfRElTQUJMRURgOyBtb2RlcmF0aW9uIGtlZXBzIHdvcmtpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsdWdpblJldmlld3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmxhZygnUExVR0lOX1JFVklFV1NfRU5BQkxFRCcsIHRydWUpO1xufVxuIl19
@@ -82,6 +82,9 @@ export declare enum ErrorCode {
82
82
  TEMPLATE_CONTRACT_VIOLATION = "TEMPLATE_CONTRACT_VIOLATION",
83
83
  TEMPLATE_SIZE_EXCEEDED = "TEMPLATE_SIZE_EXCEEDED",
84
84
  TEMPLATE_VALIDATION_FAILED = "TEMPLATE_VALIDATION_FAILED",
85
+ /** The pipeline-manager CLI is older than the platform's
86
+ * `PIPELINE_MANAGER_MIN_VERSION`; the fix is `pipeline-manager --upgrade`. */
87
+ CLIENT_UPGRADE_REQUIRED = "CLIENT_UPGRADE_REQUIRED",
85
88
  QUOTA_EXCEEDED = "QUOTA_EXCEEDED",
86
89
  /** The caller's per-member share of the org's `aiCalls` (org setting
87
90
  * `aiCallsPerMemberPct`) is spent for this period — the org itself may have headroom. */