@pipeline-builder/api-core 5.2.6 → 5.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/lib/constants/ai-providers.js +1 -1
  2. package/lib/constants/http-status.js +1 -1
  3. package/lib/constants/index.js +1 -1
  4. package/lib/constants/time.js +1 -1
  5. package/lib/errors/app-errors.js +1 -1
  6. package/lib/errors/index.js +1 -1
  7. package/lib/helpers/access-helpers.d.ts +19 -0
  8. package/lib/helpers/access-helpers.js +24 -4
  9. package/lib/helpers/content-disposition.js +1 -1
  10. package/lib/helpers/crud-helpers.js +1 -1
  11. package/lib/helpers/index.d.ts +1 -1
  12. package/lib/helpers/index.js +2 -2
  13. package/lib/helpers/org-hierarchy-http.js +1 -1
  14. package/lib/helpers/org-hierarchy.js +1 -1
  15. package/lib/helpers/restore-helpers.js +1 -1
  16. package/lib/helpers/sse-helpers.js +13 -2
  17. package/lib/helpers/support-calendar.js +1 -1
  18. package/lib/index.js +1 -1
  19. package/lib/middleware/ask-provenance.js +1 -1
  20. package/lib/middleware/assurance.js +1 -1
  21. package/lib/middleware/auth.js +1 -1
  22. package/lib/middleware/deferred-quota-check.js +1 -1
  23. package/lib/middleware/ecosystem-guard.js +1 -1
  24. package/lib/middleware/index.js +1 -1
  25. package/lib/middleware/jwt-verify.js +1 -1
  26. package/lib/middleware/mongo-sanitize.js +1 -1
  27. package/lib/middleware/on-behalf.js +1 -1
  28. package/lib/middleware/permission-gates.js +1 -1
  29. package/lib/middleware/quota-exempt-routes.js +1 -1
  30. package/lib/middleware/revocation.js +1 -1
  31. package/lib/middleware/route-table.js +16 -1
  32. package/lib/middleware/service-tokens.js +1 -1
  33. package/lib/middleware/step-up.js +1 -1
  34. package/lib/middleware/system-org.d.ts +18 -5
  35. package/lib/middleware/system-org.js +19 -6
  36. package/lib/openapi/extend-zod.js +1 -1
  37. package/lib/openapi/index.js +1 -1
  38. package/lib/openapi/registry.js +1 -1
  39. package/lib/openapi/routes/ask-routes.js +1 -1
  40. package/lib/openapi/routes/billing-routes.js +1 -1
  41. package/lib/openapi/routes/image-registry-routes.js +1 -1
  42. package/lib/openapi/routes/index.js +1 -1
  43. package/lib/openapi/routes/message-routes.js +1 -1
  44. package/lib/openapi/routes/pipeline-routes.js +1 -1
  45. package/lib/openapi/routes/pipeline-template-routes.js +1 -1
  46. package/lib/openapi/routes/plugin-routes.js +1 -1
  47. package/lib/openapi/routes/quota-routes.js +1 -1
  48. package/lib/openapi/schema-registry.js +1 -1
  49. package/lib/routes/health.js +1 -1
  50. package/lib/routes/index.js +1 -1
  51. package/lib/services/ai-call-weight.js +1 -1
  52. package/lib/services/alert-delivery.js +1 -1
  53. package/lib/services/api-key-exchange.js +1 -1
  54. package/lib/services/audit-context.js +1 -1
  55. package/lib/services/audit-spool.js +1 -1
  56. package/lib/services/cache-service.js +1 -1
  57. package/lib/services/circuit-breaker.js +1 -1
  58. package/lib/services/compliance-client.js +1 -1
  59. package/lib/services/compliance-event-subscriber.js +1 -1
  60. package/lib/services/durable-event-bus.js +1 -1
  61. package/lib/services/ecosystem-notify-client.d.ts +7 -1
  62. package/lib/services/ecosystem-notify-client.js +9 -3
  63. package/lib/services/entity-events.js +1 -1
  64. package/lib/services/env-redis.js +1 -1
  65. package/lib/services/http-client.js +19 -3
  66. package/lib/services/index.d.ts +1 -1
  67. package/lib/services/index.js +2 -2
  68. package/lib/services/jwks-cache.js +1 -1
  69. package/lib/services/leader-lock.js +1 -1
  70. package/lib/services/notification-channels.js +1 -1
  71. package/lib/services/org-ai-client.js +1 -1
  72. package/lib/services/pagerduty-inbound.js +1 -1
  73. package/lib/services/pagerduty.js +1 -1
  74. package/lib/services/quota-increment-batcher.js +1 -1
  75. package/lib/services/quota.js +1 -1
  76. package/lib/services/remote-audit-client.js +1 -1
  77. package/lib/services/retry-forever.js +1 -1
  78. package/lib/services/retry-strategy.js +1 -1
  79. package/lib/services/s3-client.js +1 -1
  80. package/lib/services/scheduler.js +1 -1
  81. package/lib/services/service-boot.js +1 -1
  82. package/lib/services/service-keys.js +2 -2
  83. package/lib/services/sse-ticket-store.js +1 -1
  84. package/lib/services/system-notification.js +1 -1
  85. package/lib/services/token-revocation.js +1 -1
  86. package/lib/services/version-vuln-policy.d.ts +11 -0
  87. package/lib/services/version-vuln-policy.js +33 -7
  88. package/lib/types/ai-catalog.js +1 -1
  89. package/lib/types/ask-proposals.d.ts +23 -0
  90. package/lib/types/ask-proposals.js +29 -1
  91. package/lib/types/audit-events.js +1 -1
  92. package/lib/types/build-catalog.d.ts +65 -0
  93. package/lib/types/build-catalog.js +95 -1
  94. package/lib/types/catalog-metadata.js +1 -1
  95. package/lib/types/common.js +1 -1
  96. package/lib/types/compliance-exemption.js +1 -1
  97. package/lib/types/ecosystem-notifications.d.ts +9 -0
  98. package/lib/types/ecosystem-notifications.js +15 -6
  99. package/lib/types/ecosystem.d.ts +1 -6
  100. package/lib/types/ecosystem.js +18 -5
  101. package/lib/types/error-codes.js +1 -1
  102. package/lib/types/feature-flags.d.ts +17 -1
  103. package/lib/types/feature-flags.js +1 -1
  104. package/lib/types/http.js +1 -1
  105. package/lib/types/index.d.ts +3 -3
  106. package/lib/types/index.js +4 -4
  107. package/lib/types/metadata-keys.js +1 -1
  108. package/lib/types/permissions.d.ts +60 -13
  109. package/lib/types/permissions.js +63 -14
  110. package/lib/types/pipeline-template.js +1 -1
  111. package/lib/types/pipeline.js +1 -1
  112. package/lib/types/plugin-catalog.js +1 -1
  113. package/lib/types/plugin-health.js +1 -1
  114. package/lib/types/plugin-scan.d.ts +69 -0
  115. package/lib/types/plugin-scan.js +77 -1
  116. package/lib/types/quota-catalog.js +15 -2
  117. package/lib/types/quota-tiers.d.ts +27 -160
  118. package/lib/types/quota-tiers.js +47 -255
  119. package/lib/types/remote-audit-actions.d.ts +1 -1
  120. package/lib/types/remote-audit-actions.js +9 -1
  121. package/lib/types/reserved-tags.js +1 -1
  122. package/lib/types/tier-limits.d.ts +210 -0
  123. package/lib/types/tier-limits.js +254 -0
  124. package/lib/types/usage-projection.js +1 -1
  125. package/lib/types/visibility.js +1 -1
  126. package/lib/types/wire-vocabulary.d.ts +7 -0
  127. package/lib/types/wire-vocabulary.js +7 -1
  128. package/lib/utils/alias-resolver.js +1 -1
  129. package/lib/utils/api-key.js +1 -1
  130. package/lib/utils/audit.js +1 -1
  131. package/lib/utils/aws-scrub.js +1 -1
  132. package/lib/utils/compliance-attributes.js +1 -1
  133. package/lib/utils/concurrency-gate.d.ts +98 -0
  134. package/lib/utils/concurrency-gate.js +110 -0
  135. package/lib/utils/concurrency.js +1 -1
  136. package/lib/utils/crash-handlers.js +1 -1
  137. package/lib/utils/date.js +1 -1
  138. package/lib/utils/dsse.js +1 -1
  139. package/lib/utils/env.d.ts +11 -0
  140. package/lib/utils/env.js +14 -1
  141. package/lib/utils/headers.js +1 -1
  142. package/lib/utils/identity.js +1 -1
  143. package/lib/utils/index.d.ts +1 -0
  144. package/lib/utils/index.js +2 -1
  145. package/lib/utils/jwk.js +2 -2
  146. package/lib/utils/logger.js +1 -1
  147. package/lib/utils/metric-emitter.js +1 -1
  148. package/lib/utils/object.js +1 -1
  149. package/lib/utils/params.js +1 -1
  150. package/lib/utils/plugin-compliance.d.ts +9 -1
  151. package/lib/utils/plugin-compliance.js +1 -1
  152. package/lib/utils/proof-of-work.js +1 -1
  153. package/lib/utils/response.js +1 -1
  154. package/lib/utils/retention.js +1 -1
  155. package/lib/utils/safe-require.js +1 -1
  156. package/lib/utils/secret-encryption.js +1 -1
  157. package/lib/utils/secret-rotation.js +1 -1
  158. package/lib/utils/secure-compare.js +1 -1
  159. package/lib/utils/sensitive-patterns.js +1 -1
  160. package/lib/utils/service-registry.js +1 -1
  161. package/lib/utils/ssrf.js +1 -1
  162. package/lib/validation/ai-schemas.js +1 -1
  163. package/lib/validation/common-schemas.js +1 -1
  164. package/lib/validation/dockerfile-static.js +1 -1
  165. package/lib/validation/index.d.ts +1 -1
  166. package/lib/validation/index.js +2 -2
  167. package/lib/validation/message-schemas.d.ts +73 -0
  168. package/lib/validation/message-schemas.js +63 -2
  169. package/lib/validation/middleware.js +1 -1
  170. package/lib/validation/pipeline-schemas.js +1 -1
  171. package/lib/validation/pipeline-template-schemas.js +1 -1
  172. package/lib/validation/plugin-base-images.js +1 -1
  173. package/lib/validation/plugin-catalog-detect.js +1 -1
  174. package/lib/validation/plugin-catalog-metadata.js +1 -1
  175. package/lib/validation/plugin-heuristics.js +1 -1
  176. package/lib/validation/plugin-lint.js +1 -1
  177. package/lib/validation/plugin-name-confusable.js +1 -1
  178. package/lib/validation/plugin-schemas.js +1 -1
  179. package/lib/validation/plugin-spec-schema.js +1 -1
  180. package/lib/validation/plugin-template-contract.js +1 -1
  181. package/package.json +11 -4
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2F1ZGl0LWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogQ3Jvc3Mtc2VydmljZSBhdWRpdCBldmVudHMgZW1pdHRlZCB2aWEgc3RydWN0dXJlZCBsb2dzLlxuICpcbiAqIFBsYXRmb3JtJ3Mgb3duIGF1ZGl0IGV2ZW50cyAodXNlci5sb2dpbiwgb3JnLmNyZWF0ZSwg4oCmKSBsaXZlIGluIE1vbmdvREJcbiAqIHZpYSB0aGUgQXVkaXRFdmVudCBtb2RlbCDigJQgdGhhdCdzIGEgc2VwYXJhdGUgcGVyc2lzdGVuY2UgcGF0aCBzY29wZWQgdG9cbiAqIHRoZSBwbGF0Zm9ybSBzZXJ2aWNlLiBUaGUgZXZlbnRzIGJlbG93IGFyZSBlbWl0dGVkIGJ5IG90aGVyIHNlcnZpY2VzXG4gKiAoaW1hZ2UtcmVnaXN0cnksIGV0Yy4pIHZpYSB0aGUgYGxvZ0F1ZGl0RXZlbnRgIGhlbHBlciBhcyBzdHJ1Y3R1cmVkIGxvZ1xuICogbGluZXMgd2l0aCBgZXZlbnRDYXRlZ29yeTogJ2F1ZGl0J2AsIHNjcmFwZWQgYnkgTG9raSBmb3IgcXVlcnlhYmxlXG4gKiBhdWRpdCBoaXN0b3J5LlxuICpcbiAqIEFkZCBhIG5ldyBldmVudDpcbiAqICAgMS4gRXh0ZW5kIHRoZSB1bmlvbiB0eXBlIGJlbG93LlxuICogICAyLiBEb2N1bWVudCBpdCBpbiBgZG9jcy9hdWRpdC1ldmVudHMubWRgLCBpbmNsdWRpbmcgYW55IHBheWxvYWQtc3BlY2lmaWNcbiAqICAgICAgZmllbGRzLlxuICogICAzLiBFbWl0IHZpYSBgbG9nQXVkaXRFdmVudChsb2dnZXIsIHsgZXZlbnQ6ICdldmVudC5uYW1lJywg4oCmIH0pYCBmcm9tIHRoZSByb3V0ZS5cbiAqL1xuXG4vKipcbiAqIENvcnJlbGF0aW9uIGNvbnRleHQgc2hhcmVkIGJ5IGV2ZXJ5IGNyb3NzLXNlcnZpY2UgYXVkaXQgZXZlbnQuIE9wdGlvbmFsO1xuICogd2hlbiBwb3B1bGF0ZWQsIHRoZXNlIGxldCBhbiBvcGVyYXRvclxuICogcGl2b3QgYSBMb2tpIGF1ZGl0IGxpbmUgdG8gdGhlIG9yaWdpbmF0aW5nIEhUVFAgcmVxdWVzdCAoYHJlcXVlc3RJZGApIG9yIHRoZVxuICogZW5kLXRvLWVuZCBkaXN0cmlidXRlZCB0cmFjZSAoYHRyYWNlSWRgKSDigJQgYW5kIGxpbmUgdGhlbSB1cCB3aXRoIHBsYXRmb3JtJ3NcbiAqIE1vbmdvREIgYXVkaXQgZXZlbnRzLCB3aGljaCBjYXJyeSB0aGUgc2FtZSB0d28gZmllbGRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q29ycmVsYXRpb24ge1xuICAvKiogT3JpZ2luYXRpbmcgcmVxdWVzdCBpZCAocHJvcGFnYXRlZCBgeC1yZXF1ZXN0LWlkYCkuICovXG4gIHJlcXVlc3RJZD86IHN0cmluZztcbiAgLyoqIE9wZW5UZWxlbWV0cnkgdHJhY2UgaWQgb2YgdGhlIGFjdGl2ZSBzcGFuLCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZC4gKi9cbiAgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLyoqIFRhZy1jb3B5IGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIFBPU1QgL2FwaS9pbWFnZXMvY29weS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlUYWdDb3B5QXVkaXQgZXh0ZW5kcyBBdWRpdENvcnJlbGF0aW9uIHtcbiAgZXZlbnQ6ICdyZWdpc3RyeS50YWcuY29weSc7XG4gIGFjdG9yOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgc291cmNlRGlnZXN0OiBzdHJpbmc7XG4gIHRhcmdldERpZ2VzdDogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRhcmdldCdzIHJlcG8gc3RhcnRzIHdpdGggYHN5c3RlbS9gIOKAlCB0aGUgaGlnaGVzdC1wcml2aWxlZ2UgY2FzZS4gKi9cbiAgaXNQcm9tb3Rpb25Ub1N5c3RlbTogYm9vbGVhbjtcbiAgbW91bnRlZDogeyBtYW5pZmVzdHM6IG51bWJlcjsgYmxvYnM6IG51bWJlciB9O1xufVxuXG4vKiogVGFnLWRlbGV0ZSBlbWl0dGVkIGZyb20gaW1hZ2UtcmVnaXN0cnkncyBERUxFVEUgL2FwaS9pbWFnZXMvOm5hbWUvbWFuaWZlc3RzLzpyZWZlcmVuY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5VGFnRGVsZXRlQXVkaXQgZXh0ZW5kcyBBdWRpdENvcnJlbGF0aW9uIHtcbiAgZXZlbnQ6ICdyZWdpc3RyeS50YWcuZGVsZXRlJztcbiAgYWN0b3I6IHN0cmluZztcbiAgcmVwbzogc3RyaW5nO1xuICByZWY6IHN0cmluZztcbiAgZGlnZXN0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwb3NpdG9yeSBwcnVuZSBlbWl0dGVkIGZyb20gaW1hZ2UtcmVnaXN0cnkncyBERUxFVEUgL2FwaS9pbWFnZXMvOm5hbWUg4oCUXG4gKiBkZWxldGVzIGV2ZXJ5IG1hbmlmZXN0IGluIGEgcmVwbyAodXNlZCB0byByZW1vdmUgZW1wdHkvZGVhZCByZXBvcyBmcm9tIHRoZVxuICogY2F0YWxvZykuIFVubGlrZSB0aGUgdGFnLWRlbGV0ZSBhYm92ZSwgdGhlcmUncyBubyBzaW5nbGUgYHJlZmAvYGRpZ2VzdGA6XG4gKiB0aGUgY291bnRzIHN1bW1hcml6ZSB0aGUgd2hvbGUgcmVwby5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeVJlcG9EZWxldGVBdWRpdCBleHRlbmRzIEF1ZGl0Q29ycmVsYXRpb24ge1xuICBldmVudDogJ3JlZ2lzdHJ5LnJlcG8uZGVsZXRlJztcbiAgYWN0b3I6IHN0cmluZztcbiAgcmVwbzogc3RyaW5nO1xuICAvKiogQ291bnQgb2YgdW5pcXVlIG1hbmlmZXN0IGRpZ2VzdHMgYWN0dWFsbHkgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZE1hbmlmZXN0czogbnVtYmVyO1xuICAvKiogQ291bnQgb2YgdGFncyB0aGUgcmVwbyBoZWxkIGJlZm9yZSB0aGUgcHJ1bmUuICovXG4gIGRlbGV0ZWRUYWdzOiBudW1iZXI7XG59XG5cbi8qKiBVbmlvbiBvZiBldmVyeSBjcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50IGN1cnJlbnRseSBlbWl0dGVkLiAqL1xuZXhwb3J0IHR5cGUgQXVkaXRFdmVudCA9IFJlZ2lzdHJ5VGFnQ29weUF1ZGl0IHwgUmVnaXN0cnlUYWdEZWxldGVBdWRpdCB8IFJlZ2lzdHJ5UmVwb0RlbGV0ZUF1ZGl0O1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZXZlbnRzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvYXVkaXQtZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBDcm9zcy1zZXJ2aWNlIGF1ZGl0IGV2ZW50cyBlbWl0dGVkIHZpYSBzdHJ1Y3R1cmVkIGxvZ3MuXG4gKlxuICogUGxhdGZvcm0ncyBvd24gYXVkaXQgZXZlbnRzICh1c2VyLmxvZ2luLCBvcmcuY3JlYXRlLCDigKYpIGxpdmUgaW4gTW9uZ29EQlxuICogdmlhIHRoZSBBdWRpdEV2ZW50IG1vZGVsIOKAlCB0aGF0J3MgYSBzZXBhcmF0ZSBwZXJzaXN0ZW5jZSBwYXRoIHNjb3BlZCB0b1xuICogdGhlIHBsYXRmb3JtIHNlcnZpY2UuIFRoZSBldmVudHMgYmVsb3cgYXJlIGVtaXR0ZWQgYnkgb3RoZXIgc2VydmljZXNcbiAqIChpbWFnZS1yZWdpc3RyeSwgZXRjLikgdmlhIHRoZSBgbG9nQXVkaXRFdmVudGAgaGVscGVyIGFzIHN0cnVjdHVyZWQgbG9nXG4gKiBsaW5lcyB3aXRoIGBldmVudENhdGVnb3J5OiAnYXVkaXQnYCwgc2NyYXBlZCBieSBMb2tpIGZvciBxdWVyeWFibGVcbiAqIGF1ZGl0IGhpc3RvcnkuXG4gKlxuICogQWRkIGEgbmV3IGV2ZW50OlxuICogICAxLiBFeHRlbmQgdGhlIHVuaW9uIHR5cGUgYmVsb3cuXG4gKiAgIDIuIERvY3VtZW50IGl0IGluIGBkb2NzL2F1ZGl0LWV2ZW50cy5tZGAsIGluY2x1ZGluZyBhbnkgcGF5bG9hZC1zcGVjaWZpY1xuICogICAgICBmaWVsZHMuXG4gKiAgIDMuIEVtaXQgdmlhIGBsb2dBdWRpdEV2ZW50KGxvZ2dlciwgeyBldmVudDogJ2V2ZW50Lm5hbWUnLCDigKYgfSlgIGZyb20gdGhlIHJvdXRlLlxuICovXG5cbi8qKlxuICogQ29ycmVsYXRpb24gY29udGV4dCBzaGFyZWQgYnkgZXZlcnkgY3Jvc3Mtc2VydmljZSBhdWRpdCBldmVudC4gT3B0aW9uYWw7XG4gKiB3aGVuIHBvcHVsYXRlZCwgdGhlc2UgbGV0IGFuIG9wZXJhdG9yXG4gKiBwaXZvdCBhIExva2kgYXVkaXQgbGluZSB0byB0aGUgb3JpZ2luYXRpbmcgSFRUUCByZXF1ZXN0IChgcmVxdWVzdElkYCkgb3IgdGhlXG4gKiBlbmQtdG8tZW5kIGRpc3RyaWJ1dGVkIHRyYWNlIChgdHJhY2VJZGApIOKAlCBhbmQgbGluZSB0aGVtIHVwIHdpdGggcGxhdGZvcm0nc1xuICogTW9uZ29EQiBhdWRpdCBldmVudHMsIHdoaWNoIGNhcnJ5IHRoZSBzYW1lIHR3byBmaWVsZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRDb3JyZWxhdGlvbiB7XG4gIC8qKiBPcmlnaW5hdGluZyByZXF1ZXN0IGlkIChwcm9wYWdhdGVkIGB4LXJlcXVlc3QtaWRgKS4gKi9cbiAgcmVxdWVzdElkPzogc3RyaW5nO1xuICAvKiogT3BlblRlbGVtZXRyeSB0cmFjZSBpZCBvZiB0aGUgYWN0aXZlIHNwYW4sIHdoZW4gdHJhY2luZyBpcyBlbmFibGVkLiAqL1xuICB0cmFjZUlkPzogc3RyaW5nO1xufVxuXG4vKiogVGFnLWNvcHkgZW1pdHRlZCBmcm9tIGltYWdlLXJlZ2lzdHJ5J3MgUE9TVCAvYXBpL2ltYWdlcy9jb3B5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyeVRhZ0NvcHlBdWRpdCBleHRlbmRzIEF1ZGl0Q29ycmVsYXRpb24ge1xuICBldmVudDogJ3JlZ2lzdHJ5LnRhZy5jb3B5JztcbiAgYWN0b3I6IHN0cmluZztcbiAgc291cmNlOiBzdHJpbmc7XG4gIHRhcmdldDogc3RyaW5nO1xuICBzb3VyY2VEaWdlc3Q6IHN0cmluZztcbiAgdGFyZ2V0RGlnZXN0OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGFyZ2V0J3MgcmVwbyBzdGFydHMgd2l0aCBgc3lzdGVtL2Ag4oCUIHRoZSBoaWdoZXN0LXByaXZpbGVnZSBjYXNlLiAqL1xuICBpc1Byb21vdGlvblRvU3lzdGVtOiBib29sZWFuO1xuICBtb3VudGVkOiB7IG1hbmlmZXN0czogbnVtYmVyOyBibG9iczogbnVtYmVyIH07XG59XG5cbi8qKiBUYWctZGVsZXRlIGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIERFTEVURSAvYXBpL2ltYWdlcy86bmFtZS9tYW5pZmVzdHMvOnJlZmVyZW5jZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cnlUYWdEZWxldGVBdWRpdCBleHRlbmRzIEF1ZGl0Q29ycmVsYXRpb24ge1xuICBldmVudDogJ3JlZ2lzdHJ5LnRhZy5kZWxldGUnO1xuICBhY3Rvcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIHJlZjogc3RyaW5nO1xuICBkaWdlc3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXBvc2l0b3J5IHBydW5lIGVtaXR0ZWQgZnJvbSBpbWFnZS1yZWdpc3RyeSdzIERFTEVURSAvYXBpL2ltYWdlcy86bmFtZSDigJRcbiAqIGRlbGV0ZXMgZXZlcnkgbWFuaWZlc3QgaW4gYSByZXBvICh1c2VkIHRvIHJlbW92ZSBlbXB0eS9kZWFkIHJlcG9zIGZyb20gdGhlXG4gKiBjYXRhbG9nKS4gVW5saWtlIHRoZSB0YWctZGVsZXRlIGFib3ZlLCB0aGVyZSdzIG5vIHNpbmdsZSBgcmVmYC9gZGlnZXN0YDpcbiAqIHRoZSBjb3VudHMgc3VtbWFyaXplIHRoZSB3aG9sZSByZXBvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJ5UmVwb0RlbGV0ZUF1ZGl0IGV4dGVuZHMgQXVkaXRDb3JyZWxhdGlvbiB7XG4gIGV2ZW50OiAncmVnaXN0cnkucmVwby5kZWxldGUnO1xuICBhY3Rvcjogc3RyaW5nO1xuICByZXBvOiBzdHJpbmc7XG4gIC8qKiBDb3VudCBvZiB1bmlxdWUgbWFuaWZlc3QgZGlnZXN0cyBhY3R1YWxseSBkZWxldGVkLiAqL1xuICBkZWxldGVkTWFuaWZlc3RzOiBudW1iZXI7XG4gIC8qKiBDb3VudCBvZiB0YWdzIHRoZSByZXBvIGhlbGQgYmVmb3JlIHRoZSBwcnVuZS4gKi9cbiAgZGVsZXRlZFRhZ3M6IG51bWJlcjtcbn1cblxuLyoqIFVuaW9uIG9mIGV2ZXJ5IGNyb3NzLXNlcnZpY2UgYXVkaXQgZXZlbnQgY3VycmVudGx5IGVtaXR0ZWQuICovXG5leHBvcnQgdHlwZSBBdWRpdEV2ZW50ID0gUmVnaXN0cnlUYWdDb3B5QXVkaXQgfCBSZWdpc3RyeVRhZ0RlbGV0ZUF1ZGl0IHwgUmVnaXN0cnlSZXBvRGVsZXRlQXVkaXQ7XG4iXX0=
@@ -114,6 +114,71 @@ export declare const BUILD_SIZE_CATALOG: Readonly<Record<BuildSize, BuildSizeMet
114
114
  * operator never bought into. Pinned against the `QuotaTier` union by a test.
