-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(deps): update helm release cost-analyzer to v2.6.2 #1078
Open
renovate
wants to merge
3
commits into
main
Choose a base branch
from
renovate/cost-analyzer-2.x
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Changes Default Valuesdiff -U 4 -r out-default-values/target/kubecost_cost-analyzer_default-values.out out-default-values/pr/kubecost_cost-analyzer_default-values.out
--- out-default-values/target/kubecost_cost-analyzer_default-values.out 2025-02-21 23:22:13.520917698 +0000
+++ out-default-values/pr/kubecost_cost-analyzer_default-values.out 2025-02-21 23:21:49.375698912 +0000
@@ -252,18 +252,19 @@
enabled: false # Create an OpenShift Route.
annotations: {} # Add annotations to the Route.
# host: kubecost.apps.okd4.example.com # Add a custom host for your Route.
- # OPTIONAL. The following configs only to be enabled when using a Prometheus instance already installed in the cluster.
- createMonitoringClusterRoleBinding: false # Create a ClusterRoleBinding to grant the Kubecost serviceaccount access to query Prometheus.
- createMonitoringResourceReaderRoleBinding: false # Create a Role and Role Binding to allow Prometheus to list and watch Kubecost resources.
- monitoringServiceAccountName: prometheus-k8s # Name of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
- monitoringServiceAccountNamespace: openshift-monitoring # Namespace of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+ # OPTIONAL. The following configs only to be enabled when using a Prometheus instance already installed in the cluster.
+ createMonitoringClusterRoleBinding: false # Create a ClusterRoleBinding to grant the Kubecost serviceaccount access to query Prometheus.
+ createMonitoringResourceReaderRoleBinding: false # Create a Role and Role Binding to allow Prometheus to list and watch Kubecost resources.
+ monitoringServiceAccountName: prometheus-k8s # Name of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+ monitoringServiceAccountNamespace: openshift-monitoring # Namespace of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
# Create Security Context Constraint resources for the DaemonSets requiring additional privileges.
scc:
nodeExporter: false # Creates an SCC for Prometheus Node Exporter. This requires Node Exporter be enabled.
networkCosts: false # Creates an SCC for Kubecost network-costs. This requires network-costs be enabled.
+ clusterController: false # Creates an SCC for Kubecost Cluster Controller. This requires clusterController be enabled.
# When OpenShift is enabled, the following securityContext will be applied to all resources unless they define their own.
securityContext:
runAsNonRoot: true
seccompProfile:
@@ -421,8 +422,47 @@
# claimName: "roles"
# claimValues:
# - "editor"
+## Kubecost Teams (enterprise key required)
+## Ref: https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/teams
+teams:
+ teamsConfigMapName: "" # Name of the ConfigMap containing the teams configuration, if manually created, which overrides any other configured teams
+ teamsConfig: [] # List of teams configurations, if teamsConfigMapName is not set, which will override UI-configured teams
+ # - id: ''
+ # name: helm-team
+ # roles:
+ # - id: ''
+ # name: helm-role
+ # description: helm configrured role
+ # pages:
+ # showOverview: true
+ # showAllocation: true
+ # showAsset: true
+ # showCloudCost: true
+ # showClusters: true
+ # showExternalCosts: true
+ # showNetwork: true
+ # showCollections: true
+ # showReports: true
+ # showInsights: true
+ # showActions: true
+ # showAlerts: true
+ # showBudgets: true
+ # showAnomalies: true
+ # showEfficiency: true
+ # showSettings: true
+ # permissions: admin
+ # routes: []
+ # allocationFilters:
+ # - key: cluster
+ # operator: ":"
+ # value: cluster-one
+ # assetFilters: []
+ # cloudCostFilters: []
+ # claims:
+ # NameID: [email protected]
+
## Adds the HTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables to all
## containers. Typically used in environments that have firewall rules which
## prevent kubecost from accessing cloud provider resources.
## Ref: https://www.oreilly.com/library/view/security-with-go/9781788627917/5ea6a02b-3d96-44b1-ad3c-6ab60fcbbe4f.xhtml
@@ -484,10 +524,8 @@
# hideOrphanedResources: false # OrphanedResources works on the primary-cluster's cloud-provider only.
# set to true to set all upstreams to use <service>.<namespace>.svc.cluster.local instead of just <service>.<namespace>
useDefaultFqdn: false
-# api:
-# fqdn: kubecost-api.kubecost.svc.cluster.local:9001
# model:
# fqdn: kubecost-model.kubecost.svc.cluster.local:9003
# forecasting:
# fqdn: kubecost-forcasting.kubecost.svc.cluster.local:5000
@@ -685,9 +723,8 @@
# # each cluster monitored.
# - name: ASSET_INCLUDE_LOCAL_DISK_COST
# value: "true"
- utcOffset: "+00:00"
extraPorts: []
## etlUtils is a utility typically used by Enterprise customers transitioning
## from v1 to v2 of Kubecost. It translates the data from the "/etl" dir of the
@@ -853,9 +890,9 @@
type: Recreate
rollingUpdate: null
image:
repository: quay.io/prometheus/prometheus
- tag: v2.55.1
+ tag: v3.1.0
pullPolicy: IfNotPresent
priorityClassName: ""
prefixURL: ""
baseURL: ""
@@ -1000,9 +1037,9 @@
rollingUpdate: null
name: alertmanager
image:
repository: quay.io/prometheus/alertmanager
- tag: v0.27.0
+ tag: v0.28.0
pullPolicy: IfNotPresent
priorityClassName: ""
extraArgs: {}
prefixURL: ""
@@ -1088,9 +1125,9 @@
enabled: false
name: configmap-reload
image:
repository: quay.io/prometheus-operator/prometheus-config-reloader
- tag: v0.78.2
+ tag: v0.79.2
pullPolicy: IfNotPresent
extraArgs: {}
extraVolumeDirs: []
extraConfigmapMounts: []
@@ -1101,9 +1138,9 @@
enabled: false
name: configmap-reload
image:
repository: quay.io/prometheus-operator/prometheus-config-reloader
- tag: v0.78.2
+ tag: v0.79.2
pullPolicy: IfNotPresent
extraArgs: {}
extraVolumeDirs: []
extraConfigmapMounts: []
@@ -1211,9 +1248,9 @@
# This configuration will work only on kubelet 1.7.3+
# As the scrape endpoints for cAdvisor have changed
# if you are using older version you need to change the replacement to
# replacement: /api/v1/nodes/$1:4194/proxy/metrics
- # more info here https://github.com/coreos/prometheus-operator/issues/633
+ # more info here https://github.com/prometheus-operator/prometheus-operator/issues/633
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
@@ -1508,9 +1545,9 @@
# fullImageName overrides the default image construction logic. The exact
# image provided (registry, image, tag) will be used for the forecasting
# container.
- fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.19
+ fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.22
imagePullPolicy: IfNotPresent
# Resource specification block for the forecasting container.
resources:
@@ -1822,18 +1859,22 @@
clusterController:
enabled: false
image:
repository: gcr.io/kubecost1/cluster-controller
- tag: v0.16.11
+ tag: v0.16.13
imagePullPolicy: IfNotPresent
priorityClassName: ""
tolerations: []
-
- ## Annotations to be added for cluster controller template
annotations: {}
+ labels: {}
+ securityContext: {}
resources: {}
affinity: {}
nodeSelector: {}
+ primaryKubecostURL: "" # URL for secondary clusters to connect to primary Kubecost (ex: https://kubecost.myorganization.com)
+ kubecostAPIKey: "" # API Key for secondary clusters to authenticate with primary
+ createClusterControllerSecret: true # disable if you want to use your own secret manager
+ secretName: controller-secrets
actionConfigs:
# this configures the Kubecost Cluster Turndown action
# for more details, see documentation at https://github.com/kubecost/cluster-turndown/tree/develop?tab=readme-ov-file#setting-a-turndown-schedule
clusterTurndown: []
@@ -2031,9 +2072,9 @@
timeoutSeconds: 30
failureThreshold: 10
image:
repository: grafana/grafana
- tag: 11.3.1
+ tag: 11.4.0
pullPolicy: IfNotPresent
# pullSecrets:
securityContext: {}
priorityClassName: ""
@@ -2077,9 +2118,9 @@
## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
sidecar:
image:
repository: ghcr.io/kiwigrid/k8s-sidecar
- tag: 1.28.1
+ tag: 1.29.1
pullPolicy: IfNotPresent
resources: {}
dashboards:
enabled: true |
Changes Rendered Chartdiff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-cloud-cost
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: cost-analyzer
app.kubernetes.io/instance: release-name
app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-aggregator
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app: aggregator
spec:
selector:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-cost-analyzer
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
roleRef:
@@ -26,9 +26,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
roleRef:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-cost-analyzer
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
rules:
@@ -90,9 +90,9 @@
namespace: default
name: release-name-cost-analyzer
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
rules:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2025-02-21 23:21:49.273697973 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
annotations:
@@ -30,9 +30,9 @@
app.kubernetes.io/name: cost-analyzer
app.kubernetes.io/instance: release-name
app: cost-analyzer
annotations:
- checksum/configs: 5a026e9b91e4d5ed20cdb242c294e9187b08a1aa77be5d299c219cbd2352b3e2
+ checksum/configs: e6d9233fce13f896ba190b3d096afba3f57911a216638e60789eda5383e657a2
spec:
securityContext:
fsGroup: 1001
fsGroupChangePolicy: OnRootMismatch
@@ -45,8 +45,10 @@
serviceAccountName: release-name-cost-analyzer
volumes:
- name: tmp
emptyDir: {}
+ - name: log
+ emptyDir: {}
- name: nginx-conf
configMap:
name: nginx-conf
items:
@@ -56,9 +58,9 @@
persistentVolumeClaim:
claimName: release-name-cost-analyzer
initContainers:
containers:
- - image: "gcr.io/kubecost1/cost-model:prod-2.5.3"
+ - image: "gcr.io/kubecost1/cost-model:prod-2.6.2"
name: cost-model
securityContext:
allowPrivilegeEscalation: false
capabilities:
@@ -96,15 +98,15 @@
- name: persistent-configs
mountPath: /var/configs
env:
- name: CONTAINER_IMAGE_TAG
- value: prod-2.5.3
+ value: prod-2.6.2
- name: GRAFANA_ENABLED
value: "false"
- name: LOG_LEVEL
value: info
- name: HELM_VALUES
- value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOSIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJsb2dMZXZlbCI6ImluZm8iLCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIn0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJrdWJyaVggRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guIFRoZSBsYWJlbCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIEs4cyBzZXJ2aWNlIGVuZHBvaW50cyBhbmQgbm90IGp1c3QgcG9kcy5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImFubm90YXRpb25zIjp7fSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6Imt1YnJpeCJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoicXVheS5pby9wcm9tZXRoZXVzL3Byb21ldGhldXMiLCJ0YWciOiJ2Mi41NS4xIn0sImxpdmVuZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJsaXZlbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJsaXZlbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwibGl2ZW5lc3NQcm9iZVRpbWVvdXQiOjMsIm5hbWUiOiJzZXJ2ZXIiLCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFjY2Vzc01vZGVzIjpbIlJlYWRXcml0ZU9uY2UiXSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJleGlzdGluZ0NsYWltIjoiIiwibW91bnRQYXRoIjoiL2RhdGEiLCJzaXplIjoiMzJHaSIsInN1YlBhdGgiOiIifSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwb2RMYWJlbHMiOnt9LCJwcmVmaXhVUkwiOiIiLCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInJlYWRpbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywicmVhZGluZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsInJlYWRpbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwicmVhZGluZXNzUHJvYmVUaW1lb3V0IjozLCJyZW1vdGVSZWFkIjp7fSwicmVtb3RlV3JpdGUiOnt9LCJyZXBsaWNhQ291bnQiOjEsInJlc291cmNlcyI6e30sInJldGVudGlvbiI6Ijk3aCIsInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJjbHVzdGVySVAiOiIiLCJleHRlcm5hbElQcyI6W10sImxhYmVscyI6e30sImxvYWRCYWxhbmNlcklQIjoiIiwibG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzIjpbXSwic2VydmljZVBvcnQiOjgwLCJzZXNzaW9uQWZmaW5pdHkiOiJOb25lIiwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjMwMCwidG9sZXJhdGlvbnMiOltdfSwic2VydmVyRmlsZXMiOnsiYWxlcnRpbmdfcnVsZXMueW1sIjp7fSwicHJvbWV0aGV1cy55bWwiOnsicnVsZV9maWxlcyI6WyIvZXRjL2NvbmZpZy9yZWNvcmRpbmdfcnVsZXMueW1sIiwiL2V0Yy9jb25maWcvYWxlcnRpbmdfcnVsZXMueW1sIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
+ value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4yMiIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS40LjAifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI5LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJsb2dMZXZlbCI6ImluZm8iLCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fX0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJrdWJyaVggRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guIFRoZSBsYWJlbCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIEs4cyBzZXJ2aWNlIGVuZHBvaW50cyBhbmQgbm90IGp1c3QgcG9kcy5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImFubm90YXRpb25zIjp7fSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6Imt1YnJpeCJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoicXVheS5pby9wcm9tZXRoZXVzL3Byb21ldGhldXMiLCJ0YWciOiJ2My4xLjAifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiXSwic2NyYXBlX2NvbmZpZ3MiOlt7ImpvYl9uYW1lIjoicHJvbWV0aGV1cyIsInN0YXRpY19jb25maWdzIjpbeyJ0YXJnZXRzIjpbImxvY2FsaG9zdDo5MDkwIl19XX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2Rlcy1jYWR2aXNvciIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfc3BlY19jcHVfc2hhcmVzfGNvbnRhaW5lcl9zcGVjX21lbW9yeV9saW1pdF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNhZHZpc29yX3ZlcnNpb25faW5mb3xrdWJlY29zdF9wdl9pbmZvKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJjb250YWluZXIiXSwidGFyZ2V0X2xhYmVsIjoiY29udGFpbmVyX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbInBvZCJdLCJ0YXJnZXRfbGFiZWwiOiJwb2RfbmFtZSJ9XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzL2NhZHZpc29yIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGt1YmVsZXRfdm9sdW1lX3N0YXRzX3VzZWRfYnl0ZXMpIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcyIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtc2VydmljZS1lbmRwb2ludHMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJlbmRwb2ludHMifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X2FsbG9jYXRpb258Y29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9ncHVfYWxsb2NhdGlvbnxjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXN8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8RENHTV9GSV9ERVZfR1BVX1VUSUx8ZGVwbG95bWVudF9tYXRjaF9sYWJlbHN8a3ViZV9kYWVtb25zZXRfc3RhdHVzX2Rlc2lyZWRfbnVtYmVyX3NjaGVkdWxlZHxrdWJlX2RhZW1vbnNldF9zdGF0dXNfbnVtYmVyX3JlYWR5fGt1YmVfZGVwbG95bWVudF9zcGVjX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc19hdmFpbGFibGV8a3ViZV9qb2Jfc3RhdHVzX2ZhaWxlZHxrdWJlX25hbWVzcGFjZV9hbm5vdGF0aW9uc3xrdWJlX25hbWVzcGFjZV9sYWJlbHN8a3ViZV9ub2RlX2luZm98a3ViZV9ub2RlX2xhYmVsc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHl8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jb25kaXRpb258a3ViZV9wZXJzaXN0ZW50dm9sdW1lX2NhcGFjaXR5X2J5dGVzfGt1YmVfcGVyc2lzdGVudHZvbHVtZV9zdGF0dXNfcGhhc2V8a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1faW5mb3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9yZXNvdXJjZV9yZXF1ZXN0c19zdG9yYWdlX2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9pbmZvfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Jlc3RhcnRzX3RvdGFsfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcnVubmluZ3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Rlcm1pbmF0ZWRfcmVhc29ufGt1YmVfcG9kX2xhYmVsc3xrdWJlX3BvZF9vd25lcnxrdWJlX3BvZF9zdGF0dXNfcGhhc2V8a3ViZV9yZXBsaWNhc2V0X293bmVyfGt1YmVfc3RhdGVmdWxzZXRfcmVwbGljYXN8a3ViZV9zdGF0ZWZ1bHNldF9zdGF0dXNfcmVwbGljYXN8a3ViZWNvc3RfY2x1c3Rlcl9pbmZvfGt1YmVjb3N0X2NsdXN0ZXJfbWFuYWdlbWVudF9jb3N0fGt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGt1YmVjb3N0X2xvYWRfYmFsYW5jZXJfY29zdHxrdWJlY29zdF9uZXR3b3JrX2ludGVybmV0X2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfcmVnaW9uX2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfem9uZV9lZ3Jlc3NfY29zdHxrdWJlY29zdF9ub2RlX2lzX3Nwb3R8a3ViZWNvc3RfcG9kX25ldHdvcmtfZWdyZXNzX2J5dGVzX3RvdGFsfG5vZGVfY3B1X2hvdXJseV9jb3N0fG5vZGVfY3B1X3NlY29uZHNfdG90YWx8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkX3RvdGFsfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkX3RvdGFsfG5vZGVfZmlsZXN5c3RlbV9kZXZpY2VfZXJyb3J8bm9kZV9ncHVfY291bnR8bm9kZV9ncHVfaG91cmx5X2Nvc3R8bm9kZV9tZW1vcnlfQnVmZmVyc19ieXRlc3xub2RlX21lbW9yeV9DYWNoZWRfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtQXZhaWxhYmxlX2J5dGVzfG5vZGVfbWVtb3J5X01lbUZyZWVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtVG90YWxfYnl0ZXN8bm9kZV9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfG5vZGVfcmFtX2hvdXJseV9jb3N0fG5vZGVfdG90YWxfaG91cmx5X2Nvc3R8cG9kX3B2Y19hbGxvY2F0aW9ufHB2X2hvdXJseV9jb3N0fHNlcnZpY2Vfc2VsZWN0b3JfbGFiZWxzfHN0YXRlZnVsU2V0X21hdGNoX2xhYmVsc3xrdWJlY29zdF9wdl9pbmZvfHVwKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6dHJ1ZSwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY3JhcGUiXX0seyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoLipub2RlLWV4cG9ydGVyfGt1YmVjb3N0LW5ldHdvcmstY29zdHMpIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19lbmRwb2ludHNfbmFtZSJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihodHRwcz8pIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY2hlbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19zY2hlbWVfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcGF0aCJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoW146XSspKD86OlxcZCspPzsoXFxkKykiLCJyZXBsYWNlbWVudCI6IiQxOiQyIiwic291cmNlX2xhYmVscyI6WyJfX2FkZHJlc3NfXyIsIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BvcnQiXSwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2xhYmVsXyguKykifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25hbWVzcGFjZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWVzcGFjZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfcG9kX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25vZGUifV19XX0sInJlY29yZGluZ19ydWxlcy55bWwiOnt9LCJydWxlcyI6eyJncm91cHMiOlt7Im5hbWUiOiJDUFUiLCJydWxlcyI6W3siZXhwciI6InN1bShyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkpIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2U6cmF0ZTVtIn0seyJleHByIjoicmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2Vfbm9zdW06cmF0ZTVtIn0seyJleHByIjoiYXZnKGlyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiUE9EXCIsIGNvbnRhaW5lciE9XCJcIn1bNW1dKSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9jcHVfdXNhZ2VfaXJhdGUifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9XX0seyJuYW1lIjoiU2F2aW5ncyIsInJ1bGVzIjpbeyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifV19XX19LCJzZXJ2aWNlQWNjb3VudHMiOnsiYWxlcnRtYW5hZ2VyIjp7ImNyZWF0ZSI6dHJ1ZX0sIm5vZGVFeHBvcnRlciI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9fX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidGVhbXMiOnsidGVhbXNDb25maWciOltdLCJ0ZWFtc0NvbmZpZ01hcE5hbWUiOiIifSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
- name: READ_ONLY
value: "false"
- name: PROMETHEUS_SERVER_ENDPOINT
valueFrom:
@@ -142,10 +144,8 @@
- name: PV_ENABLED
value: "true"
- name: MAX_QUERY_CONCURRENCY
value: "5"
- - name: UTC_OFFSET
- value: "+00:00"
- name: CLUSTER_ID
value: kubrix
- name: COST_EVENTS_AUDIT_ENABLED
value: "false"
@@ -166,9 +166,9 @@
- name: WATERFOWL_ENABLED
value: "true"
- name: DIAGNOSTICS_RUN_IN_COST_MODEL
value: "false"
- - image: gcr.io/kubecost1/frontend:prod-2.5.3
+ - image: gcr.io/kubecost1/frontend:prod-2.6.2
env:
- name: GET_HOSTS_FROM
value: dns
name: cost-analyzer-frontend
@@ -185,8 +185,10 @@
- name: tmp
mountPath: /var/lib/nginx/tmp
- name: tmp
mountPath: /var/run
+ - name: log
+ mountPath: /var/log/nginx
- name: nginx-conf
mountPath: /etc/nginx/conf.d/
resources:
requests:
@@ -216,9 +218,9 @@
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
- image: gcr.io/kubecost1/cost-model:prod-2.5.3
+ image: gcr.io/kubecost1/cost-model:prod-2.6.2
readinessProbe:
httpGet:
path: /healthz
port: 9004
@@ -270,9 +272,9 @@
- name: GRAFANA_ENABLED
value: "false"
- name: cloud-cost
- image: gcr.io/kubecost1/cost-model:prod-2.5.3
+ image: gcr.io/kubecost1/cost-model:prod-2.6.2
readinessProbe:
httpGet:
path: /healthz
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,9 +6,9 @@
name: nginx-conf
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
@@ -48,12 +48,8 @@
text/xml
text/x-component
text/x-cross-domain-policy;
- upstream api {
- server release-name-cost-analyzer.default:9001;
- }
-
upstream model {
server release-name-cost-analyzer.default:9003;
}
upstream forecasting {
@@ -81,19 +77,12 @@
add_header Cache-Control "max-age=300";
location / {
try_files $uri $uri/ /index.html;
}
- add_header ETag "2.5.3";
+ add_header ETag "2.6.2";
listen 9090;
listen [::]:9090;
- location /api/ {
- proxy_pass http://api/;
- proxy_redirect off;
- proxy_http_version 1.1;
- proxy_set_header Connection "";
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
+
location /model/ {
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
@@ -688,8 +677,56 @@
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
+ location = /model/rbac/teams {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/teams;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/team {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/team;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/roles {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/roles;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/role {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/role;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/currentTeams {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/currentTeams;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/currentPermissions {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/currentPermissions;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
location = /model/debug/orchestrator {
proxy_read_timeout 300;
proxy_pass http://aggregator/debug/orchestrator;
proxy_redirect off;
@@ -1129,9 +1166,9 @@
"pluginsEnabled": "false",
"carbonEstimatesEnabled": "false",
"clusterControllerEnabled": "false",
"forecastingEnabled": "true",
- "chartVersion": "2.5.3",
+ "chartVersion": "2.6.2",
"hourlyDataRetention": "49",
"dailyDataRetention": "91",
"hideDiagnostics": "false",
"hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2025-02-21 23:22:13.420916832 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2025-02-21 23:21:49.273697973 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,9 +6,9 @@
name: pricing-configs
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,8 +6,8 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,8 +6,8 @@
name: smtp-configs
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,9 +6,9 @@
name: external-grafana-config-map
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2025-02-21 23:22:13.420916832 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2025-02-21 23:21:49.273697973 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-forecasting
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: forecasting
app.kubernetes.io/instance: release-name
app: forecasting
@@ -39,9 +39,9 @@
type: RuntimeDefault
restartPolicy: Always
containers:
- name: forecasting
- image: gcr.io/kubecost1/kubecost-modeling:v0.1.19
+ image: gcr.io/kubecost1/kubecost-modeling:v0.1.22
volumeMounts:
- name: tmp
mountPath: /tmp
securityContext:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-forecasting
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: forecasting
app.kubernetes.io/instance: release-name
app: forecasting
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml 2025-02-21 23:21:49.270697945 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-attached-disk-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -48,9 +48,9 @@
"panels": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -129,9 +129,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "sum(container_fs_limit_bytes{instance=~'$disk', device!=\"tmpfs\", id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance)",
"format": "time_series",
@@ -147,9 +147,9 @@
},
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -230,9 +230,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "sum(container_fs_usage_bytes{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance) / sum(container_fs_limit_bytes{instance=~'$disk',device!=\"tmpfs\", id=\"/\", cluster_id=~'$cluster'}) by (cluster_id,instance)",
"format": "time_series",
@@ -248,9 +248,9 @@
},
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -331,9 +331,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "1 - sum(container_fs_inodes_free{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance) / sum(container_fs_inodes_total{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance)",
"format": "time_series",
@@ -348,9 +348,9 @@
},
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -429,9 +429,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "sum(container_fs_usage_bytes{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance)",
"format": "time_series",
@@ -458,9 +458,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
@@ -480,9 +480,9 @@
"value": "$__all"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values(cluster_id)",
"hide": 0,
"includeAll": true,
@@ -506,9 +506,9 @@
"value": "ip-192-168-147-146.us-east-2.compute.internal"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values(container_fs_limit_bytes{cluster_id=~\"$cluster\"}, instance)",
"hide": 0,
"includeAll": true,
@@ -560,8 +560,8 @@
]
},
"timezone": "",
"title": "Attached disk metrics",
- "uid": "nBH7qBgMk",
+ "uid": "attached-disk-metrics",
"version": 7,
"weekStart": ""
}
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-cluster-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-cluster-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -130,9 +130,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n (\n (\n sum(kube_node_status_capacity_cpu_cores) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) * $costpcpu\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"cpu\", unit=\"core\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) * ($costcpu - ($costcpu / 100 * $costDiscount))\n )\n) ",
"format": "time_series",
@@ -214,9 +214,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n (\n (\n sum(kube_node_status_capacity_memory_bytes) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) /1024/1024/1024 * $costpram\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"memory\", unit=\"byte\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) /1024/1024/1024 * ($costram - ($costram / 100 * $costDiscount))\n)\n) ",
"format": "time_series",
@@ -298,9 +298,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum (\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageSSD\n\n+\n\nsum (\n sum(kube_persistentvolumeclaim_info{storageclass!~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageStandard\n\n+ \n\nsum(container_fs_limit_bytes{id=\"/\"}) / 1024 / 1024 / 1024 * 1.03 * $costStorageStandard",
"format": "time_series",
@@ -383,9 +383,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "SUM(rate(node_network_transmit_bytes_total{device=\"eth0\"}[60m]) / 1024 / 1024 / 1024 ) * (60 * 60 * 24 * 30) * $costEgress",
"format": "time_series",
@@ -960,9 +960,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "# CPU\nsum(\n (\n (\n sum(kube_node_status_capacity_cpu_cores) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) * $costpcpu\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"cpu\", unit=\"core\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) * ($costcpu - ($costcpu / 100 * $costDiscount))\n )\n) \n\n+ \n\n# Storage\nsum (\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageSSD\n\n+\n\nsum (\n sum(kube_persistentvolumeclaim_info{storageclass!~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageStandard\n\n+ \n\nsum(container_fs_limit_bytes{id=\"/\"}) / 1024 / 1024 / 1024 * 1.03 * $costStorageStandard \n\n+\n\n# END STORAGE\n# RAM \nsum(\n (\n (\n sum(kube_node_status_capacity_memory_bytes) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) /1024/1024/1024 * $costpram\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"memory\", unit=\"byte\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) /1024/1024/1024 * ($costram - ($costram / 100 * $costDiscount))\n)\n)\n\n+\n\n#Network \nSUM(rate(node_network_transmit_bytes_total{device=\"eth0\"}[60m]) / 1024 / 1024 / 1024 ) * (60 * 60 * 24 * 30) * $costEgress",
"format": "time_series",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-deployment-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2025-02-21 23:22:13.417916806 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-kubernetes-resource-efficiency
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -21,10 +21,10 @@
"list": [
{
"builtIn": 1,
"datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
+ "type": "datasource",
+ "uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-label-cost
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -110,9 +110,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n avg(container_cpu_allocation) by (pod,node)\n\n * on (node) group_left()\n avg(avg_over_time(node_cpu_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730",
"format": "time_series",
@@ -194,9 +194,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n avg(container_memory_allocation_bytes) by (pod,node) / 1024 / 1024 / 1024\n\n * on (node) group_left()\n avg(avg_over_time(node_ram_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730",
"format": "time_series",
@@ -278,9 +278,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n sum(kube_persistentvolumeclaim_info{storageclass!=\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .04 \n\n+\n\nsum(\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .17 \n",
"format": "time_series",
@@ -362,9 +362,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CPU ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nsum(\n avg(container_cpu_allocation) by (pod,node)\n\n * on (node) group_left()\n avg(avg_over_time(node_cpu_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730\n\n#END CPU\n+\n\n# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Memory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nsum(\n avg(container_memory_allocation_bytes) by (pod,node) / 1024 / 1024 / 1024\n\n * on (node) group_left()\n avg(avg_over_time(node_ram_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730\n\n# END MEMORY\n\n+\n\n# ~~~~~~~~~~~~~~~~~~~~~~~~~~~ STORAGE ~~~~~~~~~~~~~~~~~~~~~~~~~\n\nsum(\n sum(kube_persistentvolumeclaim_info{storageclass!=\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .04 \n\n+\n\nsum(\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .17 \n\n\n# END STORAGE\n",
"format": "time_series",
@@ -1157,8 +1157,8 @@
]
},
"timezone": "",
"title": "Label costs & utilization",
- "uid": "lWMhIA-ik",
+ "uid": "at-label-costs-and-utilization",
"version": 1,
"weekStart": ""
}
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-namespace-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-network-cloud-services
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -21,10 +21,10 @@
"list": [
{
"builtIn": 1,
"datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
+ "type": "datasource",
+ "uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
@@ -292,9 +292,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
@@ -368,9 +368,9 @@
"value": "$__all"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values(kube_pod_container_status_running{namespace=\"$namespace\"},container)",
"hide": 0,
"includeAll": true,
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-network-costs-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -21,10 +21,10 @@
"list": [
{
"builtIn": 1,
"datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
+ "type": "datasource",
+ "uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
@@ -515,9 +515,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-node-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-pod-utilization-multi-cluster
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-pod-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml 2025-02-21 23:22:13.418916814 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml 2025-02-21 23:21:49.271697954 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-prom-benchmark
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-workload-aggregator
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -882,9 +882,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "kubecost_read_db_size",
"instant": false,
@@ -922,9 +922,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml 2025-02-21 23:22:13.419916823 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml 2025-02-21 23:21:49.272697964 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-workload-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -800,9 +800,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
@@ -876,9 +876,9 @@
"value": "$__all"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values({namespace=~\"$namespace\", pod=~\"$pod\"},container)",
"hide": 0,
"includeAll": true,
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml 2025-02-21 23:22:13.420916832 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml 2025-02-21 23:21:49.273697973 +0000
@@ -22,9 +22,9 @@
type: Recreate
template:
metadata:
annotations:
- checksum/configs: 5a026e9b91e4d5ed20cdb242c294e9187b08a1aa77be5d299c219cbd2352b3e2
+ checksum/configs: e6d9233fce13f896ba190b3d096afba3f57911a216638e60789eda5383e657a2
labels:
component: "server"
app: prometheus
release: release-name
@@ -33,9 +33,9 @@
serviceAccountName: release-name-prometheus-server
containers:
- name: prometheus-server
- image: "quay.io/prometheus/prometheus:v2.55.1"
+ image: "quay.io/prometheus/prometheus:v3.1.0"
imagePullPolicy: "IfNotPresent"
args:
- --storage.tsdb.retention.time=97h
- --config.file=/etc/config/prometheus.yml
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-cloud-cost
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: cost-analyzer
app.kubernetes.io/instance: release-name
app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-aggregator
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app: aggregator
spec:
selector:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-cost-analyzer
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
roleRef:
@@ -26,9 +26,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
roleRef:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-cost-analyzer
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
rules:
@@ -90,9 +90,9 @@
namespace: default
name: release-name-cost-analyzer
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
rules:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml 2025-02-21 23:21:49.132696673 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data: |
Changes Rendered Chartdiff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml 2025-02-21 23:21:49.136696710 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
annotations:
@@ -30,9 +30,9 @@
app.kubernetes.io/name: cost-analyzer
app.kubernetes.io/instance: release-name
app: cost-analyzer
annotations:
- checksum/configs: 5a026e9b91e4d5ed20cdb242c294e9187b08a1aa77be5d299c219cbd2352b3e2
+ checksum/configs: e6d9233fce13f896ba190b3d096afba3f57911a216638e60789eda5383e657a2
spec:
securityContext:
fsGroup: 1001
fsGroupChangePolicy: OnRootMismatch
@@ -45,8 +45,10 @@
serviceAccountName: release-name-cost-analyzer
volumes:
- name: tmp
emptyDir: {}
+ - name: log
+ emptyDir: {}
- name: nginx-conf
configMap:
name: nginx-conf
items:
@@ -56,9 +58,9 @@
persistentVolumeClaim:
claimName: release-name-cost-analyzer
initContainers:
containers:
- - image: "gcr.io/kubecost1/cost-model:prod-2.5.3"
+ - image: "gcr.io/kubecost1/cost-model:prod-2.6.2"
name: cost-model
securityContext:
allowPrivilegeEscalation: false
capabilities:
@@ -96,15 +98,15 @@
- name: persistent-configs
mountPath: /var/configs
env:
- name: CONTAINER_IMAGE_TAG
- value: prod-2.5.3
+ value: prod-2.6.2
- name: GRAFANA_ENABLED
value: "false"
- name: LOG_LEVEL
value: info
- name: HELM_VALUES
- value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOSIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibG9nTGV2ZWwiOiJpbmZvIiwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCJ9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoia3VicmlYIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLiBUaGUgbGFiZWwgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBLOHMgc2VydmljZSBlbmRwb2ludHMgYW5kIG5vdCBqdXN0IHBvZHMuXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJhbm5vdGF0aW9ucyI6e30sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJrdWJyaXgifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+ value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4yMiIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS40LjAifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI5LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibG9nTGV2ZWwiOiJpbmZvIiwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX19LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoia3VicmlYIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLiBUaGUgbGFiZWwgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBLOHMgc2VydmljZSBlbmRwb2ludHMgYW5kIG5vdCBqdXN0IHBvZHMuXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJhbm5vdGF0aW9ucyI6e30sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJrdWJyaXgifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjMuMS4wIn0sImxpdmVuZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJsaXZlbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJsaXZlbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwibGl2ZW5lc3NQcm9iZVRpbWVvdXQiOjMsIm5hbWUiOiJzZXJ2ZXIiLCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFjY2Vzc01vZGVzIjpbIlJlYWRXcml0ZU9uY2UiXSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJleGlzdGluZ0NsYWltIjoiIiwibW91bnRQYXRoIjoiL2RhdGEiLCJzaXplIjoiMzJHaSIsInN1YlBhdGgiOiIifSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwb2RMYWJlbHMiOnt9LCJwcmVmaXhVUkwiOiIiLCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInJlYWRpbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywicmVhZGluZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsInJlYWRpbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwicmVhZGluZXNzUHJvYmVUaW1lb3V0IjozLCJyZW1vdGVSZWFkIjp7fSwicmVtb3RlV3JpdGUiOnt9LCJyZXBsaWNhQ291bnQiOjEsInJlc291cmNlcyI6e30sInJldGVudGlvbiI6Ijk3aCIsInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJjbHVzdGVySVAiOiIiLCJleHRlcm5hbElQcyI6W10sImxhYmVscyI6e30sImxvYWRCYWxhbmNlcklQIjoiIiwibG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzIjpbXSwic2VydmljZVBvcnQiOjgwLCJzZXNzaW9uQWZmaW5pdHkiOiJOb25lIiwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjMwMCwidG9sZXJhdGlvbnMiOltdfSwic2VydmVyRmlsZXMiOnsiYWxlcnRpbmdfcnVsZXMueW1sIjp7fSwicHJvbWV0aGV1cy55bWwiOnsicnVsZV9maWxlcyI6WyIvZXRjL2NvbmZpZy9yZWNvcmRpbmdfcnVsZXMueW1sIiwiL2V0Yy9jb25maWcvYWxlcnRpbmdfcnVsZXMueW1sIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRlYW1zIjp7InRlYW1zQ29uZmlnIjpbXSwidGVhbXNDb25maWdNYXBOYW1lIjoiIn0sInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
- name: READ_ONLY
value: "false"
- name: PROMETHEUS_SERVER_ENDPOINT
valueFrom:
@@ -142,10 +144,8 @@
- name: PV_ENABLED
value: "true"
- name: MAX_QUERY_CONCURRENCY
value: "5"
- - name: UTC_OFFSET
- value: "+00:00"
- name: CLUSTER_ID
value: kubrix
- name: COST_EVENTS_AUDIT_ENABLED
value: "false"
@@ -166,9 +166,9 @@
- name: WATERFOWL_ENABLED
value: "true"
- name: DIAGNOSTICS_RUN_IN_COST_MODEL
value: "false"
- - image: gcr.io/kubecost1/frontend:prod-2.5.3
+ - image: gcr.io/kubecost1/frontend:prod-2.6.2
env:
- name: GET_HOSTS_FROM
value: dns
name: cost-analyzer-frontend
@@ -185,8 +185,10 @@
- name: tmp
mountPath: /var/lib/nginx/tmp
- name: tmp
mountPath: /var/run
+ - name: log
+ mountPath: /var/log/nginx
- name: nginx-conf
mountPath: /etc/nginx/conf.d/
resources:
requests:
@@ -216,9 +218,9 @@
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
- image: gcr.io/kubecost1/cost-model:prod-2.5.3
+ image: gcr.io/kubecost1/cost-model:prod-2.6.2
readinessProbe:
httpGet:
path: /healthz
port: 9004
@@ -270,9 +272,9 @@
- name: GRAFANA_ENABLED
value: "false"
- name: cloud-cost
- image: gcr.io/kubecost1/cost-model:prod-2.5.3
+ image: gcr.io/kubecost1/cost-model:prod-2.6.2
readinessProbe:
httpGet:
path: /healthz
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml 2025-02-21 23:21:49.132696673 +0000
@@ -6,9 +6,9 @@
name: nginx-conf
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
@@ -48,12 +48,8 @@
text/xml
text/x-component
text/x-cross-domain-policy;
- upstream api {
- server release-name-cost-analyzer.default:9001;
- }
-
upstream model {
server release-name-cost-analyzer.default:9003;
}
upstream forecasting {
@@ -81,19 +77,12 @@
add_header Cache-Control "max-age=300";
location / {
try_files $uri $uri/ /index.html;
}
- add_header ETag "2.5.3";
+ add_header ETag "2.6.2";
listen 9090;
listen [::]:9090;
- location /api/ {
- proxy_pass http://api/;
- proxy_redirect off;
- proxy_http_version 1.1;
- proxy_set_header Connection "";
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
+
location /model/ {
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
@@ -688,8 +677,56 @@
proxy_set_header Connection "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
+ location = /model/rbac/teams {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/teams;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/team {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/team;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/roles {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/roles;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/role {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/role;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/currentTeams {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/currentTeams;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
+ location = /model/rbac/currentPermissions {
+ proxy_read_timeout 300;
+ proxy_pass http://aggregator/rbac/currentPermissions;
+ proxy_redirect off;
+ proxy_set_header Connection "";
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ }
location = /model/debug/orchestrator {
proxy_read_timeout 300;
proxy_pass http://aggregator/debug/orchestrator;
proxy_redirect off;
@@ -1129,9 +1166,9 @@
"pluginsEnabled": "false",
"carbonEstimatesEnabled": "false",
"clusterControllerEnabled": "false",
"forecastingEnabled": "true",
- "chartVersion": "2.5.3",
+ "chartVersion": "2.6.2",
"hourlyDataRetention": "49",
"dailyDataRetention": "91",
"hideDiagnostics": "false",
"hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2025-02-21 23:22:13.283915645 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml 2025-02-21 23:21:49.136696710 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
annotations:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml 2025-02-21 23:21:49.133696683 +0000
@@ -6,9 +6,9 @@
name: pricing-configs
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml 2025-02-21 23:21:49.132696673 +0000
@@ -6,8 +6,8 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml 2025-02-21 23:21:49.136696710 +0000
@@ -6,9 +6,9 @@
name: release-name-cost-analyzer
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml 2025-02-21 23:21:49.133696683 +0000
@@ -6,8 +6,8 @@
name: smtp-configs
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml 2025-02-21 23:21:49.133696683 +0000
@@ -6,9 +6,9 @@
name: external-grafana-config-map
namespace: default
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml 2025-02-21 23:21:49.136696710 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-forecasting
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: forecasting
app.kubernetes.io/instance: release-name
app: forecasting
@@ -39,9 +39,9 @@
type: RuntimeDefault
restartPolicy: Always
containers:
- name: forecasting
- image: gcr.io/kubecost1/kubecost-modeling:v0.1.19
+ image: gcr.io/kubecost1/kubecost-modeling:v0.1.22
volumeMounts:
- name: tmp
mountPath: /tmp
securityContext:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml 2025-02-21 23:21:49.136696710 +0000
@@ -5,9 +5,9 @@
metadata:
name: release-name-forecasting
namespace: default
labels:
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: forecasting
app.kubernetes.io/instance: release-name
app: forecasting
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-attached-disks.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-attached-disk-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -48,9 +48,9 @@
"panels": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -129,9 +129,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "sum(container_fs_limit_bytes{instance=~'$disk', device!=\"tmpfs\", id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance)",
"format": "time_series",
@@ -147,9 +147,9 @@
},
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -230,9 +230,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "sum(container_fs_usage_bytes{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance) / sum(container_fs_limit_bytes{instance=~'$disk',device!=\"tmpfs\", id=\"/\", cluster_id=~'$cluster'}) by (cluster_id,instance)",
"format": "time_series",
@@ -248,9 +248,9 @@
},
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -331,9 +331,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "1 - sum(container_fs_inodes_free{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance) / sum(container_fs_inodes_total{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance)",
"format": "time_series",
@@ -348,9 +348,9 @@
},
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"fieldConfig": {
"defaults": {
"color": {
@@ -429,9 +429,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "sum(container_fs_usage_bytes{instance=~'$disk',id=\"/\", cluster_id=~'$cluster'}) by (cluster_id, instance)",
"format": "time_series",
@@ -458,9 +458,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
@@ -480,9 +480,9 @@
"value": "$__all"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values(cluster_id)",
"hide": 0,
"includeAll": true,
@@ -506,9 +506,9 @@
"value": "ip-192-168-147-146.us-east-2.compute.internal"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values(container_fs_limit_bytes{cluster_id=~\"$cluster\"}, instance)",
"hide": 0,
"includeAll": true,
@@ -560,8 +560,8 @@
]
},
"timezone": "",
"title": "Attached disk metrics",
- "uid": "nBH7qBgMk",
+ "uid": "attached-disk-metrics",
"version": 7,
"weekStart": ""
}
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-metrics-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-cluster-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-cluster-utilization-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-cluster-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -130,9 +130,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n (\n (\n sum(kube_node_status_capacity_cpu_cores) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) * $costpcpu\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"cpu\", unit=\"core\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) * ($costcpu - ($costcpu / 100 * $costDiscount))\n )\n) ",
"format": "time_series",
@@ -214,9 +214,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n (\n (\n sum(kube_node_status_capacity_memory_bytes) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) /1024/1024/1024 * $costpram\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"memory\", unit=\"byte\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) /1024/1024/1024 * ($costram - ($costram / 100 * $costDiscount))\n)\n) ",
"format": "time_series",
@@ -298,9 +298,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum (\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageSSD\n\n+\n\nsum (\n sum(kube_persistentvolumeclaim_info{storageclass!~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageStandard\n\n+ \n\nsum(container_fs_limit_bytes{id=\"/\"}) / 1024 / 1024 / 1024 * 1.03 * $costStorageStandard",
"format": "time_series",
@@ -383,9 +383,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "SUM(rate(node_network_transmit_bytes_total{device=\"eth0\"}[60m]) / 1024 / 1024 / 1024 ) * (60 * 60 * 24 * 30) * $costEgress",
"format": "time_series",
@@ -960,9 +960,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "# CPU\nsum(\n (\n (\n sum(kube_node_status_capacity_cpu_cores) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) * $costpcpu\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"cpu\", unit=\"core\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) * ($costcpu - ($costcpu / 100 * $costDiscount))\n )\n) \n\n+ \n\n# Storage\nsum (\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageSSD\n\n+\n\nsum (\n sum(kube_persistentvolumeclaim_info{storageclass!~\".*ssd.*\"}) by (persistentvolumeclaim, namespace, storageclass)\n + on (persistentvolumeclaim, namespace) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim, namespace) or up * 0\n) / 1024 / 1024 /1024 * $costStorageStandard\n\n+ \n\nsum(container_fs_limit_bytes{id=\"/\"}) / 1024 / 1024 / 1024 * 1.03 * $costStorageStandard \n\n+\n\n# END STORAGE\n# RAM \nsum(\n (\n (\n sum(kube_node_status_capacity_memory_bytes) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible=\"true\"}) by (node)\n ) /1024/1024/1024 * $costpram\n )\n or\n (\n (\n sum(kube_node_status_capacity{resource=\"memory\", unit=\"byte\"}) by (node)\n * on (node) group_left (label_cloud_google_com_gke_preemptible)\n avg(kube_node_labels{label_cloud_google_com_gke_preemptible!=\"true\"}) by (node)\n ) /1024/1024/1024 * ($costram - ($costram / 100 * $costDiscount))\n)\n)\n\n+\n\n#Network \nSUM(rate(node_network_transmit_bytes_total{device=\"eth0\"}[60m]) / 1024 / 1024 / 1024 ) * (60 * 60 * 24 * 30) * $costEgress",
"format": "time_series",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml 2025-02-21 23:22:13.280915619 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-deployment-utilization-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-deployment-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-kubernetes-resource-efficiency-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-kubernetes-resource-efficiency
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -21,10 +21,10 @@
"list": [
{
"builtIn": 1,
"datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
+ "type": "datasource",
+ "uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-label-cost-utilization-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-label-cost
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -110,9 +110,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n avg(container_cpu_allocation) by (pod,node)\n\n * on (node) group_left()\n avg(avg_over_time(node_cpu_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730",
"format": "time_series",
@@ -194,9 +194,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n avg(container_memory_allocation_bytes) by (pod,node) / 1024 / 1024 / 1024\n\n * on (node) group_left()\n avg(avg_over_time(node_ram_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730",
"format": "time_series",
@@ -278,9 +278,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "sum(\n sum(kube_persistentvolumeclaim_info{storageclass!=\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .04 \n\n+\n\nsum(\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .17 \n",
"format": "time_series",
@@ -362,9 +362,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "P0C970EB638C812D0"
+ "uid": "${datasource}"
},
"exemplar": false,
"expr": "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CPU ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nsum(\n avg(container_cpu_allocation) by (pod,node)\n\n * on (node) group_left()\n avg(avg_over_time(node_cpu_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730\n\n#END CPU\n+\n\n# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Memory ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nsum(\n avg(container_memory_allocation_bytes) by (pod,node) / 1024 / 1024 / 1024\n\n * on (node) group_left()\n avg(avg_over_time(node_ram_hourly_cost[10m])) by (node)\n\n * on (pod) group_left()\n label_replace(\n max(kube_pod_labels{label_$label=~\"$label_value\"}) by (pod),\n \"pod_name\",\n \"$1\", \n \"pod\", \n \"(.+)\"\n )\n) * 730\n\n# END MEMORY\n\n+\n\n# ~~~~~~~~~~~~~~~~~~~~~~~~~~~ STORAGE ~~~~~~~~~~~~~~~~~~~~~~~~~\n\nsum(\n sum(kube_persistentvolumeclaim_info{storageclass!=\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .04 \n\n+\n\nsum(\n sum(kube_persistentvolumeclaim_info{storageclass=~\".*ssd.*\"}) by (persistentvolumeclaim, storageclass)\n * on (persistentvolumeclaim) group_right(storageclass)\n sum(kube_persistentvolumeclaim_resource_requests_storage_bytes) by (persistentvolumeclaim)\n * on (persistentvolumeclaim) group_left(label_app)\n max(kube_persistentvolumeclaim_labels{label_$label=~\"$label_value\"}) by (persistentvolumeclaim) or up * 0\n) / 1024 / 1024 /1024 * .17 \n\n\n# END STORAGE\n",
"format": "time_series",
@@ -1157,8 +1157,8 @@
]
},
"timezone": "",
"title": "Label costs & utilization",
- "uid": "lWMhIA-ik",
+ "uid": "at-label-costs-and-utilization",
"version": 1,
"weekStart": ""
}
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-namespace-utilization-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-namespace-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-cloud-sevices.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-network-cloud-services
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -21,10 +21,10 @@
"list": [
{
"builtIn": 1,
"datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
+ "type": "datasource",
+ "uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
@@ -292,9 +292,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
@@ -368,9 +368,9 @@
"value": "$__all"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values(kube_pod_container_status_running{namespace=\"$namespace\"},container)",
"hide": 0,
"includeAll": true,
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-network-costs.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-network-costs-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -21,10 +21,10 @@
"list": [
{
"builtIn": 1,
"datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
+ "type": "datasource",
+ "uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
@@ -515,9 +515,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-node-utilization-template.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-node-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-multi-cluster.yaml 2025-02-21 23:21:49.134696692 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-pod-utilization-multi-cluster
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-pod-utilization-template.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-pod-utilization
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml 2025-02-21 23:22:13.281915628 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-prometheus-metrics-template.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-prom-benchmark
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-aggregator.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-workload-aggregator
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -882,9 +882,9 @@
"targets": [
{
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"editorMode": "code",
"expr": "kubecost_read_db_size",
"instant": false,
@@ -922,9 +922,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml 2025-02-21 23:22:13.282915636 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/grafana/grafana-dashboard-workload-metrics.yaml 2025-02-21 23:21:49.135696701 +0000
@@ -6,9 +6,9 @@
name: grafana-dashboard-workload-metrics
namespace: kubecost
labels:
app.kubernetes.io/name: cost-analyzer
- helm.sh/chart: cost-analyzer-2.5.3
+ helm.sh/chart: cost-analyzer-2.6.2
app.kubernetes.io/instance: release-name
app.kubernetes.io/managed-by: Helm
app: cost-analyzer
grafana_dashboard: "1"
@@ -800,9 +800,9 @@
{
"current": {
"selected": false,
"text": "Prometheus",
- "value": "PBFA97CFB590B2093"
+ "value": "Prometheus"
},
"hide": 0,
"includeAll": false,
"multi": false,
@@ -876,9 +876,9 @@
"value": "$__all"
},
"datasource": {
"type": "prometheus",
- "uid": "PBFA97CFB590B2093"
+ "uid": "${datasource}"
},
"definition": "label_values({namespace=~\"$namespace\", pod=~\"$pod\"},container)",
"hide": 0,
"includeAll": true,
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml 2025-02-21 23:22:13.283915645 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/prometheus/prometheus-server-deployment.yaml 2025-02-21 23:21:49.136696710 +0000
@@ -22,9 +22,9 @@
type: Recreate
template:
metadata:
annotations:
- checksum/configs: 5a026e9b91e4d5ed20cdb242c294e9187b08a1aa77be5d299c219cbd2352b3e2
+ checksum/configs: e6d9233fce13f896ba190b3d096afba3f57911a216638e60789eda5383e657a2
labels:
component: "server"
app: prometheus
release: release-name
@@ -33,9 +33,9 @@
serviceAccountName: release-name-prometheus-server
containers:
- name: prometheus-server
- image: "quay.io/prometheus/prometheus:v2.55.1"
+ image: "quay.io/prometheus/prometheus:v3.1.0"
imagePullPolicy: "IfNotPresent"
args:
- --storage.tsdb.retention.time=97h
- --config.file=/etc/config/prometheus.yml |
Edited/Blocked NotificationRenovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR. You can manually request rebase by checking the rebase/retry box above. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
None yet
0 participants
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.5.3
->2.6.2
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.