@bluedynamics/cdk8s-monitoring 0.1.0 → 0.1.2

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 (146) hide show
  1. package/lib/constructs/prometheus-stack.js +7 -2
  2. package/package.json +1 -1
  3. package/documentation/Makefile +0 -357
  4. package/documentation/README.md +0 -72
  5. package/documentation/mx.ini +0 -3
  6. package/documentation/sources/_build/html/.buildinfo +0 -4
  7. package/documentation/sources/_build/html/.doctrees/environment.pickle +0 -0
  8. package/documentation/sources/_build/html/.doctrees/explanation/architecture.doctree +0 -0
  9. package/documentation/sources/_build/html/.doctrees/explanation/design-philosophy.doctree +0 -0
  10. package/documentation/sources/_build/html/.doctrees/explanation/index.doctree +0 -0
  11. package/documentation/sources/_build/html/.doctrees/explanation/retention-and-downsampling.doctree +0 -0
  12. package/documentation/sources/_build/html/.doctrees/how-to/add-app-dashboards.doctree +0 -0
  13. package/documentation/sources/_build/html/.doctrees/how-to/configure-s3-credentials.doctree +0 -0
  14. package/documentation/sources/_build/html/.doctrees/how-to/configure-smtp-alerting.doctree +0 -0
  15. package/documentation/sources/_build/html/.doctrees/how-to/index.doctree +0 -0
  16. package/documentation/sources/_build/html/.doctrees/how-to/override-defaults.doctree +0 -0
  17. package/documentation/sources/_build/html/.doctrees/how-to/provide-config.doctree +0 -0
  18. package/documentation/sources/_build/html/.doctrees/how-to/setup-prerequisites.doctree +0 -0
  19. package/documentation/sources/_build/html/.doctrees/index.doctree +0 -0
  20. package/documentation/sources/_build/html/.doctrees/reference/api/index.doctree +0 -0
  21. package/documentation/sources/_build/html/.doctrees/reference/configuration-options.doctree +0 -0
  22. package/documentation/sources/_build/html/.doctrees/reference/index.doctree +0 -0
  23. package/documentation/sources/_build/html/.doctrees/reference/sync-waves.doctree +0 -0
  24. package/documentation/sources/_build/html/.doctrees/tutorials/01-quick-start.doctree +0 -0
  25. package/documentation/sources/_build/html/.doctrees/tutorials/index.doctree +0 -0
  26. package/documentation/sources/_build/html/_images/kup6s-icon-explanation.svg +0 -32
  27. package/documentation/sources/_build/html/_images/kup6s-icon-howto.svg +0 -34
  28. package/documentation/sources/_build/html/_images/kup6s-icon-monitoring.svg +0 -79
  29. package/documentation/sources/_build/html/_images/kup6s-icon-reference.svg +0 -34
  30. package/documentation/sources/_build/html/_images/kup6s-icon-tutorials.svg +0 -30
  31. package/documentation/sources/_build/html/_sources/explanation/architecture.md.txt +0 -76
  32. package/documentation/sources/_build/html/_sources/explanation/design-philosophy.md.txt +0 -64
  33. package/documentation/sources/_build/html/_sources/explanation/index.md.txt +0 -39
  34. package/documentation/sources/_build/html/_sources/explanation/retention-and-downsampling.md.txt +0 -59
  35. package/documentation/sources/_build/html/_sources/how-to/add-app-dashboards.md.txt +0 -101
  36. package/documentation/sources/_build/html/_sources/how-to/configure-s3-credentials.md.txt +0 -96
  37. package/documentation/sources/_build/html/_sources/how-to/configure-smtp-alerting.md.txt +0 -61
  38. package/documentation/sources/_build/html/_sources/how-to/index.md.txt +0 -60
  39. package/documentation/sources/_build/html/_sources/how-to/override-defaults.md.txt +0 -98
  40. package/documentation/sources/_build/html/_sources/how-to/provide-config.md.txt +0 -116
  41. package/documentation/sources/_build/html/_sources/how-to/setup-prerequisites.md.txt +0 -105
  42. package/documentation/sources/_build/html/_sources/index.md.txt +0 -116
  43. package/documentation/sources/_build/html/_sources/reference/api/index.md.txt +0 -110
  44. package/documentation/sources/_build/html/_sources/reference/configuration-options.md.txt +0 -161
  45. package/documentation/sources/_build/html/_sources/reference/index.md.txt +0 -50
  46. package/documentation/sources/_build/html/_sources/reference/sync-waves.md.txt +0 -66
  47. package/documentation/sources/_build/html/_sources/tutorials/01-quick-start.md.txt +0 -135
  48. package/documentation/sources/_build/html/_sources/tutorials/index.md.txt +0 -37
  49. package/documentation/sources/_build/html/_sphinx_design_static/design-tabs.js +0 -101
  50. package/documentation/sources/_build/html/_sphinx_design_static/sphinx-design.min.css +0 -1
  51. package/documentation/sources/_build/html/_static/base-stemmer.js +0 -476
  52. package/documentation/sources/_build/html/_static/basic.css +0 -906
  53. package/documentation/sources/_build/html/_static/brand-theme.css +0 -685
  54. package/documentation/sources/_build/html/_static/check-solid.svg +0 -4
  55. package/documentation/sources/_build/html/_static/clipboard.min.js +0 -7
  56. package/documentation/sources/_build/html/_static/copy-button.svg +0 -5
  57. package/documentation/sources/_build/html/_static/copybutton.css +0 -94
  58. package/documentation/sources/_build/html/_static/copybutton.js +0 -248
  59. package/documentation/sources/_build/html/_static/copybutton_funcs.js +0 -73
  60. package/documentation/sources/_build/html/_static/custom-icons.css +0 -123
  61. package/documentation/sources/_build/html/_static/design-tabs.js +0 -101
  62. package/documentation/sources/_build/html/_static/doctools.js +0 -150
  63. package/documentation/sources/_build/html/_static/documentation_options.js +0 -13
  64. package/documentation/sources/_build/html/_static/english-stemmer.js +0 -1066
  65. package/documentation/sources/_build/html/_static/file.png +0 -0
  66. package/documentation/sources/_build/html/_static/fonts/hack/Hack-Regular.woff2 +0 -0
  67. package/documentation/sources/_build/html/_static/fonts/orbitron/Orbitron-Black.woff2 +0 -11
  68. package/documentation/sources/_build/html/_static/fonts/orbitron/Orbitron-Bold.woff2 +0 -11
  69. package/documentation/sources/_build/html/_static/fonts/orbitron/Orbitron-Regular.woff2 +0 -0
  70. package/documentation/sources/_build/html/_static/fonts/rajdhani/Rajdhani-Bold.woff2 +0 -11
  71. package/documentation/sources/_build/html/_static/fonts/rajdhani/Rajdhani-Medium.woff2 +0 -11
  72. package/documentation/sources/_build/html/_static/fonts/rajdhani/Rajdhani-Regular.woff2 +0 -11
  73. package/documentation/sources/_build/html/_static/fonts/rajdhani/Rajdhani-SemiBold.woff2 +0 -11
  74. package/documentation/sources/_build/html/_static/kup6s-icon-explanation.svg +0 -32
  75. package/documentation/sources/_build/html/_static/kup6s-icon-howto.svg +0 -34
  76. package/documentation/sources/_build/html/_static/kup6s-icon-monitoring.svg +0 -79
  77. package/documentation/sources/_build/html/_static/kup6s-icon-reference.svg +0 -34
  78. package/documentation/sources/_build/html/_static/kup6s-icon-tutorials.svg +0 -30
  79. package/documentation/sources/_build/html/_static/language_data.js +0 -13
  80. package/documentation/sources/_build/html/_static/logo-fix.js +0 -12
  81. package/documentation/sources/_build/html/_static/minus.png +0 -0
  82. package/documentation/sources/_build/html/_static/plus.png +0 -0
  83. package/documentation/sources/_build/html/_static/print.css +0 -42
  84. package/documentation/sources/_build/html/_static/pygments.css +0 -278
  85. package/documentation/sources/_build/html/_static/searchtools.js +0 -693
  86. package/documentation/sources/_build/html/_static/shibuya.css +0 -2
  87. package/documentation/sources/_build/html/_static/shibuya.js +0 -43
  88. package/documentation/sources/_build/html/_static/sphinx-design.min.css +0 -1
  89. package/documentation/sources/_build/html/_static/sphinx_highlight.js +0 -159
  90. package/documentation/sources/_build/html/explanation/architecture.html +0 -726
  91. package/documentation/sources/_build/html/explanation/design-philosophy.html +0 -277
  92. package/documentation/sources/_build/html/explanation/index.html +0 -240
  93. package/documentation/sources/_build/html/explanation/retention-and-downsampling.html +0 -268
  94. package/documentation/sources/_build/html/genindex.html +0 -531
  95. package/documentation/sources/_build/html/how-to/add-app-dashboards.html +0 -320
  96. package/documentation/sources/_build/html/how-to/configure-s3-credentials.html +0 -314
  97. package/documentation/sources/_build/html/how-to/configure-smtp-alerting.html +0 -277
  98. package/documentation/sources/_build/html/how-to/index.html +0 -259
  99. package/documentation/sources/_build/html/how-to/override-defaults.html +0 -316
  100. package/documentation/sources/_build/html/how-to/provide-config.html +0 -331
  101. package/documentation/sources/_build/html/how-to/setup-prerequisites.html +0 -318
  102. package/documentation/sources/_build/html/index.html +0 -353
  103. package/documentation/sources/_build/html/objects.inv +0 -6
  104. package/documentation/sources/_build/html/reference/api/index.html +0 -322
  105. package/documentation/sources/_build/html/reference/configuration-options.html +0 -654
  106. package/documentation/sources/_build/html/reference/index.html +0 -249
  107. package/documentation/sources/_build/html/reference/sync-waves.html +0 -346
  108. package/documentation/sources/_build/html/search.html +0 -555
  109. package/documentation/sources/_build/html/searchindex.js +0 -1
  110. package/documentation/sources/_build/html/tutorials/01-quick-start.html +0 -346
  111. package/documentation/sources/_build/html/tutorials/index.html +0 -238
  112. package/documentation/sources/_static/brand-theme.css +0 -685
  113. package/documentation/sources/_static/custom-icons.css +0 -123
  114. package/documentation/sources/_static/fonts/hack/Hack-Regular.woff2 +0 -0
  115. package/documentation/sources/_static/fonts/orbitron/Orbitron-Black.woff2 +0 -11
  116. package/documentation/sources/_static/fonts/orbitron/Orbitron-Bold.woff2 +0 -11
  117. package/documentation/sources/_static/fonts/orbitron/Orbitron-Regular.woff2 +0 -0
  118. package/documentation/sources/_static/fonts/rajdhani/Rajdhani-Bold.woff2 +0 -11
  119. package/documentation/sources/_static/fonts/rajdhani/Rajdhani-Medium.woff2 +0 -11
  120. package/documentation/sources/_static/fonts/rajdhani/Rajdhani-Regular.woff2 +0 -11
  121. package/documentation/sources/_static/fonts/rajdhani/Rajdhani-SemiBold.woff2 +0 -11
  122. package/documentation/sources/_static/kup6s-icon-explanation.svg +0 -32
  123. package/documentation/sources/_static/kup6s-icon-howto.svg +0 -34
  124. package/documentation/sources/_static/kup6s-icon-monitoring.svg +0 -79
  125. package/documentation/sources/_static/kup6s-icon-reference.svg +0 -34
  126. package/documentation/sources/_static/kup6s-icon-tutorials.svg +0 -30
  127. package/documentation/sources/_static/logo-fix.js +0 -12
  128. package/documentation/sources/conf.py +0 -100
  129. package/documentation/sources/explanation/architecture.md +0 -76
  130. package/documentation/sources/explanation/design-philosophy.md +0 -64
  131. package/documentation/sources/explanation/index.md +0 -39
  132. package/documentation/sources/explanation/retention-and-downsampling.md +0 -59
  133. package/documentation/sources/how-to/add-app-dashboards.md +0 -101
  134. package/documentation/sources/how-to/configure-s3-credentials.md +0 -96
  135. package/documentation/sources/how-to/configure-smtp-alerting.md +0 -61
  136. package/documentation/sources/how-to/index.md +0 -60
  137. package/documentation/sources/how-to/override-defaults.md +0 -98
  138. package/documentation/sources/how-to/provide-config.md +0 -116
  139. package/documentation/sources/how-to/setup-prerequisites.md +0 -105
  140. package/documentation/sources/index.md +0 -116
  141. package/documentation/sources/reference/api/index.md +0 -110
  142. package/documentation/sources/reference/configuration-options.md +0 -161
  143. package/documentation/sources/reference/index.md +0 -50
  144. package/documentation/sources/reference/sync-waves.md +0 -66
  145. package/documentation/sources/tutorials/01-quick-start.md +0 -135
  146. package/documentation/sources/tutorials/index.md +0 -37
@@ -254,14 +254,19 @@ prometheus:
254
254
  prometheusSpec:
255
255
  retention: ${config.retention.prometheus} # Reduced from 7d - Thanos provides long-term storage in S3
256
256
 
257
- # Discover ALL ServiceMonitors and PodMonitors in ALL namespaces
257
+ # Discover ALL ServiceMonitors, PodMonitors and PrometheusRules in ALL namespaces
258
258
  # Setting NilUsesHelmValues: false means nil selectors = "select all"
259
259
  # Empty namespace selectors {} mean "search all namespaces"
260
+ # Without the rule* settings, ruleSelector keeps the chart default
261
+ # (matchLabels: {release: <name>}) and hand-authored PrometheusRules that
262
+ # lack the release label are silently ignored.
260
263
  # Note: This does NOT affect Thanos sidecar - controlled by thanos.objectStorageConfig
261
264
  serviceMonitorSelectorNilUsesHelmValues: false
262
265
  podMonitorSelectorNilUsesHelmValues: false
266
+ ruleSelectorNilUsesHelmValues: false
263
267
  serviceMonitorNamespaceSelector: {}
264
268
  podMonitorNamespaceSelector: {}
269
+ ruleNamespaceSelector: {}
265
270
 
266
271
  replicas: ${config.replicas.prometheus}
267
272
  podAntiAffinity: "hard"
@@ -474,4 +479,4 @@ kube-state-metrics:
474
479
  }
475
480
  }