115
115
  */
116
116
  export declare const BUILD_TIER_LADDER: readonly QuotaTier[];
117
+ /**
118
+ * How many of a tier's builds run AT ONCE, across every org on that tier
119
+ * (`PLUGIN_BUILD_CONCURRENCY_<TIER>` overrides each row).
120
+ *
121
+ * TIER-keyed, not class-keyed, and that is the queue topology rather than a
122
+ * simplification: there is one BullMQ `Worker` per tier queue and both
123
+ * scheduling classes are served by it, so a per-class figure here could not be
124
+ * honoured — it would either duplicate this number or invite someone to set a
125
+ * value the worker cannot act on.
126
+ *
127
+ * **A ladder, not one figure.** This is the AGGREGATE bound that makes a tier's
128
+ * advertised per-build capacity deliverable: the cap is reachable by a single
129
+ * tenant, and the number of tenants reaching for it concurrently is limited
130
+ * here, where it can be tuned without touching the price list.
131
+ *
132
+ * It lived as a bare literal map inside the build worker until now, which is
133
+ * exactly how `docs/environment-variables.md` came to describe a global default
134
+ * that the code had stopped honouring — a figure no catalog exposes is a figure
135
+ * the documentation drifts away from. It sits beside `slotsByTier` and
136
+ * `minTier` because it is the third tier-keyed build figure, not a different
137
+ * kind of thing.
138
+ *
139
+ * **Distinct from the per-org slot cap, and the LOWER of the two binds.** This
140
+ * is pod capacity (every concurrent build drives the same buildkitd); the slot
141
+ * cap is fairness between tenants sharing this queue. A tier whose concurrency
142
+ * sits below its slot cap cannot reach that cap at all, which is why the worker
143
+ * warns about it on start.
144
+ *
145
+ * Monotonic across the PAID rungs only. `unlimited` sits at the bottom, not the
146
+ * top: it is not a purchased tier but the absence of billing, which correlates
147
+ * with the smallest hardware — see its own note below.
148
+ */
149
+ export declare const BUILD_TIER_CONCURRENCY: Readonly<Record<QuotaTier, number>>;
150
+ /**
151
+ * What ONE replica may run at once if every tier queue is busy: the SUM of the
152
+ * ladder, because a replica starts one BullMQ Worker per tier and each carries
153
+ * its own concurrency.
154
+ *
155
+ * This number was never written down, and that is the point of writing it down.
156
+ * The incident arithmetic everyone reasoned with — "8 replicas x 4 = 32" — is
157
+ * the single-tier case (a catalogue load is all system-org). A mixed fleet
158
+ * reaches `replicas x this`, which is 13 per replica and 104 across the eight a
159
+ * plugin deployment scales to. The ladder's rows therefore set a fleet ceiling
160
+ * that nothing declared and nobody chose.
161
+ *
162
+ * `PLUGIN_MAX_BUILDS_PER_REPLICA` defaults to this, so raising a tier row cannot
163
+ * silently raise what one replica puts on its single buildkitd sidecar — it
164
+ * binds at this figure and the worker says so on start.
165
+ */
166
+ export declare const BUILD_LADDER_CONCURRENCY_SUM: number;
167
+ /**
168
+ * This tier's default worker concurrency. Falls back to the `developer` row for
169
+ * an unrecognised tier, matching `buildSlotsFor` — a bad tier string must not
170
+ * hand out the most generous figure in the table.
171
+ */
172
+ export declare function buildWorkerConcurrencyFor(tier: QuotaTier): number;
173
+ /**
174
+ * The env var that overrides {@link buildWorkerConcurrencyFor} for one tier.
175
+ *
176
+ * Derived rather than written out six times: the per-tier reads used to be six
177
+ * near-identical `envInt` lines, where a wrong cross-reference
178
+ * (`pro: envInt('…_PRO', tierDefault.team)`) silently takes another tier's
179
+ * default and no type can catch it.
180
+ */
181
+ export declare function buildConcurrencyEnvVar(tier: QuotaTier): string;
117
182
  /** This size's credit/vCPU multiplier; `1` for anything unrecognised. */
118
183
  export declare function buildSizeMultiplier(size: string): number;
119
184
  /** `Small` … `X-Large`; the raw id for anything unrecognised. */
@@ -80,9 +80,103 @@ export const BUILD_SIZE_CATALOG = {
80
80
  export const BUILD_TIER_LADDER = [
81
81
  'developer', 'pro', 'team', 'business', 'enterprise', 'unlimited',
82
82
  ];
83
+ /**
84
+ * How many of a tier's builds run AT ONCE, across every org on that tier
85
+ * (`PLUGIN_BUILD_CONCURRENCY_<TIER>` overrides each row).
86
+ *
87
+ * TIER-keyed, not class-keyed, and that is the queue topology rather than a
88
+ * simplification: there is one BullMQ `Worker` per tier queue and both
89
+ * scheduling classes are served by it, so a per-class figure here could not be
90
+ * honoured — it would either duplicate this number or invite someone to set a
91
+ * value the worker cannot act on.
92
+ *
93
+ * **A ladder, not one figure.** This is the AGGREGATE bound that makes a tier's
94
+ * advertised per-build capacity deliverable: the cap is reachable by a single
95
+ * tenant, and the number of tenants reaching for it concurrently is limited
96
+ * here, where it can be tuned without touching the price list.
97
+ *
98
+ * It lived as a bare literal map inside the build worker until now, which is
99
+ * exactly how `docs/environment-variables.md` came to describe a global default
100
+ * that the code had stopped honouring — a figure no catalog exposes is a figure
101
+ * the documentation drifts away from. It sits beside `slotsByTier` and
102
+ * `minTier` because it is the third tier-keyed build figure, not a different
103
+ * kind of thing.
104
+ *
105
+ * **Distinct from the per-org slot cap, and the LOWER of the two binds.** This
106
+ * is pod capacity (every concurrent build drives the same buildkitd); the slot
107
+ * cap is fairness between tenants sharing this queue. A tier whose concurrency
108
+ * sits below its slot cap cannot reach that cap at all, which is why the worker
109
+ * warns about it on start.
110
+ *
111
+ * Monotonic across the PAID rungs only. `unlimited` sits at the bottom, not the
112
+ * top: it is not a purchased tier but the absence of billing, which correlates
113
+ * with the smallest hardware — see its own note below.
114
+ */
115
+ export const BUILD_TIER_CONCURRENCY = {
116
+ developer: 1,
117
+ pro: 2,
118
+ team: 2,
119
+ business: 3,
120
+ enterprise: 4,
121
+ /**
122
+ * ONE, and the lowest row — deliberately NOT the most generous.
123
+ *
124
+ * `unlimited` means "billing is not configured", which in practice is a
125
+ * single-node install (local, minikube, a fresh cluster), and it is also the
126
+ * SYSTEM ORG's tier — the org that loads the whole sample catalogue on first
127
+ * boot. Giving it 4 handed the highest concurrency to the tier most likely to
128
+ * be running on the smallest hardware.
129
+ *
130
+ * It cost an install: 8 plugin replicas x 4 = 32 concurrent builds, each
131
+ * asking the image registry to sign a 7-17 MiB SBOM against its 1 GiB limit.
132
+ * The registry was OOMKilled, and because its `/token` endpoint is also the
133
+ * registry login, the pushes failed too — 107 of 117 plugins never came up.
134
+ * The earlier default of 1 (then a global knob) had produced 95 of 119.
135
+ *
136
+ * Raise it per deployment with `PLUGIN_BUILD_CONCURRENCY_UNLIMITED` once the
137
+ * registry's memory and a signing bound say the fan-in is safe.
138
+ */
139
+ unlimited: 1,
140
+ };
83
141
  // ---------------------------------------------------------------------------
84
142
  // Accessors
85
143
  // ---------------------------------------------------------------------------
144
+ /**
145
+ * What ONE replica may run at once if every tier queue is busy: the SUM of the
146
+ * ladder, because a replica starts one BullMQ Worker per tier and each carries
147
+ * its own concurrency.
148
+ *
149
+ * This number was never written down, and that is the point of writing it down.
150
+ * The incident arithmetic everyone reasoned with — "8 replicas x 4 = 32" — is
151
+ * the single-tier case (a catalogue load is all system-org). A mixed fleet
152
+ * reaches `replicas x this`, which is 13 per replica and 104 across the eight a
153
+ * plugin deployment scales to. The ladder's rows therefore set a fleet ceiling
154
+ * that nothing declared and nobody chose.
155
+ *
156
+ * `PLUGIN_MAX_BUILDS_PER_REPLICA` defaults to this, so raising a tier row cannot
157
+ * silently raise what one replica puts on its single buildkitd sidecar — it
158
+ * binds at this figure and the worker says so on start.
159
+ */
160
+ export const BUILD_LADDER_CONCURRENCY_SUM = BUILD_TIER_LADDER.reduce((n, tier) => n + BUILD_TIER_CONCURRENCY[tier], 0);
161
+ /**
162
+ * This tier's default worker concurrency. Falls back to the `developer` row for
163
+ * an unrecognised tier, matching `buildSlotsFor` — a bad tier string must not
164
+ * hand out the most generous figure in the table.
165
+ */
166
+ export function buildWorkerConcurrencyFor(tier) {
167
+ return BUILD_TIER_CONCURRENCY[tier] ?? BUILD_TIER_CONCURRENCY.developer;
168
+ }
169
+ /**
170
+ * The env var that overrides {@link buildWorkerConcurrencyFor} for one tier.
171
+ *
172
+ * Derived rather than written out six times: the per-tier reads used to be six
173
+ * near-identical `envInt` lines, where a wrong cross-reference
174
+ * (`pro: envInt('…_PRO', tierDefault.team)`) silently takes another tier's
175
+ * default and no type can catch it.
176
+ */
177
+ export function buildConcurrencyEnvVar(tier) {
178
+ return `PLUGIN_BUILD_CONCURRENCY_${tier.toUpperCase()}`;
179
+ }
86
180
  /** This size's credit/vCPU multiplier; `1` for anything unrecognised. */
87
181
  export function buildSizeMultiplier(size) {
88
182
  return BUILD_SIZE_CATALOG[size]?.multiplier ?? 1;
@@ -155,4 +249,4 @@ export function tierAllowsBuildSize(tier, size) {
155
249
  export function buildSizesForTier(tier) {
156
250
  return BUILD_SIZES.filter((s) => tierAllowsBuildSize(tier, s));
157
251
  }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9idWlsZC1jYXRhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFpQ3RDLDhFQUE4RTtBQUM5RSx5Q0FBeUM7QUFDekMsOEVBQThFO0FBRTlFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQVUsQ0FBQztBQXVCL0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWlEO0lBQy9FLFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSwyRUFBMkU7UUFDbEYsV0FBVyxFQUFFO1lBQ1gsU0FBUyxFQUFFLENBQUM7WUFDWixHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsQ0FBQztZQUNiLDBFQUEwRTtZQUMxRSxTQUFTLEVBQUUsQ0FBQztTQUNiO0tBQ0Y7SUFDRCxRQUFRLEVBQUU7UUFDUixLQUFLLEVBQUUsVUFBVTtRQUNqQixLQUFLLEVBQUUseUVBQXlFO1FBQ2hGLFdBQVcsRUFBRTtZQUNYLFNBQVMsRUFBRSxDQUFDO1lBQ1osR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxTQUFTLEVBQUUsRUFBRTtTQUNkO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsOEVBQThFO0FBQzlFLDJDQUEyQztBQUMzQyw4RUFBOEU7QUFFOUUsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBVSxDQUFDO0FBcUNyRTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMs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QUFDOUQsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBZTtJQUMvQyxPQUFPO1FBQ0wsUUFBUSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1FBQ3pDLFFBQVEsRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELHlDQUF5QztBQUN6QyxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBZSxFQUFFLElBQVk7SUFDL0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsSUFBaUIsQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsOEVBQThFO0lBQzlFLHFFQUFxRTtJQUNyRSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0IsT0FBTyxJQUFJLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFlO0lBQy9DLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoYXQgYSBidWlsZCdzIENMQVNTIGFuZCBTSVpFIGFyZSBjYWxsZWQsIHdoYXQgdGhleSBjb3N0LCBhbmQgd2hpY2ggdGllciBtYXlcbiAqIGFzayBmb3IgdGhlbSAoRDExL0QxMykuXG4gKlxuICogT05FIG1vZHVsZSBpbnN0ZWFkIG9mIHNpeCB0YWJsZXMuIFRoZSBmYWN0cyB1c2VkIHRvIGxpdmUgaW5cbiAqIGB3aXJlLXZvY2FidWxhcnkudHNgICh0aGUgdHdvIGlkIGxpc3RzIGFuZCB0aGUgc2l6ZSBtdWx0aXBsaWVycyksXG4gKiBgcXVvdGEtdGllcnMudHNgICh3aGljaCB0aWVyIGdldHMgd2hpY2ggc2l6ZSwgYW5kIHRoZSBwZXItY2xhc3Mgc2xvdCBjb3VudHMpXG4gKiBhbmQgYSBoYW5kLW1haW50YWluZWQgbWlycm9yIG9mIGFsbCBmb3VyIGluIGBmcm9udGVuZC9zcmMvbGliL2J1aWxkLXNoYXBlLnRzYFxuICog4oCUIGhlbGQgdG9nZXRoZXIgYnkgYSB0ZXN0IHRoYXQgcGFyc2VkIHRoaXMgcGFja2FnZSdzIFR5cGVTY3JpcHQgU09VUkNFIHdpdGhcbiAqIHJlZ2V4ZXMgdG8gZGV0ZWN0IGRyaWZ0LiBUaGlzIGlzIHRoZSBzYW1lIG1vdmUgYHF1b3RhLWNhdGFsb2cudHNgIG1hZGUgZm9yIHRoZVxuICogZml2ZSBmcm9udGVuZCBsYWJlbCBtYXBzLCBhbmQgZm9yIHRoZSBzYW1lIHJlYXNvbjogdGhlIGJyb3dzZXIgaW1wb3J0cyB0aGVcbiAqIGNhdGFsb2cgZGlyZWN0bHksIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBkcmlmdC5cbiAqXG4gKiBERVBFTkRFTkNZLUZSRUUsIGFuZCB0aGF0IGlzIGEgY29uc3RyYWludCByYXRoZXIgdGhhbiBhIGhhcHB5IGFjY2lkZW50LiBPbmx5XG4gKiB0eXBlLW9ubHkgaW1wb3J0cywgd2hpY2ggYXJlIGVyYXNlZCwgc28gdGhpcyBtb2R1bGUgbG9hZHMgaW4gYSBicm93c2VyOyB0aGVcbiAqIG1vbWVudCBpdCByZWFkcyBhbiBlbnYgdmFyIGl0IHN0b3BzIGJlaW5nIGltcG9ydGFibGUgYnkgdGhlIGZyb250ZW5kIGFuZCB0aGVcbiAqIG1pcnJvciBjb21lcyBiYWNrLiBFdmVyeXRoaW5nIGhlcmUgaXMgdGhlcmVmb3JlIGEgREVGQVVMVC4gVGhlIGVudiBvdmVybGF5XG4gKiAoYFBMVUdJTl9NQVhfQlVJTERTXzxUSUVSPl88Q0xBU1M+YCwgYFBMVUdJTl9CVUlMREtJVF9BRERSX1NJWkVfPFNVRkZJWD5gKVxuICogbGl2ZXMgc2VydmVyLXNpZGUsIHdoaWNoIGlzIHRoZSBzYW1lIHNwbGl0IHRoZSB0aWVyIHByZXNldHMgYWxyZWFkeSB1c2U6IGFcbiAqIGhhcmRjb2RlZCBmYWxsYmFjayBwbHVzIGEgYC9jb25maWdgIG92ZXJsYXkuXG4gKlxuICogSURTIEFSRSBBUklUSE1FVElDLCBMQUJFTFMgQVJFIFdPUkRTLiBgMC41eGAgY2FycmllcyBpdHMgb3duIG11bHRpcGxpZXIsIHNvXG4gKiBgYnVpbGRTaXplTXVsdGlwbGllcmAgaXMgY2hlY2thYmxlIGJ5IGV5ZSBhbmQgdGhlIGNyZWRpdCBtYXRoIGlzXG4gKiBzZWxmLWRvY3VtZW50aW5nOyBgU21hbGxgIC8gYFN0YW5kYXJkYCAvIGBNZWRpdW1gIC8gYExhcmdlYCAvIGBYLUxhcmdlYCBpcyB3aGF0XG4gKiBhIHBlcnNvbiByZWFkcy4gS2VlcGluZyB0aGVtIHNlcGFyYXRlIGlzIGFsc28gd2hhdCBtYWtlcyBhIHJlbmFtZSBjaGVhcDogYVxuICogbGFiZWwgaXMgb25lIGxpbmUgaGVyZSwgd2l0aCBubyB3aXJlIHZhbHVlLCBSZWRpcyBrZXksIG1ldHJpYyBsYWJlbCBvciBsZWRnZXJcbiAqIHN0cmluZyB0byBtaWdyYXRlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2NoZWR1bGluZyBjbGFzcyDigJQgV0hFTiBhIGJ1aWxkIHN0YXJ0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogYGZsZXhpYmxlYCByYXRoZXIgdGhhbiBgYmF0Y2hgLCBgZGVmZXJyZWRgIG9yIGBzbWFsbGAuXG4gKlxuICogSXQgbmFtZXMgd2hhdCB0aGUgQ1VTVE9NRVIgdHJhZGVzIOKAlCBhIGZsZXhpYmxlIHN0YXJ0IHRpbWUg4oCUIGluc3RlYWQgb2Ygd2hhdFxuICogdGhlIHBsYXRmb3JtIGRvZXMgd2l0aCBpdCwgYW5kIGl0IGRvZXMgbm90IHJlYWQgYXMgYSBkZW1vdGlvbjogdGhpcyBjbGFzcyBpc1xuICogYXZhaWxhYmxlIG9uIGV2ZXJ5IHRpZXIgaW5jbHVkaW5nIGZyZWUsIGFuZCBgZGVmZXJyZWRgIHNvdW5kcyBicm9rZW4gd2hpbGVcbiAqIGBsb3cgcHJpb3JpdHlgIHNvdW5kcyBsaWtlIGEgcGVuYWx0eS4gYHNtYWxsYCB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQgYmVjYXVzZSBpdFxuICogaXMgYSBtYWduaXR1ZGUgd29yZCBvbiBhIGxhdGVuY3kgZGltZW5zaW9uIOKAlCBgeyBidWlsZENsYXNzOiAnc21hbGwnLFxuICogYnVpbGRTaXplOiAnMngnIH1gIGlzIGxlZ2FsIGFuZCB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NFUyA9IFsnc3RhbmRhcmQnLCAnZmxleGlibGUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkQ2xhc3MgPSAodHlwZW9mIEJVSUxEX0NMQVNTRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDbGFzc01ldGEge1xuICAvKiogV2hhdCBhIHBlcnNvbiByZWFkcy4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSB0cmFkZSwgc2FpZCBpbiBvbmUgbGluZSBiZXNpZGUgdGhlIGNvbnRyb2wuICovXG4gIGJsdXJiOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbi1mbGlnaHQgYnVpbGRzIG9uZSBPUkcgbWF5IGhvbGQgaW4gdGhpcyBjbGFzcywgcGVyIHRpZXIg4oCUIHRoZSBERUZBVUxUIGZvclxuICAgKiBgUExVR0lOX01BWF9CVUlMRFNfPFRJRVI+XzxDTEFTUz5gLlxuICAgKlxuICAgKiBHcmFkZWQgYnkgdGllciByYXRoZXIgdGhhbiBvbmUgZmxhdCBmaWd1cmU6IGEgc2luZ2xlIGZpZ3VyZSBnYXZlIGEgRGV2ZWxvcGVyXG4gICAqIG9yZyB0aGUgc2FtZSB0aHJlZSBpbi1mbGlnaHQgYnVpbGRzIGFzIGFuIEVudGVycHJpc2Ugb25lLCB3aGljaCBtYWRlIHRoZVxuICAgKiBwZXItb3JnIHNlbWFwaG9yZSB0aGUgb25lIHBsYWNlIGluIHRoZSBidWlsZCBwYXRoIHRoYXQgaWdub3JlZCB3aGF0IHRoZVxuICAgKiB0ZW5hbnQgcGF5cyBmb3IuIGBmbGV4aWJsZWAgaGFzIG1vcmUgaGVhZHJvb20gdGhhbiBgc3RhbmRhcmRgIG9uIGV2ZXJ5IHJvdyxcbiAgICogYmVjYXVzZSB0aGUgY2hlYXAgY2xhc3MgaXMgd2hlcmUgdGhlIHJvb20gaGFzIHRvIGJlIGZvciBpdCB0byBzbW9vdGhcbiAgICogYW55dGhpbmcg4oCUIGEgcm93IHdoZXJlIHRoZXkgd2VyZSBlcXVhbCB3b3VsZCBtYWtlIHRoZSBjbGFzcyBwb2ludGxlc3MgdG9cbiAgICogY2hvb3NlLlxuICAgKi9cbiAgc2xvdHNCeVRpZXI6IFJlYWRvbmx5PFJlY29yZDxRdW90YVRpZXIsIG51bWJlcj4+O1xufVxuXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NfQ0FUQUxPRzogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIEJ1aWxkQ2xhc3NNZXRhPj4gPSB7XG4gIHN0YW5kYXJkOiB7XG4gICAgbGFiZWw6ICdTdGFuZGFyZCcsXG4gICAgYmx1cmI6ICdTdGFydHMgYXMgc29vbiBhcyBhIHNsb3QgaXMgZnJlZS4gVXNlIGl0IGZvciBhbnl0aGluZyB5b3UgYXJlIHdhaXRpbmcgb24uJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAxLFxuICAgICAgcHJvOiAyLFxuICAgICAgdGVhbTogMyxcbiAgICAgIGJ1c2luZXNzOiA1LFxuICAgICAgZW50ZXJwcmlzZTogOCxcbiAgICAgIC8vIEJpbGxpbmcgZGlzYWJsZWQ6IG5vdGhpbmcgaXMgY2FwcGVkLCBzbyB0aGUgY2VpbGluZyBpcyB0aGUgcG9vbCBpdHNlbGYuXG4gICAgICB1bmxpbWl0ZWQ6IDgsXG4gICAgfSxcbiAgfSxcbiAgZmxleGlibGU6IHtcbiAgICBsYWJlbDogJ0ZsZXhpYmxlJyxcbiAgICBibHVyYjogJ1N0YXJ0cyBsYXRlciwgaW4gZXhjaGFuZ2UgZm9yIG1vcmUgYnVpbGRzIGF0IG9uY2UuIFNhbWUgY29zdCBwZXIgYnVpbGQuJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAzLFxuICAgICAgcHJvOiA0LFxuICAgICAgdGVhbTogNixcbiAgICAgIGJ1c2luZXNzOiAxMCxcbiAgICAgIGVudGVycHJpc2U6IDE2LFxuICAgICAgdW5saW1pdGVkOiAxNixcbiAgICB9LFxuICB9LFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYWNoaW5lIHNpemUg4oCUIEhPVyBNVUNIIENQVSBhIGJ1aWxkIGdldHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgQlVJTERfU0laRVMgPSBbJzAuNXgnLCAnMXgnLCAnMngnLCAnNHgnLCAnOHgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkU2l6ZSA9ICh0eXBlb2YgQlVJTERfU0laRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTaXplTWV0YSB7XG4gIC8qKiBXaGF0IGEgcGVyc29uIHJlYWRzOiBTbWFsbCDigKYgWC1MYXJnZS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIHZDUFUgcmVsYXRpdmUgdG8gdGhlIGRlcGxveW1lbnQncyBiYXNlIGZpZ3VyZSwgYW5kIHRoZSBjcmVkaXQgcmF0ZS4gKi9cbiAgbXVsdGlwbGllcjogbnVtYmVyO1xuICAvKipcbiAgICogTG93ZXN0IHRpZXIgdGhhdCBtYXkgUkVRVUVTVCB0aGlzIHNpemU7IGBudWxsYCBtZWFucyBldmVyeSB0aWVyIG1heS5cbiAgICpcbiAgICogT25lIGZpZWxkIHBlciBzaXplIHJhdGhlciB0aGFuIGEgcm93IHBlciB0aWVyLCBhbmQgdGhhdCBtYWtlcyB0aGUgbGFkZGVyJ3NcbiAgICogbW9ub3RvbmljaXR5IFNUUlVDVFVSQUw6IGEgcm93LXBlci10aWVyIHRhYmxlIGNhbiBleHByZXNzIFwiVGVhbSBoYXMgNHggYnV0XG4gICAqIEJ1c2luZXNzIGRvZXMgbm90XCIgYW5kIG5lZWRlZCBhIHRlc3QgdG8gZm9yYmlkIGl0LiBUaGlzIHNoYXBlIGNhbm5vdC5cbiAgICovXG4gIG1pblRpZXI6IFF1b3RhVGllciB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgdGhpcyBzaXplIHBhaXJzIHdpdGggdW5sZXNzIHRoZSBjYWxsZXIgc2F5cyBvdGhlcndpc2UuXG4gICAqXG4gICAqIFdoeSBgMC41eGAgZGVmYXVsdHMgdG8gYGZsZXhpYmxlYDogYSBoYWxmLXNwZWVkIGJ1aWxkIHRha2VzIHJvdWdobHkgdHdpY2UgYXNcbiAgICogbG9uZyBhbmQgdGhlcmVmb3JlIEhPTERTIElUUyBTTE9UIHR3aWNlIGFzIGxvbmcuIE9uIERldmVsb3BlciDigJQgb25lIHN0YW5kYXJkXG4gICAqIHNsb3Qg4oCUIG9uZSBjaGVhcCBidWlsZCB3b3VsZCBibG9jayB0aGUgb25seSB1cmdlbnQtZml4IHNsb3QgZm9yIGRvdWJsZSB0aGVcbiAgICogdGltZS4gRGVmYXVsdGluZyBpdCB0byB0aGUgY2xhc3Mgd2l0aCB0aHJlZSBzbG90cyBtZWFucyBpdCBjYW5ub3QuXG4gICAqL1xuICBkZWZhdWx0Q2xhc3M6IEJ1aWxkQ2xhc3M7XG4gIC8qKlxuICAgKiBTdWZmaXggb2YgdGhpcyBzaXplJ3MgYnVpbGRraXRkIHBvb2wgb3ZlcnJpZGVcbiAgICogKGBQTFVHSU5fQlVJTERLSVRfQUREUl9TSVpFXzxTVUZGSVg+YCkuXG4gICAqXG4gICAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGRlcml2ZWQgZnJvbSB0aGUgaWQsIGJlY2F1c2UgZGVyaXZpbmcgaXQgcHJvZHVjZXNcbiAgICogSUxMRUdBTCBOQU1FUzogYCcwLjV4Jy50b1VwcGVyQ2FzZSgpYCBnaXZlcyBgMC41WGAgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW5cbiAgICogYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSAodGhlIHNhbWUgcmVhc29uIGB4LWxhcmdlYCB3YXMgcmVqZWN0ZWQgYXMgYW5cbiAgICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyKS5cbiAgICovXG4gIGVudlN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzaXplIGxhZGRlci5cbiAqXG4gKiBBIHNpemUgaXMgYSBCSUdHRVIgREFFTU9OLCBub3QgYSBmbGFnOiBgYnVpbGRjdGxgIGhhcyBubyBwZXItYnVpbGQgQ1BVIG9wdGlvbixcbiAqIGJlY2F1c2UgdGhlIENQVSBhIGJ1aWxkIG1heSB1c2UgaXMgdGhlIGJ1aWxka2l0ZCBQT0QncyBsaW1pdC4gU28gZXZlcnkgcnVuZ1xuICogYWJvdmUgb3IgYmVsb3cgYDF4YCBuZWVkcyBhIHBvb2wgb2YgaXRzIG93biwgYW5kIGEgcnVuZyB3aXRoIG5vIHBvb2wgaXNcbiAqIFJFRlVTRUQgcmF0aGVyIHRoYW4gc2lsZW50bHkgc2VydmVkIGF0IGAxeGAg4oCUIGluIGJvdGggZGlyZWN0aW9ucy4gU2VydmluZ1xuICogYDR4YCBmcm9tIHRoZSBzaGFyZWQgZGFlbW9uIHdvdWxkIGNoYXJnZSBmb3VyIHRpbWVzIGZvciBvbmUgdGltZXMgdGhlIHNwZWVkO1xuICogc2VydmluZyBgMC41eGAgZnJvbSBpdCB3b3VsZCBoYW5kIGV2ZXJ5IHRlbmFudCBmdWxsIHNwZWVkIGF0IGhhbGYgcHJpY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9TSVpFX0NBVEFMT0c6IFJlYWRvbmx5PFJlY29yZDxCdWlsZFNpemUsIEJ1aWxkU2l6ZU1ldGE+PiA9IHtcbiAgLy8gQXZhaWxhYmxlIHRvIEVWRVJZIHRpZXIsIGRlbGliZXJhdGVseS4gSXQgaXMgYSBidWRnZXQgb3B0aW9uLCBub3QgYVxuICAvLyByZXN0cmljdGlvbjogdGhlIGZyZWUgdGllciBnYWlucyBhIHJlYWwgY2hvaWNlIChzcGVuZCBsZXNzKSBpbnN0ZWFkIG9mIGFcbiAgLy8gbGlzdCBvZiBsb2Nrcy4gVGhlIGFyaXRobWV0aWMgaXMgaG9uZXN0IGluIG9uZSBkaXJlY3Rpb24g4oCUIGEgQ1BVLWJvdW5kIGJ1aWxkXG4gIC8vIHRha2VzIHR3aWNlIGFzIGxvbmcgYXQgaGFsZiB0aGUgdkNQVSBhbmQgY29zdHMgdGhlIFNBTUUsIHdoaWxlIGFuIEkvTy1ib3VuZFxuICAvLyBvbmUgY29zdHMgYWJvdXQgaGFsZi4gU28gU21hbGwgY2FuIG5ldmVyIGNvc3QgbW9yZSB0aGFuIFN0YW5kYXJkLCBhbmQgY2FuXG4gIC8vIGNvc3QgaGFsZiAoYXNzdW1pbmcgc2xvd2Rvd24gaXMgYXQgbW9zdCBsaW5lYXIsIHdoaWNoIG1lbW9yeSBwcmVzc3VyZSBjYW5cbiAgLy8gYnJlYWspLlxuICAnMC41eCc6IHsgbGFiZWw6ICdTbWFsbCcsIG11bHRpcGxpZXI6IDAuNSwgbWluVGllcjogbnVsbCwgZGVmYXVsdENsYXNzOiAnZmxleGlibGUnLCBlbnZTdWZmaXg6ICdIQUxGJyB9LFxuICAnMXgnOiB7IGxhYmVsOiAnU3RhbmRhcmQnLCBtdWx0aXBsaWVyOiAxLCBtaW5UaWVyOiBudWxsLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzFYJyB9LFxuICAnMngnOiB7IGxhYmVsOiAnTWVkaXVtJywgbXVsdGlwbGllcjogMiwgbWluVGllcjogJ3RlYW0nLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzJYJyB9LFxuICAnNHgnOiB7IGxhYmVsOiAnTGFyZ2UnLCBtdWx0aXBsaWVyOiA0LCBtaW5UaWVyOiAnYnVzaW5lc3MnLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzRYJyB9LFxuICAnOHgnOiB7IGxhYmVsOiAnWC1MYXJnZScsIG11bHRpcGxpZXI6IDgsIG1pblRpZXI6ICdlbnRlcnByaXNlJywgZGVmYXVsdENsYXNzOiAnc3RhbmRhcmQnLCBlbnZTdWZmaXg6ICc4WCcgfSxcbn07XG5cbi8qKlxuICogVGhlIHRpZXIgbGFkZGVyLCBhc2NlbmRpbmcsIGZvciBldmFsdWF0aW5nIHtAbGluayBCdWlsZFNpemVNZXRhLm1pblRpZXJ9LlxuICpcbiAqIERlY2xhcmVkIGhlcmUgYmVjYXVzZSBhIGRlcGVuZGVuY3ktZnJlZSBtb2R1bGUgY2Fubm90IGltcG9ydCBgVkFMSURfVElFUlNgIChpdFxuICogaXMgZGVyaXZlZCBmcm9tIHRoZSBlbnYtcmVhZGluZyB0aWVyIHRhYmxlKS4gYHVubGltaXRlZGAgc2l0cyBhdCB0aGUgdG9wIHNvXG4gKiB0aGUgbm8tYmlsbGluZyBpbnN0YWxsIGdhdGVzIG5vdGhpbmcg4oCUIGEgZ2F0ZSB0aGVyZSB3b3VsZCBpbnZlbnQgYSBsaW1pdCB0aGVcbiAqIG9wZXJhdG9yIG5ldmVyIGJvdWdodCBpbnRvLiBQaW5uZWQgYWdhaW5zdCB0aGUgYFF1b3RhVGllcmAgdW5pb24gYnkgYSB0ZXN0LlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfVElFUl9MQURERVI6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gW1xuICAnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2J1c2luZXNzJywgJ2VudGVycHJpc2UnLCAndW5saW1pdGVkJyxcbl07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQWNjZXNzb3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIFRoaXMgc2l6ZSdzIGNyZWRpdC92Q1BVIG11bHRpcGxpZXI7IGAxYCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZU11bHRpcGxpZXIoc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIEJVSUxEX1NJWkVfQ0FUQUxPR1tzaXplIGFzIEJ1aWxkU2l6ZV0/Lm11bHRpcGxpZXIgPz8gMTtcbn1cblxuLyoqIGBTbWFsbGAg4oCmIGBYLUxhcmdlYDsgdGhlIHJhdyBpZCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUxhYmVsKHNpemU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5sYWJlbCA/PyBzaXplO1xufVxuXG4vKiogYFN0YW5kYXJkYCAvIGBGbGV4aWJsZWA7IHRoZSByYXcgaWQgZm9yIGFueXRoaW5nIHVucmVjb2duaXNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENsYXNzTGFiZWwoYnVpbGRDbGFzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEJVSUxEX0NMQVNTX0NBVEFMT0dbYnVpbGRDbGFzcyBhcyBCdWlsZENsYXNzXT8ubGFiZWwgPz8gYnVpbGRDbGFzcztcbn1cblxuLyoqXG4gKiBFbnYtdmFyIHN1ZmZpeCBvZiB0aGlzIHNpemUncyBidWlsZGtpdGQgcG9vbCBvdmVycmlkZS5cbiAqXG4gKiBEZWNsYXJlZCBpbiB0aGUgY2F0YWxvZyByYXRoZXIgdGhhbiBkZXJpdmVkLCBiZWNhdXNlIGRlcml2aW5nIGl0IHByb2R1Y2VzXG4gKiBJTExFR0FMIE5BTUVTOiBgJzAuNXgnLnRvVXBwZXJDYXNlKClgIGlzIGAwLjVYYCwgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW4gYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuIChJdCBpcyB0aGUgc2FtZSByZWFzb24gYHgtbGFyZ2VgIHdhcyByZWplY3RlZCBhcyBhblxuICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyLikgRmFsbHMgYmFjayB0byBgMVhgLCB0aGVcbiAqIHNoYXJlZCBkYWVtb24sIGZvciBhbiB1bnJlY29nbmlzZWQgc2l6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUVudlN1ZmZpeChzaXplOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQlVJTERfU0laRV9DQVRBTE9HW3NpemUgYXMgQnVpbGRTaXplXT8uZW52U3VmZml4ID8/ICcxWCc7XG59XG5cbi8qKiBUaGUgY2xhc3MgdGhpcyBzaXplIHJ1bnMgaW4gdW5sZXNzIHRoZSBjYWxsZXIgb3ZlcnJpZGVzIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDbGFzc0ZvclNpemUoc2l6ZTogc3RyaW5nKTogQnVpbGRDbGFzcyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5kZWZhdWx0Q2xhc3MgPz8gJ3N0YW5kYXJkJztcbn1cblxuLyoqXG4gKiBIb3cgbXVjaCBsb25nZXIgYSBidWlsZCBhdCB0aGlzIHNpemUgbWF5IHJ1biBiZWZvcmUgdGhlIHRpbWVvdXQga2lsbHMgaXQuXG4gKlxuICogU2NhbGVzIFVQIGJlbG93IGAxeGAgYW5kIG5ldmVyIGRvd24gYWJvdmUgaXQsIGFuZCB0aGUgYXN5bW1ldHJ5IGlzIHRoZSBwb2ludDpcbiAqIHRoZSB0aW1lb3V0IGlzIGEgU0FGRVRZIGJvdW5kIG9uIGEgcnVuYXdheSBidWlsZCwgbm90IGEgYnVkZ2V0LiBBdCBoYWxmIHRoZVxuICogdkNQVSBhIHRlbi1taW51dGUgYnVpbGQgYmVjb21lcyBhYm91dCB0d2VudHkgYW5kIHdvdWxkIGRpZSBvbiBhIDE1LW1pbnV0ZVxuICogYm91bmQg4oCUIHNvIFNtYWxsIHdvdWxkIHF1aWV0bHkgZmFpbCBsb25nIGJ1aWxkcyAoYXMgYSBgcmV0cnlhYmxlYCBmYWlsdXJlLCBzb1xuICogdGhlIHRlbmFudCBpcyBub3QgY2hhcmdlZCwgYnV0IGl0IGlzIHJldHJpZWQgdHdpY2UgYW5kIGRlYWQtbGV0dGVyZWQpLiBTY2FsaW5nXG4gKiBpdCBET1dOIGF0IGA0eGAgd291bGQgaW5zdGVhZCBicmVhayBJL08tYm91bmQgYnVpbGRzIHRoYXQgZ2FpbiBub3RoaW5nIGZyb21cbiAqIHRoZSBleHRyYSBDUFUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpbWVvdXRGYWN0b3Ioc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIDEgLyBidWlsZFNpemVNdWx0aXBsaWVyKHNpemUpKTtcbn1cblxuLyoqIEluLWZsaWdodCBidWlsZHMgb25lIG9yZyBvbiBgdGllcmAgbWF5IGhvbGQgaW4gYGJ1aWxkQ2xhc3NgICh0aGUgZGVmYXVsdCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0Zvcih0aWVyOiBRdW90YVRpZXIsIGJ1aWxkQ2xhc3M6IEJ1aWxkQ2xhc3MpOiBudW1iZXIge1xuICBjb25zdCBtZXRhID0gQlVJTERfQ0xBU1NfQ0FUQUxPR1tidWlsZENsYXNzXSA/PyBCVUlMRF9DTEFTU19DQVRBTE9HLnN0YW5kYXJkO1xuICByZXR1cm4gbWV0YS5zbG90c0J5VGllclt0aWVyXSA/PyBtZXRhLnNsb3RzQnlUaWVyLmRldmVsb3Blcjtcbn1cblxuLyoqIEJvdGggY2xhc3Nlcycgc2xvdCBjb3VudHMgZm9yIG9uZSB0aWVyIOKAlCB0aGUgcGVyLXRpZXIgcmVhZGluZyB0aGUgVUkgd2FudHMuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0J5Q2xhc3ModGllcjogUXVvdGFUaWVyKTogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIG51bWJlcj4+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFuZGFyZDogYnVpbGRTbG90c0Zvcih0aWVyLCAnc3RhbmRhcmQnKSxcbiAgICBmbGV4aWJsZTogYnVpbGRTbG90c0Zvcih0aWVyLCAnZmxleGlibGUnKSxcbiAgfTtcbn1cblxuLyoqIFdoZXRoZXIgYHRpZXJgIG1heSByZXF1ZXN0IGBzaXplYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXI6IFF1b3RhVGllciwgc2l6ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1ldGEgPSBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdO1xuICBpZiAoIW1ldGEpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGEubWluVGllciA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGhhdmUgPSBCVUlMRF9USUVSX0xBRERFUi5pbmRleE9mKHRpZXIpO1xuICAvLyBBbiB1bnJlY29nbmlzZWQgdGllciBnZXRzIHRoZSBGTE9PUiBvZiB0aGUgbGFkZGVyIOKAlCB0aGUgc21hbGxlc3QgYWxsb3dhbmNlLFxuICAvLyBuZXZlciBldmVyeXRoaW5nLiBTYW1lIGNvbnNlcnZhdGl2ZSBjYWxsIGB0aWVyRm9yUXVldWVOYW1lYCBtYWtlcy5cbiAgaWYgKGhhdmUgPCAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBoYXZlID49IEJVSUxEX1RJRVJfTEFEREVSLmluZGV4T2YobWV0YS5taW5UaWVyKTtcbn1cblxuLyoqIEV2ZXJ5IHNpemUgYHRpZXJgIG1heSByZXF1ZXN0LCBhc2NlbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaXplc0ZvclRpZXIodGllcjogUXVvdGFUaWVyKTogcmVhZG9ubHkgQnVpbGRTaXplW10ge1xuICByZXR1cm4gQlVJTERfU0laRVMuZmlsdGVyKChzKSA9PiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXIsIHMpKTtcbn1cbiJdfQ==
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY2F0YWxvZy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2J1aWxkLWNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQWlDdEMsOEVBQThFO0FBQzlFLHlDQUF5QztBQUN6Qyw4RUFBOEU7QUFFOUU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBdUIvRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUQ7SUFDL0UsUUFBUSxFQUFFO1FBQ1IsS0FBSyxFQUFFLFVBQVU7UUFDakIsS0FBSyxFQUFFLDJFQUEyRTtRQUNsRixXQUFXLEVBQUU7WUFDWCxTQUFTLEVBQUUsQ0FBQztZQUNaLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxFQUFFLENBQUM7WUFDUCxRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxDQUFDO1lBQ2IsMEVBQTBFO1lBQzFFLFNBQVMsRUFBRSxDQUFDO1NBQ2I7S0FDRjtJQUNELFFBQVEsRUFBRTtRQUNSLEtBQUssRUFBRSxVQUFVO1FBQ2pCLEtBQUssRUFBRSx5RUFBeUU7UUFDaEYsV0FBVyxFQUFFO1lBQ1gsU0FBUyxFQUFFLENBQUM7WUFDWixHQUFHLEVBQUUsQ0FBQztZQUNOLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsRUFBRTtZQUNkLFNBQVMsRUFBRSxFQUFFO1NBQ2Q7S0FDRjtDQUNGLENBQUM7QUFFRiw4RUFBOEU7QUFDOUUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFVLENBQUM7QUFxQ3JFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUEr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Q0FBQyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsOEVBQThFO0lBQzlFLHFFQUFxRTtJQUNyRSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0IsT0FBTyxJQUFJLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsZ0RBQWdEO0FBQ2hELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFlO0lBQy9DLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFdoYXQgYSBidWlsZCdzIENMQVNTIGFuZCBTSVpFIGFyZSBjYWxsZWQsIHdoYXQgdGhleSBjb3N0LCBhbmQgd2hpY2ggdGllciBtYXlcbiAqIGFzayBmb3IgdGhlbSAoRDExL0QxMykuXG4gKlxuICogT05FIG1vZHVsZSBpbnN0ZWFkIG9mIHNpeCB0YWJsZXMuIFRoZSBmYWN0cyB1c2VkIHRvIGxpdmUgaW5cbiAqIGB3aXJlLXZvY2FidWxhcnkudHNgICh0aGUgdHdvIGlkIGxpc3RzIGFuZCB0aGUgc2l6ZSBtdWx0aXBsaWVycyksXG4gKiBgcXVvdGEtdGllcnMudHNgICh3aGljaCB0aWVyIGdldHMgd2hpY2ggc2l6ZSwgYW5kIHRoZSBwZXItY2xhc3Mgc2xvdCBjb3VudHMpXG4gKiBhbmQgYSBoYW5kLW1haW50YWluZWQgbWlycm9yIG9mIGFsbCBmb3VyIGluIGBmcm9udGVuZC9zcmMvbGliL2J1aWxkLXNoYXBlLnRzYFxuICog4oCUIGhlbGQgdG9nZXRoZXIgYnkgYSB0ZXN0IHRoYXQgcGFyc2VkIHRoaXMgcGFja2FnZSdzIFR5cGVTY3JpcHQgU09VUkNFIHdpdGhcbiAqIHJlZ2V4ZXMgdG8gZGV0ZWN0IGRyaWZ0LiBUaGlzIGlzIHRoZSBzYW1lIG1vdmUgYHF1b3RhLWNhdGFsb2cudHNgIG1hZGUgZm9yIHRoZVxuICogZml2ZSBmcm9udGVuZCBsYWJlbCBtYXBzLCBhbmQgZm9yIHRoZSBzYW1lIHJlYXNvbjogdGhlIGJyb3dzZXIgaW1wb3J0cyB0aGVcbiAqIGNhdGFsb2cgZGlyZWN0bHksIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBkcmlmdC5cbiAqXG4gKiBERVBFTkRFTkNZLUZSRUUsIGFuZCB0aGF0IGlzIGEgY29uc3RyYWludCByYXRoZXIgdGhhbiBhIGhhcHB5IGFjY2lkZW50LiBPbmx5XG4gKiB0eXBlLW9ubHkgaW1wb3J0cywgd2hpY2ggYXJlIGVyYXNlZCwgc28gdGhpcyBtb2R1bGUgbG9hZHMgaW4gYSBicm93c2VyOyB0aGVcbiAqIG1vbWVudCBpdCByZWFkcyBhbiBlbnYgdmFyIGl0IHN0b3BzIGJlaW5nIGltcG9ydGFibGUgYnkgdGhlIGZyb250ZW5kIGFuZCB0aGVcbiAqIG1pcnJvciBjb21lcyBiYWNrLiBFdmVyeXRoaW5nIGhlcmUgaXMgdGhlcmVmb3JlIGEgREVGQVVMVC4gVGhlIGVudiBvdmVybGF5XG4gKiAoYFBMVUdJTl9NQVhfQlVJTERTXzxUSUVSPl88Q0xBU1M+YCwgYFBMVUdJTl9CVUlMREtJVF9BRERSX1NJWkVfPFNVRkZJWD5gKVxuICogbGl2ZXMgc2VydmVyLXNpZGUsIHdoaWNoIGlzIHRoZSBzYW1lIHNwbGl0IHRoZSB0aWVyIHByZXNldHMgYWxyZWFkeSB1c2U6IGFcbiAqIGhhcmRjb2RlZCBmYWxsYmFjayBwbHVzIGEgYC9jb25maWdgIG92ZXJsYXkuXG4gKlxuICogSURTIEFSRSBBUklUSE1FVElDLCBMQUJFTFMgQVJFIFdPUkRTLiBgMC41eGAgY2FycmllcyBpdHMgb3duIG11bHRpcGxpZXIsIHNvXG4gKiBgYnVpbGRTaXplTXVsdGlwbGllcmAgaXMgY2hlY2thYmxlIGJ5IGV5ZSBhbmQgdGhlIGNyZWRpdCBtYXRoIGlzXG4gKiBzZWxmLWRvY3VtZW50aW5nOyBgU21hbGxgIC8gYFN0YW5kYXJkYCAvIGBNZWRpdW1gIC8gYExhcmdlYCAvIGBYLUxhcmdlYCBpcyB3aGF0XG4gKiBhIHBlcnNvbiByZWFkcy4gS2VlcGluZyB0aGVtIHNlcGFyYXRlIGlzIGFsc28gd2hhdCBtYWtlcyBhIHJlbmFtZSBjaGVhcDogYVxuICogbGFiZWwgaXMgb25lIGxpbmUgaGVyZSwgd2l0aCBubyB3aXJlIHZhbHVlLCBSZWRpcyBrZXksIG1ldHJpYyBsYWJlbCBvciBsZWRnZXJcbiAqIHN0cmluZyB0byBtaWdyYXRlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUXVvdGFUaWVyIH0gZnJvbSAnLi9xdW90YS10aWVycy5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2NoZWR1bGluZyBjbGFzcyDigJQgV0hFTiBhIGJ1aWxkIHN0YXJ0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogYGZsZXhpYmxlYCByYXRoZXIgdGhhbiBgYmF0Y2hgLCBgZGVmZXJyZWRgIG9yIGBzbWFsbGAuXG4gKlxuICogSXQgbmFtZXMgd2hhdCB0aGUgQ1VTVE9NRVIgdHJhZGVzIOKAlCBhIGZsZXhpYmxlIHN0YXJ0IHRpbWUg4oCUIGluc3RlYWQgb2Ygd2hhdFxuICogdGhlIHBsYXRmb3JtIGRvZXMgd2l0aCBpdCwgYW5kIGl0IGRvZXMgbm90IHJlYWQgYXMgYSBkZW1vdGlvbjogdGhpcyBjbGFzcyBpc1xuICogYXZhaWxhYmxlIG9uIGV2ZXJ5IHRpZXIgaW5jbHVkaW5nIGZyZWUsIGFuZCBgZGVmZXJyZWRgIHNvdW5kcyBicm9rZW4gd2hpbGVcbiAqIGBsb3cgcHJpb3JpdHlgIHNvdW5kcyBsaWtlIGEgcGVuYWx0eS4gYHNtYWxsYCB3YXMgcmVqZWN0ZWQgb3V0cmlnaHQgYmVjYXVzZSBpdFxuICogaXMgYSBtYWduaXR1ZGUgd29yZCBvbiBhIGxhdGVuY3kgZGltZW5zaW9uIOKAlCBgeyBidWlsZENsYXNzOiAnc21hbGwnLFxuICogYnVpbGRTaXplOiAnMngnIH1gIGlzIGxlZ2FsIGFuZCB1bnJlYWRhYmxlLlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NFUyA9IFsnc3RhbmRhcmQnLCAnZmxleGlibGUnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkQ2xhc3MgPSAodHlwZW9mIEJVSUxEX0NMQVNTRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRDbGFzc01ldGEge1xuICAvKiogV2hhdCBhIHBlcnNvbiByZWFkcy4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSB0cmFkZSwgc2FpZCBpbiBvbmUgbGluZSBiZXNpZGUgdGhlIGNvbnRyb2wuICovXG4gIGJsdXJiOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbi1mbGlnaHQgYnVpbGRzIG9uZSBPUkcgbWF5IGhvbGQgaW4gdGhpcyBjbGFzcywgcGVyIHRpZXIg4oCUIHRoZSBERUZBVUxUIGZvclxuICAgKiBgUExVR0lOX01BWF9CVUlMRFNfPFRJRVI+XzxDTEFTUz5gLlxuICAgKlxuICAgKiBHcmFkZWQgYnkgdGllciByYXRoZXIgdGhhbiBvbmUgZmxhdCBmaWd1cmU6IGEgc2luZ2xlIGZpZ3VyZSBnYXZlIGEgRGV2ZWxvcGVyXG4gICAqIG9yZyB0aGUgc2FtZSB0aHJlZSBpbi1mbGlnaHQgYnVpbGRzIGFzIGFuIEVudGVycHJpc2Ugb25lLCB3aGljaCBtYWRlIHRoZVxuICAgKiBwZXItb3JnIHNlbWFwaG9yZSB0aGUgb25lIHBsYWNlIGluIHRoZSBidWlsZCBwYXRoIHRoYXQgaWdub3JlZCB3aGF0IHRoZVxuICAgKiB0ZW5hbnQgcGF5cyBmb3IuIGBmbGV4aWJsZWAgaGFzIG1vcmUgaGVhZHJvb20gdGhhbiBgc3RhbmRhcmRgIG9uIGV2ZXJ5IHJvdyxcbiAgICogYmVjYXVzZSB0aGUgY2hlYXAgY2xhc3MgaXMgd2hlcmUgdGhlIHJvb20gaGFzIHRvIGJlIGZvciBpdCB0byBzbW9vdGhcbiAgICogYW55dGhpbmcg4oCUIGEgcm93IHdoZXJlIHRoZXkgd2VyZSBlcXVhbCB3b3VsZCBtYWtlIHRoZSBjbGFzcyBwb2ludGxlc3MgdG9cbiAgICogY2hvb3NlLlxuICAgKi9cbiAgc2xvdHNCeVRpZXI6IFJlYWRvbmx5PFJlY29yZDxRdW90YVRpZXIsIG51bWJlcj4+O1xufVxuXG5leHBvcnQgY29uc3QgQlVJTERfQ0xBU1NfQ0FUQUxPRzogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIEJ1aWxkQ2xhc3NNZXRhPj4gPSB7XG4gIHN0YW5kYXJkOiB7XG4gICAgbGFiZWw6ICdTdGFuZGFyZCcsXG4gICAgYmx1cmI6ICdTdGFydHMgYXMgc29vbiBhcyBhIHNsb3QgaXMgZnJlZS4gVXNlIGl0IGZvciBhbnl0aGluZyB5b3UgYXJlIHdhaXRpbmcgb24uJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAxLFxuICAgICAgcHJvOiAyLFxuICAgICAgdGVhbTogMyxcbiAgICAgIGJ1c2luZXNzOiA1LFxuICAgICAgZW50ZXJwcmlzZTogOCxcbiAgICAgIC8vIEJpbGxpbmcgZGlzYWJsZWQ6IG5vdGhpbmcgaXMgY2FwcGVkLCBzbyB0aGUgY2VpbGluZyBpcyB0aGUgcG9vbCBpdHNlbGYuXG4gICAgICB1bmxpbWl0ZWQ6IDgsXG4gICAgfSxcbiAgfSxcbiAgZmxleGlibGU6IHtcbiAgICBsYWJlbDogJ0ZsZXhpYmxlJyxcbiAgICBibHVyYjogJ1N0YXJ0cyBsYXRlciwgaW4gZXhjaGFuZ2UgZm9yIG1vcmUgYnVpbGRzIGF0IG9uY2UuIFNhbWUgY29zdCBwZXIgYnVpbGQuJyxcbiAgICBzbG90c0J5VGllcjoge1xuICAgICAgZGV2ZWxvcGVyOiAzLFxuICAgICAgcHJvOiA0LFxuICAgICAgdGVhbTogNixcbiAgICAgIGJ1c2luZXNzOiAxMCxcbiAgICAgIGVudGVycHJpc2U6IDE2LFxuICAgICAgdW5saW1pdGVkOiAxNixcbiAgICB9LFxuICB9LFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBNYWNoaW5lIHNpemUg4oCUIEhPVyBNVUNIIENQVSBhIGJ1aWxkIGdldHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgQlVJTERfU0laRVMgPSBbJzAuNXgnLCAnMXgnLCAnMngnLCAnNHgnLCAnOHgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIEJ1aWxkU2l6ZSA9ICh0eXBlb2YgQlVJTERfU0laRVMpW251bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTaXplTWV0YSB7XG4gIC8qKiBXaGF0IGEgcGVyc29uIHJlYWRzOiBTbWFsbCDigKYgWC1MYXJnZS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIHZDUFUgcmVsYXRpdmUgdG8gdGhlIGRlcGxveW1lbnQncyBiYXNlIGZpZ3VyZSwgYW5kIHRoZSBjcmVkaXQgcmF0ZS4gKi9cbiAgbXVsdGlwbGllcjogbnVtYmVyO1xuICAvKipcbiAgICogTG93ZXN0IHRpZXIgdGhhdCBtYXkgUkVRVUVTVCB0aGlzIHNpemU7IGBudWxsYCBtZWFucyBldmVyeSB0aWVyIG1heS5cbiAgICpcbiAgICogT25lIGZpZWxkIHBlciBzaXplIHJhdGhlciB0aGFuIGEgcm93IHBlciB0aWVyLCBhbmQgdGhhdCBtYWtlcyB0aGUgbGFkZGVyJ3NcbiAgICogbW9ub3RvbmljaXR5IFNUUlVDVFVSQUw6IGEgcm93LXBlci10aWVyIHRhYmxlIGNhbiBleHByZXNzIFwiVGVhbSBoYXMgNHggYnV0XG4gICAqIEJ1c2luZXNzIGRvZXMgbm90XCIgYW5kIG5lZWRlZCBhIHRlc3QgdG8gZm9yYmlkIGl0LiBUaGlzIHNoYXBlIGNhbm5vdC5cbiAgICovXG4gIG1pblRpZXI6IFF1b3RhVGllciB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgY2xhc3MgdGhpcyBzaXplIHBhaXJzIHdpdGggdW5sZXNzIHRoZSBjYWxsZXIgc2F5cyBvdGhlcndpc2UuXG4gICAqXG4gICAqIFdoeSBgMC41eGAgZGVmYXVsdHMgdG8gYGZsZXhpYmxlYDogYSBoYWxmLXNwZWVkIGJ1aWxkIHRha2VzIHJvdWdobHkgdHdpY2UgYXNcbiAgICogbG9uZyBhbmQgdGhlcmVmb3JlIEhPTERTIElUUyBTTE9UIHR3aWNlIGFzIGxvbmcuIE9uIERldmVsb3BlciDigJQgb25lIHN0YW5kYXJkXG4gICAqIHNsb3Qg4oCUIG9uZSBjaGVhcCBidWlsZCB3b3VsZCBibG9jayB0aGUgb25seSB1cmdlbnQtZml4IHNsb3QgZm9yIGRvdWJsZSB0aGVcbiAgICogdGltZS4gRGVmYXVsdGluZyBpdCB0byB0aGUgY2xhc3Mgd2l0aCB0aHJlZSBzbG90cyBtZWFucyBpdCBjYW5ub3QuXG4gICAqL1xuICBkZWZhdWx0Q2xhc3M6IEJ1aWxkQ2xhc3M7XG4gIC8qKlxuICAgKiBTdWZmaXggb2YgdGhpcyBzaXplJ3MgYnVpbGRraXRkIHBvb2wgb3ZlcnJpZGVcbiAgICogKGBQTFVHSU5fQlVJTERLSVRfQUREUl9TSVpFXzxTVUZGSVg+YCkuXG4gICAqXG4gICAqIERlY2xhcmVkIHJhdGhlciB0aGFuIGRlcml2ZWQgZnJvbSB0aGUgaWQsIGJlY2F1c2UgZGVyaXZpbmcgaXQgcHJvZHVjZXNcbiAgICogSUxMRUdBTCBOQU1FUzogYCcwLjV4Jy50b1VwcGVyQ2FzZSgpYCBnaXZlcyBgMC41WGAgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW5cbiAgICogYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZSAodGhlIHNhbWUgcmVhc29uIGB4LWxhcmdlYCB3YXMgcmVqZWN0ZWQgYXMgYW5cbiAgICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyKS5cbiAgICovXG4gIGVudlN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzaXplIGxhZGRlci5cbiAqXG4gKiBBIHNpemUgaXMgYSBCSUdHRVIgREFFTU9OLCBub3QgYSBmbGFnOiBgYnVpbGRjdGxgIGhhcyBubyBwZXItYnVpbGQgQ1BVIG9wdGlvbixcbiAqIGJlY2F1c2UgdGhlIENQVSBhIGJ1aWxkIG1heSB1c2UgaXMgdGhlIGJ1aWxka2l0ZCBQT0QncyBsaW1pdC4gU28gZXZlcnkgcnVuZ1xuICogYWJvdmUgb3IgYmVsb3cgYDF4YCBuZWVkcyBhIHBvb2wgb2YgaXRzIG93biwgYW5kIGEgcnVuZyB3aXRoIG5vIHBvb2wgaXNcbiAqIFJFRlVTRUQgcmF0aGVyIHRoYW4gc2lsZW50bHkgc2VydmVkIGF0IGAxeGAg4oCUIGluIGJvdGggZGlyZWN0aW9ucy4gU2VydmluZ1xuICogYDR4YCBmcm9tIHRoZSBzaGFyZWQgZGFlbW9uIHdvdWxkIGNoYXJnZSBmb3VyIHRpbWVzIGZvciBvbmUgdGltZXMgdGhlIHNwZWVkO1xuICogc2VydmluZyBgMC41eGAgZnJvbSBpdCB3b3VsZCBoYW5kIGV2ZXJ5IHRlbmFudCBmdWxsIHNwZWVkIGF0IGhhbGYgcHJpY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9TSVpFX0NBVEFMT0c6IFJlYWRvbmx5PFJlY29yZDxCdWlsZFNpemUsIEJ1aWxkU2l6ZU1ldGE+PiA9IHtcbiAgLy8gQXZhaWxhYmxlIHRvIEVWRVJZIHRpZXIsIGRlbGliZXJhdGVseS4gSXQgaXMgYSBidWRnZXQgb3B0aW9uLCBub3QgYVxuICAvLyByZXN0cmljdGlvbjogdGhlIGZyZWUgdGllciBnYWlucyBhIHJlYWwgY2hvaWNlIChzcGVuZCBsZXNzKSBpbnN0ZWFkIG9mIGFcbiAgLy8gbGlzdCBvZiBsb2Nrcy4gVGhlIGFyaXRobWV0aWMgaXMgaG9uZXN0IGluIG9uZSBkaXJlY3Rpb24g4oCUIGEgQ1BVLWJvdW5kIGJ1aWxkXG4gIC8vIHRha2VzIHR3aWNlIGFzIGxvbmcgYXQgaGFsZiB0aGUgdkNQVSBhbmQgY29zdHMgdGhlIFNBTUUsIHdoaWxlIGFuIEkvTy1ib3VuZFxuICAvLyBvbmUgY29zdHMgYWJvdXQgaGFsZi4gU28gU21hbGwgY2FuIG5ldmVyIGNvc3QgbW9yZSB0aGFuIFN0YW5kYXJkLCBhbmQgY2FuXG4gIC8vIGNvc3QgaGFsZiAoYXNzdW1pbmcgc2xvd2Rvd24gaXMgYXQgbW9zdCBsaW5lYXIsIHdoaWNoIG1lbW9yeSBwcmVzc3VyZSBjYW5cbiAgLy8gYnJlYWspLlxuICAnMC41eCc6IHsgbGFiZWw6ICdTbWFsbCcsIG11bHRpcGxpZXI6IDAuNSwgbWluVGllcjogbnVsbCwgZGVmYXVsdENsYXNzOiAnZmxleGlibGUnLCBlbnZTdWZmaXg6ICdIQUxGJyB9LFxuICAnMXgnOiB7IGxhYmVsOiAnU3RhbmRhcmQnLCBtdWx0aXBsaWVyOiAxLCBtaW5UaWVyOiBudWxsLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzFYJyB9LFxuICAnMngnOiB7IGxhYmVsOiAnTWVkaXVtJywgbXVsdGlwbGllcjogMiwgbWluVGllcjogJ3RlYW0nLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzJYJyB9LFxuICAnNHgnOiB7IGxhYmVsOiAnTGFyZ2UnLCBtdWx0aXBsaWVyOiA0LCBtaW5UaWVyOiAnYnVzaW5lc3MnLCBkZWZhdWx0Q2xhc3M6ICdzdGFuZGFyZCcsIGVudlN1ZmZpeDogJzRYJyB9LFxuICAnOHgnOiB7IGxhYmVsOiAnWC1MYXJnZScsIG11bHRpcGxpZXI6IDgsIG1pblRpZXI6ICdlbnRlcnByaXNlJywgZGVmYXVsdENsYXNzOiAnc3RhbmRhcmQnLCBlbnZTdWZmaXg6ICc4WCcgfSxcbn07XG5cbi8qKlxuICogVGhlIHRpZXIgbGFkZGVyLCBhc2NlbmRpbmcsIGZvciBldmFsdWF0aW5nIHtAbGluayBCdWlsZFNpemVNZXRhLm1pblRpZXJ9LlxuICpcbiAqIERlY2xhcmVkIGhlcmUgYmVjYXVzZSBhIGRlcGVuZGVuY3ktZnJlZSBtb2R1bGUgY2Fubm90IGltcG9ydCBgVkFMSURfVElFUlNgIChpdFxuICogaXMgZGVyaXZlZCBmcm9tIHRoZSBlbnYtcmVhZGluZyB0aWVyIHRhYmxlKS4gYHVubGltaXRlZGAgc2l0cyBhdCB0aGUgdG9wIHNvXG4gKiB0aGUgbm8tYmlsbGluZyBpbnN0YWxsIGdhdGVzIG5vdGhpbmcg4oCUIGEgZ2F0ZSB0aGVyZSB3b3VsZCBpbnZlbnQgYSBsaW1pdCB0aGVcbiAqIG9wZXJhdG9yIG5ldmVyIGJvdWdodCBpbnRvLiBQaW5uZWQgYWdhaW5zdCB0aGUgYFF1b3RhVGllcmAgdW5pb24gYnkgYSB0ZXN0LlxuICovXG5leHBvcnQgY29uc3QgQlVJTERfVElFUl9MQURERVI6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gW1xuICAnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2J1c2luZXNzJywgJ2VudGVycHJpc2UnLCAndW5saW1pdGVkJyxcbl07XG5cbi8qKlxuICogSG93IG1hbnkgb2YgYSB0aWVyJ3MgYnVpbGRzIHJ1biBBVCBPTkNFLCBhY3Jvc3MgZXZlcnkgb3JnIG9uIHRoYXQgdGllclxuICogKGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lfPFRJRVI+YCBvdmVycmlkZXMgZWFjaCByb3cpLlxuICpcbiAqIFRJRVIta2V5ZWQsIG5vdCBjbGFzcy1rZXllZCwgYW5kIHRoYXQgaXMgdGhlIHF1ZXVlIHRvcG9sb2d5IHJhdGhlciB0aGFuIGFcbiAqIHNpbXBsaWZpY2F0aW9uOiB0aGVyZSBpcyBvbmUgQnVsbE1RIGBXb3JrZXJgIHBlciB0aWVyIHF1ZXVlIGFuZCBib3RoXG4gKiBzY2hlZHVsaW5nIGNsYXNzZXMgYXJlIHNlcnZlZCBieSBpdCwgc28gYSBwZXItY2xhc3MgZmlndXJlIGhlcmUgY291bGQgbm90IGJlXG4gKiBob25vdXJlZCDigJQgaXQgd291bGQgZWl0aGVyIGR1cGxpY2F0ZSB0aGlzIG51bWJlciBvciBpbnZpdGUgc29tZW9uZSB0byBzZXQgYVxuICogdmFsdWUgdGhlIHdvcmtlciBjYW5ub3QgYWN0IG9uLlxuICpcbiAqICoqQSBsYWRkZXIsIG5vdCBvbmUgZmlndXJlLioqIFRoaXMgaXMgdGhlIEFHR1JFR0FURSBib3VuZCB0aGF0IG1ha2VzIGEgdGllcidzXG4gKiBhZHZlcnRpc2VkIHBlci1idWlsZCBjYXBhY2l0eSBkZWxpdmVyYWJsZTogdGhlIGNhcCBpcyByZWFjaGFibGUgYnkgYSBzaW5nbGVcbiAqIHRlbmFudCwgYW5kIHRoZSBudW1iZXIgb2YgdGVuYW50cyByZWFjaGluZyBmb3IgaXQgY29uY3VycmVudGx5IGlzIGxpbWl0ZWRcbiAqIGhlcmUsIHdoZXJlIGl0IGNhbiBiZSB0dW5lZCB3aXRob3V0IHRvdWNoaW5nIHRoZSBwcmljZSBsaXN0LlxuICpcbiAqIEl0IGxpdmVkIGFzIGEgYmFyZSBsaXRlcmFsIG1hcCBpbnNpZGUgdGhlIGJ1aWxkIHdvcmtlciB1bnRpbCBub3csIHdoaWNoIGlzXG4gKiBleGFjdGx5IGhvdyBgZG9jcy9lbnZpcm9ubWVudC12YXJpYWJsZXMubWRgIGNhbWUgdG8gZGVzY3JpYmUgYSBnbG9iYWwgZGVmYXVsdFxuICogdGhhdCB0aGUgY29kZSBoYWQgc3RvcHBlZCBob25vdXJpbmcg4oCUIGEgZmlndXJlIG5vIGNhdGFsb2cgZXhwb3NlcyBpcyBhIGZpZ3VyZVxuICogdGhlIGRvY3VtZW50YXRpb24gZHJpZnRzIGF3YXkgZnJvbS4gSXQgc2l0cyBiZXNpZGUgYHNsb3RzQnlUaWVyYCBhbmRcbiAqIGBtaW5UaWVyYCBiZWNhdXNlIGl0IGlzIHRoZSB0aGlyZCB0aWVyLWtleWVkIGJ1aWxkIGZpZ3VyZSwgbm90IGEgZGlmZmVyZW50XG4gKiBraW5kIG9mIHRoaW5nLlxuICpcbiAqICoqRGlzdGluY3QgZnJvbSB0aGUgcGVyLW9yZyBzbG90IGNhcCwgYW5kIHRoZSBMT1dFUiBvZiB0aGUgdHdvIGJpbmRzLioqIFRoaXNcbiAqIGlzIHBvZCBjYXBhY2l0eSAoZXZlcnkgY29uY3VycmVudCBidWlsZCBkcml2ZXMgdGhlIHNhbWUgYnVpbGRraXRkKTsgdGhlIHNsb3RcbiAqIGNhcCBpcyBmYWlybmVzcyBiZXR3ZWVuIHRlbmFudHMgc2hhcmluZyB0aGlzIHF1ZXVlLiBBIHRpZXIgd2hvc2UgY29uY3VycmVuY3lcbiAqIHNpdHMgYmVsb3cgaXRzIHNsb3QgY2FwIGNhbm5vdCByZWFjaCB0aGF0IGNhcCBhdCBhbGwsIHdoaWNoIGlzIHdoeSB0aGUgd29ya2VyXG4gKiB3YXJucyBhYm91dCBpdCBvbiBzdGFydC5cbiAqXG4gKiBNb25vdG9uaWMgYWNyb3NzIHRoZSBQQUlEIHJ1bmdzIG9ubHkuIGB1bmxpbWl0ZWRgIHNpdHMgYXQgdGhlIGJvdHRvbSwgbm90IHRoZVxuICogdG9wOiBpdCBpcyBub3QgYSBwdXJjaGFzZWQgdGllciBidXQgdGhlIGFic2VuY2Ugb2YgYmlsbGluZywgd2hpY2ggY29ycmVsYXRlc1xuICogd2l0aCB0aGUgc21hbGxlc3QgaGFyZHdhcmUg4oCUIHNlZSBpdHMgb3duIG5vdGUgYmVsb3cuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMRF9USUVSX0NPTkNVUlJFTkNZOiBSZWFkb25seTxSZWNvcmQ8UXVvdGFUaWVyLCBudW1iZXI+PiA9IHtcbiAgZGV2ZWxvcGVyOiAxLFxuICBwcm86IDIsXG4gIHRlYW06IDIsXG4gIGJ1c2luZXNzOiAzLFxuICBlbnRlcnByaXNlOiA0LFxuICAvKipcbiAgICogT05FLCBhbmQgdGhlIGxvd2VzdCByb3cg4oCUIGRlbGliZXJhdGVseSBOT1QgdGhlIG1vc3QgZ2VuZXJvdXMuXG4gICAqXG4gICAqIGB1bmxpbWl0ZWRgIG1lYW5zIFwiYmlsbGluZyBpcyBub3QgY29uZmlndXJlZFwiLCB3aGljaCBpbiBwcmFjdGljZSBpcyBhXG4gICAqIHNpbmdsZS1ub2RlIGluc3RhbGwgKGxvY2FsLCBtaW5pa3ViZSwgYSBmcmVzaCBjbHVzdGVyKSwgYW5kIGl0IGlzIGFsc28gdGhlXG4gICAqIFNZU1RFTSBPUkcncyB0aWVyIOKAlCB0aGUgb3JnIHRoYXQgbG9hZHMgdGhlIHdob2xlIHNhbXBsZSBjYXRhbG9ndWUgb24gZmlyc3RcbiAgICogYm9vdC4gR2l2aW5nIGl0IDQgaGFuZGVkIHRoZSBoaWdoZXN0IGNvbmN1cnJlbmN5IHRvIHRoZSB0aWVyIG1vc3QgbGlrZWx5IHRvXG4gICAqIGJlIHJ1bm5pbmcgb24gdGhlIHNtYWxsZXN0IGhhcmR3YXJlLlxuICAgKlxuICAgKiBJdCBjb3N0IGFuIGluc3RhbGw6IDggcGx1Z2luIHJlcGxpY2FzIHggNCA9IDMyIGNvbmN1cnJlbnQgYnVpbGRzLCBlYWNoXG4gICAqIGFza2luZyB0aGUgaW1hZ2UgcmVnaXN0cnkgdG8gc2lnbiBhIDctMTcgTWlCIFNCT00gYWdhaW5zdCBpdHMgMSBHaUIgbGltaXQuXG4gICAqIFRoZSByZWdpc3RyeSB3YXMgT09NS2lsbGVkLCBhbmQgYmVjYXVzZSBpdHMgYC90b2tlbmAgZW5kcG9pbnQgaXMgYWxzbyB0aGVcbiAgICogcmVnaXN0cnkgbG9naW4sIHRoZSBwdXNoZXMgZmFpbGVkIHRvbyDigJQgMTA3IG9mIDExNyBwbHVnaW5zIG5ldmVyIGNhbWUgdXAuXG4gICAqIFRoZSBlYXJsaWVyIGRlZmF1bHQgb2YgMSAodGhlbiBhIGdsb2JhbCBrbm9iKSBoYWQgcHJvZHVjZWQgOTUgb2YgMTE5LlxuICAgKlxuICAgKiBSYWlzZSBpdCBwZXIgZGVwbG95bWVudCB3aXRoIGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lfVU5MSU1JVEVEYCBvbmNlIHRoZVxuICAgKiByZWdpc3RyeSdzIG1lbW9yeSBhbmQgYSBzaWduaW5nIGJvdW5kIHNheSB0aGUgZmFuLWluIGlzIHNhZmUuXG4gICAqL1xuICB1bmxpbWl0ZWQ6IDEsXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFjY2Vzc29yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogV2hhdCBPTkUgcmVwbGljYSBtYXkgcnVuIGF0IG9uY2UgaWYgZXZlcnkgdGllciBxdWV1ZSBpcyBidXN5OiB0aGUgU1VNIG9mIHRoZVxuICogbGFkZGVyLCBiZWNhdXNlIGEgcmVwbGljYSBzdGFydHMgb25lIEJ1bGxNUSBXb3JrZXIgcGVyIHRpZXIgYW5kIGVhY2ggY2Fycmllc1xuICogaXRzIG93biBjb25jdXJyZW5jeS5cbiAqXG4gKiBUaGlzIG51bWJlciB3YXMgbmV2ZXIgd3JpdHRlbiBkb3duLCBhbmQgdGhhdCBpcyB0aGUgcG9pbnQgb2Ygd3JpdGluZyBpdCBkb3duLlxuICogVGhlIGluY2lkZW50IGFyaXRobWV0aWMgZXZlcnlvbmUgcmVhc29uZWQgd2l0aCDigJQgXCI4IHJlcGxpY2FzIHggNCA9IDMyXCIg4oCUIGlzXG4gKiB0aGUgc2luZ2xlLXRpZXIgY2FzZSAoYSBjYXRhbG9ndWUgbG9hZCBpcyBhbGwgc3lzdGVtLW9yZykuIEEgbWl4ZWQgZmxlZXRcbiAqIHJlYWNoZXMgYHJlcGxpY2FzIHggdGhpc2AsIHdoaWNoIGlzIDEzIHBlciByZXBsaWNhIGFuZCAxMDQgYWNyb3NzIHRoZSBlaWdodCBhXG4gKiBwbHVnaW4gZGVwbG95bWVudCBzY2FsZXMgdG8uIFRoZSBsYWRkZXIncyByb3dzIHRoZXJlZm9yZSBzZXQgYSBmbGVldCBjZWlsaW5nXG4gKiB0aGF0IG5vdGhpbmcgZGVjbGFyZWQgYW5kIG5vYm9keSBjaG9zZS5cbiAqXG4gKiBgUExVR0lOX01BWF9CVUlMRFNfUEVSX1JFUExJQ0FgIGRlZmF1bHRzIHRvIHRoaXMsIHNvIHJhaXNpbmcgYSB0aWVyIHJvdyBjYW5ub3RcbiAqIHNpbGVudGx5IHJhaXNlIHdoYXQgb25lIHJlcGxpY2EgcHV0cyBvbiBpdHMgc2luZ2xlIGJ1aWxka2l0ZCBzaWRlY2FyIOKAlCBpdFxuICogYmluZHMgYXQgdGhpcyBmaWd1cmUgYW5kIHRoZSB3b3JrZXIgc2F5cyBzbyBvbiBzdGFydC5cbiAqL1xuZXhwb3J0IGNvbnN0IEJVSUxEX0xBRERFUl9DT05DVVJSRU5DWV9TVU06IG51bWJlciA9XG4gIEJVSUxEX1RJRVJfTEFEREVSLnJlZHVjZSgobiwgdGllcikgPT4gbiArIEJVSUxEX1RJRVJfQ09OQ1VSUkVOQ1lbdGllcl0sIDApO1xuXG4vKipcbiAqIFRoaXMgdGllcidzIGRlZmF1bHQgd29ya2VyIGNvbmN1cnJlbmN5LiBGYWxscyBiYWNrIHRvIHRoZSBgZGV2ZWxvcGVyYCByb3cgZm9yXG4gKiBhbiB1bnJlY29nbmlzZWQgdGllciwgbWF0Y2hpbmcgYGJ1aWxkU2xvdHNGb3JgIOKAlCBhIGJhZCB0aWVyIHN0cmluZyBtdXN0IG5vdFxuICogaGFuZCBvdXQgdGhlIG1vc3QgZ2VuZXJvdXMgZmlndXJlIGluIHRoZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkV29ya2VyQ29uY3VycmVuY3lGb3IodGllcjogUXVvdGFUaWVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIEJVSUxEX1RJRVJfQ09OQ1VSUkVOQ1lbdGllcl0gPz8gQlVJTERfVElFUl9DT05DVVJSRU5DWS5kZXZlbG9wZXI7XG59XG5cbi8qKlxuICogVGhlIGVudiB2YXIgdGhhdCBvdmVycmlkZXMge0BsaW5rIGJ1aWxkV29ya2VyQ29uY3VycmVuY3lGb3J9IGZvciBvbmUgdGllci5cbiAqXG4gKiBEZXJpdmVkIHJhdGhlciB0aGFuIHdyaXR0ZW4gb3V0IHNpeCB0aW1lczogdGhlIHBlci10aWVyIHJlYWRzIHVzZWQgdG8gYmUgc2l4XG4gKiBuZWFyLWlkZW50aWNhbCBgZW52SW50YCBsaW5lcywgd2hlcmUgYSB3cm9uZyBjcm9zcy1yZWZlcmVuY2VcbiAqIChgcHJvOiBlbnZJbnQoJ+KApl9QUk8nLCB0aWVyRGVmYXVsdC50ZWFtKWApIHNpbGVudGx5IHRha2VzIGFub3RoZXIgdGllcidzXG4gKiBkZWZhdWx0IGFuZCBubyB0eXBlIGNhbiBjYXRjaCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29uY3VycmVuY3lFbnZWYXIodGllcjogUXVvdGFUaWVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBQTFVHSU5fQlVJTERfQ09OQ1VSUkVOQ1lfJHt0aWVyLnRvVXBwZXJDYXNlKCl9YDtcbn1cblxuLyoqIFRoaXMgc2l6ZSdzIGNyZWRpdC92Q1BVIG11bHRpcGxpZXI7IGAxYCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZU11bHRpcGxpZXIoc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIEJVSUxEX1NJWkVfQ0FUQUxPR1tzaXplIGFzIEJ1aWxkU2l6ZV0/Lm11bHRpcGxpZXIgPz8gMTtcbn1cblxuLyoqIGBTbWFsbGAg4oCmIGBYLUxhcmdlYDsgdGhlIHJhdyBpZCBmb3IgYW55dGhpbmcgdW5yZWNvZ25pc2VkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUxhYmVsKHNpemU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5sYWJlbCA/PyBzaXplO1xufVxuXG4vKiogYFN0YW5kYXJkYCAvIGBGbGV4aWJsZWA7IHRoZSByYXcgaWQgZm9yIGFueXRoaW5nIHVucmVjb2duaXNlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENsYXNzTGFiZWwoYnVpbGRDbGFzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIEJVSUxEX0NMQVNTX0NBVEFMT0dbYnVpbGRDbGFzcyBhcyBCdWlsZENsYXNzXT8ubGFiZWwgPz8gYnVpbGRDbGFzcztcbn1cblxuLyoqXG4gKiBFbnYtdmFyIHN1ZmZpeCBvZiB0aGlzIHNpemUncyBidWlsZGtpdGQgcG9vbCBvdmVycmlkZS5cbiAqXG4gKiBEZWNsYXJlZCBpbiB0aGUgY2F0YWxvZyByYXRoZXIgdGhhbiBkZXJpdmVkLCBiZWNhdXNlIGRlcml2aW5nIGl0IHByb2R1Y2VzXG4gKiBJTExFR0FMIE5BTUVTOiBgJzAuNXgnLnRvVXBwZXJDYXNlKClgIGlzIGAwLjVYYCwgYW5kIGEgZG90IGNhbm5vdCBhcHBlYXIgaW4gYW5cbiAqIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuIChJdCBpcyB0aGUgc2FtZSByZWFzb24gYHgtbGFyZ2VgIHdhcyByZWplY3RlZCBhcyBhblxuICogaWQg4oCUIGAuLi5fWC1MQVJHRWAgaXMgbm90IGFuIGlkZW50aWZpZXIgZWl0aGVyLikgRmFsbHMgYmFjayB0byBgMVhgLCB0aGVcbiAqIHNoYXJlZCBkYWVtb24sIGZvciBhbiB1bnJlY29nbmlzZWQgc2l6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2l6ZUVudlN1ZmZpeChzaXplOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gQlVJTERfU0laRV9DQVRBTE9HW3NpemUgYXMgQnVpbGRTaXplXT8uZW52U3VmZml4ID8/ICcxWCc7XG59XG5cbi8qKiBUaGUgY2xhc3MgdGhpcyBzaXplIHJ1bnMgaW4gdW5sZXNzIHRoZSBjYWxsZXIgb3ZlcnJpZGVzIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDbGFzc0ZvclNpemUoc2l6ZTogc3RyaW5nKTogQnVpbGRDbGFzcyB7XG4gIHJldHVybiBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdPy5kZWZhdWx0Q2xhc3MgPz8gJ3N0YW5kYXJkJztcbn1cblxuLyoqXG4gKiBIb3cgbXVjaCBsb25nZXIgYSBidWlsZCBhdCB0aGlzIHNpemUgbWF5IHJ1biBiZWZvcmUgdGhlIHRpbWVvdXQga2lsbHMgaXQuXG4gKlxuICogU2NhbGVzIFVQIGJlbG93IGAxeGAgYW5kIG5ldmVyIGRvd24gYWJvdmUgaXQsIGFuZCB0aGUgYXN5bW1ldHJ5IGlzIHRoZSBwb2ludDpcbiAqIHRoZSB0aW1lb3V0IGlzIGEgU0FGRVRZIGJvdW5kIG9uIGEgcnVuYXdheSBidWlsZCwgbm90IGEgYnVkZ2V0LiBBdCBoYWxmIHRoZVxuICogdkNQVSBhIHRlbi1taW51dGUgYnVpbGQgYmVjb21lcyBhYm91dCB0d2VudHkgYW5kIHdvdWxkIGRpZSBvbiBhIDE1LW1pbnV0ZVxuICogYm91bmQg4oCUIHNvIFNtYWxsIHdvdWxkIHF1aWV0bHkgZmFpbCBsb25nIGJ1aWxkcyAoYXMgYSBgcmV0cnlhYmxlYCBmYWlsdXJlLCBzb1xuICogdGhlIHRlbmFudCBpcyBub3QgY2hhcmdlZCwgYnV0IGl0IGlzIHJldHJpZWQgdHdpY2UgYW5kIGRlYWQtbGV0dGVyZWQpLiBTY2FsaW5nXG4gKiBpdCBET1dOIGF0IGA0eGAgd291bGQgaW5zdGVhZCBicmVhayBJL08tYm91bmQgYnVpbGRzIHRoYXQgZ2FpbiBub3RoaW5nIGZyb21cbiAqIHRoZSBleHRyYSBDUFUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRpbWVvdXRGYWN0b3Ioc2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KDEsIDEgLyBidWlsZFNpemVNdWx0aXBsaWVyKHNpemUpKTtcbn1cblxuLyoqIEluLWZsaWdodCBidWlsZHMgb25lIG9yZyBvbiBgdGllcmAgbWF5IGhvbGQgaW4gYGJ1aWxkQ2xhc3NgICh0aGUgZGVmYXVsdCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0Zvcih0aWVyOiBRdW90YVRpZXIsIGJ1aWxkQ2xhc3M6IEJ1aWxkQ2xhc3MpOiBudW1iZXIge1xuICBjb25zdCBtZXRhID0gQlVJTERfQ0xBU1NfQ0FUQUxPR1tidWlsZENsYXNzXSA/PyBCVUlMRF9DTEFTU19DQVRBTE9HLnN0YW5kYXJkO1xuICByZXR1cm4gbWV0YS5zbG90c0J5VGllclt0aWVyXSA/PyBtZXRhLnNsb3RzQnlUaWVyLmRldmVsb3Blcjtcbn1cblxuLyoqIEJvdGggY2xhc3Nlcycgc2xvdCBjb3VudHMgZm9yIG9uZSB0aWVyIOKAlCB0aGUgcGVyLXRpZXIgcmVhZGluZyB0aGUgVUkgd2FudHMuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTbG90c0J5Q2xhc3ModGllcjogUXVvdGFUaWVyKTogUmVhZG9ubHk8UmVjb3JkPEJ1aWxkQ2xhc3MsIG51bWJlcj4+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFuZGFyZDogYnVpbGRTbG90c0Zvcih0aWVyLCAnc3RhbmRhcmQnKSxcbiAgICBmbGV4aWJsZTogYnVpbGRTbG90c0Zvcih0aWVyLCAnZmxleGlibGUnKSxcbiAgfTtcbn1cblxuLyoqIFdoZXRoZXIgYHRpZXJgIG1heSByZXF1ZXN0IGBzaXplYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXI6IFF1b3RhVGllciwgc2l6ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1ldGEgPSBCVUlMRF9TSVpFX0NBVEFMT0dbc2l6ZSBhcyBCdWlsZFNpemVdO1xuICBpZiAoIW1ldGEpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGEubWluVGllciA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGhhdmUgPSBCVUlMRF9USUVSX0xBRERFUi5pbmRleE9mKHRpZXIpO1xuICAvLyBBbiB1bnJlY29nbmlzZWQgdGllciBnZXRzIHRoZSBGTE9PUiBvZiB0aGUgbGFkZGVyIOKAlCB0aGUgc21hbGxlc3QgYWxsb3dhbmNlLFxuICAvLyBuZXZlciBldmVyeXRoaW5nLiBTYW1lIGNvbnNlcnZhdGl2ZSBjYWxsIGB0aWVyRm9yUXVldWVOYW1lYCBtYWtlcy5cbiAgaWYgKGhhdmUgPCAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBoYXZlID49IEJVSUxEX1RJRVJfTEFEREVSLmluZGV4T2YobWV0YS5taW5UaWVyKTtcbn1cblxuLyoqIEV2ZXJ5IHNpemUgYHRpZXJgIG1heSByZXF1ZXN0LCBhc2NlbmRpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaXplc0ZvclRpZXIodGllcjogUXVvdGFUaWVyKTogcmVhZG9ubHkgQnVpbGRTaXplW10ge1xuICByZXR1cm4gQlVJTERfU0laRVMuZmlsdGVyKChzKSA9PiB0aWVyQWxsb3dzQnVpbGRTaXplKHRpZXIsIHMpKTtcbn1cbiJdfQ==
@@ -16,4 +16,4 @@ export const LIFECYCLE_STAGES = ['experimental', 'production', 'deprecated'];
16
16
  export const CRITICALITY_LEVELS = ['low', 'medium', 'high', 'critical'];
17
17
  /** Whether an owner reference points at an individual user or a team/org. */
18
18
  export const OWNER_TYPES = ['user', 'team'];
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1tZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jYXRhbG9nLW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7OztHQVNHO0FBRUgsMkNBQTJDO0FBQzNDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQVUsQ0FBQztBQUd0RiwrRUFBK0U7QUFDL0UsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQVUsQ0FBQztBQUdqRiw2RUFBNkU7QUFDN0UsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIG1ldGFkYXRhIHNoYXJlZCBhY3Jvc3MgY2F0YWxvZyBlbnRpdGllc1xuICogKHBpcGVsaW5lcyBhbmQgcGx1Z2lucyB0b2RheTsgYW55IGZ1dHVyZSBjYXRhbG9nYWJsZSBlbnRpdHkgbmV4dCkuXG4gKlxuICogVGhlc2UgYXJlIHRoZSBvd25lcnNoaXAvbGlmZWN5Y2xlL2NsYXNzaWZpY2F0aW9uIGZpZWxkcyBhbiBpbnRlcm5hbFxuICogZGV2ZWxvcGVyIHBvcnRhbCBrZXlzIGl0cyBjYXRhbG9nLCBcIm15IHNlcnZpY2VzXCIgdmlld3MsIGFuZCBzY29yZWNhcmRzXG4gKiBvZmYgb2Yg4oCUIHRoZSBjb3VudGVycGFydCB0byBCYWNrc3RhZ2UncyBgbWV0YWRhdGFgL2BzcGVjLm93bmVyYC9cbiAqIGBzcGVjLmxpZmVjeWNsZWAuIEtlcHQgaGVyZSAobm90IHBlci1zY2hlbWEpIHNvIHRoZSBEQiBzY2hlbWEsIHRoZSBab2RcbiAqIHZhbGlkYXRpb24sIGFuZCB0aGUgQVBJIGFsbCBkcmF3IGZyb20gb25lIHNvdXJjZSBvZiB0cnV0aC5cbiAqL1xuXG4vKiogTGlmZWN5Y2xlIHN0YWdlIG9mIGEgY2F0YWxvZyBlbnRpdHkuICovXG5leHBvcnQgY29uc3QgTElGRUNZQ0xFX1NUQUdFUyA9IFsnZXhwZXJpbWVudGFsJywgJ3Byb2R1Y3Rpb24nLCAnZGVwcmVjYXRlZCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgTGlmZWN5Y2xlID0gKHR5cGVvZiBMSUZFQ1lDTEVfU1RBR0VTKVtudW1iZXJdO1xuXG4vKiogT3BlcmF0aW9uYWwgY3JpdGljYWxpdHkgb2YgYSBjYXRhbG9nIGVudGl0eSAob3B0aW9uYWwvdW5zZXQgYnkgZGVmYXVsdCkuICovXG5leHBvcnQgY29uc3QgQ1JJVElDQUxJVFlfTEVWRUxTID0gWydsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnY3JpdGljYWwnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIENyaXRpY2FsaXR5ID0gKHR5cGVvZiBDUklUSUNBTElUWV9MRVZFTFMpW251bWJlcl07XG5cbi8qKiBXaGV0aGVyIGFuIG93bmVyIHJlZmVyZW5jZSBwb2ludHMgYXQgYW4gaW5kaXZpZHVhbCB1c2VyIG9yIGEgdGVhbS9vcmcuICovXG5leHBvcnQgY29uc3QgT1dORVJfVFlQRVMgPSBbJ3VzZXInLCAndGVhbSddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgT3duZXJUeXBlID0gKHR5cGVvZiBPV05FUl9UWVBFUylbbnVtYmVyXTtcblxuLyoqIEEgdGl0bGVkIGV4dGVybmFsIGxpbmsgYXR0YWNoZWQgdG8gYSBjYXRhbG9nIGVudGl0eSAoZG9jcywgZGFzaGJvYXJkLCBydW5ib29rLCDigKYpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlMaW5rIHtcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBpY29uIGhpbnQgdGhlIFVJIG1heSBtYXAgdG8gYSBnbHlwaCAoZS5nLiAnZG9jcycsICdkYXNoYm9hcmQnKS4gKi9cbiAgcmVhZG9ubHkgaWNvbj86IHN0cmluZztcbn1cblxuLyoqIEZyZWUtZm9ybSB0eXBlZCBjbGFzc2lmaWNhdGlvbiBsYWJlbHM6IGB7IHRlYW06ICdwYXltZW50cycsIHRpZXI6ICdnb2xkJyB9YC4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eUxhYmVscyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1tZXRhZGF0YS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2NhdGFsb2ctbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBVSxDQUFDO0FBR3RGLCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBVSxDQUFDO0FBR2pGLDZFQUE2RTtBQUM3RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgc2hhcmVkIGFjcm9zcyBjYXRhbG9nIGVudGl0aWVzXG4gKiAocGlwZWxpbmVzIGFuZCBwbHVnaW5zIHRvZGF5OyBhbnkgZnV0dXJlIGNhdGFsb2dhYmxlIGVudGl0eSBuZXh0KS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIG93bmVyc2hpcC9saWZlY3ljbGUvY2xhc3NpZmljYXRpb24gZmllbGRzIGFuIGludGVybmFsXG4gKiBkZXZlbG9wZXIgcG9ydGFsIGtleXMgaXRzIGNhdGFsb2csIFwibXkgc2VydmljZXNcIiB2aWV3cywgYW5kIHNjb3JlY2FyZHNcbiAqIG9mZiBvZiDigJQgdGhlIGNvdW50ZXJwYXJ0IHRvIEJhY2tzdGFnZSdzIGBtZXRhZGF0YWAvYHNwZWMub3duZXJgL1xuICogYHNwZWMubGlmZWN5Y2xlYC4gS2VwdCBoZXJlIChub3QgcGVyLXNjaGVtYSkgc28gdGhlIERCIHNjaGVtYSwgdGhlIFpvZFxuICogdmFsaWRhdGlvbiwgYW5kIHRoZSBBUEkgYWxsIGRyYXcgZnJvbSBvbmUgc291cmNlIG9mIHRydXRoLlxuICovXG5cbi8qKiBMaWZlY3ljbGUgc3RhZ2Ugb2YgYSBjYXRhbG9nIGVudGl0eS4gKi9cbmV4cG9ydCBjb25zdCBMSUZFQ1lDTEVfU1RBR0VTID0gWydleHBlcmltZW50YWwnLCAncHJvZHVjdGlvbicsICdkZXByZWNhdGVkJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBMaWZlY3ljbGUgPSAodHlwZW9mIExJRkVDWUNMRV9TVEFHRVMpW251bWJlcl07XG5cbi8qKiBPcGVyYXRpb25hbCBjcml0aWNhbGl0eSBvZiBhIGNhdGFsb2cgZW50aXR5IChvcHRpb25hbC91bnNldCBieSBkZWZhdWx0KS4gKi9cbmV4cG9ydCBjb25zdCBDUklUSUNBTElUWV9MRVZFTFMgPSBbJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdjcml0aWNhbCddIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgQ3JpdGljYWxpdHkgPSAodHlwZW9mIENSSVRJQ0FMSVRZX0xFVkVMUylbbnVtYmVyXTtcblxuLyoqIFdoZXRoZXIgYW4gb3duZXIgcmVmZXJlbmNlIHBvaW50cyBhdCBhbiBpbmRpdmlkdWFsIHVzZXIgb3IgYSB0ZWFtL29yZy4gKi9cbmV4cG9ydCBjb25zdCBPV05FUl9UWVBFUyA9IFsndXNlcicsICd0ZWFtJ10gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBPd25lclR5cGUgPSAodHlwZW9mIE9XTkVSX1RZUEVTKVtudW1iZXJdO1xuXG4vKiogQSB0aXRsZWQgZXh0ZXJuYWwgbGluayBhdHRhY2hlZCB0byBhIGNhdGFsb2cgZW50aXR5IChkb2NzLCBkYXNoYm9hcmQsIHJ1bmJvb2ssIOKApikuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUxpbmsge1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGljb24gaGludCB0aGUgVUkgbWF5IG1hcCB0byBhIGdseXBoIChlLmcuICdkb2NzJywgJ2Rhc2hib2FyZCcpLiAqL1xuICByZWFkb25seSBpY29uPzogc3RyaW5nO1xufVxuXG4vKiogRnJlZS1mb3JtIHR5cGVkIGNsYXNzaWZpY2F0aW9uIGxhYmVsczogYHsgdGVhbTogJ3BheW1lbnRzJywgdGllcjogJ2dvbGQnIH1gLiAqL1xuZXhwb3J0IHR5cGUgRW50aXR5TGFiZWxzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiJdfQ==
@@ -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