476
481
  exports.PrometheusStackConstruct = PrometheusStackConstruct;
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWV0aGV1cy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3Byb21ldGhldXMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWtDO0FBQ2xDLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsc0JBQVM7SUFDckQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXBDLDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkQsa0RBQWtEO1FBQ2xELDJDQUEyQztRQUMzQyxJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzNDLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLFdBQVc7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsdUJBQXVCO29CQUNqRCw2QkFBNkIsRUFBRSxZQUFZO29CQUMzQyw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxLQUFLLEVBQUUsdUJBQXVCO2dCQUM5QixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxT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QU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzthQUV6QyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUF5QjVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQ0FzQkMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7O3VEQVFJLE1BQU0sQ0FBQyxTQUFTOzs7Ozs7OzttQ0FRcEMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUNsRCxDQUFDO0lBQ0EsQ0FBQztDQUNGO0FBcmNELDREQXFjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaU9iamVjdCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9tZXRoZXVzU3RhY2tQcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBrdWJlLXByb21ldGhldXMtc3RhY2sgSGVsbUNoYXJ0IHdpdGggUHJvbWV0aGV1cywgR3JhZmFuYSwgYW5kIEFsZXJ0bWFuYWdlci5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjb3JlIG1vbml0b3Jpbmcgc3RhY2sgdGhhdCBpbmNsdWRlczpcbiAqIC0gUHJvbWV0aGV1cyAobWV0cmljcyBjb2xsZWN0aW9uLCAyIHJlcGxpY2FzLCAzZCByZXRlbnRpb24pXG4gKiAtIEdyYWZhbmEgKHZpc3VhbGl6YXRpb24sIGluZ3Jlc3Mgd2l0aCBMZXQncyBFbmNyeXB0KVxuICogLSBBbGVydG1hbmFnZXIgKGFsZXJ0IHJvdXRpbmcsIFNNVFAgbm90aWZpY2F0aW9ucylcbiAqIC0gUHJvbWV0aGV1cyBPcGVyYXRvciAobWFuYWdlcyBQcm9tZXRoZXVzIENSRHMpXG4gKiAtIE5vZGUgRXhwb3J0ZXIgKHN5c3RlbSBtZXRyaWNzIERhZW1vblNldClcbiAqIC0ga3ViZS1zdGF0ZS1tZXRyaWNzIChLdWJlcm5ldGVzIHJlc291cmNlIG1ldHJpY3MpXG4gKlxuICogUHJlcmVxdWlzaXRlczpcbiAqIC0gTmFtZXNwYWNlIGV4aXN0c1xuICogLSBQcmlvcml0eUNsYXNzICdoaWdoLXByaW9yaXR5JyBleGlzdHNcbiAqIC0gTG9uZ2hvcm4gc3RvcmFnZSBjbGFzcyBhdmFpbGFibGVcbiAqIC0gY2VydC1tYW5hZ2VyIENsdXN0ZXJJc3N1ZXIgY29uZmlndXJlZFxuICogLSBUaGFub3MgUzMgc2VjcmV0IGV4aXN0cyAodGhhbm9zLW9ianN0b3JlLWNvbmZpZylcbiAqXG4gKiBTeW5jIFdhdmU6IDIgKGNvcmUgc2VydmljZXMgLSBhZnRlciBTMyBidWNrZXRzIGFuZCBzZWNyZXRzKVxuICovXG5leHBvcnQgY2xhc3MgUHJvbWV0aGV1c1N0YWNrQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb21ldGhldXNTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcgfSA9IHByb3BzO1xuXG4gICAgLy8gR2VuZXJhdGUgSGVsbSB2YWx1ZXMgWUFNTFxuICAgIGNvbnN0IGhlbG1WYWx1ZXMgPSB0aGlzLmdlbmVyYXRlSGVsbVZhbHVlcyhjb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIEhlbG1DaGFydCByZXNvdXJjZSAoSzNTIEhlbG0gY29udHJvbGxlcilcbiAgICAvLyBXYXZlIDI6IENvcmUgU2VydmljZXMgLSBtb25pdG9yaW5nIHN0YWNrXG4gICAgbmV3IEFwaU9iamVjdCh0aGlzLCAna3ViZS1wcm9tZXRoZXVzLXN0YWNrJywge1xuICAgICAgYXBpVmVyc2lvbjogJ2hlbG0uY2F0dGxlLmlvL3YxJyxcbiAgICAgIGtpbmQ6ICdIZWxtQ2hhcnQnLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbmFtZTogJ2t1YmUtcHJvbWV0aGV1cy1zdGFjaycsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnbW9uaXRvcmluZycsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzInLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgcmVwbzogJ2h0dHBzOi8vcHJvbWV0aGV1cy1jb21tdW5pdHkuZ2l0aHViLmlvL2hlbG0tY2hhcnRzJyxcbiAgICAgICAgY2hhcnQ6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICB2ZXJzaW9uOiBjb25maWcudmVyc2lvbnMucHJvbWV0aGV1c1N0YWNrID09PSAnbGF0ZXN0JyA/IHVuZGVmaW5lZCA6IGNvbmZpZy52ZXJzaW9ucy5wcm9tZXRoZXVzU3RhY2ssXG4gICAgICAgIHRhcmdldE5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB2YWx1ZXNDb250ZW50OiBoZWxtVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIZWxtVmFsdWVzKGNvbmZpZzogTW9uaXRvcmluZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBrdWJlRXRjZDpcbiAgZW5hYmxlZDogZmFsc2VcblxuIyBEaXNhYmxlIGt1YmUtY29udHJvbGxlci1tYW5hZ2VyIGFuZCBrdWJlLXNjaGVkdWxlciBtb25pdG9yaW5nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhYmxlc3BhZ2hldHRpL2szcy1tb25pdG9yaW5nL2lzc3Vlcy8yXG5rdWJlQ29udHJvbGxlck1hbmFnZXI6XG4gIGVuYWJsZWQ6IGZhbHNlXG5rdWJlU2NoZWR1bGVyOlxuICBlbmFibGVkOiBmYWxzZVxuXG4jIERldGVjdCBQb2REaXNydXB0aW9uQnVkZ2V0cyB0aGF0IHdvdWxkIGJsb2NrIGEgbm9kZSBkcmFpbiBkdXJpbmcgazNzIHVwZ3JhZGVzLlxuIyBPcGVyYXRvci1tYW5hZ2VkIFBEQnMgc2l0IGF0IGRpc3J1cHRpb25zQWxsb3dlZD0wIGJ5IGRlc2lnbiAoTG9uZ2hvcm4gaW5zdGFuY2UtbWFuYWdlcnMsXG4jIENOUEcgKi1wcmltYXJ5KSBhbmQgYXJlIGV4Y2x1ZGVkIHNvIHRoZSBhbGVydCBvbmx5IGZpcmVzIG9uIGFub21hbG91cyBhcHAgUERCcy5cbmFkZGl0aW9uYWxQcm9tZXRoZXVzUnVsZXNNYXA6XG4gIHBkYi1kcmFpbi1zYWZldHk6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBuYW1lOiBwZGIucnVsZXNcbiAgICAgICAgaW50ZXJ2YWw6IDFtXG4gICAgICAgIHJ1bGVzOlxuICAgICAgICAgIC0gYWxlcnQ6IFBvZERpc3J1cHRpb25CdWRnZXRVbmRyYWluYWJsZVxuICAgICAgICAgICAgZXhwcjoga3ViZV9wb2RkaXNydXB0aW9uYnVkZ2V0X3N0YXR1c19wb2RfZGlzcnVwdGlvbnNfYWxsb3dlZHtuYW1lc3BhY2UhPVwibG9uZ2hvcm4tc3lzdGVtXCIsIHBvZGRpc3J1cHRpb25idWRnZXQhflwiLiotcHJpbWFyeVwifSA9PSAwXG4gICAgICAgICAgICBmb3I6IDE1bVxuICAgICAgICAgICAgbGFiZWxzOlxuICAgICAgICAgICAgICBzZXZlcml0eTogd2FybmluZ1xuICAgICAgICAgICAgICBjb21wb25lbnQ6IGNsdXN0ZXItdXBncmFkZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IFwiUERCIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fSBhbGxvd3MgMCB2b2x1bnRhcnkgZGlzcnVwdGlvbnNcIlxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogfFxuICAgICAgICAgICAgICAgIFRoZSBQb2REaXNydXB0aW9uQnVkZ2V0IHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fVxuICAgICAgICAgICAgICAgIGhhcyBhbGxvd2VkIDAgdm9sdW50YXJ5IGRpc3J1cHRpb25zIGZvciBvdmVyIDE1IG1pbnV0ZXMuIFRoaXMgd2lsbCBibG9jayBhIG5vZGVcbiAgICAgICAgICAgICAgICBkcmFpbiBkdXJpbmcgazNzIHVwZ3JhZGVzLiBPcGVyYXRvci1tYW5hZ2VkIFBEQnMgKExvbmdob3JuLCBDTlBHIHByaW1hcmllcykgYXJlXG4gICAgICAgICAgICAgICAgZXhjbHVkZWQgZnJvbSB0aGlzIGFsZXJ0LiBMaWtlbHkgYSBkZWdyYWRlZCBkZXBsb3ltZW50ICgwIGhlYWx0aHkgcG9kcykgb3IgYVxuICAgICAgICAgICAgICAgIHNpbmdsZS1yZXBsaWNhIGRlcGxveW1lbnQgd2l0aCBtaW5BdmFpbGFibGU9MS5cbiAgICAgICAgICAgICAgICBDaGVjazoga3ViZWN0bCBnZXQgcGRiIC1uIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19IHt7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fVxuICAgICAgICAgIC0gYWxlcnQ6IFBvZERpc3J1cHRpb25CdWRnZXRVbmRyYWluYWJsZUNyaXRpY2FsXG4gICAgICAgICAgICBleHByOiBrdWJlX3BvZGRpc3J1cHRpb25idWRnZXRfc3RhdHVzX3BvZF9kaXNydXB0aW9uc19hbGxvd2Vke25hbWVzcGFjZSE9XCJsb25naG9ybi1zeXN0ZW1cIiwgcG9kZGlzcnVwdGlvbmJ1ZGdldCF+XCIuKi1wcmltYXJ5XCJ9ID09IDBcbiAgICAgICAgICAgIGZvcjogMWhcbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IGNyaXRpY2FsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogY2x1c3Rlci11cGdyYWRlXG4gICAgICAgICAgICBhbm5vdGF0aW9uczpcbiAgICAgICAgICAgICAgc3VtbWFyeTogXCJQREIge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ve3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19IHVuZHJhaW5hYmxlID4xaFwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgUERCIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fSBoYXMgYmxvY2tlZFxuICAgICAgICAgICAgICAgIHZvbHVudGFyeSBkaXNydXB0aW9ucyBmb3Igb3ZlciBhbiBob3VyLiBBIGszcyBhZ2VudCB1cGdyYWRlIHdvdWxkIHN0YWxsIG9uIHRoaXMgbm9kZS5cbiAgIyBEZXRlY3QgYW4gRVggZGVkaWNhdGVkIHdvcmtlciBzdHVjayBOb3RSZWFkeSDigJQgbGlrZWx5IGEgTWljcm9PUyByZWJvb3QgaGFuZ1xuICAjIChwaW5ncyBidXQgc3NoZC9rdWJlbGV0IGRlYWQpLiBBIGh1bmcgbm9kZSBhbHNvIGhvbGRzIHRoZSBjbHVzdGVyLXdpZGUga3VyZWRcbiAgIyBsb2NrLCBibG9ja2luZyBhbGwgZnVydGhlciBncmFjZWZ1bCByZWJvb3RzLCBzbyB0aGlzIG11c3QgYmUgY2F1Z2h0IGZhc3QuXG4gIGV4LXdvcmtlci1yZWJvb3Q6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBuYW1lOiBleC13b3JrZXIucnVsZXNcbiAgICAgICAgaW50ZXJ2YWw6IDFtXG4gICAgICAgIHJ1bGVzOlxuICAgICAgICAgIC0gYWxlcnQ6IEV4V29ya2VyTm90UmVhZHlcbiAgICAgICAgICAgIGV4cHI6IGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ue2NvbmRpdGlvbj1cIlJlYWR5XCIsc3RhdHVzPVwidHJ1ZVwiLG5vZGU9flwia3VwNnMtZXgtLipcIn0gPT0gMFxuICAgICAgICAgICAgZm9yOiAxNW1cbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IGNyaXRpY2FsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogbm9kZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IFwiRVggd29ya2VyIHt7ICRsYWJlbHMubm9kZSB9fSBOb3RSZWFkeSBmb3IgPjE1bVwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgRVggZGVkaWNhdGVkIHdvcmtlciB7eyAkbGFiZWxzLm5vZGUgfX0gaGFzIGJlZW4gTm90UmVhZHkgZm9yIG92ZXIgMTUgbWludXRlcy5cbiAgICAgICAgICAgICAgICBQb3NzaWJsZSBNaWNyb09TIHJlYm9vdCBoYW5nIChwaW5ncyBidXQgc3NoZC9rdWJlbGV0L2xvbmdob3JuLW1hbmFnZXIgZGVhZCkg4oCUIHRoZVxuICAgICAgICAgICAgICAgIG5vZGUgbWF5IHN0aWxsIGhvbGQgdGhlIGNsdXN0ZXItd2lkZSBrdXJlZCBsb2NrLCBibG9ja2luZyBhbGwgZnVydGhlciByZWJvb3RzLlxuICAgICAgICAgICAgICAgIFJlY292ZXJ5OiBIZXR6bmVyIFJvYm90IGhhcmR3YXJlIHJlc2V0LiBEbyBOT1QgZm9yY2UtZGV0YWNoIExvbmdob3JuIHZvbHVtZXMuXG4gICAgICAgICAgICAgIHJ1bmJvb2tfdXJsOiBcImh0dHBzOi8vZG9jcy5rdXA2cy5jb20vaG93LXRvL3Ryb3VibGVzaG9vdGluZy9leC13b3JrZXItcGluZy1idXQtZGVhZC5odG1sXCJcblxuIyBEcm9wIGhpZ2gtY2FyZGluYWxpdHkgQVBJIHNlcnZlciBhbmQgZXRjZCBoaXN0b2dyYW0gYnVja2V0cyB0byByZWR1Y2UgbWVtb3J5IHVzYWdlXG4jIFRoZXNlIG1ldHJpY3MgYWxvbmUgYWNjb3VudCBmb3IgfjIwMGsgc2VyaWVzICg0NyUgb2YgdG90YWwgY2FyZGluYWxpdHkpXG4jIFdlIGtlZXAgX3N1bSBhbmQgX2NvdW50IHN1ZmZpeGVzIHdoaWNoIGFyZSBzdWZmaWNpZW50IGZvciByYXRlIGNhbGN1bGF0aW9uc1xua3ViZUFwaVNlcnZlcjpcbiAgc2VydmljZU1vbml0b3I6XG4gICAgbWV0cmljUmVsYWJlbGluZ3M6XG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXF1ZXN0X2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3Rfc2xpX2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfYm9keV9zaXplX2J5dGVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXNwb25zZV9zaXplc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdldGNkX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuXG4jIEt1YmVsZXQgYWxzbyBleHBvc2VzIGFwaXNlcnZlciBtZXRyaWNzIC0gYXBwbHkgc2FtZSBmaWx0ZXJzXG5rdWJlbGV0OlxuICBzZXJ2aWNlTW9uaXRvcjpcbiAgICBtZXRyaWNSZWxhYmVsaW5nczpcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9zbGlfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9ib2R5X3NpemVfYnl0ZXNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3Jlc3BvbnNlX3NpemVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2V0Y2RfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG5cbmFsZXJ0bWFuYWdlcjpcbiAgY29uZmlnOlxuICAgIGdsb2JhbDpcbiAgICAgIHNtdHBfZnJvbTogJHtjb25maWcuc210cC5mcm9tfVxuICAgICAgc210cF9zbWFydGhvc3Q6ICR7Y29uZmlnLnNtdHAuaG9zdH06JHtjb25maWcuc210cC5wb3J0fVxuICAgICAgc210cF9yZXF1aXJlX3RsczogJHtjb25maWcuc210cC5yZXF1aXJlVGxzfVxuICAgICAgc210cF9hdXRoX3VzZXJuYW1lOiAke2NvbmZpZy5zbXRwLnVzZXJuYW1lIHx8IGNvbmZpZy5zbXRwLmZyb219XG4gICAgICBzbXRwX2F1dGhfcGFzc3dvcmQ6ICR7Y29uZmlnLnNtdHAucGFzc3dvcmQgfHwgJyd9XG4gICAgcm91dGU6XG4gICAgICBncm91cF9ieTogWydqb2InXVxuICAgICAgZ3JvdXBfd2FpdDogMzBzXG4gICAgICBncm91cF9pbnRlcnZhbDogNW1cbiAgICAgIHJlcGVhdF9pbnRlcnZhbDogMWhcbiAgICAgIHJlY2VpdmVyOiBlbWFpbFxuICAgICAgcm91dGVzOlxuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IFdhdGNoZG9nXG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBDUFVUaHJvdHRsaW5nSGlnaFxuICAgICAgICByZWNlaXZlcjogJ251bGwnXG4gICAgICAtIG1hdGNoOlxuICAgICAgICAgIGFsZXJ0bmFtZTogS3ViZU1lbW9yeU92ZXJjb21taXRcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IEt1YmVDUFVPdmVyY29tbWl0XG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBLdWJlbGV0VG9vTWFueVBvZHNcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuXG4gICAgcmVjZWl2ZXJzOlxuICAgIC0gbmFtZTogJ251bGwnXG4gICAgLSBuYW1lOiBlbWFpbFxuICAgICAgZW1haWxfY29uZmlnczpcbiAgICAgIC0gc2VuZF9yZXNvbHZlZDogdHJ1ZVxuICAgICAgICB0bzogJHtjb25maWcuc210cC5mcm9tfVxuXG4gICAgIyBJbmhpYml0aW9uIHJ1bGVzIGFsbG93IHRvIG11dGUgYSBzZXQgb2YgYWxlcnRzIGdpdmVuIHRoYXQgYW5vdGhlciBhbGVydCBpcyBmaXJpbmcuXG4gICAgIyBXZSB1c2UgdGhpcyB0byBtdXRlIGFueSB3YXJuaW5nLWxldmVsIG5vdGlmaWNhdGlvbnMgaWYgdGhlIHNhbWUgYWxlcnQgaXMgYWxyZWFkeSBjcml0aWNhbC5cbiAgICBpbmhpYml0X3J1bGVzOlxuICAgIC0gc291cmNlX21hdGNoOlxuICAgICAgICBzZXZlcml0eTogJ2NyaXRpY2FsJ1xuICAgICAgdGFyZ2V0X21hdGNoOlxuICAgICAgICBzZXZlcml0eTogJ3dhcm5pbmcnXG4gICAgICAjIEFwcGx5IGluaGliaXRpb24gaWYgdGhlIGFsZXJ0bmFtZSBpcyB0aGUgc2FtZS5cbiAgICAgIGVxdWFsOiBbJ2FsZXJ0bmFtZScsICduYW1lc3BhY2UnXVxuXG4gIGFsZXJ0bWFuYWdlclNwZWM6XG4gICAgcmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLmFsZXJ0bWFuYWdlcn1cbiAgICBwb2RBbnRpQWZmaW5pdHk6IFwic29mdFwiXG4gICAgc3RvcmFnZTpcbiAgICAgIHZvbHVtZUNsYWltVGVtcGxhdGU6XG4gICAgICAgIHNwZWM6XG4gICAgICAgICAgYWNjZXNzTW9kZXM6IFtcIlJlYWRXcml0ZU9uY2VcIl1cbiAgICAgICAgICByZXNvdXJjZXM6XG4gICAgICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICAgICAgc3RvcmFnZTogJHtjb25maWcuc3RvcmFnZS5hbGVydG1hbmFnZXJ9XG4gICAgcmVzb3VyY2VzOlxuICAgICAgbGltaXRzOlxuICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5hbGVydG1hbmFnZXIubGltaXRzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLmxpbWl0cy5tZW1vcnl9XG4gICAgICByZXF1ZXN0czpcbiAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLnJlcXVlc3RzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLnJlcXVlc3RzLm1lbW9yeX1cbiAgICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG4gICAgIyBTaWRlY2FyIGNvbnRhaW5lcnMgcmVzb3VyY2UgcmVxdWVzdHMgKGFkZGVkIDIwMjUtMTEtMTgpXG4gICAgY29udGFpbmVyczpcbiAgICAtIG5hbWU6IGNvbmZpZy1yZWxvYWRlclxuICAgICAgcmVzb3VyY2VzOlxuICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5jcHV9XG4gICAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIucmVxdWVzdHMubWVtb3J5fVxuICAgICAgICBsaW1pdHM6XG4gICAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIubGltaXRzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMubWVtb3J5fVxuXG5cbnByb21ldGhldXM6XG4gICMgRW5hYmxlIFRoYW5vcyBzZXJ2aWNlIGZvciBnUlBDIGNvbW11bmljYXRpb25cbiAgIyBSZXF1aXJlZCBmb3IgSGVsbSBjaGFydCB0byBwcm9wZXJseSByZW5kZXIgVGhhbm9zIHNpZGVjYXIgY29uZmlndXJhdGlvblxuICB0aGFub3NTZXJ2aWNlOlxuICAgIGVuYWJsZWQ6IHRydWVcblxuICBwcm9tZXRoZXVzU3BlYzpcbiAgICByZXRlbnRpb246ICR7Y29uZmlnLnJldGVudGlvbi5wcm9tZXRoZXVzfSAgIyBSZWR1Y2VkIGZyb20gN2QgLSBUaGFub3MgcHJvdmlkZXMgbG9uZy10ZXJtIHN0b3JhZ2UgaW4gUzNcblxuICAgICMgRGlzY292ZXIgQUxMIFNlcnZpY2VNb25pdG9ycyBhbmQgUG9kTW9uaXRvcnMgaW4gQUxMIG5hbWVzcGFjZXNcbiAgICAjIFNldHRpbmcgTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlIG1lYW5zIG5pbCBzZWxlY3RvcnMgPSBcInNlbGVjdCBhbGxcIlxuICAgICMgRW1wdHkgbmFtZXNwYWNlIHNlbGVjdG9ycyB7fSBtZWFuIFwic2VhcmNoIGFsbCBuYW1lc3BhY2VzXCJcbiAgICAjIE5vdGU6IFRoaXMgZG9lcyBOT1QgYWZmZWN0IFRoYW5vcyBzaWRlY2FyIC0gY29udHJvbGxlZCBieSB0aGFub3Mub2JqZWN0U3RvcmFnZUNvbmZpZ1xuICAgIHNlcnZpY2VNb25pdG9yU2VsZWN0b3JOaWxVc2VzSGVsbVZhbHVlczogZmFsc2VcbiAgICBwb2RNb25pdG9yU2VsZWN0b3JOaWxVc2VzSGVsbVZhbHVlczogZmFsc2VcbiAgICBzZXJ2aWNlTW9uaXRvck5hbWVzcGFjZVNlbGVjdG9yOiB7fVxuICAgIHBvZE1vbml0b3JOYW1lc3BhY2VTZWxlY3Rvcjoge31cblxuICAgIHJlcGxpY2FzOiAke2NvbmZpZy5yZXBsaWNhcy5wcm9tZXRoZXVzfVxuICAgIHBvZEFudGlBZmZpbml0eTogXCJoYXJkXCJcbiAgICBzdG9yYWdlU3BlYzpcbiAgICAgIHZvbHVtZUNsYWltVGVtcGxhdGU6XG4gICAgICAgIHNwZWM6XG4gICAgICAgICAgc3RvcmFnZUNsYXNzTmFtZTogbG9uZ2hvcm5cbiAgICAgICAgICBhY2Nlc3NNb2RlczogW1wiUmVhZFdyaXRlT25jZVwiXVxuICAgICAgICAgIHJlc291cmNlczpcbiAgICAgICAgICAgIHJlcXVlc3RzOlxuICAgICAgICAgICAgICBzdG9yYWdlOiAke2NvbmZpZy5zdG9yYWdlLnByb21ldGhldXN9ICAjIFJlZHVjZWQgZnJvbSA2R2kgKDNkIHJldGVudGlvbiBuZWVkcyBsZXNzIHNwYWNlKVxuXG4gICAgcmVzb3VyY2VzOlxuICAgICAgbGltaXRzOlxuICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5wcm9tZXRoZXVzLmxpbWl0cy5jcHV9XG4gICAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLnByb21ldGhldXMubGltaXRzLm1lbW9yeX1cbiAgICAgIHJlcXVlc3RzOlxuICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5wcm9tZXRoZXVzLnJlcXVlc3RzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMucHJvbWV0aGV1cy5yZXF1ZXN0cy5tZW1vcnl9XG4gICAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxuICAgICMgRXh0ZXJuYWwgbGFiZWxzIGZvciBtdWx0aS1jbHVzdGVyIGlkZW50aWZpY2F0aW9uIGFuZCBUaGFub3NcbiAgICBleHRlcm5hbExhYmVsczpcbiAgICAgIGNsdXN0ZXI6IGt1cDZzXG4gICAgICByZXBsaWNhOiBcIiQoUE9EX05BTUUpXCJcblxuICAgICMgVGhhbm9zIHNpZGVjYXIgZm9yIGxvbmctdGVybSBtZXRyaWNzIHN0b3JhZ2UgaW4gUzNcbiAgICAjIE5PVEU6IGNoYXJ0ID49ODUueCByZXF1aXJlcyB0aGUgZXhpc3RpbmdTZWNyZXQgc2hhcGUuIFRoZSBsZWdhY3kgZmxhdFxuICAgICMge25hbWUsIGtleX0gZm9ybSBpcyBzaWxlbnRseSBkcm9wcGVkIGJ5IHRoZSBjaGFydCwgd2hpY2ggcmVtb3ZlcyB0aGVcbiAgICAjIHNpZGVjYXIgYW5kIHN0b3BzIGFsbCBTMyBibG9jayB1cGxvYWRzIChyZWdyZXNzaW9uIHNlZW4gMjAyNi0wMy0zMSkuXG4gICAgdGhhbm9zOlxuICAgICAgb2JqZWN0U3RvcmFnZUNvbmZpZzpcbiAgICAgICAgZXhpc3RpbmdTZWNyZXQ6XG4gICAgICAgICAgbmFtZTogdGhhbm9zLW9ianN0b3JlLWNvbmZpZyAgIyBFU08tbWFuYWdlZCBzZWNyZXRcbiAgICAgICAgICBrZXk6IG9ianN0b3JlLnltbFxuXG4gICAgIyBTaWRlY2FyIGNvbnRhaW5lcnMgcmVzb3VyY2UgcmVxdWVzdHMgKGFkZGVkIDIwMjUtMTEtMTgpXG4gICAgIyBOT1RFOiB0aGFub3Mtc2lkZWNhciBpcyBOT1QgbGlzdGVkIGhlcmUgLSBpdCdzIGF1dG9tYXRpY2FsbHkgaW5qZWN0ZWQgYnkgUHJvbWV0aGV1cyBPcGVyYXRvclxuICAgICMgd2hlbiB0aGFub3Mub2JqZWN0U3RvcmFnZUNvbmZpZyBpcyBzZXQuIFNwZWNpZnlpbmcgaXQgaW4gY29udGFpbmVyc1tdIHdvdWxkIG92ZXJyaWRlXG4gICAgIyB0aGUgb3BlcmF0b3IncyBkZWZpbml0aW9uIGFuZCByZXF1aXJlIHVzIHRvIG1hbnVhbGx5IHNwZWNpZnkgdGhlIGltYWdlLCB3aGljaCBicmVha3NcbiAgICAjIHdoZW4gdGhlIG9wZXJhdG9yIHVwZGF0ZXMgdGhlIHRoYW5vcyB2ZXJzaW9uLlxuICAgIGNvbnRhaW5lcnM6XG4gICAgLSBuYW1lOiBjb25maWctcmVsb2FkZXJcbiAgICAgIHJlc291cmNlczpcbiAgICAgICAgcmVxdWVzdHM6XG4gICAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIucmVxdWVzdHMuY3B1fVxuICAgICAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmNvbmZpZ1JlbG9hZGVyLnJlcXVlc3RzLm1lbW9yeX1cbiAgICAgICAgbGltaXRzOlxuICAgICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLmNvbmZpZ1JlbG9hZGVyLmxpbWl0cy5jcHV9XG4gICAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIubGltaXRzLm1lbW9yeX1cblxuICAgIHNlcnZpY2U6XG4gICAgICBzZXNzaW9uQWZmaW5pdHk6IFwiQ2xpZW50SVBcIlxuXG5cbmdyYWZhbmE6XG4gICMgUmVjcmVhdGUgc3RyYXRlZ3kgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgc3RvcmFnZSBQVkMgaXMgUldPOlxuICAjIGEgUm9sbGluZ1VwZGF0ZSB3b3VsZCBzdXJnZSBhIHNlY29uZCBwb2QgdGhhdCBjYW5ub3QgbW91bnQgdGhlXG4gICMgdm9sdW1lIChGYWlsZWRBdHRhY2hWb2x1bWUpLCBibG9ja2luZyB0aGUgcm9sbG91dCBpbmRlZmluaXRlbHkuXG4gIGRlcGxveW1lbnRTdHJhdGVneTpcbiAgICB0eXBlOiBSZWNyZWF0ZVxuXG4gICMgVXNlIGV4aXN0aW5nIHNlY3JldCBmb3IgYWRtaW4gY3JlZGVudGlhbHMgKG1hbmFnZWQgYnkgRVNPKVxuICAjIFRoaXMgcHJldmVudHMgcGFzc3dvcmQgcmVnZW5lcmF0aW9uIG9uIEhlbG0gdXBncmFkZXNcbiAgYWRtaW46XG4gICAgZXhpc3RpbmdTZWNyZXQ6IFwiZ3JhZmFuYS1hZG1pbi1jcmVkZW50aWFsc1wiXG4gICAgdXNlcktleTogXCJhZG1pbi11c2VyXCJcbiAgICBwYXNzd29yZEtleTogXCJhZG1pbi1wYXNzd29yZFwiXG5cbiAgIyBEaXNhYmxlIGRlZmF1bHQgUHJvbWV0aGV1cyBkYXRhc291cmNlICh3ZSBwcm92aWRlIG91ciBvd24gcG9pbnRpbmcgdG8gVGhhbm9zIFF1ZXJ5KVxuICBkZWZhdWx0RGF0YXNvdXJjZUVuYWJsZWQ6IGZhbHNlXG5cbiAgIyBTaWRlY2FyIGNvbnRhaW5lcnMgZm9yIGRhc2hib2FyZC9kYXRhc291cmNlIHByb3Zpc2lvbmluZ1xuICBzaWRlY2FyOlxuICAgIHJlc291cmNlczpcbiAgICAgIHJlcXVlc3RzOlxuICAgICAgICBjcHU6IDEwbVxuICAgICAgICBtZW1vcnk6IDI1Nk1pXG4gICAgICBsaW1pdHM6XG4gICAgICAgIGNwdTogMTAwbVxuICAgICAgICBtZW1vcnk6IDUxMk1pXG4gICAgZGFzaGJvYXJkczpcbiAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICBkYXRhc291cmNlczpcbiAgICAgIGVuYWJsZWQ6IGZhbHNlICAjIFdlIG1hbnVhbGx5IHByb3Zpc2lvbiBkYXRhc291cmNlcyAoUHJvbWV0aGV1c+KGklRoYW5vcywgTG9raSlcblxuICBpbmdyZXNzOlxuICAgIGVuYWJsZWQ6IHRydWVcbiAgICBob3N0czpcbiAgICAgIC0gJHtjb25maWcuZG9tYWlucy5ncmFmYW5hfVxuICAgIGFubm90YXRpb25zOlxuICAgICAgY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyOiBcImxldHNlbmNyeXB0LWNsdXN0ZXItaXNzdWVyXCJcbiAgICAgIHRyYWVmaWsuaW5ncmVzcy5rdWJlcm5ldGVzLmlvL3JvdXRlci5lbnRyeXBvaW50czogd2Vic2VjdXJlXG4gICAgdGxzOlxuICAgICAgLSBzZWNyZXROYW1lOiBncmFmYW5hLWdlbmVyYWwtdGxzXG4gICAgICAgIGhvc3RzOlxuICAgICAgICAtICR7Y29uZmlnLmRvbWFpbnMuZ3JhZmFuYX1cblxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuZ3JhZmFuYS5saW1pdHMuY3B1fVxuICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuZ3JhZmFuYS5saW1pdHMubWVtb3J5fVxuICAgIHJlcXVlc3RzOlxuICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuZ3JhZmFuYS5yZXF1ZXN0cy5jcHV9XG4gICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLnJlcXVlc3RzLm1lbW9yeX1cblxuICByZWFkaW5lc3NQcm9iZTpcbiAgICBodHRwR2V0OlxuICAgICAgcGF0aDogL2FwaS9oZWFsdGhcbiAgICAgIHBvcnQ6IDMwMDBcbiAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiAzMFxuICAgIHBlcmlvZFNlY29uZHM6IDEwXG4gICAgdGltZW91dFNlY29uZHM6IDVcbiAgICBmYWlsdXJlVGhyZXNob2xkOiAzXG5cbiAgbGl2ZW5lc3NQcm9iZTpcbiAgICBodHRwR2V0OlxuICAgICAgcGF0aDogL2FwaS9oZWFsdGhcbiAgICAgIHBvcnQ6IDMwMDBcbiAgICBpbml0aWFsRGVsYXlTZWNvbmRzOiA2MFxuICAgIHBlcmlvZFNlY29uZHM6IDEwXG4gICAgdGltZW91dFNlY29uZHM6IDMwXG4gICAgZmFpbHVyZVRocmVzaG9sZDogMTBcblxuICBwZXJzaXN0ZW5jZTpcbiAgICBlbmFibGVkOiB0cnVlXG4gICAgc3RvcmFnZUNsYXNzTmFtZTogbG9uZ2hvcm5cbiAgICBhY2Nlc3NNb2RlczpcbiAgICAgIC0gUmVhZFdyaXRlT25jZVxuICAgIHNpemU6ICR7Y29uZmlnLnN0b3JhZ2UuZ3JhZmFuYX1cblxuICAjIE1hbnVhbCBkYXRhc291cmNlIHByb3Zpc2lvbmluZyAoc2lkZWNhciBkaXNhYmxlZClcbiAgIyBUaGFub3MgUXVlcnkg4oaSIGxvbmctdGVybS9oaXN0b3JpY2FsIG1ldHJpY3MgKFMzIHZpYSBTdG9yZSArIGxpdmUgc2lkZWNhciksIGRlZmF1bHRcbiAgIyBQcm9tZXRoZXVzIOKGkiBsb2NhbCwgcmVjZW50L2hpZ2gtcmVzIG9ubHkgKGtlcHQgZm9yIGxvdy1sYXRlbmN5IHJlY2VudCBxdWVyaWVzKVxuICAjIExva2kgZm9yIGxvZyBhZ2dyZWdhdGlvblxuICBkYXRhc291cmNlczpcbiAgICBkYXRhc291cmNlcy55YW1sOlxuICAgICAgYXBpVmVyc2lvbjogMVxuICAgICAgIyBEZWxldGUgYW55IHByZS1leGlzdGluZyBMb2tpIGRhdGFzb3VyY2UgKGUuZy4gb25lIGNyZWF0ZWQgd2l0aCBhXG4gICAgICAjIHJhbmRvbWx5IGdlbmVyYXRlZCBVSUQgYmVmb3JlIHdlIHBpbm5lZCB1aWQ6IGxva2kpLiBXaXRob3V0IHRoaXMsXG4gICAgICAjIEdyYWZhbmEgZmFpbHMgcHJvdmlzaW9uaW5nIHdpdGggXCJkYXRhIHNvdXJjZSBub3QgZm91bmRcIiBiZWNhdXNlXG4gICAgICAjIHRoZSB1cHNlcnQgY29sbGlkZXMgd2l0aCB0aGUgZXhpc3RpbmcgZW50cnkuXG4gICAgICBkZWxldGVEYXRhc291cmNlczpcbiAgICAgIC0gbmFtZTogTG9raVxuICAgICAgICBvcmdJZDogMVxuICAgICAgZGF0YXNvdXJjZXM6XG4gICAgICAtIG5hbWU6IFRoYW5vc1xuICAgICAgICB0eXBlOiBwcm9tZXRoZXVzXG4gICAgICAgIHVpZDogdGhhbm9zXG4gICAgICAgIGFjY2VzczogcHJveHlcbiAgICAgICAgIyB0aGFub3MtcXVlcnkgU2VydmljZTogaHR0cCBwb3J0IDkwOTAgLT4gY29udGFpbmVyIGh0dHAgMTA5MDJcbiAgICAgICAgdXJsOiBodHRwOi8vdGhhbm9zLXF1ZXJ5LiR7Y29uZmlnLm5hbWVzcGFjZX0uc3ZjLmNsdXN0ZXIubG9jYWw6OTA5MFxuICAgICAgICBpc0RlZmF1bHQ6IHRydWVcbiAgICAgICAganNvbkRhdGE6XG4gICAgICAgICAgdGltZUludGVydmFsOiAzMHNcbiAgICAgIC0gbmFtZTogUHJvbWV0aGV1c1xuICAgICAgICB0eXBlOiBwcm9tZXRoZXVzXG4gICAgICAgIHVpZDogcHJvbWV0aGV1c1xuICAgICAgICBhY2Nlc3M6IHByb3h5XG4gICAgICAgIHVybDogaHR0cDovL2t1YmUtcHJvbWV0aGV1cy1zdGFjay1wcm9tZXRoZXVzLiR7Y29uZmlnLm5hbWVzcGFjZX0uc3ZjLmNsdXN0ZXIubG9jYWw6OTA5MFxuICAgICAgICBpc0RlZmF1bHQ6IGZhbHNlXG4gICAgICAgIGpzb25EYXRhOlxuICAgICAgICAgIHRpbWVJbnRlcnZhbDogMzBzXG4gICAgICAtIG5hbWU6IExva2lcbiAgICAgICAgdHlwZTogbG9raVxuICAgICAgICB1aWQ6IGxva2lcbiAgICAgICAgYWNjZXNzOiBwcm94eVxuICAgICAgICB1cmw6IGh0dHA6Ly9sb2tpLWdhdGV3YXkuJHtjb25maWcubmFtZXNwYWNlfS5zdmMuY2x1c3Rlci5sb2NhbFxuICAgICAgICBqc29uRGF0YTpcbiAgICAgICAgICBtYXhMaW5lczogMTAwMFxuXG5wcm9tZXRoZXVzT3BlcmF0b3I6XG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6IDFcbiAgICAgIG1lbW9yeTogNTEyTWlcbiAgICByZXF1ZXN0czpcbiAgICAgIGNwdTogNTBtXG4gICAgICBtZW1vcnk6IDEyOE1pXG4gIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5cbnByb21ldGhldXMtbm9kZS1leHBvcnRlcjpcbiAgIyBCaW5kIDo5MTAwIHRvIHRoZSBub2RlIEludGVybmFsSVAgb25seSwgbm90IDAuMC4wLjAuIFdpdGgga3ViZVJCQUNQcm94eVxuICAjIGRpc2FibGVkIHRoZSBzdWItY2hhcnQgc2V0cyBIT1NUX0lQIGZyb20gZmllbGRSZWYgc3RhdHVzLmhvc3RJUCwgd2hpY2ggaXNcbiAgIyB0aGUgbm9kZSdzIEludGVybmFsSVAgKEVYOiB2U3dpdGNoIDEwLjYuMC54IHZpYSAtLW5vZGUtaXA7IGNsb3VkOiBoY2xvdWRcbiAgIyBwcml2YXRlIElQKS4gbm9kZS1leHBvcnRlciBpcyBob3N0TmV0d29yaywgc28gUHJvbWV0aGV1cyBhbHJlYWR5IHNjcmFwZXNcbiAgIyB0aGF0IEludGVybmFsSVAgZW5kcG9pbnQgLT4gc2NyYXBpbmcgaXMgdW5hZmZlY3RlZCwgb25seSB0aGUgcHVibGljLU5JQ1xuICAjIGV4cG9zdXJlIG9mIHRoZSB1bmF1dGhlbnRpY2F0ZWQgbWV0cmljcyBvbiB0aGUgRVggcHVibGljIElQcyBnb2VzIGF3YXkuXG4gIHNlcnZpY2U6XG4gICAgbGlzdGVuT25BbGxJbnRlcmZhY2VzOiBmYWxzZVxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1OiA1MG1cbiAgICAgIG1lbW9yeTogNTBNaVxuICAgIHJlcXVlc3RzOlxuICAgICAgY3B1OiA1bVxuICAgICAgbWVtb3J5OiAxNk1pXG4gIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5cbmt1YmUtc3RhdGUtbWV0cmljczpcbiAgcmVzb3VyY2VzOlxuICAgIGxpbWl0czpcbiAgICAgIGNwdTogMVxuICAgICAgbWVtb3J5OiA1MTJNaVxuICAgIHJlcXVlc3RzOlxuICAgICAgY3B1OiA1bVxuICAgICAgbWVtb3J5OiAxMjhNaVxuICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuYDtcbiAgfVxufVxuIl19
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbWV0aGV1cy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL3Byb21ldGhldXMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWtDO0FBQ2xDLDJDQUF1QztBQVF2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsc0JBQVM7SUFDckQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXBDLDRCQUE0QjtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkQsa0RBQWtEO1FBQ2xELDJDQUEyQztRQUMzQyxJQUFJLGlCQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzNDLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLFdBQVc7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sd0JBQXdCLEVBQUUsdUJBQXVCO29CQUNqRCw2QkFBNkIsRUFBRSxZQUFZO29CQUMzQyw4QkFBOEIsRUFBRSxPQUFPO29CQUN2QywyQkFBMkIsRUFBRSxZQUFZO2lCQUMxQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsOEJBQThCLEVBQUUsR0FBRztpQkFDcEM7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxLQUFLLEVBQUUsdUJBQXVCO2dCQUM5QixPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxT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Q2hDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNOzthQUV6QyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDbEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUF5QjVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQ0FzQkMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7O3VEQVFJLE1BQU0sQ0FBQyxTQUFTOzs7Ozs7OzttQ0FRcEMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUNsRCxDQUFDO0lBQ0EsQ0FBQztDQUNGO0FBMWNELDREQTBjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwaU9iamVjdCB9IGZyb20gJ2NkazhzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0NvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBQcm9tZXRoZXVzU3RhY2tQcm9wcyB7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBjb25maWc6IE1vbml0b3JpbmdDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBrdWJlLXByb21ldGhldXMtc3RhY2sgSGVsbUNoYXJ0IHdpdGggUHJvbWV0aGV1cywgR3JhZmFuYSwgYW5kIEFsZXJ0bWFuYWdlci5cbiAqXG4gKiBUaGlzIGlzIHRoZSBjb3JlIG1vbml0b3Jpbmcgc3RhY2sgdGhhdCBpbmNsdWRlczpcbiAqIC0gUHJvbWV0aGV1cyAobWV0cmljcyBjb2xsZWN0aW9uLCAyIHJlcGxpY2FzLCAzZCByZXRlbnRpb24pXG4gKiAtIEdyYWZhbmEgKHZpc3VhbGl6YXRpb24sIGluZ3Jlc3Mgd2l0aCBMZXQncyBFbmNyeXB0KVxuICogLSBBbGVydG1hbmFnZXIgKGFsZXJ0IHJvdXRpbmcsIFNNVFAgbm90aWZpY2F0aW9ucylcbiAqIC0gUHJvbWV0aGV1cyBPcGVyYXRvciAobWFuYWdlcyBQcm9tZXRoZXVzIENSRHMpXG4gKiAtIE5vZGUgRXhwb3J0ZXIgKHN5c3RlbSBtZXRyaWNzIERhZW1vblNldClcbiAqIC0ga3ViZS1zdGF0ZS1tZXRyaWNzIChLdWJlcm5ldGVzIHJlc291cmNlIG1ldHJpY3MpXG4gKlxuICogUHJlcmVxdWlzaXRlczpcbiAqIC0gTmFtZXNwYWNlIGV4aXN0c1xuICogLSBQcmlvcml0eUNsYXNzICdoaWdoLXByaW9yaXR5JyBleGlzdHNcbiAqIC0gTG9uZ2hvcm4gc3RvcmFnZSBjbGFzcyBhdmFpbGFibGVcbiAqIC0gY2VydC1tYW5hZ2VyIENsdXN0ZXJJc3N1ZXIgY29uZmlndXJlZFxuICogLSBUaGFub3MgUzMgc2VjcmV0IGV4aXN0cyAodGhhbm9zLW9ianN0b3JlLWNvbmZpZylcbiAqXG4gKiBTeW5jIFdhdmU6IDIgKGNvcmUgc2VydmljZXMgLSBhZnRlciBTMyBidWNrZXRzIGFuZCBzZWNyZXRzKVxuICovXG5leHBvcnQgY2xhc3MgUHJvbWV0aGV1c1N0YWNrQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByb21ldGhldXNTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgbmFtZXNwYWNlLCBjb25maWcgfSA9IHByb3BzO1xuXG4gICAgLy8gR2VuZXJhdGUgSGVsbSB2YWx1ZXMgWUFNTFxuICAgIGNvbnN0IGhlbG1WYWx1ZXMgPSB0aGlzLmdlbmVyYXRlSGVsbVZhbHVlcyhjb25maWcpO1xuXG4gICAgLy8gQ3JlYXRlIEhlbG1DaGFydCByZXNvdXJjZSAoSzNTIEhlbG0gY29udHJvbGxlcilcbiAgICAvLyBXYXZlIDI6IENvcmUgU2VydmljZXMgLSBtb25pdG9yaW5nIHN0YWNrXG4gICAgbmV3IEFwaU9iamVjdCh0aGlzLCAna3ViZS1wcm9tZXRoZXVzLXN0YWNrJywge1xuICAgICAgYXBpVmVyc2lvbjogJ2hlbG0uY2F0dGxlLmlvL3YxJyxcbiAgICAgIGtpbmQ6ICdIZWxtQ2hhcnQnLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbmFtZTogJ2t1YmUtcHJvbWV0aGV1cy1zdGFjaycsXG4gICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICBsYWJlbHM6IHtcbiAgICAgICAgICAnYXBwLmt1YmVybmV0ZXMuaW8vbmFtZSc6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQnOiAnbW9uaXRvcmluZycsXG4gICAgICAgICAgJ2FwcC5rdWJlcm5ldGVzLmlvL21hbmFnZWQtYnknOiAnY2RrOHMnLFxuICAgICAgICAgICdhcHAua3ViZXJuZXRlcy5pby9wYXJ0LW9mJzogJ21vbml0b3JpbmcnLFxuICAgICAgICB9LFxuICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICdhcmdvY2QuYXJnb3Byb2ouaW8vc3luYy13YXZlJzogJzInLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNwZWM6IHtcbiAgICAgICAgcmVwbzogJ2h0dHBzOi8vcHJvbWV0aGV1cy1jb21tdW5pdHkuZ2l0aHViLmlvL2hlbG0tY2hhcnRzJyxcbiAgICAgICAgY2hhcnQ6ICdrdWJlLXByb21ldGhldXMtc3RhY2snLFxuICAgICAgICB2ZXJzaW9uOiBjb25maWcudmVyc2lvbnMucHJvbWV0aGV1c1N0YWNrID09PSAnbGF0ZXN0JyA/IHVuZGVmaW5lZCA6IGNvbmZpZy52ZXJzaW9ucy5wcm9tZXRoZXVzU3RhY2ssXG4gICAgICAgIHRhcmdldE5hbWVzcGFjZTogbmFtZXNwYWNlLFxuICAgICAgICB2YWx1ZXNDb250ZW50OiBoZWxtVmFsdWVzLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVIZWxtVmFsdWVzKGNvbmZpZzogTW9uaXRvcmluZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBrdWJlRXRjZDpcbiAgZW5hYmxlZDogZmFsc2VcblxuIyBEaXNhYmxlIGt1YmUtY29udHJvbGxlci1tYW5hZ2VyIGFuZCBrdWJlLXNjaGVkdWxlciBtb25pdG9yaW5nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2NhYmxlc3BhZ2hldHRpL2szcy1tb25pdG9yaW5nL2lzc3Vlcy8yXG5rdWJlQ29udHJvbGxlck1hbmFnZXI6XG4gIGVuYWJsZWQ6IGZhbHNlXG5rdWJlU2NoZWR1bGVyOlxuICBlbmFibGVkOiBmYWxzZVxuXG4jIERldGVjdCBQb2REaXNydXB0aW9uQnVkZ2V0cyB0aGF0IHdvdWxkIGJsb2NrIGEgbm9kZSBkcmFpbiBkdXJpbmcgazNzIHVwZ3JhZGVzLlxuIyBPcGVyYXRvci1tYW5hZ2VkIFBEQnMgc2l0IGF0IGRpc3J1cHRpb25zQWxsb3dlZD0wIGJ5IGRlc2lnbiAoTG9uZ2hvcm4gaW5zdGFuY2UtbWFuYWdlcnMsXG4jIENOUEcgKi1wcmltYXJ5KSBhbmQgYXJlIGV4Y2x1ZGVkIHNvIHRoZSBhbGVydCBvbmx5IGZpcmVzIG9uIGFub21hbG91cyBhcHAgUERCcy5cbmFkZGl0aW9uYWxQcm9tZXRoZXVzUnVsZXNNYXA6XG4gIHBkYi1kcmFpbi1zYWZldHk6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBuYW1lOiBwZGIucnVsZXNcbiAgICAgICAgaW50ZXJ2YWw6IDFtXG4gICAgICAgIHJ1bGVzOlxuICAgICAgICAgIC0gYWxlcnQ6IFBvZERpc3J1cHRpb25CdWRnZXRVbmRyYWluYWJsZVxuICAgICAgICAgICAgZXhwcjoga3ViZV9wb2RkaXNydXB0aW9uYnVkZ2V0X3N0YXR1c19wb2RfZGlzcnVwdGlvbnNfYWxsb3dlZHtuYW1lc3BhY2UhPVwibG9uZ2hvcm4tc3lzdGVtXCIsIHBvZGRpc3J1cHRpb25idWRnZXQhflwiLiotcHJpbWFyeVwifSA9PSAwXG4gICAgICAgICAgICBmb3I6IDE1bVxuICAgICAgICAgICAgbGFiZWxzOlxuICAgICAgICAgICAgICBzZXZlcml0eTogd2FybmluZ1xuICAgICAgICAgICAgICBjb21wb25lbnQ6IGNsdXN0ZXItdXBncmFkZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IFwiUERCIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fSBhbGxvd3MgMCB2b2x1bnRhcnkgZGlzcnVwdGlvbnNcIlxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogfFxuICAgICAgICAgICAgICAgIFRoZSBQb2REaXNydXB0aW9uQnVkZ2V0IHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fVxuICAgICAgICAgICAgICAgIGhhcyBhbGxvd2VkIDAgdm9sdW50YXJ5IGRpc3J1cHRpb25zIGZvciBvdmVyIDE1IG1pbnV0ZXMuIFRoaXMgd2lsbCBibG9jayBhIG5vZGVcbiAgICAgICAgICAgICAgICBkcmFpbiBkdXJpbmcgazNzIHVwZ3JhZGVzLiBPcGVyYXRvci1tYW5hZ2VkIFBEQnMgKExvbmdob3JuLCBDTlBHIHByaW1hcmllcykgYXJlXG4gICAgICAgICAgICAgICAgZXhjbHVkZWQgZnJvbSB0aGlzIGFsZXJ0LiBMaWtlbHkgYSBkZWdyYWRlZCBkZXBsb3ltZW50ICgwIGhlYWx0aHkgcG9kcykgb3IgYVxuICAgICAgICAgICAgICAgIHNpbmdsZS1yZXBsaWNhIGRlcGxveW1lbnQgd2l0aCBtaW5BdmFpbGFibGU9MS5cbiAgICAgICAgICAgICAgICBDaGVjazoga3ViZWN0bCBnZXQgcGRiIC1uIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19IHt7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fVxuICAgICAgICAgIC0gYWxlcnQ6IFBvZERpc3J1cHRpb25CdWRnZXRVbmRyYWluYWJsZUNyaXRpY2FsXG4gICAgICAgICAgICBleHByOiBrdWJlX3BvZGRpc3J1cHRpb25idWRnZXRfc3RhdHVzX3BvZF9kaXNydXB0aW9uc19hbGxvd2Vke25hbWVzcGFjZSE9XCJsb25naG9ybi1zeXN0ZW1cIiwgcG9kZGlzcnVwdGlvbmJ1ZGdldCF+XCIuKi1wcmltYXJ5XCJ9ID09IDBcbiAgICAgICAgICAgIGZvcjogMWhcbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IGNyaXRpY2FsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogY2x1c3Rlci11cGdyYWRlXG4gICAgICAgICAgICBhbm5vdGF0aW9uczpcbiAgICAgICAgICAgICAgc3VtbWFyeTogXCJQREIge3sgJGxhYmVscy5uYW1lc3BhY2UgfX0ve3sgJGxhYmVscy5wb2RkaXNydXB0aW9uYnVkZ2V0IH19IHVuZHJhaW5hYmxlID4xaFwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgUERCIHt7ICRsYWJlbHMubmFtZXNwYWNlIH19L3t7ICRsYWJlbHMucG9kZGlzcnVwdGlvbmJ1ZGdldCB9fSBoYXMgYmxvY2tlZFxuICAgICAgICAgICAgICAgIHZvbHVudGFyeSBkaXNydXB0aW9ucyBmb3Igb3ZlciBhbiBob3VyLiBBIGszcyBhZ2VudCB1cGdyYWRlIHdvdWxkIHN0YWxsIG9uIHRoaXMgbm9kZS5cbiAgIyBEZXRlY3QgYW4gRVggZGVkaWNhdGVkIHdvcmtlciBzdHVjayBOb3RSZWFkeSDigJQgbGlrZWx5IGEgTWljcm9PUyByZWJvb3QgaGFuZ1xuICAjIChwaW5ncyBidXQgc3NoZC9rdWJlbGV0IGRlYWQpLiBBIGh1bmcgbm9kZSBhbHNvIGhvbGRzIHRoZSBjbHVzdGVyLXdpZGUga3VyZWRcbiAgIyBsb2NrLCBibG9ja2luZyBhbGwgZnVydGhlciBncmFjZWZ1bCByZWJvb3RzLCBzbyB0aGlzIG11c3QgYmUgY2F1Z2h0IGZhc3QuXG4gIGV4LXdvcmtlci1yZWJvb3Q6XG4gICAgZ3JvdXBzOlxuICAgICAgLSBuYW1lOiBleC13b3JrZXIucnVsZXNcbiAgICAgICAgaW50ZXJ2YWw6IDFtXG4gICAgICAgIHJ1bGVzOlxuICAgICAgICAgIC0gYWxlcnQ6IEV4V29ya2VyTm90UmVhZHlcbiAgICAgICAgICAgIGV4cHI6IGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ue2NvbmRpdGlvbj1cIlJlYWR5XCIsc3RhdHVzPVwidHJ1ZVwiLG5vZGU9flwia3VwNnMtZXgtLipcIn0gPT0gMFxuICAgICAgICAgICAgZm9yOiAxNW1cbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6IGNyaXRpY2FsXG4gICAgICAgICAgICAgIGNvbXBvbmVudDogbm9kZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM6XG4gICAgICAgICAgICAgIHN1bW1hcnk6IFwiRVggd29ya2VyIHt7ICRsYWJlbHMubm9kZSB9fSBOb3RSZWFkeSBmb3IgPjE1bVwiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB8XG4gICAgICAgICAgICAgICAgRVggZGVkaWNhdGVkIHdvcmtlciB7eyAkbGFiZWxzLm5vZGUgfX0gaGFzIGJlZW4gTm90UmVhZHkgZm9yIG92ZXIgMTUgbWludXRlcy5cbiAgICAgICAgICAgICAgICBQb3NzaWJsZSBNaWNyb09TIHJlYm9vdCBoYW5nIChwaW5ncyBidXQgc3NoZC9rdWJlbGV0L2xvbmdob3JuLW1hbmFnZXIgZGVhZCkg4oCUIHRoZVxuICAgICAgICAgICAgICAgIG5vZGUgbWF5IHN0aWxsIGhvbGQgdGhlIGNsdXN0ZXItd2lkZSBrdXJlZCBsb2NrLCBibG9ja2luZyBhbGwgZnVydGhlciByZWJvb3RzLlxuICAgICAgICAgICAgICAgIFJlY292ZXJ5OiBIZXR6bmVyIFJvYm90IGhhcmR3YXJlIHJlc2V0LiBEbyBOT1QgZm9yY2UtZGV0YWNoIExvbmdob3JuIHZvbHVtZXMuXG4gICAgICAgICAgICAgIHJ1bmJvb2tfdXJsOiBcImh0dHBzOi8vZG9jcy5rdXA2cy5jb20vaG93LXRvL3Ryb3VibGVzaG9vdGluZy9leC13b3JrZXItcGluZy1idXQtZGVhZC5odG1sXCJcblxuIyBEcm9wIGhpZ2gtY2FyZGluYWxpdHkgQVBJIHNlcnZlciBhbmQgZXRjZCBoaXN0b2dyYW0gYnVja2V0cyB0byByZWR1Y2UgbWVtb3J5IHVzYWdlXG4jIFRoZXNlIG1ldHJpY3MgYWxvbmUgYWNjb3VudCBmb3IgfjIwMGsgc2VyaWVzICg0NyUgb2YgdG90YWwgY2FyZGluYWxpdHkpXG4jIFdlIGtlZXAgX3N1bSBhbmQgX2NvdW50IHN1ZmZpeGVzIHdoaWNoIGFyZSBzdWZmaWNpZW50IGZvciByYXRlIGNhbGN1bGF0aW9uc1xua3ViZUFwaVNlcnZlcjpcbiAgc2VydmljZU1vbml0b3I6XG4gICAgbWV0cmljUmVsYWJlbGluZ3M6XG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXF1ZXN0X2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3Rfc2xpX2R1cmF0aW9uX3NlY29uZHNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfYm9keV9zaXplX2J5dGVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2FwaXNlcnZlcl9yZXNwb25zZV9zaXplc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdldGNkX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuXG4jIEt1YmVsZXQgYWxzbyBleHBvc2VzIGFwaXNlcnZlciBtZXRyaWNzIC0gYXBwbHkgc2FtZSBmaWx0ZXJzXG5rdWJlbGV0OlxuICBzZXJ2aWNlTW9uaXRvcjpcbiAgICBtZXRyaWNSZWxhYmVsaW5nczpcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3JlcXVlc3RfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9zbGlfZHVyYXRpb25fc2Vjb25kc19idWNrZXQnXG4gICAgICAgIGFjdGlvbjogZHJvcFxuICAgICAgLSBzb3VyY2VMYWJlbHM6IFtfX25hbWVfX11cbiAgICAgICAgcmVnZXg6ICdhcGlzZXJ2ZXJfcmVxdWVzdF9ib2R5X3NpemVfYnl0ZXNfYnVja2V0J1xuICAgICAgICBhY3Rpb246IGRyb3BcbiAgICAgIC0gc291cmNlTGFiZWxzOiBbX19uYW1lX19dXG4gICAgICAgIHJlZ2V4OiAnYXBpc2VydmVyX3Jlc3BvbnNlX3NpemVzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG4gICAgICAtIHNvdXJjZUxhYmVsczogW19fbmFtZV9fXVxuICAgICAgICByZWdleDogJ2V0Y2RfcmVxdWVzdF9kdXJhdGlvbl9zZWNvbmRzX2J1Y2tldCdcbiAgICAgICAgYWN0aW9uOiBkcm9wXG5cbmFsZXJ0bWFuYWdlcjpcbiAgY29uZmlnOlxuICAgIGdsb2JhbDpcbiAgICAgIHNtdHBfZnJvbTogJHtjb25maWcuc210cC5mcm9tfVxuICAgICAgc210cF9zbWFydGhvc3Q6ICR7Y29uZmlnLnNtdHAuaG9zdH06JHtjb25maWcuc210cC5wb3J0fVxuICAgICAgc210cF9yZXF1aXJlX3RsczogJHtjb25maWcuc210cC5yZXF1aXJlVGxzfVxuICAgICAgc210cF9hdXRoX3VzZXJuYW1lOiAke2NvbmZpZy5zbXRwLnVzZXJuYW1lIHx8IGNvbmZpZy5zbXRwLmZyb219XG4gICAgICBzbXRwX2F1dGhfcGFzc3dvcmQ6ICR7Y29uZmlnLnNtdHAucGFzc3dvcmQgfHwgJyd9XG4gICAgcm91dGU6XG4gICAgICBncm91cF9ieTogWydqb2InXVxuICAgICAgZ3JvdXBfd2FpdDogMzBzXG4gICAgICBncm91cF9pbnRlcnZhbDogNW1cbiAgICAgIHJlcGVhdF9pbnRlcnZhbDogMWhcbiAgICAgIHJlY2VpdmVyOiBlbWFpbFxuICAgICAgcm91dGVzOlxuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IFdhdGNoZG9nXG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBDUFVUaHJvdHRsaW5nSGlnaFxuICAgICAgICByZWNlaXZlcjogJ251bGwnXG4gICAgICAtIG1hdGNoOlxuICAgICAgICAgIGFsZXJ0bmFtZTogS3ViZU1lbW9yeU92ZXJjb21taXRcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuICAgICAgLSBtYXRjaDpcbiAgICAgICAgICBhbGVydG5hbWU6IEt1YmVDUFVPdmVyY29tbWl0XG4gICAgICAgIHJlY2VpdmVyOiAnbnVsbCdcbiAgICAgIC0gbWF0Y2g6XG4gICAgICAgICAgYWxlcnRuYW1lOiBLdWJlbGV0VG9vTWFueVBvZHNcbiAgICAgICAgcmVjZWl2ZXI6ICdudWxsJ1xuXG4gICAgcmVjZWl2ZXJzOlxuICAgIC0gbmFtZTogJ251bGwnXG4gICAgLSBuYW1lOiBlbWFpbFxuICAgICAgZW1haWxfY29uZmlnczpcbiAgICAgIC0gc2VuZF9yZXNvbHZlZDogdHJ1ZVxuICAgICAgICB0bzogJHtjb25maWcuc210cC5mcm9tfVxuXG4gICAgIyBJbmhpYml0aW9uIHJ1bGVzIGFsbG93IHRvIG11dGUgYSBzZXQgb2YgYWxlcnRzIGdpdmVuIHRoYXQgYW5vdGhlciBhbGVydCBpcyBmaXJpbmcuXG4gICAgIyBXZSB1c2UgdGhpcyB0byBtdXRlIGFueSB3YXJuaW5nLWxldmVsIG5vdGlmaWNhdGlvbnMgaWYgdGhlIHNhbWUgYWxlcnQgaXMgYWxyZWFkeSBjcml0aWNhbC5cbiAgICBpbmhpYml0X3J1bGVzOlxuICAgIC0gc291cmNlX21hdGNoOlxuICAgICAgICBzZXZlcml0eTogJ2NyaXRpY2FsJ1xuICAgICAgdGFyZ2V0X21hdGNoOlxuICAgICAgICBzZXZlcml0eTogJ3dhcm5pbmcnXG4gICAgICAjIEFwcGx5IGluaGliaXRpb24gaWYgdGhlIGFsZXJ0bmFtZSBpcyB0aGUgc2FtZS5cbiAgICAgIGVxdWFsOiBbJ2FsZXJ0bmFtZScsICduYW1lc3BhY2UnXVxuXG4gIGFsZXJ0bWFuYWdlclNwZWM6XG4gICAgcmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLmFsZXJ0bWFuYWdlcn1cbiAgICBwb2RBbnRpQWZmaW5pdHk6IFwic29mdFwiXG4gICAgc3RvcmFnZTpcbiAgICAgIHZvbHVtZUNsYWltVGVtcGxhdGU6XG4gICAgICAgIHNwZWM6XG4gICAgICAgICAgYWNjZXNzTW9kZXM6IFtcIlJlYWRXcml0ZU9uY2VcIl1cbiAgICAgICAgICByZXNvdXJjZXM6XG4gICAgICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICAgICAgc3RvcmFnZTogJHtjb25maWcuc3RvcmFnZS5hbGVydG1hbmFnZXJ9XG4gICAgcmVzb3VyY2VzOlxuICAgICAgbGltaXRzOlxuICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5hbGVydG1hbmFnZXIubGltaXRzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLmxpbWl0cy5tZW1vcnl9XG4gICAgICByZXF1ZXN0czpcbiAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLnJlcXVlc3RzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuYWxlcnRtYW5hZ2VyLnJlcXVlc3RzLm1lbW9yeX1cbiAgICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG4gICAgIyBTaWRlY2FyIGNvbnRhaW5lcnMgcmVzb3VyY2UgcmVxdWVzdHMgKGFkZGVkIDIwMjUtMTEtMTgpXG4gICAgY29udGFpbmVyczpcbiAgICAtIG5hbWU6IGNvbmZpZy1yZWxvYWRlclxuICAgICAgcmVzb3VyY2VzOlxuICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5jcHV9XG4gICAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIucmVxdWVzdHMubWVtb3J5fVxuICAgICAgICBsaW1pdHM6XG4gICAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIubGltaXRzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMubWVtb3J5fVxuXG5cbnByb21ldGhldXM6XG4gICMgRW5hYmxlIFRoYW5vcyBzZXJ2aWNlIGZvciBnUlBDIGNvbW11bmljYXRpb25cbiAgIyBSZXF1aXJlZCBmb3IgSGVsbSBjaGFydCB0byBwcm9wZXJseSByZW5kZXIgVGhhbm9zIHNpZGVjYXIgY29uZmlndXJhdGlvblxuICB0aGFub3NTZXJ2aWNlOlxuICAgIGVuYWJsZWQ6IHRydWVcblxuICBwcm9tZXRoZXVzU3BlYzpcbiAgICByZXRlbnRpb246ICR7Y29uZmlnLnJldGVudGlvbi5wcm9tZXRoZXVzfSAgIyBSZWR1Y2VkIGZyb20gN2QgLSBUaGFub3MgcHJvdmlkZXMgbG9uZy10ZXJtIHN0b3JhZ2UgaW4gUzNcblxuICAgICMgRGlzY292ZXIgQUxMIFNlcnZpY2VNb25pdG9ycywgUG9kTW9uaXRvcnMgYW5kIFByb21ldGhldXNSdWxlcyBpbiBBTEwgbmFtZXNwYWNlc1xuICAgICMgU2V0dGluZyBOaWxVc2VzSGVsbVZhbHVlczogZmFsc2UgbWVhbnMgbmlsIHNlbGVjdG9ycyA9IFwic2VsZWN0IGFsbFwiXG4gICAgIyBFbXB0eSBuYW1lc3BhY2Ugc2VsZWN0b3JzIHt9IG1lYW4gXCJzZWFyY2ggYWxsIG5hbWVzcGFjZXNcIlxuICAgICMgV2l0aG91dCB0aGUgcnVsZSogc2V0dGluZ3MsIHJ1bGVTZWxlY3RvciBrZWVwcyB0aGUgY2hhcnQgZGVmYXVsdFxuICAgICMgKG1hdGNoTGFiZWxzOiB7cmVsZWFzZTogPG5hbWU+fSkgYW5kIGhhbmQtYXV0aG9yZWQgUHJvbWV0aGV1c1J1bGVzIHRoYXRcbiAgICAjIGxhY2sgdGhlIHJlbGVhc2UgbGFiZWwgYXJlIHNpbGVudGx5IGlnbm9yZWQuXG4gICAgIyBOb3RlOiBUaGlzIGRvZXMgTk9UIGFmZmVjdCBUaGFub3Mgc2lkZWNhciAtIGNvbnRyb2xsZWQgYnkgdGhhbm9zLm9iamVjdFN0b3JhZ2VDb25maWdcbiAgICBzZXJ2aWNlTW9uaXRvclNlbGVjdG9yTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlXG4gICAgcG9kTW9uaXRvclNlbGVjdG9yTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlXG4gICAgcnVsZVNlbGVjdG9yTmlsVXNlc0hlbG1WYWx1ZXM6IGZhbHNlXG4gICAgc2VydmljZU1vbml0b3JOYW1lc3BhY2VTZWxlY3Rvcjoge31cbiAgICBwb2RNb25pdG9yTmFtZXNwYWNlU2VsZWN0b3I6IHt9XG4gICAgcnVsZU5hbWVzcGFjZVNlbGVjdG9yOiB7fVxuXG4gICAgcmVwbGljYXM6ICR7Y29uZmlnLnJlcGxpY2FzLnByb21ldGhldXN9XG4gICAgcG9kQW50aUFmZmluaXR5OiBcImhhcmRcIlxuICAgIHN0b3JhZ2VTcGVjOlxuICAgICAgdm9sdW1lQ2xhaW1UZW1wbGF0ZTpcbiAgICAgICAgc3BlYzpcbiAgICAgICAgICBzdG9yYWdlQ2xhc3NOYW1lOiBsb25naG9yblxuICAgICAgICAgIGFjY2Vzc01vZGVzOiBbXCJSZWFkV3JpdGVPbmNlXCJdXG4gICAgICAgICAgcmVzb3VyY2VzOlxuICAgICAgICAgICAgcmVxdWVzdHM6XG4gICAgICAgICAgICAgIHN0b3JhZ2U6ICR7Y29uZmlnLnN0b3JhZ2UucHJvbWV0aGV1c30gICMgUmVkdWNlZCBmcm9tIDZHaSAoM2QgcmV0ZW50aW9uIG5lZWRzIGxlc3Mgc3BhY2UpXG5cbiAgICByZXNvdXJjZXM6XG4gICAgICBsaW1pdHM6XG4gICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLnByb21ldGhldXMubGltaXRzLmNwdX1cbiAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMucHJvbWV0aGV1cy5saW1pdHMubWVtb3J5fVxuICAgICAgcmVxdWVzdHM6XG4gICAgICAgIGNwdTogJHtjb25maWcucmVzb3VyY2VzLnByb21ldGhldXMucmVxdWVzdHMuY3B1fVxuICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5wcm9tZXRoZXVzLnJlcXVlc3RzLm1lbW9yeX1cbiAgICBwcmlvcml0eUNsYXNzTmFtZTogaGlnaC1wcmlvcml0eVxuXG4gICAgIyBFeHRlcm5hbCBsYWJlbHMgZm9yIG11bHRpLWNsdXN0ZXIgaWRlbnRpZmljYXRpb24gYW5kIFRoYW5vc1xuICAgIGV4dGVybmFsTGFiZWxzOlxuICAgICAgY2x1c3Rlcjoga3VwNnNcbiAgICAgIHJlcGxpY2E6IFwiJChQT0RfTkFNRSlcIlxuXG4gICAgIyBUaGFub3Mgc2lkZWNhciBmb3IgbG9uZy10ZXJtIG1ldHJpY3Mgc3RvcmFnZSBpbiBTM1xuICAgICMgTk9URTogY2hhcnQgPj04NS54IHJlcXVpcmVzIHRoZSBleGlzdGluZ1NlY3JldCBzaGFwZS4gVGhlIGxlZ2FjeSBmbGF0XG4gICAgIyB7bmFtZSwga2V5fSBmb3JtIGlzIHNpbGVudGx5IGRyb3BwZWQgYnkgdGhlIGNoYXJ0LCB3aGljaCByZW1vdmVzIHRoZVxuICAgICMgc2lkZWNhciBhbmQgc3RvcHMgYWxsIFMzIGJsb2NrIHVwbG9hZHMgKHJlZ3Jlc3Npb24gc2VlbiAyMDI2LTAzLTMxKS5cbiAgICB0aGFub3M6XG4gICAgICBvYmplY3RTdG9yYWdlQ29uZmlnOlxuICAgICAgICBleGlzdGluZ1NlY3JldDpcbiAgICAgICAgICBuYW1lOiB0aGFub3Mtb2Jqc3RvcmUtY29uZmlnICAjIEVTTy1tYW5hZ2VkIHNlY3JldFxuICAgICAgICAgIGtleTogb2Jqc3RvcmUueW1sXG5cbiAgICAjIFNpZGVjYXIgY29udGFpbmVycyByZXNvdXJjZSByZXF1ZXN0cyAoYWRkZWQgMjAyNS0xMS0xOClcbiAgICAjIE5PVEU6IHRoYW5vcy1zaWRlY2FyIGlzIE5PVCBsaXN0ZWQgaGVyZSAtIGl0J3MgYXV0b21hdGljYWxseSBpbmplY3RlZCBieSBQcm9tZXRoZXVzIE9wZXJhdG9yXG4gICAgIyB3aGVuIHRoYW5vcy5vYmplY3RTdG9yYWdlQ29uZmlnIGlzIHNldC4gU3BlY2lmeWluZyBpdCBpbiBjb250YWluZXJzW10gd291bGQgb3ZlcnJpZGVcbiAgICAjIHRoZSBvcGVyYXRvcidzIGRlZmluaXRpb24gYW5kIHJlcXVpcmUgdXMgdG8gbWFudWFsbHkgc3BlY2lmeSB0aGUgaW1hZ2UsIHdoaWNoIGJyZWFrc1xuICAgICMgd2hlbiB0aGUgb3BlcmF0b3IgdXBkYXRlcyB0aGUgdGhhbm9zIHZlcnNpb24uXG4gICAgY29udGFpbmVyczpcbiAgICAtIG5hbWU6IGNvbmZpZy1yZWxvYWRlclxuICAgICAgcmVzb3VyY2VzOlxuICAgICAgICByZXF1ZXN0czpcbiAgICAgICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5yZXF1ZXN0cy5jcHV9XG4gICAgICAgICAgbWVtb3J5OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIucmVxdWVzdHMubWVtb3J5fVxuICAgICAgICBsaW1pdHM6XG4gICAgICAgICAgY3B1OiAke2NvbmZpZy5yZXNvdXJjZXMuY29uZmlnUmVsb2FkZXIubGltaXRzLmNwdX1cbiAgICAgICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5jb25maWdSZWxvYWRlci5saW1pdHMubWVtb3J5fVxuXG4gICAgc2VydmljZTpcbiAgICAgIHNlc3Npb25BZmZpbml0eTogXCJDbGllbnRJUFwiXG5cblxuZ3JhZmFuYTpcbiAgIyBSZWNyZWF0ZSBzdHJhdGVneSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBzdG9yYWdlIFBWQyBpcyBSV086XG4gICMgYSBSb2xsaW5nVXBkYXRlIHdvdWxkIHN1cmdlIGEgc2Vjb25kIHBvZCB0aGF0IGNhbm5vdCBtb3VudCB0aGVcbiAgIyB2b2x1bWUgKEZhaWxlZEF0dGFjaFZvbHVtZSksIGJsb2NraW5nIHRoZSByb2xsb3V0IGluZGVmaW5pdGVseS5cbiAgZGVwbG95bWVudFN0cmF0ZWd5OlxuICAgIHR5cGU6IFJlY3JlYXRlXG5cbiAgIyBVc2UgZXhpc3Rpbmcgc2VjcmV0IGZvciBhZG1pbiBjcmVkZW50aWFscyAobWFuYWdlZCBieSBFU08pXG4gICMgVGhpcyBwcmV2ZW50cyBwYXNzd29yZCByZWdlbmVyYXRpb24gb24gSGVsbSB1cGdyYWRlc1xuICBhZG1pbjpcbiAgICBleGlzdGluZ1NlY3JldDogXCJncmFmYW5hLWFkbWluLWNyZWRlbnRpYWxzXCJcbiAgICB1c2VyS2V5OiBcImFkbWluLXVzZXJcIlxuICAgIHBhc3N3b3JkS2V5OiBcImFkbWluLXBhc3N3b3JkXCJcblxuICAjIERpc2FibGUgZGVmYXVsdCBQcm9tZXRoZXVzIGRhdGFzb3VyY2UgKHdlIHByb3ZpZGUgb3VyIG93biBwb2ludGluZyB0byBUaGFub3MgUXVlcnkpXG4gIGRlZmF1bHREYXRhc291cmNlRW5hYmxlZDogZmFsc2VcblxuICAjIFNpZGVjYXIgY29udGFpbmVycyBmb3IgZGFzaGJvYXJkL2RhdGFzb3VyY2UgcHJvdmlzaW9uaW5nXG4gIHNpZGVjYXI6XG4gICAgcmVzb3VyY2VzOlxuICAgICAgcmVxdWVzdHM6XG4gICAgICAgIGNwdTogMTBtXG4gICAgICAgIG1lbW9yeTogMjU2TWlcbiAgICAgIGxpbWl0czpcbiAgICAgICAgY3B1OiAxMDBtXG4gICAgICAgIG1lbW9yeTogNTEyTWlcbiAgICBkYXNoYm9hcmRzOlxuICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgIGRhdGFzb3VyY2VzOlxuICAgICAgZW5hYmxlZDogZmFsc2UgICMgV2UgbWFudWFsbHkgcHJvdmlzaW9uIGRhdGFzb3VyY2VzIChQcm9tZXRoZXVz4oaSVGhhbm9zLCBMb2tpKVxuXG4gIGluZ3Jlc3M6XG4gICAgZW5hYmxlZDogdHJ1ZVxuICAgIGhvc3RzOlxuICAgICAgLSAke2NvbmZpZy5kb21haW5zLmdyYWZhbmF9XG4gICAgYW5ub3RhdGlvbnM6XG4gICAgICBjZXJ0LW1hbmFnZXIuaW8vY2x1c3Rlci1pc3N1ZXI6IFwibGV0c2VuY3J5cHQtY2x1c3Rlci1pc3N1ZXJcIlxuICAgICAgdHJhZWZpay5pbmdyZXNzLmt1YmVybmV0ZXMuaW8vcm91dGVyLmVudHJ5cG9pbnRzOiB3ZWJzZWN1cmVcbiAgICB0bHM6XG4gICAgICAtIHNlY3JldE5hbWU6IGdyYWZhbmEtZ2VuZXJhbC10bHNcbiAgICAgICAgaG9zdHM6XG4gICAgICAgIC0gJHtjb25maWcuZG9tYWlucy5ncmFmYW5hfVxuXG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLmxpbWl0cy5jcHV9XG4gICAgICBtZW1vcnk6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLmxpbWl0cy5tZW1vcnl9XG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6ICR7Y29uZmlnLnJlc291cmNlcy5ncmFmYW5hLnJlcXVlc3RzLmNwdX1cbiAgICAgIG1lbW9yeTogJHtjb25maWcucmVzb3VyY2VzLmdyYWZhbmEucmVxdWVzdHMubWVtb3J5fVxuXG4gIHJlYWRpbmVzc1Byb2JlOlxuICAgIGh0dHBHZXQ6XG4gICAgICBwYXRoOiAvYXBpL2hlYWx0aFxuICAgICAgcG9ydDogMzAwMFxuICAgIGluaXRpYWxEZWxheVNlY29uZHM6IDMwXG4gICAgcGVyaW9kU2Vjb25kczogMTBcbiAgICB0aW1lb3V0U2Vjb25kczogNVxuICAgIGZhaWx1cmVUaHJlc2hvbGQ6IDNcblxuICBsaXZlbmVzc1Byb2JlOlxuICAgIGh0dHBHZXQ6XG4gICAgICBwYXRoOiAvYXBpL2hlYWx0aFxuICAgICAgcG9ydDogMzAwMFxuICAgIGluaXRpYWxEZWxheVNlY29uZHM6IDYwXG4gICAgcGVyaW9kU2Vjb25kczogMTBcbiAgICB0aW1lb3V0U2Vjb25kczogMzBcbiAgICBmYWlsdXJlVGhyZXNob2xkOiAxMFxuXG4gIHBlcnNpc3RlbmNlOlxuICAgIGVuYWJsZWQ6IHRydWVcbiAgICBzdG9yYWdlQ2xhc3NOYW1lOiBsb25naG9yblxuICAgIGFjY2Vzc01vZGVzOlxuICAgICAgLSBSZWFkV3JpdGVPbmNlXG4gICAgc2l6ZTogJHtjb25maWcuc3RvcmFnZS5ncmFmYW5hfVxuXG4gICMgTWFudWFsIGRhdGFzb3VyY2UgcHJvdmlzaW9uaW5nIChzaWRlY2FyIGRpc2FibGVkKVxuICAjIFRoYW5vcyBRdWVyeSDihpIgbG9uZy10ZXJtL2hpc3RvcmljYWwgbWV0cmljcyAoUzMgdmlhIFN0b3JlICsgbGl2ZSBzaWRlY2FyKSwgZGVmYXVsdFxuICAjIFByb21ldGhldXMg4oaSIGxvY2FsLCByZWNlbnQvaGlnaC1yZXMgb25seSAoa2VwdCBmb3IgbG93LWxhdGVuY3kgcmVjZW50IHF1ZXJpZXMpXG4gICMgTG9raSBmb3IgbG9nIGFnZ3JlZ2F0aW9uXG4gIGRhdGFzb3VyY2VzOlxuICAgIGRhdGFzb3VyY2VzLnlhbWw6XG4gICAgICBhcGlWZXJzaW9uOiAxXG4gICAgICAjIERlbGV0ZSBhbnkgcHJlLWV4aXN0aW5nIExva2kgZGF0YXNvdXJjZSAoZS5nLiBvbmUgY3JlYXRlZCB3aXRoIGFcbiAgICAgICMgcmFuZG9tbHkgZ2VuZXJhdGVkIFVJRCBiZWZvcmUgd2UgcGlubmVkIHVpZDogbG9raSkuIFdpdGhvdXQgdGhpcyxcbiAgICAgICMgR3JhZmFuYSBmYWlscyBwcm92aXNpb25pbmcgd2l0aCBcImRhdGEgc291cmNlIG5vdCBmb3VuZFwiIGJlY2F1c2VcbiAgICAgICMgdGhlIHVwc2VydCBjb2xsaWRlcyB3aXRoIHRoZSBleGlzdGluZyBlbnRyeS5cbiAgICAgIGRlbGV0ZURhdGFzb3VyY2VzOlxuICAgICAgLSBuYW1lOiBMb2tpXG4gICAgICAgIG9yZ0lkOiAxXG4gICAgICBkYXRhc291cmNlczpcbiAgICAgIC0gbmFtZTogVGhhbm9zXG4gICAgICAgIHR5cGU6IHByb21ldGhldXNcbiAgICAgICAgdWlkOiB0aGFub3NcbiAgICAgICAgYWNjZXNzOiBwcm94eVxuICAgICAgICAjIHRoYW5vcy1xdWVyeSBTZXJ2aWNlOiBodHRwIHBvcnQgOTA5MCAtPiBjb250YWluZXIgaHR0cCAxMDkwMlxuICAgICAgICB1cmw6IGh0dHA6Ly90aGFub3MtcXVlcnkuJHtjb25maWcubmFtZXNwYWNlfS5zdmMuY2x1c3Rlci5sb2NhbDo5MDkwXG4gICAgICAgIGlzRGVmYXVsdDogdHJ1ZVxuICAgICAgICBqc29uRGF0YTpcbiAgICAgICAgICB0aW1lSW50ZXJ2YWw6IDMwc1xuICAgICAgLSBuYW1lOiBQcm9tZXRoZXVzXG4gICAgICAgIHR5cGU6IHByb21ldGhldXNcbiAgICAgICAgdWlkOiBwcm9tZXRoZXVzXG4gICAgICAgIGFjY2VzczogcHJveHlcbiAgICAgICAgdXJsOiBodHRwOi8va3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMuJHtjb25maWcubmFtZXNwYWNlfS5zdmMuY2x1c3Rlci5sb2NhbDo5MDkwXG4gICAgICAgIGlzRGVmYXVsdDogZmFsc2VcbiAgICAgICAganNvbkRhdGE6XG4gICAgICAgICAgdGltZUludGVydmFsOiAzMHNcbiAgICAgIC0gbmFtZTogTG9raVxuICAgICAgICB0eXBlOiBsb2tpXG4gICAgICAgIHVpZDogbG9raVxuICAgICAgICBhY2Nlc3M6IHByb3h5XG4gICAgICAgIHVybDogaHR0cDovL2xva2ktZ2F0ZXdheS4ke2NvbmZpZy5uYW1lc3BhY2V9LnN2Yy5jbHVzdGVyLmxvY2FsXG4gICAgICAgIGpzb25EYXRhOlxuICAgICAgICAgIG1heExpbmVzOiAxMDAwXG5cbnByb21ldGhldXNPcGVyYXRvcjpcbiAgcmVzb3VyY2VzOlxuICAgIGxpbWl0czpcbiAgICAgIGNwdTogMVxuICAgICAgbWVtb3J5OiA1MTJNaVxuICAgIHJlcXVlc3RzOlxuICAgICAgY3B1OiA1MG1cbiAgICAgIG1lbW9yeTogMTI4TWlcbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxucHJvbWV0aGV1cy1ub2RlLWV4cG9ydGVyOlxuICAjIEJpbmQgOjkxMDAgdG8gdGhlIG5vZGUgSW50ZXJuYWxJUCBvbmx5LCBub3QgMC4wLjAuMC4gV2l0aCBrdWJlUkJBQ1Byb3h5XG4gICMgZGlzYWJsZWQgdGhlIHN1Yi1jaGFydCBzZXRzIEhPU1RfSVAgZnJvbSBmaWVsZFJlZiBzdGF0dXMuaG9zdElQLCB3aGljaCBpc1xuICAjIHRoZSBub2RlJ3MgSW50ZXJuYWxJUCAoRVg6IHZTd2l0Y2ggMTAuNi4wLnggdmlhIC0tbm9kZS1pcDsgY2xvdWQ6IGhjbG91ZFxuICAjIHByaXZhdGUgSVApLiBub2RlLWV4cG9ydGVyIGlzIGhvc3ROZXR3b3JrLCBzbyBQcm9tZXRoZXVzIGFscmVhZHkgc2NyYXBlc1xuICAjIHRoYXQgSW50ZXJuYWxJUCBlbmRwb2ludCAtPiBzY3JhcGluZyBpcyB1bmFmZmVjdGVkLCBvbmx5IHRoZSBwdWJsaWMtTklDXG4gICMgZXhwb3N1cmUgb2YgdGhlIHVuYXV0aGVudGljYXRlZCBtZXRyaWNzIG9uIHRoZSBFWCBwdWJsaWMgSVBzIGdvZXMgYXdheS5cbiAgc2VydmljZTpcbiAgICBsaXN0ZW5PbkFsbEludGVyZmFjZXM6IGZhbHNlXG4gIHJlc291cmNlczpcbiAgICBsaW1pdHM6XG4gICAgICBjcHU6IDUwbVxuICAgICAgbWVtb3J5OiA1ME1pXG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6IDVtXG4gICAgICBtZW1vcnk6IDE2TWlcbiAgcHJpb3JpdHlDbGFzc05hbWU6IGhpZ2gtcHJpb3JpdHlcblxua3ViZS1zdGF0ZS1tZXRyaWNzOlxuICByZXNvdXJjZXM6XG4gICAgbGltaXRzOlxuICAgICAgY3B1OiAxXG4gICAgICBtZW1vcnk6IDUxMk1pXG4gICAgcmVxdWVzdHM6XG4gICAgICBjcHU6IDVtXG4gICAgICBtZW1vcnk6IDEyOE1pXG4gIHByaW9yaXR5Q2xhc3NOYW1lOiBoaWdoLXByaW9yaXR5XG5gO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -66,7 +66,7 @@
66
66
  "publishConfig": {
67
67
  "access": "public"
68
68
  },
69
- "version": "0.1.0",
69
+ "version": "0.1.2",
70
70
  "jest": {
71
71
  "coverageProvider": "v8",
72
72
  "testMatch": [
@@ -1,357 +0,0 @@
1
- ##############################################################################
2
- # THIS FILE IS GENERATED BY MXMAKE
3
- #
4
- # DOMAINS:
5
- #: core.base
6
- #: core.mxenv
7
- #: docs.sphinx
8
- #
9
- # SETTINGS (ALL CHANGES MADE BELOW SETTINGS WILL BE LOST)
10
- ##############################################################################
11
-
12
- ## core.base
13
-
14
- # `deploy` target dependencies.
15
- # No default value.
16
- DEPLOY_TARGETS?=
17
-
18
- # target to be executed when calling `make run`
19
- # No default value.
20
- RUN_TARGET?=
21
-
22
- # Additional files and folders to remove when running clean target
23
- # No default value.
24
- CLEAN_FS?=
25
-
26
- # Optional makefile to include before default targets. This can
27
- # be used to provide custom targets or hook up to existing targets.
28
- # Default: include.mk
29
- INCLUDE_MAKEFILE?=include.mk
30
-
31
- # Optional additional directories to be added to PATH in format
32
- # `/path/to/dir/:/path/to/other/dir`. Gets inserted first, thus gets searched
33
- # first.
34
- # No default value.
35
- EXTRA_PATH?=
36
-
37
- # Path to Python project relative to Makefile (repository root).
38
- # Leave empty if Python project is in the same directory as Makefile.
39
- # For monorepo setups, set to subdirectory name (e.g., `backend`).
40
- # Future-proofed for multi-language monorepos (e.g., PROJECT_PATH_NODEJS).
41
- # No default value.
42
- PROJECT_PATH_PYTHON?=
43
-
44
- ## core.mxenv
45
-
46
- # Primary Python interpreter to use. It is used to create the
47
- # virtual environment if `VENV_ENABLED` and `VENV_CREATE` are set to `true`.
48
- # If global `uv` is used, this value is passed as `--python VALUE` to the venv creation.
49
- # uv then downloads the Python interpreter if it is not available.
50
- # for more on this feature read the [uv python documentation](https://docs.astral.sh/uv/concepts/python-versions/)
51
- # Default: python3
52
- PRIMARY_PYTHON?=3.13
53
-
54
- # Minimum required Python version.
55
- # Default: 3.10
56
- PYTHON_MIN_VERSION?=3.13
57
-
58
- # Install packages using the given package installer method.
59
- # Supported are `pip` and `uv`. When `uv` is selected, a global installation
60
- # is auto-detected and used if available. Otherwise, uv is installed in the
61
- # virtual environment or using `PRIMARY_PYTHON`, depending on the
62
- # `VENV_ENABLED` setting.
63
- # Default: pip
64
- PYTHON_PACKAGE_INSTALLER?=uv
65
-
66
- # Python version for UV to install/use when creating virtual
67
- # environments with global UV. Passed to `uv venv -p VALUE`. Supports version
68
- # specs like `3.11`, `3.14`, `cpython@3.14`. Defaults to PRIMARY_PYTHON value
69
- # for backward compatibility.
70
- # Default: $(PRIMARY_PYTHON)
71
- UV_PYTHON?=$(PRIMARY_PYTHON)
72
-
73
- # Flag whether to use virtual environment. If `false`, the
74
- # interpreter according to `PRIMARY_PYTHON` found in `PATH` is used.
75
- # Default: true
76
- VENV_ENABLED?=true
77
-
78
- # Flag whether to create a virtual environment. If set to `false`
79
- # and `VENV_ENABLED` is `true`, `VENV_FOLDER` is expected to point to an
80
- # existing virtual environment.
81
- # Default: true
82
- VENV_CREATE?=true
83
-
84
- # The folder of the virtual environment.
85
- # If `VENV_ENABLED` is `true` and `VENV_CREATE` is true it is used as the
86
- # target folder for the virtual environment. If `VENV_ENABLED` is `true` and
87
- # `VENV_CREATE` is false it is expected to point to an existing virtual
88
- # environment. If `VENV_ENABLED` is `false` it is ignored.
89
- # Default: .venv
90
- VENV_FOLDER?=.venv
91
-
92
- # mxdev to install in virtual environment.
93
- # Default: mxdev
94
- MXDEV?=mxdev
95
-
96
- # mxmake to install in virtual environment.
97
- # Default: mxmake
98
- MXMAKE?=mxmake
99
-
100
- ## docs.sphinx
101
-
102
- # Documentation source folder.
103
- # Default: docs/source
104
- DOCS_SOURCE_FOLDER?=sources
105
-
106
- # Documentation generation target folder.
107
- # Default: docs/html
108
- DOCS_TARGET_FOLDER?=html
109
-
110
- # Documentation linkcheck output folder.
111
- # Default: docs/linkcheck
112
- DOCS_LINKCHECK_FOLDER?=docs/linkcheck
113
-
114
- # Documentation Python requirements to be installed (via pip).
115
- # No default value.
116
- DOCS_REQUIREMENTS?=myst_parser sphinxcontrib.mermaid shibuya sphinx-design sphinx-copybutton
117
-
118
- ##############################################################################
119
- # END SETTINGS - DO NOT EDIT BELOW THIS LINE
120
- ##############################################################################
121
-
122
- INSTALL_TARGETS?=
123
- DIRTY_TARGETS?=
124
- CLEAN_TARGETS?=
125
- PURGE_TARGETS?=
126
-
127
- export PATH:=$(if $(EXTRA_PATH),$(EXTRA_PATH):,)$(PATH)
128
-
129
- # Helper variable: adds trailing slash to PROJECT_PATH_PYTHON only if non-empty
130
- PYTHON_PROJECT_PREFIX=$(if $(PROJECT_PATH_PYTHON),$(PROJECT_PATH_PYTHON)/,)
131
-
132
- # Defensive settings for make: https://tech.davis-hansson.com/p/make/
133
- SHELL:=bash
134
- .ONESHELL:
135
- # for Makefile debugging purposes add -x to the .SHELLFLAGS
136
- .SHELLFLAGS:=-eu -o pipefail -O inherit_errexit -c
137
- .SILENT:
138
- .DELETE_ON_ERROR:
139
- MAKEFLAGS+=--warn-undefined-variables
140
- MAKEFLAGS+=--no-builtin-rules
141
-
142
- # mxmake folder
143
- MXMAKE_FOLDER?=.mxmake
144
-
145
- # Sentinel files
146
- SENTINEL_FOLDER?=$(MXMAKE_FOLDER)/sentinels
147
- SENTINEL?=$(SENTINEL_FOLDER)/about.txt
148
- $(SENTINEL): $(firstword $(MAKEFILE_LIST))
149
- @mkdir -p $(SENTINEL_FOLDER)
150
- @echo "Sentinels for the Makefile process." > $(SENTINEL)
151
-
152
- ##############################################################################
153
- # mxenv
154
- ##############################################################################
155
-
156
- OS?=
157
-
158
- # Determine the executable path
159
- ifeq ("$(VENV_ENABLED)", "true")
160
- export VIRTUAL_ENV=$(abspath $(VENV_FOLDER))
161
- ifeq ("$(OS)", "Windows_NT")
162
- VENV_EXECUTABLE_FOLDER=$(VIRTUAL_ENV)/Scripts
163
- else
164
- VENV_EXECUTABLE_FOLDER=$(VIRTUAL_ENV)/bin
165
- endif
166
- export PATH:=$(VENV_EXECUTABLE_FOLDER):$(PATH)
167
- MXENV_PYTHON=python
168
- else
169
- MXENV_PYTHON=$(PRIMARY_PYTHON)
170
- endif
171
-
172
- # Determine the package installer with non-interactive flags
173
- ifeq ("$(PYTHON_PACKAGE_INSTALLER)","uv")
174
- PYTHON_PACKAGE_COMMAND=uv pip --no-progress
175
- else
176
- PYTHON_PACKAGE_COMMAND=$(MXENV_PYTHON) -m pip
177
- endif
178
-
179
- # Auto-detect global uv availability (simple existence check)
180
- ifeq ("$(PYTHON_PACKAGE_INSTALLER)","uv")
181
- UV_AVAILABLE:=$(shell command -v uv >/dev/null 2>&1 && echo "true" || echo "false")
182
- else
183
- UV_AVAILABLE:=false
184
- endif
185
-
186
- # Determine installation strategy
187
- # depending on the PYTHON_PACKAGE_INSTALLER and UV_AVAILABLE
188
- # - both vars can be false or
189
- # - one of them can be true,
190
- # - but never boths.
191
- USE_GLOBAL_UV:=$(shell [[ "$(PYTHON_PACKAGE_INSTALLER)" == "uv" && "$(UV_AVAILABLE)" == "true" ]] && echo "true" || echo "false")
192
- USE_LOCAL_UV:=$(shell [[ "$(PYTHON_PACKAGE_INSTALLER)" == "uv" && "$(UV_AVAILABLE)" == "false" ]] && echo "true" || echo "false")
193
-
194
- # Check if global UV is outdated (non-blocking warning)
195
- ifeq ("$(USE_GLOBAL_UV)","true")
196
- UV_OUTDATED:=$(shell uv self update --dry-run 2>&1 | grep -q "Would update" && echo "true" || echo "false")
197
- else
198
- UV_OUTDATED:=false
199
- endif
200
-
201
- MXENV_TARGET:=$(SENTINEL_FOLDER)/mxenv.sentinel
202
- $(MXENV_TARGET): $(SENTINEL)
203
- # Validation: Check Python version if not using global uv
204
- ifneq ("$(USE_GLOBAL_UV)","true")
205
- @$(PRIMARY_PYTHON) -c "import sys; vi = sys.version_info; sys.exit(1 if (int(vi[0]), int(vi[1])) >= tuple(map(int, '$(PYTHON_MIN_VERSION)'.split('.'))) else 0)" \
206
- && echo "Need Python >= $(PYTHON_MIN_VERSION)" && exit 1 || :
207
- else
208
- @echo "Using global uv for Python $(UV_PYTHON)"
209
- endif
210
- # Validation: Check VENV_FOLDER is set if venv enabled
211
- @[[ "$(VENV_ENABLED)" == "true" && "$(VENV_FOLDER)" == "" ]] \
212
- && echo "VENV_FOLDER must be configured if VENV_ENABLED is true" && exit 1 || :
213
- # Validation: Check uv not used with system Python
214
- @[[ "$(VENV_ENABLED)" == "false" && "$(PYTHON_PACKAGE_INSTALLER)" == "uv" ]] \
215
- && echo "Package installer uv does not work with a global Python interpreter." && exit 1 || :
216
- # Warning: Notify if global UV is outdated
217
- ifeq ("$(UV_OUTDATED)","true")
218
- @echo "WARNING: A newer version of uv is available. Run 'uv self update' to upgrade."
219
- endif
220
-
221
- # Create virtual environment
222
- ifeq ("$(VENV_ENABLED)", "true")
223
- ifeq ("$(VENV_CREATE)", "true")
224
- ifeq ("$(USE_GLOBAL_UV)","true")
225
- @echo "Setup Python Virtual Environment using global uv at '$(VENV_FOLDER)'"
226
- @uv venv --allow-existing --no-progress -p $(UV_PYTHON) --seed $(VENV_FOLDER)
227
- else
228
- @echo "Setup Python Virtual Environment using module 'venv' at '$(VENV_FOLDER)'"
229
- @$(PRIMARY_PYTHON) -m venv $(VENV_FOLDER)
230
- @$(MXENV_PYTHON) -m ensurepip -U
231
- endif
232
- endif
233
- else
234
- @echo "Using system Python interpreter"
235
- endif
236
-
237
- # Install uv locally if needed
238
- ifeq ("$(USE_LOCAL_UV)","true")
239
- @echo "Install uv in virtual environment"
240
- @$(MXENV_PYTHON) -m pip install uv
241
- endif
242
-
243
- # Install/upgrade core packages
244
- @$(PYTHON_PACKAGE_COMMAND) install -U pip setuptools wheel
245
- @echo "Install/Update MXStack Python packages"
246
- @$(PYTHON_PACKAGE_COMMAND) install -U $(MXDEV) $(MXMAKE)
247
- @touch $(MXENV_TARGET)
248
-
249
- .PHONY: mxenv
250
- mxenv: $(MXENV_TARGET)
251
-
252
- .PHONY: mxenv-dirty
253
- mxenv-dirty:
254
- @rm -f $(MXENV_TARGET)
255
-
256
- .PHONY: mxenv-clean
257
- mxenv-clean: mxenv-dirty
258
- ifeq ("$(VENV_ENABLED)", "true")
259
- ifeq ("$(VENV_CREATE)", "true")
260
- @rm -rf $(VENV_FOLDER)
261
- endif
262
- else
263
- @$(PYTHON_PACKAGE_COMMAND) uninstall -y $(MXDEV)
264
- @$(PYTHON_PACKAGE_COMMAND) uninstall -y $(MXMAKE)
265
- endif
266
-
267
- INSTALL_TARGETS+=mxenv
268
- DIRTY_TARGETS+=mxenv-dirty
269
- CLEAN_TARGETS+=mxenv-clean
270
-
271
- ##############################################################################
272
- # sphinx
273
- ##############################################################################
274
-
275
- # additional targets required for building docs.
276
- DOCS_TARGETS+=
277
-
278
- SPHINX_BIN=sphinx-build
279
- SPHINX_AUTOBUILD_BIN=sphinx-autobuild
280
-
281
- DOCS_TARGET:=$(SENTINEL_FOLDER)/sphinx.sentinel
282
- $(DOCS_TARGET): $(MXENV_TARGET)
283
- @echo "Install Sphinx"
284
- @$(PYTHON_PACKAGE_COMMAND) install -U sphinx sphinx-autobuild $(DOCS_REQUIREMENTS)
285
- @touch $(DOCS_TARGET)
286
-
287
- .PHONY: docs
288
- docs: $(DOCS_TARGET) $(DOCS_TARGETS)
289
- @echo "Build sphinx docs"
290
- @$(SPHINX_BIN) $(DOCS_SOURCE_FOLDER) $(DOCS_TARGET_FOLDER)
291
-
292
- .PHONY: docs-live
293
- docs-live: $(DOCS_TARGET) $(DOCS_TARGETS)
294
- @echo "Rebuild Sphinx documentation on changes, with live-reload in the browser"
295
- @$(SPHINX_AUTOBUILD_BIN) $(DOCS_SOURCE_FOLDER) $(DOCS_TARGET_FOLDER)
296
-
297
- .PHONY: docs-linkcheck
298
- docs-linkcheck: $(DOCS_TARGET) $(DOCS_TARGETS)
299
- @echo "Run Sphinx linkcheck"
300
- @$(SPHINX_BIN) -b linkcheck $(DOCS_SOURCE_FOLDER) $(DOCS_LINKCHECK_FOLDER)
301
-
302
- .PHONY: docs-dirty
303
- docs-dirty:
304
- @rm -f $(DOCS_TARGET)
305
-
306
- .PHONY: docs-clean
307
- docs-clean: docs-dirty
308
- @test -e $(MXENV_PYTHON) && $(MXENV_PYTHON) -m pip uninstall -y \
309
- sphinx sphinx-autobuild $(DOCS_REQUIREMENTS) || :
310
- @rm -rf $(DOCS_TARGET_FOLDER)
311
-
312
- INSTALL_TARGETS+=$(DOCS_TARGET)
313
- DIRTY_TARGETS+=docs-dirty
314
- CLEAN_TARGETS+=docs-clean
315
-
316
- ##############################################################################
317
- # Custom includes
318
- ##############################################################################
319
-
320
- -include $(INCLUDE_MAKEFILE)
321
-
322
- ##############################################################################
323
- # Default targets
324
- ##############################################################################
325
-
326
- INSTALL_TARGET:=$(SENTINEL_FOLDER)/install.sentinel
327
- $(INSTALL_TARGET): $(INSTALL_TARGETS)
328
- @touch $(INSTALL_TARGET)
329
-
330
- .PHONY: install
331
- install: $(INSTALL_TARGET)
332
- @touch $(INSTALL_TARGET)
333
-
334
- .PHONY: run
335
- run: $(RUN_TARGET)
336
-
337
- .PHONY: deploy
338
- deploy: $(DEPLOY_TARGETS)
339
-
340
- .PHONY: dirty
341
- dirty: $(DIRTY_TARGETS)
342
- @rm -f $(INSTALL_TARGET)
343
-
344
- .PHONY: clean
345
- clean: dirty $(CLEAN_TARGETS)
346
- @rm -rf $(CLEAN_TARGETS) $(MXMAKE_FOLDER) $(CLEAN_FS)
347
-
348
- .PHONY: purge
349
- purge: clean $(PURGE_TARGETS)
350
-
351
- .PHONY: runtime-clean
352
- runtime-clean:
353
- @echo "Remove runtime artifacts, like byte-code and caches."
354
- @find . -name '*.py[c|o]' -delete
355
- @find . -name '*~' -exec rm -f {} +
356
- @find . -name '__pycache__' -exec rm -fr {} +
357
-
@@ -1,72 +0,0 @@
1
- # cdk8s-monitoring documentation
2
-
3
- This directory contains the documentation for `@bluedynamics/cdk8s-monitoring`, built with [Sphinx](https://www.sphinx-doc.org/), [MyST Parser](https://myst-parser.readthedocs.io/), and organized with the [Diátaxis framework](https://diataxis.fr/).
4
-
5
- ## Published documentation
6
-
7
- <https://bluedynamics.github.io/cdk8s-monitoring/>
8
-
9
- ## Build locally
10
-
11
- ### Prerequisites
12
-
13
- - Python 3.13 (or 3.10+ with manual configuration)
14
- - The `make` command
15
- - `uv` (optional, but recommended for faster installs)
16
-
17
- ### Quick start
18
-
19
- ```shell
20
- cd documentation
21
- make docs
22
- ```
23
-
24
- Open `html/index.html` in your browser.
25
-
26
- The first build creates a virtual environment, installs Sphinx and the required extensions, and generates the HTML.
27
- Subsequent builds reuse the environment and are much faster.
28
-
29
- ### Live reload
30
-
31
- ```shell
32
- cd documentation
33
- make docs-live
34
- ```
35
-
36
- This starts a development server that rebuilds and refreshes the browser whenever you save a file.
37
-
38
- ### Clean build
39
-
40
- ```shell
41
- make clean
42
- make docs
43
- ```
44
-
45
- ## Structure
46
-
47
- The documentation follows the four Diátaxis quadrants.
48
-
49
- ```
50
- sources/
51
- ├── index.md # Landing page with grid cards
52
- ├── tutorials/ # Learning-oriented lessons
53
- ├── how-to/ # Goal-oriented recipes
54
- ├── reference/ # Information-oriented specifications
55
- │ └── api/ # Construct and interface overview
56
- ├── explanation/ # Understanding-oriented background
57
- └── _static/ # CSS, icons, fonts, scripts
58
- ```
59
-
60
- ## Style
61
-
62
- Documentation is authored in plone-doc-style: American English, one sentence per line, sentence-case headings, dash-separated filenames, and sparse admonitions.
63
-
64
- ## Theme and extensions
65
-
66
- - **Theme:** [Shibuya](https://shibuya.lepture.com/)
67
- - **Parser:** [MyST](https://myst-parser.readthedocs.io/)
68
- - **Extensions:** `myst_parser`, `sphinxcontrib.mermaid`, `sphinx_design`, `sphinx_copybutton`
69
-
70
- ## Deployment
71
-
72
- A push to `main` that touches `documentation/` triggers the `documentation.yml` GitHub Actions workflow, which builds the site and deploys it to GitHub Pages.
@@ -1,3 +0,0 @@
1
- [settings]
2
- threads = 5
3
- version-overrides =
@@ -1,4 +0,0 @@
1
- # Sphinx build info version 1
2
- # This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
3
- config: c6f4b154db9f6c9190f85eed1c9807ae
4
- tags: 645f666f9bcd5a90fca523b33c5a78b7