diff --git a/.gitignore b/.gitignore
index 5f4f59df4819e3bf9a4d88c737814aff7437236d..56f7580de26e47f75f8bf16346b35f35e229491d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -130,6 +130,9 @@ venv.bak/
 # VSCode project settings
 .vscode/
 
+# Visual Studio project settings
+/.vs
+
 # Rope project settings
 .ropeproject
 
@@ -155,4 +158,6 @@ cython_debug/
 
 # Sqlite
 *.db
-/.vs
+
+# TeraFlowSDN-generated files
+tfs_runtime_env_vars.sh
diff --git a/README.md b/README.md
index 5670a90c9f95ce5d7290d3c9c884b3c943b4459d..0336b9f6cdb9562ccff27d73f058d6293604de6b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# TeraFlow OS SDN Controller
+# TeraFlowSDN Controller
 
 [Teraflow H2020 project](https://teraflow-h2020.eu/) - Secured autonomic traffic management for a Tera of SDN Flows
 
@@ -7,13 +7,4 @@ Branch "master" : [![pipeline status](https://gitlab.com/teraflow-h2020/controll
 Branch "develop" : [![pipeline status](https://gitlab.com/teraflow-h2020/controller/badges/develop/pipeline.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/develop) [![coverage report](https://gitlab.com/teraflow-h2020/controller/badges/develop/coverage.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/develop)
 
 # Installation Instructions
-To install TeraFlow OS SDN Controller in your local Kubernetes deployment, we assume you deployed Kubernetes following the instructions provided in [Wiki: Installing Kubernetes on your Linux machine](https://gitlab.com/teraflow-h2020/controller/-/wikis/Installing-Kubernetes-on-your-Linux-machine).
-
-Then, follow the instructions in [Wiki: Deploying a TeraFlow OS test instance](https://gitlab.com/teraflow-h2020/controller/-/wikis/Deploying-a-TeraFlow-OS-test-instance) to deploy your instance of TeraFlow OS.
-
-# Functional Tests
-A functional test has been defined to enable experimentation with the TeraFlow OS:
-
-__Important:__ The OpenConfigDriver, the P4Driver, and the TrandportApiDriver have to be considered as experimental. The configuration and monitoring capabilities they support are limited or partially implemented. Use them with care.
-
-[Demo at OFC'22 (Bootstrap devices, Manage L3VPN services, Monitor Device Endpoints)](./src/tests/ofc22)
+For devel and upcoming release 2.0, we have prepared the following tutorial: [TeraFlowSDN tutorial](https://gitlab.com/teraflow-h2020/controller/-/tree/develop/tutorial).
diff --git a/deploy.sh b/deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..172889c07acdc2347b2dee2ddee8bf3061fdc53a
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,236 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+########################################################################################################################
+# Read deployment settings
+########################################################################################################################
+
+# If not already set, set the URL of your local Docker registry where the images will be uploaded to.
+# Leave it blank if you do not want to use any Docker registry.
+export TFS_REGISTRY_IMAGE=${TFS_REGISTRY_IMAGE:-""}
+#export TFS_REGISTRY_IMAGE="http://my-container-registry.local/"
+
+# If not already set, set the list of components you want to build images for, and deploy.
+# By default, only basic components are deployed
+export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device monitoring service compute webui"}
+
+# If not already set, set the tag you want to use for your images.
+export TFS_IMAGE_TAG=${TFS_IMAGE_TAG:-"dev"}
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+# If not already set, set additional manifest files to be applied after the deployment
+export TFS_EXTRA_MANIFESTS=${TFS_EXTRA_MANIFESTS:-""}
+
+# If not already set, set the neew Grafana admin password
+export TFS_GRAFANA_PASSWORD=${TFS_GRAFANA_PASSWORD:-"admin123+"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+# Constants
+GITLAB_REPO_URL="registry.gitlab.com/teraflow-h2020/controller"
+TMP_FOLDER="./tmp"
+
+# Create a tmp folder for files modified during the deployment
+TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
+mkdir -p $TMP_MANIFESTS_FOLDER
+TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
+mkdir -p $TMP_LOGS_FOLDER
+
+echo "Deleting and Creating a new namespace..."
+kubectl delete namespace $TFS_K8S_NAMESPACE
+kubectl create namespace $TFS_K8S_NAMESPACE
+printf "\n"
+
+if [[ "$TFS_COMPONENTS" == *"monitoring"* ]]; then
+    echo "Creating secrets for InfluxDB..."
+    #TODO: make sure to change this when having a production deployment
+    kubectl create secret generic influxdb-secrets --namespace=$TFS_K8S_NAMESPACE \
+        --from-literal=INFLUXDB_DB="monitoring" --from-literal=INFLUXDB_ADMIN_USER="teraflow" \
+        --from-literal=INFLUXDB_ADMIN_PASSWORD="teraflow" --from-literal=INFLUXDB_HTTP_AUTH_ENABLED="True"
+    kubectl create secret generic monitoring-secrets --namespace=$TFS_K8S_NAMESPACE \
+        --from-literal=INFLUXDB_DATABASE="monitoring" --from-literal=INFLUXDB_USER="teraflow" \
+        --from-literal=INFLUXDB_PASSWORD="teraflow" --from-literal=INFLUXDB_HOSTNAME="localhost"
+    printf "\n"
+fi
+
+echo "Deploying components and collecting environment variables..."
+ENV_VARS_SCRIPT=tfs_runtime_env_vars.sh
+echo "# Environment variables for TeraFlowSDN deployment" > $ENV_VARS_SCRIPT
+PYTHONPATH=$(pwd)/src
+echo "export PYTHONPATH=${PYTHONPATH}" >> $ENV_VARS_SCRIPT
+
+for COMPONENT in $TFS_COMPONENTS; do
+    echo "Processing '$COMPONENT' component..."
+    IMAGE_NAME="$COMPONENT:$TFS_IMAGE_TAG"
+    IMAGE_URL=$(echo "$TFS_REGISTRY_IMAGE/$IMAGE_NAME" | sed 's,//,/,g' | sed 's,http:/,,g')
+
+    echo "  Building Docker image..."
+    BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log"
+
+    if [ "$COMPONENT" == "automation" ] || [ "$COMPONENT" == "policy" ]; then
+        docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/"$COMPONENT"/ > "$BUILD_LOG"
+    else 
+        docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile . > "$BUILD_LOG"
+    fi
+
+    if [ -n "$TFS_REGISTRY_IMAGE" ]; then
+        echo "  Pushing Docker image to '$TFS_REGISTRY_IMAGE'..."
+
+        TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log"
+        docker tag "$IMAGE_NAME" "$IMAGE_URL" > "$TAG_LOG"
+
+        PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
+        docker push "$IMAGE_URL" > "$PUSH_LOG"
+    fi
+
+    echo "  Adapting '$COMPONENT' manifest file..."
+    MANIFEST="$TMP_MANIFESTS_FOLDER/${COMPONENT}service.yaml"
+    cp ./manifests/"${COMPONENT}"service.yaml "$MANIFEST"
+    VERSION=$(grep -i "${GITLAB_REPO_URL}/${COMPONENT}:" "$MANIFEST" | cut -d ":" -f3)
+
+    if [ -n "$TFS_REGISTRY_IMAGE" ]; then
+        # Registry is set
+        sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_URL#g" "$MANIFEST"
+        sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" "$MANIFEST"
+    else
+        # Registry is not set
+        sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:${VERSION}#image: $IMAGE_NAME#g" "$MANIFEST"
+        sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" "$MANIFEST"        
+    fi
+
+    echo "  Deploying '$COMPONENT' component to Kubernetes..."
+    DEPLOY_LOG="$TMP_LOGS_FOLDER/deploy_${COMPONENT}.log"
+    kubectl --namespace $TFS_K8S_NAMESPACE apply -f "$MANIFEST" > "$DEPLOY_LOG"
+    COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/")
+    kubectl --namespace $TFS_K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT_OBJNAME}service >> "$DEPLOY_LOG"
+    kubectl --namespace $TFS_K8S_NAMESPACE scale deployment --replicas=1 ${COMPONENT_OBJNAME}service >> "$DEPLOY_LOG"
+
+    echo "  Collecting env-vars for '$COMPONENT' component..."
+
+    SERVICE_DATA=$(kubectl get service ${COMPONENT}service --namespace $TFS_K8S_NAMESPACE -o json)
+    if [ -z "${SERVICE_DATA}" ]; then continue; fi
+
+    # Env vars for service's host address
+    SERVICE_HOST=$(echo ${SERVICE_DATA} | jq -r '.spec.clusterIP')
+    if [ -z "${SERVICE_HOST}" ]; then continue; fi
+    ENVVAR_HOST=$(echo "${COMPONENT}service_SERVICE_HOST" | tr '[:lower:]' '[:upper:]')
+    echo "export ${ENVVAR_HOST}=${SERVICE_HOST}" >> $ENV_VARS_SCRIPT
+
+    # Env vars for service's 'grpc' port (if any)
+    SERVICE_PORT_GRPC=$(echo ${SERVICE_DATA} | jq -r '.spec.ports[] | select(.name=="grpc") | .port')
+    if [ -n "${SERVICE_PORT_GRPC}" ]; then
+        ENVVAR_PORT_GRPC=$(echo "${COMPONENT}service_SERVICE_PORT_GRPC" | tr '[:lower:]' '[:upper:]')
+        echo "export ${ENVVAR_PORT_GRPC}=${SERVICE_PORT_GRPC}" >> $ENV_VARS_SCRIPT
+    fi
+
+    # Env vars for service's 'http' port (if any)
+    SERVICE_PORT_HTTP=$(echo ${SERVICE_DATA} | jq -r '.spec.ports[] | select(.name=="http") | .port')
+    if [ -n "${SERVICE_PORT_HTTP}" ]; then
+        ENVVAR_PORT_HTTP=$(echo "${COMPONENT}service_SERVICE_PORT_HTTP" | tr '[:lower:]' '[:upper:]')
+        echo "export ${ENVVAR_PORT_HTTP}=${SERVICE_PORT_HTTP}" >> $ENV_VARS_SCRIPT
+    fi
+
+    printf "\n"
+done
+
+echo "Deploying extra manifests..."
+for EXTRA_MANIFEST in $TFS_EXTRA_MANIFESTS; do
+    echo "Processing manifest '$EXTRA_MANIFEST'..."
+    kubectl --namespace $TFS_K8S_NAMESPACE apply -f $EXTRA_MANIFEST
+    printf "\n"
+done
+
+# By now, leave this control here. Some component dependencies are not well handled
+for COMPONENT in $TFS_COMPONENTS; do
+    echo "Waiting for '$COMPONENT' component..."
+    kubectl wait --namespace $TFS_K8S_NAMESPACE \
+        --for='condition=available' --timeout=300s deployment/${COMPONENT}service
+    printf "\n"
+done
+
+if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"* ]]; then
+    echo "Configuring WebUI DataStores and Dashboards..."
+    sleep 3
+
+    INFLUXDB_HOST="monitoringservice"
+    INFLUXDB_PORT=$(kubectl --namespace $TFS_K8S_NAMESPACE get service/monitoringservice -o jsonpath='{.spec.ports[?(@.name=="influxdb")].port}')
+    INFLUXDB_URL="http://${INFLUXDB_HOST}:${INFLUXDB_PORT}"
+    INFLUXDB_USER=$(kubectl --namespace $TFS_K8S_NAMESPACE get secrets influxdb-secrets -o jsonpath='{.data.INFLUXDB_ADMIN_USER}' | base64 --decode)
+    INFLUXDB_PASSWORD=$(kubectl --namespace $TFS_K8S_NAMESPACE get secrets influxdb-secrets -o jsonpath='{.data.INFLUXDB_ADMIN_PASSWORD}' | base64 --decode)
+    INFLUXDB_DATABASE=$(kubectl --namespace $TFS_K8S_NAMESPACE get secrets influxdb-secrets -o jsonpath='{.data.INFLUXDB_DB}' | base64 --decode)
+
+    # Exposed through the ingress controller "tfs-ingress"
+    GRAFANA_HOSTNAME="127.0.0.1"
+    GRAFANA_PORT="80"
+    GRAFANA_BASEURL="/grafana"
+
+    # Default Grafana credentials
+    GRAFANA_USERNAME="admin"
+    GRAFANA_PASSWORD="admin"
+
+    # Default Grafana API URL
+    GRAFANA_URL_DEFAULT="http://${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}@${GRAFANA_HOSTNAME}:${GRAFANA_PORT}${GRAFANA_BASEURL}"
+
+    # Updated Grafana API URL
+    GRAFANA_URL_UPDATED="http://${GRAFANA_USERNAME}:${TFS_GRAFANA_PASSWORD}@${GRAFANA_HOSTNAME}:${GRAFANA_PORT}${GRAFANA_BASEURL}"
+
+    echo "Connecting to grafana at URL: ${GRAFANA_URL_DEFAULT}..."
+
+    # Configure Grafana Admin Password
+    # Ref: https://grafana.com/docs/grafana/latest/http_api/user/#change-password
+    curl -X PUT -H "Content-Type: application/json" -d '{
+        "oldPassword": "'${GRAFANA_PASSWORD}'",
+        "newPassword": "'${TFS_GRAFANA_PASSWORD}'",
+        "confirmNew" : "'${TFS_GRAFANA_PASSWORD}'"
+    }' ${GRAFANA_URL_DEFAULT}/api/user/password
+    echo
+
+    # Create InfluxDB DataSource
+    # Ref: https://grafana.com/docs/grafana/latest/http_api/data_source/
+    curl -X POST -H "Content-Type: application/json" -d '{
+        "type"     : "influxdb",
+        "name"     : "InfluxDB",
+        "url"      : "'"$INFLUXDB_URL"'",
+        "access"   : "proxy",
+        "basicAuth": false,
+        "user"     : "'"$INFLUXDB_USER"'",
+        "password" : "'"$INFLUXDB_PASSWORD"'",
+        "isDefault": true,
+        "database" : "'"$INFLUXDB_DATABASE"'"
+    }' ${GRAFANA_URL_UPDATED}/api/datasources
+    echo
+
+    # Create Monitoring Dashboard
+    # Ref: https://grafana.com/docs/grafana/latest/http_api/dashboard/
+    curl -X POST -H "Content-Type: application/json" \
+    -d '@src/webui/grafana_dashboard.json' \
+    ${GRAFANA_URL_UPDATED}/api/dashboards/db
+    echo
+
+    DASHBOARD_URL="${GRAFANA_URL_UPDATED}/api/dashboards/uid/tf-l3-monit"
+    DASHBOARD_ID=$(curl -s "${DASHBOARD_URL}" | jq '.dashboard.id')
+    curl -X POST ${GRAFANA_URL_UPDATED}/api/user/stars/dashboard/${DASHBOARD_ID}
+
+    printf "\n\n"
+fi
+
+./show_deploy.sh
+
+echo "Done!"
diff --git a/expose_ingress_grpc.sh b/expose_ingress_grpc.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8a4c837406d06ae8971a4d6ab2c5a8ae30cfc87f
--- /dev/null
+++ b/expose_ingress_grpc.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+# If not already set, set the list of components you want to build images for, and deploy.
+export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device automation policy service compute monitoring dbscanserving opticalattackmitigator opticalcentralizedattackdetector webui"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+echo "Exposing GRPC ports for components..."
+for COMPONENT in $TFS_COMPONENTS; do
+    echo "Processing '$COMPONENT' component..."
+
+    SERVICE_GRPC_PORT=$(kubectl get service ${COMPONENT}service --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.name=="grpc")].port}')
+    if [ -z "${SERVICE_GRPC_PORT}" ]; then
+        printf "\n"
+        continue;
+    fi
+
+    COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/")
+    PATCH='{"data": {"'${SERVICE_GRPC_PORT}'": "'$TFS_K8S_NAMESPACE'/'${COMPONENT_OBJNAME}service':'${SERVICE_GRPC_PORT}'"}}'
+    #echo "PATCH: ${PATCH}"
+    kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
+
+    PORT_MAP='{"containerPort": '${SERVICE_GRPC_PORT}', "hostPort": '${SERVICE_GRPC_PORT}'}'
+    CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
+    PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
+    #echo "PATCH: ${PATCH}"
+    kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
+
+    printf "\n"
+done
+
+echo "Done!"
diff --git a/install_development_dependencies.sh b/install_development_dependencies.sh
deleted file mode 100755
index 55b52803bd10950e18695eb39fadfbe98295aee0..0000000000000000000000000000000000000000
--- a/install_development_dependencies.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-# installing basic tools
-pip install --upgrade pip setuptools wheel pip-tools pylint pytest pytest-benchmark coverage grpcio-tools
-
-# creating an empty file
-echo "" > requirements.in
-
-#TODO: include here your component
-COMPONENTS="compute context device service monitoring opticalcentralizedattackdetector opticalattackmitigator dbscanserving webui"
-
-# compiling dependencies from all components
-for component in $COMPONENTS
-do
-    echo "computing requirements for component $component"
-    diff requirements.in src/$component/requirements.in | grep '^>' | sed 's/^>\ //' >> requirements.in
-done
-
-pip-compile --output-file=requirements.txt requirements.in
-python -m pip install -r requirements.txt
-
-# removing the temporary files
-rm requirements.in
-rm requirements.txt
diff --git a/install_requirements.sh b/install_requirements.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ea9385729a6199be29926e4c13b6a05152446155
--- /dev/null
+++ b/install_requirements.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# If not already set, set the list of components you want to install dependencies for.
+# By default, dependencies for all components are installed.
+# Components still not supported by this script:
+#   automation & policy : implemented in Java
+#   dlt                 : under design
+#   pathcomp            : under design
+ALL_COMPONENTS="context device service compute monitoring webui interdomain slice"
+ALL_COMPONENTS="${ALL_COMPONENTS} dbscanserving opticalattackmitigator opticalcentralizedattackdetector"
+ALL_COMPONENTS="${ALL_COMPONENTS} l3_attackmitigator l3_centralizedattackdetector l3_distributedattackdetector"
+TFS_COMPONENTS=${TFS_COMPONENTS:-$ALL_COMPONENTS}
+
+echo "Updating PIP, SetupTools and Wheel..."
+pip install --upgrade pip               # ensure next packages get the latest versions
+pip install --upgrade setuptools wheel  # bring basic tooling for other requirements
+pip install --upgrade pip-tools pylint  # bring tooling for package compilation and code linting
+printf "\n"
+
+echo "Creating integrated requirements file..."
+touch requirements.in
+diff requirements.in common_requirements.in | grep '^>' | sed 's/^>\ //' >> requirements.in
+printf "\n"
+
+echo "Collecting requirements from components..."
+for COMPONENT in $TFS_COMPONENTS
+do
+    if [ "$COMPONENT" == "automation" ] || [ "$COMPONENT" == "policy" ]; then continue; fi
+    diff requirements.in src/$COMPONENT/requirements.in | grep '^>' | sed 's/^>\ //' >> requirements.in
+done
+printf "\n"
+
+echo "Compiling requirements..."
+# Done in a single step to prevent breaking dependencies between components
+pip-compile --quiet --output-file=requirements.txt requirements.in
+printf "\n"
+
+echo "Installing requirements..."
+python -m pip install -r requirements.txt
+printf "\n"
+
+#echo "Removing the temporary files..."
+rm requirements.in
+rm requirements.txt
+printf "\n"
diff --git a/manifests/nginx_ingress_http.yaml b/manifests/nginx_ingress_http.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..50ff81c79eaa02647562456809226d1aed847204
--- /dev/null
+++ b/manifests/nginx_ingress_http.yaml
@@ -0,0 +1,38 @@
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: tfs-ingress
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+spec:
+  rules:
+  - http:
+      paths:
+        - path: /webui(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 8004
+        - path: /grafana(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 3000
+        - path: /context(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: contextservice
+              port:
+                number: 8080
+        - path: /()(restconf/.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: computeservice
+              port:
+                number: 8080
diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml
index 8bbf024dc4806ebcd6b6d2d2db80e4adc841ddfc..52fc75a9868001d50f7380cfe238fa344de27f6e 100644
--- a/manifests/webuiservice.yaml
+++ b/manifests/webuiservice.yaml
@@ -67,6 +67,11 @@ spec:
           - containerPort: 3000
             name: http-grafana
             protocol: TCP
+        env:
+        - name: GF_SERVER_ROOT_URL
+          value: "http://0.0.0.0:3000/grafana/"
+        - name: GF_SERVER_SERVE_FROM_SUB_PATH
+          value: "true"
         readinessProbe:
           failureThreshold: 3
           httpGet:
@@ -102,6 +107,9 @@ spec:
   selector:
     app: webuiservice
   ports:
-  - name: http
+  - name: webui
     port: 8004
     targetPort: 8004
+  - name: grafana
+    port: 3000
+    targetPort: 3000
diff --git a/my_deploy.sh b/my_deploy.sh
new file mode 100644
index 0000000000000000000000000000000000000000..67a2e0558c25d767e14b635e6dd9174433827156
--- /dev/null
+++ b/my_deploy.sh
@@ -0,0 +1,22 @@
+# Set the URL of your local Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# Set the list of components, separated by comas, you want to build images for, and deploy.
+# Supported components are:
+#   context device automation policy service compute monitoring webui
+#   interdomain slice pathcomp dlt
+#   dbscanserving opticalattackmitigator opticalcentralizedattackdetector
+#   l3_attackmitigator l3_centralizedattackdetector l3_distributedattackdetector
+export TFS_COMPONENTS="context device automation service compute monitoring webui"
+
+# Set the tag you want to use for your images.
+export TFS_IMAGE_TAG="dev"
+
+# Set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE="tfs"
+
+# Set additional manifest files to be applied after the deployment
+export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
+
+# Set the neew Grafana admin password
+export TFS_GRAFANA_PASSWORD="admin123+"
diff --git a/proto/automation.proto b/proto/automation.proto
index 02aba0a9cd3d5867a8c7f5d6581ade426ea0c290..f41bef9e28588fbd2a0acf416d347eb530c48df0 100644
--- a/proto/automation.proto
+++ b/proto/automation.proto
@@ -23,7 +23,7 @@ service AutomationService {
   rpc ZtpAdd(DeviceRole) returns (DeviceRoleState) {}
   rpc ZtpUpdate(DeviceRole) returns (DeviceRoleState) {}
   rpc ZtpDelete(DeviceRole) returns (DeviceRoleState) {}
-  rpc ZtpDeleteAll(Empty) returns (DeviceDeletionResult) {}
+  rpc ZtpDeleteAll(context.Empty) returns (DeviceDeletionResult) {}
 }
 
 enum DeviceRoleType {
@@ -56,8 +56,6 @@ message DeviceDeletionResult {
   repeated string deleted = 1;
 }
 
-message Empty {}
-
 enum ZtpDeviceState {
   ZTP_DEV_STATE_UNDEFINED = 0;
   ZTP_DEV_STATE_CREATED  = 1;
diff --git a/proto/context.proto b/proto/context.proto
index 944cc0ef59d76de7bffb9c181a0ee61af61e73e3..866876175f108c056f7e35c6457a1bf48a226a9c 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -280,8 +280,9 @@ message Slice {
   repeated ServiceId slice_service_ids = 4;
   repeated SliceId slice_subslice_ids = 5;
   SliceStatus slice_status = 6;
-  SliceOwner slice_owner = 7;
-  Timestamp timestamp = 8;
+  SliceConfig slice_config = 7;
+  SliceOwner slice_owner = 8;
+  Timestamp timestamp = 9;
 }
 
 message SliceOwner {
@@ -302,6 +303,10 @@ message SliceStatus {
   SliceStatusEnum slice_status = 1;
 }
 
+message SliceConfig {
+  repeated ConfigRule config_rules = 1;
+}
+
 message SliceIdList {
   repeated SliceId slice_ids = 1;
 }
@@ -446,6 +451,11 @@ message Constraint_EndPointLocation {
   Location location = 2;
 }
 
+message Constraint_EndPointPriority {
+  EndPointId endpoint_id = 1;
+  uint32 priority = 2;
+}
+
 message Constraint_SLA_Latency {
   float e2e_latency_ms = 1;
 }
@@ -472,7 +482,7 @@ enum IsolationLevelEnum {
 }
 
 message Constraint_SLA_Isolation_level {
-  IsolationLevelEnum isolation_level = 1;
+  repeated IsolationLevelEnum isolation_level = 1;
 }
 
 message Constraint {
@@ -480,10 +490,11 @@ message Constraint {
     Constraint_Custom custom = 1;
     Constraint_Schedule schedule = 2;
     Constraint_EndPointLocation endpoint_location = 3;
-    Constraint_SLA_Capacity sla_capacity = 4;
-    Constraint_SLA_Latency sla_latency = 5;
-    Constraint_SLA_Availability sla_availability = 6;
-    Constraint_SLA_Isolation_level sla_isolation = 7;
+    Constraint_EndPointPriority endpoint_priority = 4;
+    Constraint_SLA_Capacity sla_capacity = 5;
+    Constraint_SLA_Latency sla_latency = 6;
+    Constraint_SLA_Availability sla_availability = 7;
+    Constraint_SLA_Isolation_level sla_isolation = 8;
   }
 }
 
diff --git a/proto/context-policy.proto b/proto/context_policy.proto
similarity index 100%
rename from proto/context-policy.proto
rename to proto/context_policy.proto
diff --git a/proto/policy.proto b/proto/policy.proto
index 9e686f180994be988543ebd9a26dfd31dffed007..0879389bf857df51b7f777fd21a4a249ff69682d 100644
--- a/proto/policy.proto
+++ b/proto/policy.proto
@@ -16,8 +16,8 @@ syntax = "proto3";
 package policy;
 
 import "context.proto";
-import "policy-condition.proto";
-import "policy-action.proto";
+import "policy_condition.proto";
+import "policy_action.proto";
 
 service PolicyService {
   rpc PolicyAddService (PolicyRuleService) returns (PolicyRuleState) {}
@@ -55,7 +55,7 @@ message PolicyRuleState {
 // Basic policy rule attributes
 message PolicyRuleBasic {
   PolicyRuleId policyRuleId = 1;
-  optional PolicyRuleState policyRuleState = 2;
+  PolicyRuleState policyRuleState = 2; //policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
   uint32 priority = 3;
 
   // Event-Condition-Action (ECA) model
diff --git a/proto/policy-action.proto b/proto/policy_action.proto
similarity index 100%
rename from proto/policy-action.proto
rename to proto/policy_action.proto
diff --git a/proto/policy-condition.proto b/proto/policy_condition.proto
similarity index 100%
rename from proto/policy-condition.proto
rename to proto/policy_condition.proto
diff --git a/proto/uml/pathcomp.png b/proto/uml/pathcomp.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd14fe5235febb43b24ffc52291696edc65c4e99
Binary files /dev/null and b/proto/uml/pathcomp.png differ
diff --git a/proto/uml/policy.png b/proto/uml/policy.png
index adbebe89f657a77d40b3ddf8cec95a93951deaf0..845a1e883223d7588ab20afabf559067cdc27454 100644
Binary files a/proto/uml/policy.png and b/proto/uml/policy.png differ
diff --git a/configure_dashboards.sh b/scripts/old/configure_dashboards_in_kubernetes.sh
similarity index 100%
rename from configure_dashboards.sh
rename to scripts/old/configure_dashboards_in_kubernetes.sh
diff --git a/deploy_in_kubernetes.sh b/scripts/old/deploy_in_kubernetes.sh
similarity index 95%
rename from deploy_in_kubernetes.sh
rename to scripts/old/deploy_in_kubernetes.sh
index a1b4551dd939e7b1a727307cc177d379e6938182..5e16120bb3b47e993e1d331ccdef3186380304ec 100755
--- a/deploy_in_kubernetes.sh
+++ b/scripts/old/deploy_in_kubernetes.sh
@@ -110,10 +110,12 @@ for COMPONENT in $COMPONENTS; do
     fi
 
     echo "  Deploying '$COMPONENT' component to Kubernetes..."
-    DEPLOY_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
+    DEPLOY_LOG="$TMP_LOGS_FOLDER/deploy_${COMPONENT}.log"
     kubectl --namespace $K8S_NAMESPACE apply -f "$MANIFEST" > "$DEPLOY_LOG"
-    kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT}service >> "$DEPLOY_LOG"
-    kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=1 ${COMPONENT}service >> "$DEPLOY_LOG"
+
+    COMPONENT_OBJNAME=$(echo "${COMPONENT}" | sed "s/\_/-/")
+    kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT_OBJNAME}service >> "$DEPLOY_LOG"
+    kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=1 ${COMPONENT_OBJNAME}service >> "$DEPLOY_LOG"
     printf "\n"
 done
 
@@ -134,7 +136,7 @@ done
 
 if [[ "$COMPONENTS" == *"webui"* ]]; then
     echo "Configuring WebUI DataStores and Dashboards..."
-    ./configure_dashboards.sh
+    ./configure_dashboards_in_kubernetes.sh
     printf "\n\n"
 fi
 
diff --git a/scripts/report_coverage_all.sh b/scripts/report_coverage_all.sh
index a7e4797f3118a03c5f4db7eb384a67bdea4d795a..3b7df170c880ede72dea356752c5120e59dd9d71 100755
--- a/scripts/report_coverage_all.sh
+++ b/scripts/report_coverage_all.sh
@@ -16,7 +16,7 @@
 
 PROJECTDIR=`pwd`
 
-cd $(dirname $0)/src
+cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 echo
diff --git a/scripts/run_tests_locally-compute.sh b/scripts/run_tests_locally-compute.sh
index 48ce6e232a8005ee37fce8a0dbd9f7aed4cf83dc..d48fe417134d2f8c3078d549b3bb84e2cc745da6 100755
--- a/scripts/run_tests_locally-compute.sh
+++ b/scripts/run_tests_locally-compute.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=service.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     compute/tests/test_unitary.py
diff --git a/scripts/run_tests_locally-context.sh b/scripts/run_tests_locally-context.sh
index 1cbe95453b30b241995a38d4bf0d034868fdee51..a9e601208aa9259219708a5e1ca770232e44faa6 100755
--- a/scripts/run_tests_locally-context.sh
+++ b/scripts/run_tests_locally-context.sh
@@ -22,13 +22,10 @@ RCFILE=$PROJECTDIR/coverage/.coveragerc
 K8S_NAMESPACE="tf-dev"
 K8S_HOSTNAME="kubernetes-master"
 
+kubectl --namespace $K8S_NAMESPACE expose deployment contextservice --port=6379 --name=redis-tests --type=NodePort
 export REDIS_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
 export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}')
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     context/tests/test_unitary.py
diff --git a/scripts/run_tests_locally-device-all.sh b/scripts/run_tests_locally-device-all.sh
index 2cf8faaf50355a3cc5f3a0206498ed4dacb48523..a60eab0be932862cf1adc3a81678239de566bd37 100755
--- a/scripts/run_tests_locally-device-all.sh
+++ b/scripts/run_tests_locally-device-all.sh
@@ -21,9 +21,6 @@ RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
 
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     device/tests/test_unitary_emulated.py
 
diff --git a/scripts/run_tests_locally-device-emulated.sh b/scripts/run_tests_locally-device-emulated.sh
index ab4f77adaf9c0549551c91d944c1c6db77a8b9cb..541017f7a6b9f3d1289162ad69b27f572aa046cb 100755
--- a/scripts/run_tests_locally-device-emulated.sh
+++ b/scripts/run_tests_locally-device-emulated.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     device/tests/test_unitary_emulated.py
diff --git a/scripts/run_tests_locally-device-microwave.sh b/scripts/run_tests_locally-device-microwave.sh
index e03630c9f63c65cae91464b76cc3ddc447835f42..21f3e5ab67c882ab51f7c8c14a95ed6df26418de 100755
--- a/scripts/run_tests_locally-device-microwave.sh
+++ b/scripts/run_tests_locally-device-microwave.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     device/tests/test_unitary_microwave.py
diff --git a/scripts/run_tests_locally-device-openconfig.sh b/scripts/run_tests_locally-device-openconfig.sh
index 83d4a0545a3386395ead97f40d45c034350c73b9..f87346fed8ebe9b27c806759fafc851a15afd068 100755
--- a/scripts/run_tests_locally-device-openconfig.sh
+++ b/scripts/run_tests_locally-device-openconfig.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     device/tests/test_unitary_openconfig.py
diff --git a/scripts/run_tests_locally-device-p4.sh b/scripts/run_tests_locally-device-p4.sh
index 36b381a3cd9214603456828b41e6d70b8c6c908d..4e6754e4d56741f960e1e5562abb0c10abc0ccb4 100755
--- a/scripts/run_tests_locally-device-p4.sh
+++ b/scripts/run_tests_locally-device-p4.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     device/tests/test_unitary_p4.py
diff --git a/scripts/run_tests_locally-device-tapi.sh b/scripts/run_tests_locally-device-tapi.sh
index a281466b677f256b2ce9fe7770bf2b052ef59126..d37e4e2b7f8545c2033b0049722cdbb8c589b55b 100755
--- a/scripts/run_tests_locally-device-tapi.sh
+++ b/scripts/run_tests_locally-device-tapi.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     device/tests/test_unitary_tapi.py
diff --git a/scripts/run_tests_locally-service.sh b/scripts/run_tests_locally-service.sh
index 853eb97673e9e2a3a3fa28d025bd8af9ef4ea6cf..8a2a8d0be1d1960c6197a67e471ae29abba501a7 100755
--- a/scripts/run_tests_locally-service.sh
+++ b/scripts/run_tests_locally-service.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=service.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     service/tests/test_unitary.py
diff --git a/scripts/run_tests_locally-slice.sh b/scripts/run_tests_locally-slice.sh
index adad39b5b2de2f4de0f2451e89a20732d1ecda2c..fa3af4eba1f9d42a1f9d283964a536a00f9547ae 100755
--- a/scripts/run_tests_locally-slice.sh
+++ b/scripts/run_tests_locally-slice.sh
@@ -20,9 +20,5 @@ cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 # Run unitary tests and analyze coverage of code at same time
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=service.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     slice/tests/test_unitary.py
diff --git a/scripts/run_tests_locally.sh b/scripts/run_tests_locally.sh
index 69463ea79bf717565385a44f168e84780902fce8..1d48cc1af18629874b0275b1fa92bf31961741c3 100755
--- a/scripts/run_tests_locally.sh
+++ b/scripts/run_tests_locally.sh
@@ -51,9 +51,6 @@ export INFLUXDB_DATABASE=$(kubectl --namespace $K8S_NAMESPACE get secrets influx
 # First destroy old coverage file
 rm -f $COVERAGEFILE
 
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     common/orm/tests/test_unitary.py \
     common/message_broker/tests/test_unitary.py \
diff --git a/scripts/show_logs_automation.sh b/scripts/show_logs_automation.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8823f29c09960ce980f48d76463682d34e2ea09f
--- /dev/null
+++ b/scripts/show_logs_automation.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/automationservice
diff --git a/scripts/show_logs_compute.sh b/scripts/show_logs_compute.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5e061bb9eb49047b96027a39d3bc846a3e502b5c
--- /dev/null
+++ b/scripts/show_logs_compute.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/computeservice
diff --git a/scripts/show_logs_context.sh b/scripts/show_logs_context.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ece545a7e32131880079c2ce65a950c64a16273e
--- /dev/null
+++ b/scripts/show_logs_context.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
diff --git a/scripts/show_logs_device.sh b/scripts/show_logs_device.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e1c2e4aa8a5fd39e525fcf61ffcf5572e3e6c8d0
--- /dev/null
+++ b/scripts/show_logs_device.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice
diff --git a/scripts/show_logs_monitoring.sh b/scripts/show_logs_monitoring.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5978035127735c20ddc6387666a5434cbac61ff8
--- /dev/null
+++ b/scripts/show_logs_monitoring.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/monitoringservice -c server
diff --git a/scripts/show_logs_service.sh b/scripts/show_logs_service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..251add7e1641862f3c95dbf038920bc86b3c89ff
--- /dev/null
+++ b/scripts/show_logs_service.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice
diff --git a/scripts/show_logs_webui.sh b/scripts/show_logs_webui.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c73f5f51a6aefe0caee2620cccca272f1abb8622
--- /dev/null
+++ b/scripts/show_logs_webui.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/webuiservice -c server
diff --git a/show_deploy.sh b/show_deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e894d44f3d7f79ac18ce4f3d5b2708a6402764e6
--- /dev/null
+++ b/show_deploy.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs-dev"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+echo "Deployment Resources:"
+kubectl --namespace $TFS_K8S_NAMESPACE get all
+printf "\n"
+
+echo "Deployment Ingress:"
+kubectl --namespace $TFS_K8S_NAMESPACE get ingress
+printf "\n"
diff --git a/src/automation/pom.xml b/src/automation/pom.xml
index bedee7b7f23296fa4adb7585191d19b5a917d689..4609c2c8db9aae825a86e3820efa9c00a9d737f0 100644
--- a/src/automation/pom.xml
+++ b/src/automation/pom.xml
@@ -297,6 +297,7 @@
             <exclude>device/*</exclude>
             <exclude>monitoring/*</exclude>
             <exclude>kpi_sample_types/*</exclude>
+            <exclude>acl/*</exclude>
           </excludes>
           </configuration>
           <executions>
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
index 7a68965bf96a2c827219f761f19ba752dd534ffc..c160387c3e3448f29d01a185afc31127b025c2b6 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
@@ -18,7 +18,7 @@ package eu.teraflow.automation;
 
 import automation.Automation;
 import context.ContextOuterClass;
-import eu.teraflow.automation.device.model.Device;
+import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.model.DeviceRoleId;
 import io.quarkus.grpc.GrpcService;
 import io.smallrye.mutiny.Uni;
@@ -80,7 +80,7 @@ public class AutomationGatewayImpl implements AutomationGateway {
     }
 
     @Override
-    public Uni<Automation.DeviceDeletionResult> ztpDeleteAll(Automation.Empty empty) {
+    public Uni<Automation.DeviceDeletionResult> ztpDeleteAll(ContextOuterClass.Empty empty) {
         return Uni.createFrom().item(() -> Automation.DeviceDeletionResult.newBuilder().build());
     }
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
index 9e8927d583ce34cb8bfa0eaa7ba5561981b8dac7..5c8e95a442d7f6134b6817d144ff2ad646d2b5c3 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
@@ -16,7 +16,7 @@
 
 package eu.teraflow.automation;
 
-import eu.teraflow.automation.device.model.Device;
+import eu.teraflow.automation.context.model.Device;
 import io.smallrye.mutiny.Uni;
 
 public interface AutomationService {
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
index 3db0d647ebc5c2341337bcb5d91484af8684dfe6..13e56645384938b4eff42aa73ca9e8a5ff73a1bd 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
@@ -17,8 +17,8 @@
 package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.ContextService;
+import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.device.DeviceService;
-import eu.teraflow.automation.device.model.Device;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java b/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
index c27a2a844350ce3aeb56c594c82ce4543b7e4d94..df5f14081711a22c3896dfadbe14b659bcb426cf 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/ContextSubscriber.java
@@ -17,6 +17,8 @@
 package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.ContextService;
+import eu.teraflow.automation.context.model.Event;
+import eu.teraflow.automation.context.model.EventTypeEnum;
 import io.quarkus.runtime.StartupEvent;
 import java.time.Duration;
 import javax.enterprise.context.ApplicationScoped;
@@ -75,11 +77,7 @@ public class ContextSubscriber {
                                 case UPDATE:
                                 case REMOVE:
                                 case UNDEFINED:
-                                    {
-                                        LOGGER.warnf(
-                                                "Received %s for device [%s]. [%s] event handling is not yet implemented, ignoring...",
-                                                event, deviceId, eventType);
-                                    }
+                                    logWarningMessage(event, deviceId, eventType);
                                     break;
                             }
                         });
@@ -94,4 +92,10 @@ public class ContextSubscriber {
             LOGGER.info("Not subscribing to Context service for device events...");
         }
     }
+
+    private void logWarningMessage(Event event, String deviceId, EventTypeEnum eventType) {
+        LOGGER.warnf(
+                "Received %s for device [%s]. [%s] event handling is not yet implemented, ignoring...",
+                event, deviceId, eventType);
+    }
 }
diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
index 78f251439979fff73112e7a77af507d25b9b2dca..2b163fdff1a29c26f98380a0c3b19666a86749fe 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -16,24 +16,50 @@
 
 package eu.teraflow.automation;
 
+import acl.Acl;
 import automation.Automation;
 import context.ContextOuterClass;
+import context.ContextOuterClass.ConfigRule_ACL;
+import context.ContextOuterClass.ConfigRule_Custom;
+import context.ContextOuterClass.ContextId;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
+import context.ContextOuterClass.Location.LocationCase;
 import context.ContextOuterClass.Uuid;
+import eu.teraflow.automation.acl.AclAction;
+import eu.teraflow.automation.acl.AclEntry;
+import eu.teraflow.automation.acl.AclForwardActionEnum;
+import eu.teraflow.automation.acl.AclLogActionEnum;
+import eu.teraflow.automation.acl.AclMatch;
+import eu.teraflow.automation.acl.AclRuleSet;
+import eu.teraflow.automation.acl.AclRuleTypeEnum;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleAcl;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.DeviceDriverEnum;
+import eu.teraflow.automation.context.model.DeviceEvent;
+import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceEvent;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.GpsPosition;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeGpsPosition;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import eu.teraflow.automation.context.model.TopologyId;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
 import java.util.stream.Collectors;
 import javax.inject.Singleton;
+import kpi_sample_types.KpiSampleTypes;
 
 @Singleton
 public class Serializer {
@@ -153,18 +179,32 @@ public class Serializer {
         }
     }
 
+    public ContextOuterClass.Timestamp serialize(double timestamp) {
+        final var builder = ContextOuterClass.Timestamp.newBuilder();
+
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public double deserialize(ContextOuterClass.Timestamp serializedTimeStamp) {
+
+        return serializedTimeStamp.getTimestamp();
+    }
+
     public ContextOuterClass.Event serialize(Event event) {
         final var builder = ContextOuterClass.Event.newBuilder();
 
         final var eventType = serialize(event.getEventTypeEnum());
+        final var timestamp = serialize(event.getTimestamp());
         builder.setEventType(eventType);
-        builder.setTimestamp(event.getTimestamp());
+        builder.setTimestamp(timestamp);
 
         return builder.build();
     }
 
     public Event deserialize(ContextOuterClass.Event serializedEvent) {
-        final var timestamp = serializedEvent.getTimestamp();
+        final var timestamp = deserialize(serializedEvent.getTimestamp());
         final var eventType = deserialize(serializedEvent.getEventType());
 
         return new Event(timestamp, eventType);
@@ -213,21 +253,406 @@ public class Serializer {
         }
     }
 
+    public ContextId serializeContextId(String expectedContextId) {
+        final var builder = ContextId.newBuilder();
+        final var uuid = serializeUuid(expectedContextId);
+
+        builder.setContextUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(ContextId contextId) {
+        return contextId.getContextUuid().getUuid();
+    }
+
+    public ContextOuterClass.TopologyId serialize(TopologyId topologyId) {
+        final var builder = ContextOuterClass.TopologyId.newBuilder();
+
+        final var topologyIdContextId = topologyId.getContextId();
+        final var topologyIdId = topologyId.getId();
+
+        final var contextId = serializeContextId(topologyIdContextId);
+        final var topologyIdIdUuid = serializeUuid(topologyIdId);
+
+        builder.setContextId(contextId);
+        builder.setTopologyUuid(topologyIdIdUuid);
+
+        return builder.build();
+    }
+
+    public TopologyId deserialize(ContextOuterClass.TopologyId topologyId) {
+        final var topologyIdContextId = deserialize(topologyId.getContextId());
+        final var topologyIdId = deserialize(topologyId.getTopologyUuid());
+
+        return new TopologyId(topologyIdContextId, topologyIdId);
+    }
+
+    public ContextOuterClass.EndPointId serialize(EndPointId endPointId) {
+        final var builder = ContextOuterClass.EndPointId.newBuilder();
+
+        final var endPointIdTopologyId = endPointId.getTopologyId();
+        final var endPointIdDeviceId = endPointId.getDeviceId();
+        final var endPointIdId = endPointId.getId();
+
+        final var serializedTopologyId = serialize(endPointIdTopologyId);
+        final var serializedDeviceId = serializeDeviceId(endPointIdDeviceId);
+        final var serializedEndPointIdId = serializeUuid(endPointIdId);
+
+        builder.setTopologyId(serializedTopologyId);
+        builder.setDeviceId(serializedDeviceId);
+        builder.setEndpointUuid(serializedEndPointIdId);
+
+        return builder.build();
+    }
+
+    public EndPointId deserialize(ContextOuterClass.EndPointId serializedEndPointId) {
+        final var serializedTopologyId = serializedEndPointId.getTopologyId();
+        final var serializedDeviceId = serializedEndPointId.getDeviceId();
+        final var serializedId = serializedEndPointId.getEndpointUuid();
+
+        final var topologyId = deserialize(serializedTopologyId);
+        final var deviceId = deserialize(serializedDeviceId);
+        final var id = deserialize(serializedId);
+
+        return new EndPointId(topologyId, deviceId, id);
+    }
+
+    public Acl.AclRuleTypeEnum serialize(AclRuleTypeEnum aclRuleTypeEnum) {
+        switch (aclRuleTypeEnum) {
+            case IPV4:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4;
+            case IPV6:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6;
+            case L2:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_L2;
+            case MPLS:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS;
+            case MIXED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED;
+            case UNDEFINED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED;
+            default:
+                return Acl.AclRuleTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclRuleTypeEnum deserialize(Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        switch (serializedAclRuleTypeEnum) {
+            case ACLRULETYPE_IPV4:
+                return AclRuleTypeEnum.IPV4;
+            case ACLRULETYPE_IPV6:
+                return AclRuleTypeEnum.IPV6;
+            case ACLRULETYPE_L2:
+                return AclRuleTypeEnum.L2;
+            case ACLRULETYPE_MPLS:
+                return AclRuleTypeEnum.MPLS;
+            case ACLRULETYPE_MIXED:
+                return AclRuleTypeEnum.MIXED;
+            case UNRECOGNIZED:
+            default:
+                return AclRuleTypeEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclMatch serialize(AclMatch aclMatch) {
+        final var builder = Acl.AclMatch.newBuilder();
+
+        final var dscp = aclMatch.getDscp();
+        final var protocol = aclMatch.getProtocol();
+        final var srcAddress = aclMatch.getSrcAddress();
+        final var dstAddress = aclMatch.getDstAddress();
+        final var srcPort = aclMatch.getSrcPort();
+        final var dstPort = aclMatch.getDstPort();
+        final var startMplsLabel = aclMatch.getStartMplsLabel();
+        final var endMplsLabel = aclMatch.getEndMplsLabel();
+
+        builder.setDscp(dscp);
+        builder.setProtocol(protocol);
+        builder.setSrcAddress(srcAddress);
+        builder.setDstAddress(dstAddress);
+        builder.setSrcPort(srcPort);
+        builder.setDstPort(dstPort);
+        builder.setStartMplsLabel(startMplsLabel);
+        builder.setEndMplsLabel(endMplsLabel);
+
+        return builder.build();
+    }
+
+    public AclMatch deserialize(Acl.AclMatch serializedAclMatch) {
+        final var dscp = serializedAclMatch.getDscp();
+        final var protocol = serializedAclMatch.getProtocol();
+        final var srcAddress = serializedAclMatch.getSrcAddress();
+        final var dstAddress = serializedAclMatch.getDstAddress();
+        final var srcPort = serializedAclMatch.getSrcPort();
+        final var dstPort = serializedAclMatch.getDstPort();
+        final var startMplsLabel = serializedAclMatch.getStartMplsLabel();
+        final var endMplsLabel = serializedAclMatch.getEndMplsLabel();
+
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    public Acl.AclForwardActionEnum serialize(AclForwardActionEnum aclForwardActionEnum) {
+        switch (aclForwardActionEnum) {
+            case DROP:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP;
+            case ACCEPT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT;
+            case REJECT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT;
+            case UNDEFINED:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED;
+            default:
+                return Acl.AclForwardActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclForwardActionEnum deserialize(Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        switch (serializedAclForwardActionEnum) {
+            case ACLFORWARDINGACTION_DROP:
+                return AclForwardActionEnum.DROP;
+            case ACLFORWARDINGACTION_ACCEPT:
+                return AclForwardActionEnum.ACCEPT;
+            case ACLFORWARDINGACTION_REJECT:
+                return AclForwardActionEnum.REJECT;
+            case UNRECOGNIZED:
+            default:
+                return AclForwardActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclLogActionEnum serialize(AclLogActionEnum aclLogActionEnum) {
+        switch (aclLogActionEnum) {
+            case NO_LOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_NOLOG;
+            case SYSLOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG;
+            case UNDEFINED:
+                return Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED;
+            default:
+                return Acl.AclLogActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclLogActionEnum deserialize(Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        switch (serializedAclLogActionEnum) {
+            case ACLLOGACTION_NOLOG:
+                return AclLogActionEnum.NO_LOG;
+            case ACLLOGACTION_SYSLOG:
+                return AclLogActionEnum.SYSLOG;
+            case UNRECOGNIZED:
+            default:
+                return AclLogActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclAction serialize(AclAction aclAction) {
+        final var builder = Acl.AclAction.newBuilder();
+
+        final var aclForwardActionEnum = aclAction.getAclForwardActionEnum();
+        final var aclLogActionEnum = aclAction.getAclLogActionEnum();
+
+        final var serializedAclForwardActionEnum = serialize(aclForwardActionEnum);
+        final var serializedAclLogActionEnum = serialize(aclLogActionEnum);
+
+        builder.setForwardAction(serializedAclForwardActionEnum);
+        builder.setLogAction(serializedAclLogActionEnum);
+
+        return builder.build();
+    }
+
+    public AclAction deserialize(Acl.AclAction serializedAclAction) {
+        final var serializedAclForwardActionEnum = serializedAclAction.getForwardAction();
+        final var serializedAclLogActionEnum = serializedAclAction.getLogAction();
+
+        final var aclForwardActionEnum = deserialize(serializedAclForwardActionEnum);
+        final var aclLogActionEnum = deserialize(serializedAclLogActionEnum);
+
+        return new AclAction(aclForwardActionEnum, aclLogActionEnum);
+    }
+
+    public Acl.AclEntry serialize(AclEntry aclEntry) {
+        final var builder = Acl.AclEntry.newBuilder();
+
+        final var sequenceId = aclEntry.getSequenceId();
+        final var description = aclEntry.getDescription();
+        final var aclMatch = aclEntry.getMatch();
+        final var aclAction = aclEntry.getAction();
+
+        final var serializedAclMatch = serialize(aclMatch);
+        final var serializedAclAction = serialize(aclAction);
+
+        builder.setSequenceId(sequenceId);
+        builder.setDescription(description);
+        builder.setMatch(serializedAclMatch);
+        builder.setAction(serializedAclAction);
+
+        return builder.build();
+    }
+
+    public AclEntry deserialize(Acl.AclEntry serializedAclEntry) {
+        final var sequenceId = serializedAclEntry.getSequenceId();
+        final var description = serializedAclEntry.getDescription();
+        final var serializedAclMatch = serializedAclEntry.getMatch();
+        final var serializedAclAction = serializedAclEntry.getAction();
+
+        final var aclMatch = deserialize(serializedAclMatch);
+        final var aclAction = deserialize(serializedAclAction);
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
+    public Acl.AclRuleSet serialize(AclRuleSet aclRuleSet) {
+        final var builder = Acl.AclRuleSet.newBuilder();
+
+        final var name = aclRuleSet.getName();
+        final var type = aclRuleSet.getType();
+        final var description = aclRuleSet.getDescription();
+        final var userId = aclRuleSet.getUserId();
+        final var entries = aclRuleSet.getEntries();
+
+        final var serializedType = serialize(type);
+        final var serializedEntries =
+                entries.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setName(name);
+        builder.setType(serializedType);
+        builder.setDescription(description);
+        builder.setUserId(userId);
+        builder.addAllEntries(serializedEntries);
+
+        return builder.build();
+    }
+
+    public AclRuleSet deserialize(Acl.AclRuleSet serializedAclRuleSet) {
+        final var serializedName = serializedAclRuleSet.getName();
+        final var serializedType = serializedAclRuleSet.getType();
+        final var serializedDescription = serializedAclRuleSet.getDescription();
+        final var serializedUserId = serializedAclRuleSet.getUserId();
+        final var serializedEntries = serializedAclRuleSet.getEntriesList();
+
+        final var type = deserialize(serializedType);
+        final var entries =
+                serializedEntries.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new AclRuleSet(serializedName, type, serializedDescription, serializedUserId, entries);
+    }
+
+    public ConfigRule_ACL serialize(ConfigRuleAcl configRuleAcl) {
+        final var builder = ContextOuterClass.ConfigRule_ACL.newBuilder();
+
+        final var endPointId = configRuleAcl.getEndPointId();
+        final var aclRuleSet = configRuleAcl.getRuleSet();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedAclRuleSet = serialize(aclRuleSet);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setRuleSet(serializedAclRuleSet);
+
+        return builder.build();
+    }
+
+    public ConfigRuleAcl deserialize(ConfigRule_ACL serializedConfigRuleAcl) {
+        final var serializedEndPointId = serializedConfigRuleAcl.getEndpointId();
+        final var serializedAclRuleSet = serializedConfigRuleAcl.getRuleSet();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var aclRuleSet = deserialize(serializedAclRuleSet);
+
+        return new ConfigRuleAcl(endPointId, aclRuleSet);
+    }
+
+    public ConfigRule_Custom serialize(ConfigRuleCustom configRuleCustom) {
+        final var builder = ConfigRule_Custom.newBuilder();
+
+        final var resourceKey = configRuleCustom.getResourceKey();
+        final var resourceValue = configRuleCustom.getResourceValue();
+
+        builder.setResourceKey(resourceKey);
+        builder.setResourceValue(resourceValue);
+
+        return builder.build();
+    }
+
+    public ConfigRuleCustom deserialize(ConfigRule_Custom serializedConfigRuleCustom) {
+        final var serializedResourceKey = serializedConfigRuleCustom.getResourceKey();
+        final var serializedResourceValue = serializedConfigRuleCustom.getResourceValue();
+
+        return new ConfigRuleCustom(serializedResourceKey, serializedResourceValue);
+    }
+
     public ContextOuterClass.ConfigRule serialize(ConfigRule configRule) {
         final var builder = ContextOuterClass.ConfigRule.newBuilder();
 
-        builder.setAction(serialize(configRule.getConfigActionEnum()));
-        builder.setResourceKey(configRule.getResourceKey());
-        builder.setResourceValue(configRule.getResourceValue());
+        final var configActionEnum = configRule.getConfigActionEnum();
+        final var configRuleType = configRule.getConfigRuleType();
+        final var configRuleTypeSpecificType = configRuleType.getConfigRuleType();
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleAcl) {
+            final var endPointId = ((ConfigRuleAcl) configRuleTypeSpecificType).getEndPointId();
+            final var aclRuleSet = ((ConfigRuleAcl) configRuleTypeSpecificType).getRuleSet();
+
+            final var serializedEndPointId = serialize(endPointId);
+            final var serializedAclRuleSet = serialize(aclRuleSet);
+
+            final var serializedConfigRuleAcl =
+                    ConfigRule_ACL.newBuilder()
+                            .setEndpointId(serializedEndPointId)
+                            .setRuleSet(serializedAclRuleSet)
+                            .build();
+
+            builder.setAcl(serializedConfigRuleAcl);
+        }
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleCustom) {
+            final var configRuleCustomResourceKey =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceKey();
+            final var configRuleCustomResourceValue =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceValue();
+
+            final var serializedConfigRuleCustom =
+                    ConfigRule_Custom.newBuilder()
+                            .setResourceKey(configRuleCustomResourceKey)
+                            .setResourceValue(configRuleCustomResourceValue)
+                            .build();
+
+            builder.setCustom(serializedConfigRuleCustom);
+        }
+
+        final var serializedConfigActionEnum = serialize(configActionEnum);
+
+        builder.setAction(serializedConfigActionEnum);
 
         return builder.build();
     }
 
-    public ConfigRule deserialize(ContextOuterClass.ConfigRule configRule) {
-        final var configActionEnum = deserialize(configRule.getAction());
+    public ConfigRule deserialize(ContextOuterClass.ConfigRule serializedConfigRule) {
+        final var serializedConfigActionEnum = serializedConfigRule.getAction();
+        final var typeOfConfigRule = serializedConfigRule.getConfigRuleCase();
+
+        final var configActionEnum = deserialize(serializedConfigActionEnum);
+
+        switch (typeOfConfigRule) {
+            case ACL:
+                final var serializedConfigRuleAcl = serializedConfigRule.getAcl();
+
+                final var configRuleAcl = deserialize(serializedConfigRuleAcl);
+                final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+                return new ConfigRule(configActionEnum, configRuleTypeAcl);
+            case CUSTOM:
+                final var serializedConfigRuleCustom = serializedConfigRule.getCustom();
 
-        return new ConfigRule(
-                configActionEnum, configRule.getResourceKey(), configRule.getResourceValue());
+                final var configRuleCustom = deserialize(serializedConfigRuleCustom);
+                final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom);
+
+                return new ConfigRule(configActionEnum, configRuleTypeCustom);
+            default:
+            case CONFIGRULE_NOT_SET:
+                throw new IllegalStateException("Config Rule not set");
+        }
     }
 
     public ContextOuterClass.DeviceConfig serialize(DeviceConfig deviceConfig) {
@@ -275,26 +700,224 @@ public class Serializer {
         }
     }
 
+    public KpiSampleTypes.KpiSampleType serialize(KpiSampleType kpiSampleType) {
+        switch (kpiSampleType) {
+            case PACKETS_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED;
+            case PACKETS_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED;
+            case BYTES_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED;
+            case BYTES_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED;
+            case UNKNOWN:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN;
+            default:
+                return KpiSampleTypes.KpiSampleType.UNRECOGNIZED;
+        }
+    }
+
+    public KpiSampleType deserialize(KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        switch (serializedKpiSampleType) {
+            case KPISAMPLETYPE_PACKETS_TRANSMITTED:
+                return KpiSampleType.PACKETS_TRANSMITTED;
+            case KPISAMPLETYPE_PACKETS_RECEIVED:
+                return KpiSampleType.PACKETS_RECEIVED;
+            case KPISAMPLETYPE_BYTES_TRANSMITTED:
+                return KpiSampleType.BYTES_TRANSMITTED;
+            case KPISAMPLETYPE_BYTES_RECEIVED:
+                return KpiSampleType.BYTES_RECEIVED;
+            case KPISAMPLETYPE_UNKNOWN:
+            default:
+                return KpiSampleType.UNKNOWN;
+        }
+    }
+
+    public ContextOuterClass.Location serialize(Location location) {
+        final var builder = ContextOuterClass.Location.newBuilder();
+
+        final var locationType = location.getLocationType();
+        final var locationTypeSpecificType = locationType.getLocationType();
+
+        if (locationTypeSpecificType instanceof GpsPosition) {
+            final var latitude = ((GpsPosition) locationTypeSpecificType).getLatitude();
+            final var longitude = ((GpsPosition) locationTypeSpecificType).getLongitude();
+
+            final var serializedGpsPosition =
+                    ContextOuterClass.GPS_Position.newBuilder()
+                            .setLatitude(latitude)
+                            .setLongitude(longitude)
+                            .build();
+
+            builder.setGpsPosition(serializedGpsPosition);
+        }
+
+        if (locationTypeSpecificType instanceof String) {
+            final var region = ((String) locationTypeSpecificType);
+
+            builder.setRegion(region);
+        }
+
+        return builder.build();
+    }
+
+    public Location deserialize(ContextOuterClass.Location serializedLocation) {
+        final var typeOfLocation = serializedLocation.getLocationCase();
+
+        switch (typeOfLocation) {
+            case REGION:
+                final var region = serializedLocation.getRegion();
+                final var locationTypeRegion = new LocationTypeRegion(region);
+
+                return new Location(locationTypeRegion);
+            case GPS_POSITION:
+                final var serializedGpsPosition = serializedLocation.getGpsPosition();
+                final var latitude = serializedGpsPosition.getLatitude();
+                final var longitude = serializedGpsPosition.getLongitude();
+
+                final var gpsPosition = new GpsPosition(latitude, longitude);
+                final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+
+                return new Location(locationTypeGpsPosition);
+            default:
+            case LOCATION_NOT_SET:
+                throw new IllegalStateException("Location value not set");
+        }
+    }
+
+    public ContextOuterClass.DeviceDriverEnum serialize(DeviceDriverEnum deviceDriverEnum) {
+        switch (deviceDriverEnum) {
+            case OPENCONFIG:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG;
+            case TRANSPORT_API:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API;
+            case P4:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4;
+            case IETF_NETWORK_TOPOLOGY:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
+            case ONF_TR_352:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352;
+            case UNDEFINED:
+            default:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED;
+        }
+    }
+
+    public DeviceDriverEnum deserialize(
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        switch (serializedDeviceDriverEnum) {
+            case DEVICEDRIVER_OPENCONFIG:
+                return DeviceDriverEnum.OPENCONFIG;
+            case DEVICEDRIVER_TRANSPORT_API:
+                return DeviceDriverEnum.TRANSPORT_API;
+            case DEVICEDRIVER_P4:
+                return DeviceDriverEnum.P4;
+            case DEVICEDRIVER_IETF_NETWORK_TOPOLOGY:
+                return DeviceDriverEnum.IETF_NETWORK_TOPOLOGY;
+            case DEVICEDRIVER_ONF_TR_352:
+                return DeviceDriverEnum.ONF_TR_352;
+            case DEVICEDRIVER_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceDriverEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.EndPoint serialize(EndPoint endPoint) {
+        final var builder = ContextOuterClass.EndPoint.newBuilder();
+
+        final var endPointId = endPoint.getEndPointId();
+        final var endPointType = endPoint.getEndPointType();
+        final var kpiSampleTypes = endPoint.getKpiSampleTypes();
+        final var endPointLocation = endPoint.getEndPointLocation();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
+        if (endPointLocation != null) {
+            final var serializedEndPointLocation = serialize(endPointLocation);
+            builder.setEndpointLocation(serializedEndPointLocation);
+        }
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setEndpointType(endPointType);
+        builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
+
+        return builder.build();
+    }
+
+    public EndPoint deserialize(ContextOuterClass.EndPoint serializedEndPoint) {
+        final var serializedEndPointId = serializedEndPoint.getEndpointId();
+        final var endPointType = serializedEndPoint.getEndpointType();
+        final var serializedKpiSampleTypes = serializedEndPoint.getKpiSampleTypesList();
+        final var serializedEndPointLocation = serializedEndPoint.getEndpointLocation();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var kpiSampleTypes =
+                serializedKpiSampleTypes.stream().map(this::deserialize).collect(Collectors.toList());
+
+        if (serializedEndPointLocation.getLocationCase() != LocationCase.LOCATION_NOT_SET) {
+            final var endPointLocation = deserialize(serializedEndPointLocation);
+            return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes)
+                    .location(endPointLocation)
+                    .build();
+        }
+
+        return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
+    }
+
     public ContextOuterClass.Device serialize(Device device) {
         final var builder = ContextOuterClass.Device.newBuilder();
+
         final var deviceIdUuid = serializeUuid(device.getDeviceId());
         final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid);
+        final var deviceType = device.getDeviceType();
+        final var deviceConfig = device.getDeviceConfig();
+        final var deviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var deviceDrivers = device.getDeviceDrivers();
+        final var deviceEndPoints = device.getEndPoints();
+
+        final var serializedDeviceConfig = serialize(deviceConfig);
+        final var serializedDeviceOperationalStatus = serialize(deviceOperationalStatus);
+        final var serializedDeviceDrivers =
+                deviceDrivers.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedDeviceEndPoints =
+                deviceEndPoints.stream().map(this::serialize).collect(Collectors.toList());
 
         builder.setDeviceId(deviceId);
-        builder.setDeviceType(device.getDeviceType());
-        builder.setDeviceConfig(serialize(device.getDeviceConfig()));
-        builder.setDeviceOperationalStatus(serialize(device.getDeviceOperationalStatus()));
+        builder.setDeviceType(deviceType);
+        builder.setDeviceConfig(serializedDeviceConfig);
+        builder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        builder.addAllDeviceDrivers(serializedDeviceDrivers);
+        builder.addAllDeviceEndpoints(serializedDeviceEndPoints);
 
         return builder.build();
     }
 
     public Device deserialize(ContextOuterClass.Device device) {
-        final var id = deserialize(device.getDeviceId());
-        final var type = device.getDeviceType();
-        final var config = deserialize(device.getDeviceConfig());
-        final var operationalStatus = deserialize(device.getDeviceOperationalStatus());
 
-        return new Device(id, type, config, operationalStatus);
+        final var serializedDeviceId = device.getDeviceId();
+        final var deviceType = device.getDeviceType();
+        final var serializedDeviceConfig = device.getDeviceConfig();
+        final var serializedDeviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var serializedDeviceDrivers = device.getDeviceDriversList();
+        final var serializedDeviceEndPoints = device.getDeviceEndpointsList();
+
+        final var deviceId = deserialize(serializedDeviceId);
+        final var deviceConfig = deserialize(serializedDeviceConfig);
+        final var deviceOperationalStatus = deserialize(serializedDeviceOperationalStatus);
+        final var deviceDrivers =
+                serializedDeviceDrivers.stream().map(this::deserialize).collect(Collectors.toList());
+        final var deviceEndPoints =
+                serializedDeviceEndPoints.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new Device(
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus,
+                deviceDrivers,
+                deviceEndPoints);
     }
 
     public Uuid serializeUuid(String uuid) {
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclAction.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e3621bb45959becc80f03d51ad09471dc310eeb
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclAction.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+public class AclAction {
+
+    private final AclForwardActionEnum aclForwardActionEnum;
+    private final AclLogActionEnum aclLogActionEnum;
+
+    public AclAction(AclForwardActionEnum aclForwardActionEnum, AclLogActionEnum aclLogActionEnum) {
+        this.aclForwardActionEnum = aclForwardActionEnum;
+        this.aclLogActionEnum = aclLogActionEnum;
+    }
+
+    public AclForwardActionEnum getAclForwardActionEnum() {
+        return aclForwardActionEnum;
+    }
+
+    public AclLogActionEnum getAclLogActionEnum() {
+        return aclLogActionEnum;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{aclForwardActionEnum:\"%s\", aclLogActionEnum:\"%s\"}",
+                getClass().getSimpleName(), aclForwardActionEnum.toString(), aclLogActionEnum.toString());
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclEntry.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclEntry.java
new file mode 100644
index 0000000000000000000000000000000000000000..3324a55cd0c9d165531b06aee4b3de09cce2506c
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclEntry.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+public class AclEntry {
+
+    private final int sequenceId;
+    private final String description;
+    private final AclMatch match;
+    private final AclAction action;
+
+    public AclEntry(int sequenceId, String description, AclMatch match, AclAction action) {
+        this.sequenceId = sequenceId;
+        this.description = description;
+        this.match = match;
+        this.action = action;
+    }
+
+    public int getSequenceId() {
+        return sequenceId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public AclMatch getMatch() {
+        return match;
+    }
+
+    public AclAction getAction() {
+        return action;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{sequenceId:\"%d\", description:\"%s\", %s, %s}",
+                getClass().getSimpleName(), sequenceId, description, match, action);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclForwardActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclForwardActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..9afaabcd945adcbf474499efee930c54f7e12649
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclForwardActionEnum.java
@@ -0,0 +1,24 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+public enum AclForwardActionEnum {
+    UNDEFINED,
+    DROP,
+    ACCEPT,
+    REJECT,
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclLogActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclLogActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb9a75b43a67c1445239231c456f49546308b16f
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclLogActionEnum.java
@@ -0,0 +1,23 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+public enum AclLogActionEnum {
+    UNDEFINED,
+    NO_LOG,
+    SYSLOG
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclMatch.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclMatch.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca679ea3691ce5c05a64caa17bc86cfc3436dfc2
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclMatch.java
@@ -0,0 +1,95 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+public class AclMatch {
+
+    private final int dscp;
+    private final int protocol;
+    private final String srcAddress;
+    private final String dstAddress;
+    private final int srcPort;
+    private final int dstPort;
+    private final int startMplsLabel;
+    private final int endMplsLabel;
+
+    public AclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        this.dscp = dscp;
+        this.protocol = protocol;
+        this.srcAddress = srcAddress;
+        this.dstAddress = dstAddress;
+        this.srcPort = srcPort;
+        this.dstPort = dstPort;
+        this.startMplsLabel = startMplsLabel;
+        this.endMplsLabel = endMplsLabel;
+    }
+
+    public int getDscp() {
+        return dscp;
+    }
+
+    public int getProtocol() {
+        return protocol;
+    }
+
+    public String getSrcAddress() {
+        return srcAddress;
+    }
+
+    public String getDstAddress() {
+        return dstAddress;
+    }
+
+    public int getSrcPort() {
+        return srcPort;
+    }
+
+    public int getDstPort() {
+        return dstPort;
+    }
+
+    public int getStartMplsLabel() {
+        return startMplsLabel;
+    }
+
+    public int getEndMplsLabel() {
+        return endMplsLabel;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{dscp:\"%d\", protocol:\"%d\", srcAddress:\"%s\", dstAddress:\"%s\", srcPort:\"%d\", dstPort:\"%d\", startMplsLabel:\"%d\", endMplsLabel:\"%d\"}",
+                getClass().getSimpleName(),
+                dscp,
+                protocol,
+                srcAddress,
+                dstAddress,
+                srcPort,
+                dstPort,
+                startMplsLabel,
+                endMplsLabel);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..6dacab0480647609b85c9b45504341e6b47600fa
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java
@@ -0,0 +1,74 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+import eu.teraflow.automation.common.Util;
+import java.util.List;
+
+public class AclRuleSet {
+
+    private final String name;
+    private final AclRuleTypeEnum type;
+    private final String description;
+    private final String userId;
+    private final List<AclEntry> entries;
+
+    public AclRuleSet(
+            String name,
+            AclRuleTypeEnum type,
+            String description,
+            String userId,
+            List<AclEntry> entries) {
+        this.name = name;
+        this.type = type;
+        this.description = description;
+        this.userId = userId;
+        this.entries = entries;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public AclRuleTypeEnum getType() {
+        return type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public List<AclEntry> getEntries() {
+        return entries;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{name:\"%s\", type:\"%s\", description:\"%s\", userId:\"%s\", [%s]}",
+                getClass().getSimpleName(),
+                name,
+                type.toString(),
+                description,
+                userId,
+                Util.toString(entries));
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleTypeEnum.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleTypeEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..2361e21c10ab940337503d478798ed1d90075abe
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleTypeEnum.java
@@ -0,0 +1,26 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.acl;
+
+public enum AclRuleTypeEnum {
+    UNDEFINED,
+    IPV4,
+    IPV6,
+    L2,
+    MPLS,
+    MIXED
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/common/Util.java b/src/automation/src/main/java/eu/teraflow/automation/common/Util.java
new file mode 100644
index 0000000000000000000000000000000000000000..aeb5a14f48a2ed9524479bacd6d85e51fc410e7f
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/common/Util.java
@@ -0,0 +1,29 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.common;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class Util {
+
+    private Util() {}
+
+    public static <T> String toString(List<T> list) {
+        return list.stream().map(T::toString).collect(Collectors.joining(", "));
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
index 3bae4161d61d7c94f639b3953324981dca2a1b3d..2b96acecebc7fbf76167931d953af27c46338fe8 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
index 7bec6413818342f955abcaa2497f8c174951e8dd..7a50500377399692bd6f1497b8fd4366da55a413 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
@@ -19,8 +19,8 @@ package eu.teraflow.automation.context;
 import context.ContextOuterClass;
 import context.MutinyContextServiceGrpc.MutinyContextServiceStub;
 import eu.teraflow.automation.Serializer;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
index c3e01a1258c0bf99827fd81f0c2e9c087498d803..f5316dc4158d514d3b524f52a63f92317b777ddb 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
index 10d16bdf9e8eec3434899ef1454762619afdc805..fc65296b7c39b86567e63169e0a6f7d1b0f43fce 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigActionEnum.java
similarity index 93%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java
rename to src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigActionEnum.java
index bbe8d5916975d8541000c9df748fe1a79c3037f6..f79562d0dc69cf1582998c7bd6625634498174d4 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigActionEnum.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.automation.context.model;
 
 public enum ConfigActionEnum {
     UNDEFINED,
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRule.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRule.java
new file mode 100644
index 0000000000000000000000000000000000000000..334bb8964a917f27c752360e362796389f8b0056
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRule.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class ConfigRule {
+
+    private final ConfigActionEnum configActionEnum;
+    private final ConfigRuleType<?> configRuleType;
+
+    public ConfigRule(ConfigActionEnum configActionEnum, ConfigRuleType<?> configRuleType) {
+        this.configActionEnum = configActionEnum;
+        this.configRuleType = configRuleType;
+    }
+
+    public ConfigActionEnum getConfigActionEnum() {
+        return configActionEnum;
+    }
+
+    public ConfigRuleType getConfigRuleType() {
+        return configRuleType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{configActionEnum:\"%s\", %s}",
+                getClass().getSimpleName(), configActionEnum, configRuleType);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleAcl.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c749519fdddaf6f5466f81d713bdece51ff7f026
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleAcl.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+import eu.teraflow.automation.acl.AclRuleSet;
+
+public class ConfigRuleAcl {
+
+    private final EndPointId endPointId;
+    private final AclRuleSet ruleSet;
+
+    public ConfigRuleAcl(EndPointId endPointId, AclRuleSet ruleSet) {
+        this.endPointId = endPointId;
+        this.ruleSet = ruleSet;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public AclRuleSet getRuleSet() {
+        return ruleSet;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), endPointId, ruleSet);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleCustom.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..d60411fb4acc88e73ed840d827ca1d078fd36856
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleCustom.java
@@ -0,0 +1,41 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class ConfigRuleCustom {
+
+    private final String resourceKey;
+    private final String resourceValue;
+
+    public ConfigRuleCustom(String resourceKey, String resourceValue) {
+        this.resourceKey = resourceKey;
+        this.resourceValue = resourceValue;
+    }
+
+    public String getResourceKey() {
+        return resourceKey;
+    }
+
+    public String getResourceValue() {
+        return resourceValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), resourceKey, resourceValue);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleType.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..874c633d0f0509381851a728413a1fc909cb380d
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleType.java
@@ -0,0 +1,22 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public interface ConfigRuleType<T> {
+
+    public T getConfigRuleType();
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeAcl.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..f802549132f0a48973442bbbee6240d1611d2fa1
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeAcl.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class ConfigRuleTypeAcl implements ConfigRuleType<ConfigRuleAcl> {
+
+    private final ConfigRuleAcl configRuleAcl;
+
+    public ConfigRuleTypeAcl(ConfigRuleAcl configRuleAcl) {
+        this.configRuleAcl = configRuleAcl;
+    }
+
+    @Override
+    public ConfigRuleAcl getConfigRuleType() {
+        return this.configRuleAcl;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:%s}", getClass().getSimpleName(), configRuleAcl);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeCustom.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..86137244d166e254ab27952ecb85611474ae14eb
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeCustom.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class ConfigRuleTypeCustom implements ConfigRuleType<ConfigRuleCustom> {
+
+    private final ConfigRuleCustom configRuleCustom;
+
+    public ConfigRuleTypeCustom(ConfigRuleCustom configRuleCustom) {
+        this.configRuleCustom = configRuleCustom;
+    }
+
+    @Override
+    public ConfigRuleCustom getConfigRuleType() {
+        return this.configRuleCustom;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:%s}", getClass().getSimpleName(), configRuleCustom);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java
new file mode 100644
index 0000000000000000000000000000000000000000..77bd3ca5c861713b43faf178c6450e35e6032b3c
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java
@@ -0,0 +1,108 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+import eu.teraflow.automation.common.Util;
+import java.util.List;
+
+public class Device {
+
+    private final String deviceId;
+    private final String deviceType;
+    private DeviceConfig deviceConfig;
+    private DeviceOperationalStatus deviceOperationalStatus;
+    private List<DeviceDriverEnum> deviceDrivers;
+    private List<EndPoint> endPoints;
+
+    public Device(
+            String deviceId,
+            String deviceType,
+            DeviceConfig deviceConfig,
+            DeviceOperationalStatus deviceOperationalStatus,
+            List<DeviceDriverEnum> deviceDrivers,
+            List<EndPoint> endPoints) {
+
+        this.deviceId = deviceId;
+        this.deviceType = deviceType;
+        this.deviceConfig = deviceConfig;
+        this.deviceOperationalStatus = deviceOperationalStatus;
+        this.deviceDrivers = deviceDrivers;
+        this.endPoints = endPoints;
+    }
+
+    public Device(
+            String deviceId,
+            String deviceType,
+            DeviceOperationalStatus deviceOperationalStatus,
+            List<DeviceDriverEnum> deviceDrivers,
+            List<EndPoint> endPoints) {
+        this.deviceId = deviceId;
+        this.deviceType = deviceType;
+        this.deviceOperationalStatus = deviceOperationalStatus;
+        this.deviceDrivers = deviceDrivers;
+        this.endPoints = endPoints;
+    }
+
+    public boolean isEnabled() {
+        return deviceOperationalStatus == DeviceOperationalStatus.ENABLED;
+    }
+
+    public void enableDevice() {
+        this.deviceOperationalStatus = DeviceOperationalStatus.ENABLED;
+    }
+
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    public String getDeviceType() {
+        return deviceType;
+    }
+
+    public DeviceConfig getDeviceConfig() {
+        return deviceConfig;
+    }
+
+    public List<DeviceDriverEnum> getDeviceDrivers() {
+        return deviceDrivers;
+    }
+
+    public List<EndPoint> getEndPoints() {
+        return endPoints;
+    }
+
+    public DeviceOperationalStatus getDeviceOperationalStatus() {
+        return deviceOperationalStatus;
+    }
+
+    public void setDeviceConfiguration(DeviceConfig deviceConfig) {
+        this.deviceConfig = deviceConfig;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{deviceId:\"%s\", deviceType:\"%s\", %s, deviceOperationalStatus=\"%s\", [%s], [%s]}",
+                getClass().getSimpleName(),
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus.toString(),
+                Util.toString(deviceDrivers),
+                Util.toString(endPoints));
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceConfig.java
similarity index 96%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java
rename to src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceConfig.java
index 6365b0ed9eeb1a5ebb0596c060e32e49d2f14e2f..edf2dbc6ff96bd26ee45345928b0c6d33b4ec73a 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceConfig.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.automation.context.model;
 
 import java.util.List;
 import java.util.stream.Collectors;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fc767ac2e5d7fed70f0375fcf8c820e30fbb149
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
@@ -0,0 +1,26 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public enum DeviceDriverEnum {
+    UNDEFINED,
+    OPENCONFIG,
+    TRANSPORT_API,
+    P4,
+    IETF_NETWORK_TOPOLOGY,
+    ONF_TR_352
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceEvent.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java
similarity index 92%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceEvent.java
rename to src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java
index 5a021276c751813fa0fc1b0497ce514d5d4d5e72..efc0be8308fb9a75132cd604a84fd5b4822f3af7 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceEvent.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java
@@ -14,9 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
-
-import eu.teraflow.automation.context.model.Event;
+package eu.teraflow.automation.context.model;
 
 public class DeviceEvent {
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceOperationalStatus.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceOperationalStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..50486469f1c8e9f8b9f965723b3432dbb7d0d4ca
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceOperationalStatus.java
@@ -0,0 +1,23 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public enum DeviceOperationalStatus {
+    UNDEFINED,
+    DISABLED,
+    ENABLED
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java
new file mode 100644
index 0000000000000000000000000000000000000000..25b3864c5d367b7767dc8afb52e9edc04bb31817
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java
@@ -0,0 +1,105 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+import eu.teraflow.automation.common.Util;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
+import java.util.List;
+
+public class EndPoint {
+    private final EndPointId endPointId;
+    private final String endPointType;
+    private final List<KpiSampleType> kpiSampleTypes;
+    private final Location endPointLocation;
+
+    EndPoint(EndPointBuilder builder) {
+        this.endPointId = builder.endPointId;
+        this.endPointType = builder.endPointType;
+        this.kpiSampleTypes = builder.kpiSampleTypes;
+        this.endPointLocation = builder.endPointLocation;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public String getEndPointType() {
+        return endPointType;
+    }
+
+    public List<KpiSampleType> getKpiSampleTypes() {
+        return kpiSampleTypes;
+    }
+
+    public Location getEndPointLocation() {
+        return endPointLocation;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, endPointType:\"%s\", [%s], %s}",
+                getClass().getSimpleName(),
+                endPointId,
+                endPointType,
+                Util.toString(kpiSampleTypes),
+                endPointLocation);
+    }
+
+    public static class EndPointBuilder {
+        private final EndPointId endPointId;
+        private final String endPointType;
+        private final List<KpiSampleType> kpiSampleTypes;
+        private Location endPointLocation;
+
+        public EndPointBuilder(
+                EndPointId endPointId, String endPointType, List<KpiSampleType> kpiSampleTypes) {
+            this.endPointId = endPointId;
+            this.endPointType = endPointType;
+            this.kpiSampleTypes = kpiSampleTypes;
+        }
+
+        public EndPointBuilder location(Location endPointLocation) {
+            this.endPointLocation = endPointLocation;
+            return this;
+        }
+
+        public EndPoint build() {
+            EndPoint endPoint = new EndPoint(this);
+            validateEndPointObject(endPoint);
+            return endPoint;
+        }
+
+        private void validateEndPointObject(EndPoint endPoint) {
+            final var validatedEndPointId = endPoint.getEndPointId();
+            final var validatedEndPointType = endPoint.getEndPointType();
+            final var validatedKpiSampleTypes = endPoint.getKpiSampleTypes();
+
+            if (validatedEndPointId == null) {
+                throw new IllegalStateException("EndPoint ID cannot be null");
+            }
+
+            if (validatedEndPointType == null) {
+                throw new IllegalStateException("EndPoint type cannot be null");
+            }
+
+            if (validatedKpiSampleTypes == null) {
+                throw new IllegalStateException("Kpi sample types cannot be null");
+            }
+        }
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPointId.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPointId.java
new file mode 100644
index 0000000000000000000000000000000000000000..c94bcb0b16ecdb638bd37aea468b70e52ee68f99
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPointId.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class EndPointId {
+
+    private final TopologyId topologyId;
+    private final String deviceId;
+    private final String id;
+
+    public EndPointId(TopologyId topologyId, String deviceId, String id) {
+        this.topologyId = topologyId;
+        this.deviceId = deviceId;
+        this.id = id;
+    }
+
+    public TopologyId getTopologyId() {
+        return topologyId;
+    }
+
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, deviceId:\"%s\", id:\"%s\"}",
+                getClass().getSimpleName(), topologyId, deviceId, id);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/GpsPosition.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/GpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ee65b706bdb84e541b37f59108e6daa4b5fbf16
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/GpsPosition.java
@@ -0,0 +1,42 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class GpsPosition {
+
+    private final float latitude;
+    private final float longitude;
+
+    public GpsPosition(float latitude, float longitude) {
+        this.latitude = latitude;
+        this.longitude = longitude;
+    }
+
+    public float getLatitude() {
+        return latitude;
+    }
+
+    public float getLongitude() {
+        return longitude;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{latitude:\"%f\", longitude:\"%f\"}", getClass().getSimpleName(), latitude, longitude);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/Location.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/Location.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd056e80c65d1f75621253f3b4021827503ac0ad
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Location.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class Location {
+
+    private final LocationType<?> locationType;
+
+    public Location(LocationType<?> locationType) {
+        this.locationType = locationType;
+    }
+
+    public LocationType getLocationType() {
+        return locationType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), locationType);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationType.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5e23ab6278d748766347b61ffb0fa481a16ef68
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationType.java
@@ -0,0 +1,22 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public interface LocationType<T> {
+
+    public T getLocationType();
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeGpsPosition.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeGpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9af77dea36948cd80ce2ce9d48c349923127839
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeGpsPosition.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class LocationTypeGpsPosition implements LocationType<GpsPosition> {
+    private final GpsPosition gpsPosition;
+
+    public LocationTypeGpsPosition(GpsPosition gpsPosition) {
+        this.gpsPosition = gpsPosition;
+    }
+
+    @Override
+    public GpsPosition getLocationType() {
+        return this.gpsPosition;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), gpsPosition);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeRegion.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeRegion.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b12ee0169504874a12125ca6cd04db877946646
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeRegion.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class LocationTypeRegion implements LocationType<String> {
+    private final String region;
+
+    public LocationTypeRegion(String region) {
+        this.region = region;
+    }
+
+    @Override
+    public String getLocationType() {
+        return this.region;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{region:\"%s\"}", getClass().getSimpleName(), region);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/TopologyId.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/TopologyId.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce9f7836f6fe9cd2fc6095f43b02875fdcb98e26
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/TopologyId.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.context.model;
+
+public class TopologyId {
+
+    private final String contextId;
+    private final String id;
+
+    public TopologyId(String contextId, String id) {
+
+        this.contextId = contextId;
+        this.id = id;
+    }
+
+    public String getContextId() {
+        return contextId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{contextId:\"%s\", id:\"%s\"}", getClass().getSimpleName(), contextId, id);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
index 41a7d18f5a858b2d4c04fbaa1ce3577f3966e4b8..8cbf0885ba6537e7bca31e5bb6efd0494e4fe879 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.device;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceGateway {
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
index 00270e478c233bbc2cc8ae7924838c835aac013e..7849e36e6965df293381e5bc8a04db552d3f28d4 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
@@ -18,8 +18,8 @@ package eu.teraflow.automation.device;
 
 import device.DeviceService;
 import eu.teraflow.automation.Serializer;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
index 0be0688b50c75184a16766dfc6cda16ad41bf3b6..229aea7dfe29a11487d3e61709981300a2ff9600 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.device;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceService {
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
index f58c03ee784f215fb7e64ebba2f26a5d8c203f3f..d5dd6fc2be73b55da9f6d31efbc21bf40c431c20 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.device;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/kpi_sample_types/model/KpiSampleType.java b/src/automation/src/main/java/eu/teraflow/automation/kpi_sample_types/model/KpiSampleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a46e8ffde183deb4a23e5fde16ae8a798fb6e4b
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/kpi_sample_types/model/KpiSampleType.java
@@ -0,0 +1,25 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation.kpi_sample_types.model;
+
+public enum KpiSampleType {
+    UNKNOWN,
+    PACKETS_TRANSMITTED,
+    PACKETS_RECEIVED,
+    BYTES_TRANSMITTED,
+    BYTES_RECEIVED
+}
diff --git a/src/automation/src/main/proto/acl.proto b/src/automation/src/main/proto/acl.proto
new file mode 120000
index 0000000000000000000000000000000000000000..158ae78eb5bdea534ba7008114c2b97ed6dffed8
--- /dev/null
+++ b/src/automation/src/main/proto/acl.proto
@@ -0,0 +1 @@
+../../../../../proto/acl.proto
\ No newline at end of file
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
index 276a74742f80d4fcf54649241f0432635f40ee4a..e250a905c8379c01383c149cc944fdd4a55a81b4 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
@@ -21,12 +21,21 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 import automation.Automation;
 import context.ContextOuterClass;
 import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.DeviceDriverEnum;
+import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
+import eu.teraflow.automation.context.model.EndPointId;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.device.DeviceGateway;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import io.quarkus.test.junit.QuarkusTest;
 import io.quarkus.test.junit.mockito.InjectMock;
 import io.smallrye.mutiny.Uni;
@@ -50,7 +59,6 @@ class AutomationFunctionalServiceTest {
 
     @Test
     void shouldConfigureDevice() {
-
         final var uuidForDeviceRoleId =
                 ContextOuterClass.Uuid.newBuilder()
                         .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
@@ -73,8 +81,14 @@ class AutomationFunctionalServiceTest {
         String deviceId = outDeviceRoleId.getDevRoleId().toString();
         String deviceType = "cisco";
 
-        ConfigRule configRule1 = new ConfigRule(ConfigActionEnum.UNDEFINED, "1", "1");
-        ConfigRule configRule2 = new ConfigRule(ConfigActionEnum.SET, "2", "2");
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        ConfigRule configRule1 = new ConfigRule(ConfigActionEnum.UNDEFINED, configRuleTypeA);
+
+        final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+        final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB);
+        ConfigRule configRule2 = new ConfigRule(ConfigActionEnum.SET, configRuleTypeB);
+
         List<ConfigRule> configRuleList = new ArrayList<>();
         configRuleList.add(configRule1);
         configRuleList.add(configRule2);
@@ -83,7 +97,42 @@ class AutomationFunctionalServiceTest {
         Uni<DeviceConfig> expectedDeviceConfigUni = Uni.createFrom().item(expectedDeviceConfig);
         Uni<String> expectedDeviceId = Uni.createFrom().item(deviceId);
 
-        Device device = new Device(deviceId, deviceType, DeviceOperationalStatus.DISABLED);
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var topologyIdA = new TopologyId("contextIdA", "idA");
+        final var deviceIdA = "deviceIdA";
+        final var idA = "idA";
+        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var topologyIdB = new TopologyId("contextIdB", "idB");
+        final var deviceIdB = "deviceIdB";
+        final var idB = "idB";
+        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        Device device =
+                new Device(
+                        deviceId, deviceType, DeviceOperationalStatus.DISABLED, deviceDrivers, endPoints);
         Uni<Device> deviceUni = Uni.createFrom().item(device);
 
         Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni);
@@ -107,8 +156,20 @@ class AutomationFunctionalServiceTest {
                             final var rulesList = deviceConfig.getDeviceConfig().getConfigRules();
 
                             for (int i = 0; i < rulesList.size(); i++) {
-                                assertThat(rulesList.get(i).getResourceKey()).isEqualTo(String.valueOf(i + 1));
-                                assertThat(rulesList.get(i).getResourceValue()).isEqualTo(String.valueOf(i + 1));
+
+                                if (rulesList.get(i).getConfigRuleType().getConfigRuleType()
+                                        instanceof ConfigRuleCustom) {
+                                    assertThat(
+                                                    ((ConfigRuleCustom)
+                                                                    rulesList.get(i).getConfigRuleType().getConfigRuleType())
+                                                            .getResourceKey())
+                                            .isEqualTo(String.valueOf(i + 1));
+                                    assertThat(
+                                                    ((ConfigRuleCustom)
+                                                                    rulesList.get(i).getConfigRuleType().getConfigRuleType())
+                                                            .getResourceValue())
+                                            .isEqualTo(String.valueOf(i + 1));
+                                }
                             }
                             assertThat(deviceConfig.getDeviceType()).isEqualTo("cisco");
                             assertThat(deviceConfig.getDeviceId()).isEqualTo(deviceId);
@@ -142,14 +203,55 @@ class AutomationFunctionalServiceTest {
 
         List<ConfigRule> configRuleList = new ArrayList<>();
 
-        ConfigRule expectedConfigRule =
-                new ConfigRule(ConfigActionEnum.UNDEFINED, "001", "already-configured");
+        final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+
+        ConfigRule expectedConfigRule = new ConfigRule(ConfigActionEnum.UNDEFINED, configRuleType);
         configRuleList.add(expectedConfigRule);
 
         DeviceConfig expectedDeviceConfig = new DeviceConfig(configRuleList);
 
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var topologyIdA = new TopologyId("contextIdA", "idA");
+        final var deviceIdA = "deviceIdA";
+        final var idA = "idA";
+        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var topologyIdB = new TopologyId("contextIdB", "idB");
+        final var deviceIdB = "deviceIdB";
+        final var idB = "idB";
+        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         Device device =
-                new Device(deviceId, deviceType, expectedDeviceConfig, DeviceOperationalStatus.ENABLED);
+                new Device(
+                        deviceId,
+                        deviceType,
+                        expectedDeviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
 
         Uni<Device> deviceUni = Uni.createFrom().item(device);
 
@@ -172,10 +274,27 @@ class AutomationFunctionalServiceTest {
                             final var rulesList = deviceConfig.getDeviceConfig().getConfigRules();
 
                             for (ConfigRule configRule : rulesList) {
-                                assertThat(configRule.getResourceKey())
-                                        .isEqualTo(expectedConfigRule.getResourceKey());
-                                assertThat(configRule.getResourceValue())
-                                        .isEqualTo(expectedConfigRule.getResourceValue());
+                                if (configRule.getConfigRuleType().getConfigRuleType()
+                                        instanceof ConfigRuleCustom) {
+
+                                    if (expectedConfigRule.getConfigRuleType().getConfigRuleType()
+                                            instanceof ConfigRuleCustom) {
+                                        assertThat(
+                                                        ((ConfigRuleCustom) configRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceKey())
+                                                .isEqualTo(
+                                                        ((ConfigRuleCustom)
+                                                                        expectedConfigRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceKey());
+                                        assertThat(
+                                                        ((ConfigRuleCustom) configRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceValue())
+                                                .isEqualTo(
+                                                        ((ConfigRuleCustom)
+                                                                        expectedConfigRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceValue());
+                                    }
+                                }
                             }
                             assertThat(deviceConfig.getDeviceType()).isEqualTo("ztp");
                             assertThat(deviceConfig.getDeviceId()).isEqualTo(deviceId);
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
index b1178e2dd458c64e27bd1b9948f6c04a46a957cf..b1a70a7e0f0933d9d8aa6049c53d75a40ebf14d8 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
@@ -20,13 +20,23 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import automation.Automation;
 import automation.AutomationService;
+import context.ContextOuterClass;
 import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.DeviceDriverEnum;
+import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
+import eu.teraflow.automation.context.model.EndPointId;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import eu.teraflow.automation.context.model.TopologyId;
 import eu.teraflow.automation.device.DeviceGateway;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
@@ -66,13 +76,54 @@ class AutomationServiceTest {
         final var DEVICE_ROLE_ID = "0f14d0ab-9608-7862-a9e4-5ed26688389a";
         final var DEVICE_TYPE = "ztp";
 
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var topologyIdA = new TopologyId("contextIdA", "idA");
+        final var deviceIdA = "deviceIdA";
+        final var idA = "idA";
+        final var endPointIdA = new EndPointId(topologyIdA, deviceIdA, idA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var topologyIdB = new TopologyId("contextIdB", "idB");
+        final var deviceIdB = "deviceIdB";
+        final var idB = "idB";
+        final var endPointIdB = new EndPointId(topologyIdB, deviceIdB, idB);
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         final var emptyDeviceConfig = new DeviceConfig(List.of());
         final var disabledDevice =
-                new Device(DEVICE_ID, DEVICE_TYPE, emptyDeviceConfig, DeviceOperationalStatus.DISABLED);
+                new Device(
+                        DEVICE_ID,
+                        DEVICE_TYPE,
+                        emptyDeviceConfig,
+                        DeviceOperationalStatus.DISABLED,
+                        deviceDrivers,
+                        endPoints);
         Mockito.when(contextGateway.getDevice(Mockito.any()))
                 .thenReturn(Uni.createFrom().item(disabledDevice));
 
-        final var configRule = new ConfigRule(ConfigActionEnum.SET, "001", "initial-configuration");
+        final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleType);
         final var initialDeviceConfig = new DeviceConfig(List.of(configRule));
         Mockito.when(deviceGateway.getInitialConfiguration(Mockito.any()))
                 .thenReturn(Uni.createFrom().item(initialDeviceConfig));
@@ -192,7 +243,7 @@ class AutomationServiceTest {
     void shouldDeleteAllDevicesRolesByDeviceId()
             throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
-        final var empty = Automation.Empty.newBuilder().build();
+        final var empty = ContextOuterClass.Empty.newBuilder().build();
 
         client
                 .ztpDeleteAll(empty)
diff --git a/src/automation/src/test/java/eu/teraflow/automation/ConfigRuleTypeTest.java b/src/automation/src/test/java/eu/teraflow/automation/ConfigRuleTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec1da0ccb4e9bee46d6327f1da2016610494714e
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/ConfigRuleTypeTest.java
@@ -0,0 +1,90 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import eu.teraflow.automation.acl.AclAction;
+import eu.teraflow.automation.acl.AclEntry;
+import eu.teraflow.automation.acl.AclForwardActionEnum;
+import eu.teraflow.automation.acl.AclLogActionEnum;
+import eu.teraflow.automation.acl.AclMatch;
+import eu.teraflow.automation.acl.AclRuleSet;
+import eu.teraflow.automation.acl.AclRuleTypeEnum;
+import eu.teraflow.automation.context.model.ConfigRuleAcl;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.automation.context.model.EndPointId;
+import eu.teraflow.automation.context.model.TopologyId;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class ConfigRuleTypeTest {
+
+    private AclMatch createAclMatch() {
+
+        return new AclMatch(1, 2, "192.168.3.52", "192.168.4.192", 3224, 3845, 5, 10);
+    }
+
+    private AclAction createAclAction() {
+
+        return new AclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+    }
+
+    private AclEntry createAclEntry(AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+    }
+
+    @Test
+    void shouldExtractConfigRuleCustomFromConfigRuleTypeCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom);
+
+        assertThat(configRuleTypeCustom.getConfigRuleType()).isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldExtractConfigRuleAclFromConfigRuleTypeAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var aclMatch = createAclMatch();
+        final var aclAction = createAclAction();
+        final var aclEntry = createAclEntry(aclMatch, aclAction);
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(expectedConfigRuleAcl);
+
+        assertThat(configRuleTypeAcl.getConfigRuleType()).isEqualTo(expectedConfigRuleAcl);
+    }
+}
diff --git a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
index 6039de58ec8f991f5ccbe0bcfd21871ee1e4c432..e8a97d7922b49878af533c23918cf7b23aa20c06 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
@@ -6,9 +6,9 @@ import static org.mockito.Mockito.verify;
 import automation.Automation;
 import context.ContextOuterClass;
 import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
-import eu.teraflow.automation.device.model.DeviceEvent;
 import io.quarkus.runtime.StartupEvent;
 import io.quarkus.test.junit.QuarkusTest;
 import io.quarkus.test.junit.mockito.InjectMock;
diff --git a/src/automation/src/test/java/eu/teraflow/automation/EndPointCreationTest.java b/src/automation/src/test/java/eu/teraflow/automation/EndPointCreationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2094efaf48338c710121eddffc4b5fb1edd3790
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/EndPointCreationTest.java
@@ -0,0 +1,124 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPointId;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import eu.teraflow.automation.context.model.TopologyId;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class EndPointCreationTest {
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedLocationType = new LocationTypeRegion("ATH");
+        final var expectedEndPointLocation = new Location(expectedLocationType);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .location(expectedEndPointLocation)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+        assertThat(expectedEndPoint.getEndPointLocation()).isEqualTo(expectedEndPointLocation);
+    }
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllFieldsExceptFromLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointId() {
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(null, expectedEndPointType, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointType() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, null, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingKpiSampleTypes() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, expectedEndPointType, null);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+}
diff --git a/src/automation/src/test/java/eu/teraflow/automation/LocationTypeTest.java b/src/automation/src/test/java/eu/teraflow/automation/LocationTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f89830e425feffeac377c9d20c0561221f835ec6
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/LocationTypeTest.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.automation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import eu.teraflow.automation.context.model.GpsPosition;
+import eu.teraflow.automation.context.model.LocationTypeGpsPosition;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class LocationTypeTest {
+
+    @Test
+    void shouldExtractRegionFromLocationTypeRegion() {
+        final var expectedRegion = "ATH";
+
+        final var locationTypeRegion = new LocationTypeRegion(expectedRegion);
+
+        assertThat(locationTypeRegion.getLocationType()).isEqualTo(expectedRegion);
+    }
+
+    @Test
+    void shouldExtractLocationGpsPositionFromLocationTypeGpsPosition() {
+        final var latitude = 3.99f;
+        final var longitude = 77.32f;
+
+        final var expectedLocationGpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(expectedLocationGpsPosition);
+
+        assertThat(locationTypeGpsPosition.getLocationType()).isEqualTo(expectedLocationGpsPosition);
+    }
+}
diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
index ff74148548e4f0b024a8a6835ee63a2e77d66a55..74f8f301ca7d4db904d9092e8f860fc4dc171a51 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -17,27 +17,51 @@
 package eu.teraflow.automation;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
+import acl.Acl;
 import automation.Automation;
 import context.ContextOuterClass;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
 import context.ContextOuterClass.Uuid;
+import eu.teraflow.automation.acl.AclAction;
+import eu.teraflow.automation.acl.AclEntry;
+import eu.teraflow.automation.acl.AclForwardActionEnum;
+import eu.teraflow.automation.acl.AclLogActionEnum;
+import eu.teraflow.automation.acl.AclMatch;
+import eu.teraflow.automation.acl.AclRuleSet;
+import eu.teraflow.automation.acl.AclRuleTypeEnum;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleAcl;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
+import eu.teraflow.automation.context.model.DeviceDriverEnum;
+import eu.teraflow.automation.context.model.DeviceEvent;
+import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.EndPoint.EndPointBuilder;
+import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceEvent;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.GpsPosition;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeGpsPosition;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import eu.teraflow.automation.context.model.TopologyId;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.List;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.inject.Inject;
+import kpi_sample_types.KpiSampleTypes;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
@@ -48,6 +72,31 @@ class SerializerTest {
 
     @Inject Serializer serializer;
 
+    private AclMatch createAclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    private AclAction createAclAction(
+            AclForwardActionEnum forwardActionEnum, AclLogActionEnum logActionEnum) {
+
+        return new AclAction(forwardActionEnum, logActionEnum);
+    }
+
+    private AclEntry createAclEntry(
+            int sequenceId, String description, AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
     @Test
     void shouldSerializeDeviceId() {
         final var expectedDeviceId = "expectedDeviceId";
@@ -219,9 +268,11 @@ class SerializerTest {
 
     @Test
     void shouldSerializeEvent() {
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
         final var expectedEvent =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(timestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
                         .build();
 
@@ -234,10 +285,11 @@ class SerializerTest {
     @Test
     void shouldDeserializeEvent() {
         final var expectedEvent = new Event(1, EventTypeEnum.CREATE);
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
 
         final var serializedEvent =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(timestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
                         .build();
         final var event = serializer.deserialize(serializedEvent);
@@ -249,9 +301,11 @@ class SerializerTest {
     void shouldSerializeDeviceEvent() {
         final var expectedUuid = Uuid.newBuilder().setUuid("deviceId");
         final var expectedDeviceId = DeviceId.newBuilder().setDeviceUuid(expectedUuid).build();
+        final var expectedTimestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
         final var expectedEvent =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(expectedTimestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
                         .build();
         final var expectedDeviceEvent =
@@ -271,15 +325,16 @@ class SerializerTest {
     void shouldDeserializeDeviceEvent() {
         final var dummyDeviceId = "deviceId";
         final var expectedEventType = EventTypeEnum.REMOVE;
-        final var expectedTimestamp = 1;
-        final var creationEvent = new Event(expectedTimestamp, expectedEventType);
+        final var expectedTimestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
+        final var creationEvent = new Event(1, expectedEventType);
         final var expectedDeviceEvent = new DeviceEvent(dummyDeviceId, creationEvent);
 
         final var deviceUuid = Uuid.newBuilder().setUuid("deviceId");
         final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceUuid).build();
         final var event =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(expectedTimestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE)
                         .build();
         final var serializedDeviceEvent =
@@ -315,85 +370,791 @@ class SerializerTest {
         assertThat(configAction).isEqualTo(expectedConfigAction);
     }
 
+    private static Stream<Arguments> provideAclRuleTypeEnum() {
+        return Stream.of(
+                Arguments.of(AclRuleTypeEnum.IPV4, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4),
+                Arguments.of(AclRuleTypeEnum.IPV6, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6),
+                Arguments.of(AclRuleTypeEnum.L2, Acl.AclRuleTypeEnum.ACLRULETYPE_L2),
+                Arguments.of(AclRuleTypeEnum.MPLS, Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS),
+                Arguments.of(AclRuleTypeEnum.MIXED, Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED),
+                Arguments.of(AclRuleTypeEnum.UNDEFINED, Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldSerializeAclRuleTypeEnum(
+            AclRuleTypeEnum aclRuleTypeEnum, Acl.AclRuleTypeEnum expectedAclRuleTypeEnum) {
+        final var serializedAclRuleTypeEnum = serializer.serialize(aclRuleTypeEnum);
+        assertThat(serializedAclRuleTypeEnum.getNumber())
+                .isEqualTo(expectedAclRuleTypeEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldDeserializeAclRuleTypeEnum(
+            AclRuleTypeEnum expectedAclRuleTypeEnum, Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        final var aclRuleTypeEnum = serializer.deserialize(serializedAclRuleTypeEnum);
+        assertThat(aclRuleTypeEnum).isEqualTo(expectedAclRuleTypeEnum);
+    }
+
+    private static Stream<Arguments> provideAclForwardActionEnum() {
+        return Stream.of(
+                Arguments.of(AclForwardActionEnum.DROP, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP),
+                Arguments.of(
+                        AclForwardActionEnum.ACCEPT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT),
+                Arguments.of(
+                        AclForwardActionEnum.REJECT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT),
+                Arguments.of(
+                        AclForwardActionEnum.UNDEFINED,
+                        Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldSerializeAclForwardActionEnum(
+            AclForwardActionEnum aclForwardActionEnum,
+            Acl.AclForwardActionEnum expectedAclForwardActionEnum) {
+        final var serializedAclForwardActionEnum = serializer.serialize(aclForwardActionEnum);
+        assertThat(serializedAclForwardActionEnum.getNumber())
+                .isEqualTo(expectedAclForwardActionEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldDeserializeAclForwardActionEnum(
+            AclForwardActionEnum expectedAclForwardActionEnum,
+            Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        final var aclForwardActionEnum = serializer.deserialize(serializedAclForwardActionEnum);
+        assertThat(aclForwardActionEnum).isEqualTo(expectedAclForwardActionEnum);
+    }
+
+    private static Stream<Arguments> provideAclLogActionEnum() {
+        return Stream.of(
+                Arguments.of(AclLogActionEnum.NO_LOG, Acl.AclLogActionEnum.ACLLOGACTION_NOLOG),
+                Arguments.of(AclLogActionEnum.SYSLOG, Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG),
+                Arguments.of(AclLogActionEnum.UNDEFINED, Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldSerializeAclLogActionEnum(
+            AclLogActionEnum aclLogActionEnum, Acl.AclLogActionEnum expectedAclLogActionEnum) {
+        final var serializedAclLogActionEnum = serializer.serialize(aclLogActionEnum);
+        assertThat(serializedAclLogActionEnum.getNumber())
+                .isEqualTo(expectedAclLogActionEnum.getNumber());
+    }
+
+    @Test
+    void shouldSerializeAclAction() {
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        assertThat(serializedAclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldDeserializeAclAction() {
+        final var expectedAclAction =
+                createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var serializedAclAction = serializer.serialize(expectedAclAction);
+        final var aclAction = serializer.deserialize(serializedAclAction);
+
+        assertThat(aclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldSerializeAclMatch() {
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+
+        assertThat(serializedAclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldDeserializeAclMatch() {
+        final var expectedAclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+
+        final var serializedAclMatch = serializer.serialize(expectedAclMatch);
+        final var aclMatch = serializer.deserialize(serializedAclMatch);
+
+        assertThat(aclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldSerializeAclEntry() {
+        final var sequenceId = 1;
+        final var description = "aclEntryDescription";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        final var expectedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(sequenceId)
+                        .setDescription(description)
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+
+        assertThat(serializedAclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldDeserializeAclEntry() {
+        final var sequenceId = 1;
+        final var description = "aclEntryDescription";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var expectedAclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclEntry = serializer.serialize(expectedAclEntry);
+        final var aclEntry = serializer.deserialize(serializedAclEntry);
+
+        assertThat(aclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldSerializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+        final var serializedAclEntries = List.of(serializedAclEntry);
+
+        final var expectedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName(aclRuleSetName)
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED)
+                        .setDescription(aclRuleSetDescription)
+                        .setUserId(aclRuleSetUserId)
+                        .addAllEntries(serializedAclEntries)
+                        .build();
+
+        final var serializedAclRuleset = serializer.serialize(aclRuleSet);
+
+        assertThat(serializedAclRuleset).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @Test
+    void shouldDeserializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var expectedAclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet = serializer.serialize(expectedAclRuleSet);
+        final var aclRuleSet = serializer.deserialize(serializedAclRuleSet);
+
+        assertThat(aclRuleSet).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldDeserializeAclLogActionEnum(
+            AclLogActionEnum expectedAclLogActionEnum, Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        final var aclLogActionEnum = serializer.deserialize(serializedAclLogActionEnum);
+        assertThat(aclLogActionEnum).isEqualTo(expectedAclLogActionEnum);
+    }
+
+    @Test
+    void shouldSerializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+        final var topologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedContextId = serializer.serializeContextId(expectedContextId);
+        final var serializedIdUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedIdUuid)
+                        .build();
+
+        final var serializedTopologyId = serializer.serialize(topologyId);
+
+        assertThat(serializedTopologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    @Test
+    void shouldDeserializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+
+        final var expectedTopologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var topologyId = serializer.deserialize(serializedTopologyId);
+
+        assertThat(topologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    @Test
+    void shouldSerializeEndPointId() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointUuid)
+                        .build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+
+        assertThat(serializedEndPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    @Test
+    void shouldDeserializeEndPointId() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var endPointId = serializer.deserialize(serializedEndPointId);
+
+        assertThat(endPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedAclRuleSet = serializer.serialize(aclRuleSet);
+
+        final var expectedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
+
+        final var serializedConfigRuleAcl = serializer.serialize(configRuleAcl);
+
+        assertThat(serializedConfigRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedConfigRuleAcl = serializer.serialize(expectedConfigRuleAcl);
+        final var configRuleAcl = serializer.deserialize(serializedConfigRuleAcl);
+
+        assertThat(configRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var configRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey(resourceKey)
+                        .setResourceValue(resourceValue)
+                        .build();
+
+        final var serializedConfigRuleCustom = serializer.serialize(configRuleCustom);
+
+        assertThat(serializedConfigRuleCustom)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var serializedConfigRuleCustom = serializer.serialize(expectedConfigRuleCustom);
+        final var configRuleCustom = serializer.deserialize(serializedConfigRuleCustom);
+
+        assertThat(configRuleCustom).usingRecursiveComparison().isEqualTo(expectedConfigRuleCustom);
+    }
+
     @Test
     void shouldSerializeConfigRule() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var expectedSerializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var expectedSerializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var expectedSerializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var expectedSerializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var expectedSerializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(expectedSerializedContextId)
+                        .setTopologyUuid(expectedSerializedTopologyIdUuid)
+                        .build();
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+
+        final var expectedSerializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(expectedSerializedTopologyId)
+                        .setDeviceId(expectedSerializedDeviceId)
+                        .setEndpointUuid(expectedSerializedEndPointIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var expectedSerializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedSerializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedSerializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(expectedSerializedAclMatch)
+                        .setAction(expectedSerializedAclAction)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var expectedSerializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(expectedSerializedAclEntry)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName",
+                        eu.teraflow.automation.acl.AclRuleTypeEnum.IPV4,
+                        "AclRuleDescription",
+                        "userId",
+                        List.of(aclEntry));
+
+        final var expectedSerializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(expectedSerializedEndPointId)
+                        .setRuleSet(expectedSerializedAclRuleSet)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
         final var expectedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setAcl(expectedSerializedConfigRuleAcl)
                         .build();
 
-        final var configRule = new ConfigRule(ConfigActionEnum.SET, "resourceKey", "resourceValue");
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl);
         final var serializedConfigRule = serializer.serialize(configRule);
 
-        assertThat(serializedConfigRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
+        assertThat(serializedConfigRule).isEqualTo(expectedConfigRule);
     }
 
     @Test
     void shouldDeserializeConfigRule() {
-        final var expectedConfigRule =
-                new ConfigRule(ConfigActionEnum.DELETE, "resourceKey", "resourceValue");
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var serializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var serializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var serializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var serializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedTopologyIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+        final var serializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointIdUuid)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var serializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(2)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(5)
+                        .setEndMplsLabel(10)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var serializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var serializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName",
+                        eu.teraflow.automation.acl.AclRuleTypeEnum.IPV4,
+                        "AclRuleDescription",
+                        "userId",
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(serializedAclEntry)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+        final var expectedConfigRule = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeAcl);
+
+        final var serializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
 
         final var serializedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setAcl(serializedConfigRuleAcl)
                         .build();
+
         final var configRule = serializer.deserialize(serializedConfigRule);
 
         assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
     }
 
     @Test
-    void shouldSerializeDeviceConfig() {
-        final var expectedConfigRuleA =
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConfigRule() {
+        final var serializedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedConfigRule));
+    }
+
+    private static Stream<Arguments> provideKpiSampleType() {
+        return Stream.of(
+                Arguments.of(
+                        KpiSampleType.PACKETS_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.PACKETS_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED),
+                Arguments.of(
+                        KpiSampleType.BYTES_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.BYTES_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED),
+                Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldSerializeKpiSampleType(
+            KpiSampleType kpiSampleType, KpiSampleTypes.KpiSampleType expectedSerializedType) {
+        final var serializedKpiSampleType = serializer.serialize(kpiSampleType);
+
+        assertThat(serializedKpiSampleType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldDeserializeKpiSampleType(
+            KpiSampleType expectedKpiSampleType, KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        final var kpiSampleType = serializer.deserialize(serializedKpiSampleType);
+
+        assertThat(kpiSampleType).isEqualTo(expectedKpiSampleType);
+    }
+
+    private static Stream<Arguments> provideDeviceDriverEnum() {
+        return Stream.of(
+                Arguments.of(
+                        DeviceDriverEnum.OPENCONFIG,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG),
+                Arguments.of(
+                        DeviceDriverEnum.TRANSPORT_API,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API),
+                Arguments.of(DeviceDriverEnum.P4, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4),
+                Arguments.of(
+                        DeviceDriverEnum.IETF_NETWORK_TOPOLOGY,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY),
+                Arguments.of(
+                        DeviceDriverEnum.ONF_TR_352,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
+                Arguments.of(
+                        DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldSerializeDeviceDriverEnum(
+            DeviceDriverEnum deviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum expectedDeviceDriverEnum) {
+        final var serializedDeviceDriverEnum = serializer.serialize(deviceDriverEnum);
+
+        assertThat(serializedDeviceDriverEnum.getNumber())
+                .isEqualTo(expectedDeviceDriverEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldDeserializeDeviceDriverEnum(
+            DeviceDriverEnum expectedDeviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        final var deviceDriverEnum = serializer.deserialize(serializedDeviceDriverEnum);
+
+        assertThat(deviceDriverEnum).isEqualTo(expectedDeviceDriverEnum);
+    }
+
+    @Test
+    void shouldSerializeDeviceConfig() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
                         .setResourceKey("resourceKeyA")
                         .setResourceValue("resourceValueA")
                         .build();
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
+        final var expectedConfigRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
+        final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleA =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedConfigRuleCustomA)
+                        .build();
         final var expectedConfigRuleB =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKeyB")
-                        .setResourceValue("resourceValueB")
+                        .setCustom(expectedConfigRuleCustomB)
                         .build();
+
         final var expectedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder()
                         .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB))
                         .build();
 
-        final var configRuleA = new ConfigRule(ConfigActionEnum.SET, "resourceKeyA", "resourceValueA");
-        final var configRuleB =
-                new ConfigRule(ConfigActionEnum.DELETE, "resourceKeyB", "resourceValueB");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB);
+
+        final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA);
+        final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB);
+
         final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB));
         final var serializedDeviceConfig = serializer.serialize(deviceConfig);
 
-        assertThat(serializedDeviceConfig).usingRecursiveComparison().isEqualTo(expectedDeviceConfig);
+        assertThat(serializedDeviceConfig).isEqualTo(expectedDeviceConfig);
     }
 
     @Test
     void shouldDeserializeDeviceConfig() {
-        final var expectedConfigRuleA =
-                new ConfigRule(ConfigActionEnum.SET, "resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA);
+        final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB);
+
+        final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA);
         final var expectedConfigRuleB =
-                new ConfigRule(ConfigActionEnum.DELETE, "resourceKeyB", "resourceValueB");
+                new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB);
+
         final var expectedDeviceConfig =
                 new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB));
 
+        final var configRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+
+        final var configRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
         final var configRuleA =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
-                        .setResourceKey("resourceKeyA")
-                        .setResourceValue("resourceValueA")
+                        .setCustom(configRuleCustomA)
                         .build();
         final var configRuleB =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKeyB")
-                        .setResourceValue("resourceValueB")
+                        .setCustom(configRuleCustomB)
                         .build();
         final var serializedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder()
@@ -435,60 +1196,393 @@ class SerializerTest {
         assertThat(operationalStatus).isEqualTo(expectedOpStatus);
     }
 
+    @Test
+    void shouldSerializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var location = new Location(locationTypeRegion);
+
+        final var expectedLocation = ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var expectedLocation = new Location(locationTypeRegion);
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldSerializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var location = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var expectedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var expectedLocation = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedLocation() {
+        final var serializedLocation = ContextOuterClass.Location.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedLocation));
+    }
+
+    @Test
+    void shouldSerializeEndPointWithAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegion = new LocationTypeRegion("ATH");
+        final var location = new Location(locationTypeRegion);
+
+        final var endPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+        final var serializedEndPointLocation = serializer.serialize(location);
+
+        final var expectedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedEndPointLocation)
+                        .build();
+
+        final var serializedEndPoint = serializer.serialize(endPoint);
+
+        assertThat(serializedEndPoint).isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldDeserializeEndPointWithAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegion = new LocationTypeRegion("ATH");
+        final var location = new Location(locationTypeRegion);
+
+        final var expectedEndPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+        final var serializedEndPointLocation = serializer.serialize(location);
+
+        final var serializedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedEndPointLocation)
+                        .build();
+
+        final var endPoint = serializer.deserialize(serializedEndPoint);
+
+        assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldSerializeEndPointWithAllAvailableFieldsMissingLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint = new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+
+        final var expectedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .build();
+
+        final var serializedEndPoint = serializer.serialize(endPoint);
+
+        assertThat(serializedEndPoint).isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldDeserializeEndPointWithAllAvailableFieldsMissingLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedEndPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(serializer::serialize).collect(Collectors.toList());
+
+        final var serializedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .build();
+
+        final var endPoint = serializer.deserialize(serializedEndPoint);
+
+        assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
     @Test
     void shouldSerializeDevice() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
         final var expectedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setCustom(expectedConfigRuleCustomA)
                         .build();
+
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         final var expectedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build();
-        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
 
         final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
+
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
 
         deviceBuilder.setDeviceId(serializedDeviceId);
         deviceBuilder.setDeviceType("deviceType");
         deviceBuilder.setDeviceConfig(expectedDeviceConfig);
         deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
         final var expectedDevice = deviceBuilder.build();
 
-        final var deviceConfig =
-                new DeviceConfig(
-                        List.of(new ConfigRule(ConfigActionEnum.SET, "resourceKey", "resourceValue")));
         final var device =
-                new Device("deviceId", "deviceType", deviceConfig, DeviceOperationalStatus.ENABLED);
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        deviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
         final var serializedDevice = serializer.serialize(device);
 
-        assertThat(serializedDevice).usingRecursiveComparison().isEqualTo(expectedDevice);
+        assertThat(serializedDevice).isEqualTo(expectedDevice);
     }
 
     @Test
     void shouldDeserializeDevice() {
+        final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+
         final var expectedConfig =
-                new DeviceConfig(
-                        List.of(new ConfigRule(ConfigActionEnum.DELETE, "resourceKey", "resourceValue")));
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.DELETE, configRuleType)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         final var expectedDevice =
-                new Device("deviceId", "deviceType", expectedConfig, DeviceOperationalStatus.ENABLED);
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        expectedConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
 
         final var configRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setCustom(expectedConfigRuleCustom)
                         .build();
         final var deviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build();
 
         final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDeviceOperationalStatus =
+                serializer.serialize(DeviceOperationalStatus.ENABLED);
+
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
 
         final var deviceBuilder = ContextOuterClass.Device.newBuilder();
         deviceBuilder.setDeviceId(serializedDeviceId);
         deviceBuilder.setDeviceType("deviceType");
         deviceBuilder.setDeviceConfig(deviceConfig);
-        deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
+        deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
         final var serializedDevice = deviceBuilder.build();
         final var device = serializer.deserialize(serializedDevice);
 
diff --git a/src/automation/target/generated-sources/grpc/acl/Acl.java b/src/automation/target/generated-sources/grpc/acl/Acl.java
new file mode 100644
index 0000000000000000000000000000000000000000..521294eefdec36b373b99aaca5281be28e01d2db
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/acl/Acl.java
@@ -0,0 +1,4654 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: acl.proto
+
+package acl;
+
+public final class Acl {
+  private Acl() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * Protobuf enum {@code acl.AclRuleTypeEnum}
+   */
+  public enum AclRuleTypeEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>ACLRULETYPE_UNDEFINED = 0;</code>
+     */
+    ACLRULETYPE_UNDEFINED(0),
+    /**
+     * <code>ACLRULETYPE_IPV4 = 1;</code>
+     */
+    ACLRULETYPE_IPV4(1),
+    /**
+     * <code>ACLRULETYPE_IPV6 = 2;</code>
+     */
+    ACLRULETYPE_IPV6(2),
+    /**
+     * <code>ACLRULETYPE_L2 = 3;</code>
+     */
+    ACLRULETYPE_L2(3),
+    /**
+     * <code>ACLRULETYPE_MPLS = 4;</code>
+     */
+    ACLRULETYPE_MPLS(4),
+    /**
+     * <code>ACLRULETYPE_MIXED = 5;</code>
+     */
+    ACLRULETYPE_MIXED(5),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>ACLRULETYPE_UNDEFINED = 0;</code>
+     */
+    public static final int ACLRULETYPE_UNDEFINED_VALUE = 0;
+    /**
+     * <code>ACLRULETYPE_IPV4 = 1;</code>
+     */
+    public static final int ACLRULETYPE_IPV4_VALUE = 1;
+    /**
+     * <code>ACLRULETYPE_IPV6 = 2;</code>
+     */
+    public static final int ACLRULETYPE_IPV6_VALUE = 2;
+    /**
+     * <code>ACLRULETYPE_L2 = 3;</code>
+     */
+    public static final int ACLRULETYPE_L2_VALUE = 3;
+    /**
+     * <code>ACLRULETYPE_MPLS = 4;</code>
+     */
+    public static final int ACLRULETYPE_MPLS_VALUE = 4;
+    /**
+     * <code>ACLRULETYPE_MIXED = 5;</code>
+     */
+    public static final int ACLRULETYPE_MIXED_VALUE = 5;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static AclRuleTypeEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static AclRuleTypeEnum forNumber(int value) {
+      switch (value) {
+        case 0: return ACLRULETYPE_UNDEFINED;
+        case 1: return ACLRULETYPE_IPV4;
+        case 2: return ACLRULETYPE_IPV6;
+        case 3: return ACLRULETYPE_L2;
+        case 4: return ACLRULETYPE_MPLS;
+        case 5: return ACLRULETYPE_MIXED;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<AclRuleTypeEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        AclRuleTypeEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<AclRuleTypeEnum>() {
+            public AclRuleTypeEnum findValueByNumber(int number) {
+              return AclRuleTypeEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return acl.Acl.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final AclRuleTypeEnum[] VALUES = values();
+
+    public static AclRuleTypeEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private AclRuleTypeEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:acl.AclRuleTypeEnum)
+  }
+
+  /**
+   * Protobuf enum {@code acl.AclForwardActionEnum}
+   */
+  public enum AclForwardActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>ACLFORWARDINGACTION_UNDEFINED = 0;</code>
+     */
+    ACLFORWARDINGACTION_UNDEFINED(0),
+    /**
+     * <code>ACLFORWARDINGACTION_DROP = 1;</code>
+     */
+    ACLFORWARDINGACTION_DROP(1),
+    /**
+     * <code>ACLFORWARDINGACTION_ACCEPT = 2;</code>
+     */
+    ACLFORWARDINGACTION_ACCEPT(2),
+    /**
+     * <code>ACLFORWARDINGACTION_REJECT = 3;</code>
+     */
+    ACLFORWARDINGACTION_REJECT(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>ACLFORWARDINGACTION_UNDEFINED = 0;</code>
+     */
+    public static final int ACLFORWARDINGACTION_UNDEFINED_VALUE = 0;
+    /**
+     * <code>ACLFORWARDINGACTION_DROP = 1;</code>
+     */
+    public static final int ACLFORWARDINGACTION_DROP_VALUE = 1;
+    /**
+     * <code>ACLFORWARDINGACTION_ACCEPT = 2;</code>
+     */
+    public static final int ACLFORWARDINGACTION_ACCEPT_VALUE = 2;
+    /**
+     * <code>ACLFORWARDINGACTION_REJECT = 3;</code>
+     */
+    public static final int ACLFORWARDINGACTION_REJECT_VALUE = 3;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static AclForwardActionEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static AclForwardActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return ACLFORWARDINGACTION_UNDEFINED;
+        case 1: return ACLFORWARDINGACTION_DROP;
+        case 2: return ACLFORWARDINGACTION_ACCEPT;
+        case 3: return ACLFORWARDINGACTION_REJECT;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<AclForwardActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        AclForwardActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<AclForwardActionEnum>() {
+            public AclForwardActionEnum findValueByNumber(int number) {
+              return AclForwardActionEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return acl.Acl.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final AclForwardActionEnum[] VALUES = values();
+
+    public static AclForwardActionEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private AclForwardActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:acl.AclForwardActionEnum)
+  }
+
+  /**
+   * Protobuf enum {@code acl.AclLogActionEnum}
+   */
+  public enum AclLogActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>ACLLOGACTION_UNDEFINED = 0;</code>
+     */
+    ACLLOGACTION_UNDEFINED(0),
+    /**
+     * <code>ACLLOGACTION_NOLOG = 1;</code>
+     */
+    ACLLOGACTION_NOLOG(1),
+    /**
+     * <code>ACLLOGACTION_SYSLOG = 2;</code>
+     */
+    ACLLOGACTION_SYSLOG(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>ACLLOGACTION_UNDEFINED = 0;</code>
+     */
+    public static final int ACLLOGACTION_UNDEFINED_VALUE = 0;
+    /**
+     * <code>ACLLOGACTION_NOLOG = 1;</code>
+     */
+    public static final int ACLLOGACTION_NOLOG_VALUE = 1;
+    /**
+     * <code>ACLLOGACTION_SYSLOG = 2;</code>
+     */
+    public static final int ACLLOGACTION_SYSLOG_VALUE = 2;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static AclLogActionEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static AclLogActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return ACLLOGACTION_UNDEFINED;
+        case 1: return ACLLOGACTION_NOLOG;
+        case 2: return ACLLOGACTION_SYSLOG;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<AclLogActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        AclLogActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<AclLogActionEnum>() {
+            public AclLogActionEnum findValueByNumber(int number) {
+              return AclLogActionEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return acl.Acl.getDescriptor().getEnumTypes().get(2);
+    }
+
+    private static final AclLogActionEnum[] VALUES = values();
+
+    public static AclLogActionEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private AclLogActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:acl.AclLogActionEnum)
+  }
+
+  public interface AclMatchOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclMatch)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 dscp = 1;</code>
+     * @return The dscp.
+     */
+    int getDscp();
+
+    /**
+     * <code>uint32 protocol = 2;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The srcAddress.
+     */
+    java.lang.String getSrcAddress();
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The bytes for srcAddress.
+     */
+    com.google.protobuf.ByteString
+        getSrcAddressBytes();
+
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The dstAddress.
+     */
+    java.lang.String getDstAddress();
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The bytes for dstAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstAddressBytes();
+
+    /**
+     * <code>uint32 src_port = 5;</code>
+     * @return The srcPort.
+     */
+    int getSrcPort();
+
+    /**
+     * <code>uint32 dst_port = 6;</code>
+     * @return The dstPort.
+     */
+    int getDstPort();
+
+    /**
+     * <code>uint32 start_mpls_label = 7;</code>
+     * @return The startMplsLabel.
+     */
+    int getStartMplsLabel();
+
+    /**
+     * <code>uint32 end_mpls_label = 8;</code>
+     * @return The endMplsLabel.
+     */
+    int getEndMplsLabel();
+  }
+  /**
+   * Protobuf type {@code acl.AclMatch}
+   */
+  public static final class AclMatch extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclMatch)
+      AclMatchOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclMatch.newBuilder() to construct.
+    private AclMatch(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclMatch() {
+      srcAddress_ = "";
+      dstAddress_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclMatch();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclMatch(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              dscp_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              srcAddress_ = s;
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstAddress_ = s;
+              break;
+            }
+            case 40: {
+
+              srcPort_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              dstPort_ = input.readUInt32();
+              break;
+            }
+            case 56: {
+
+              startMplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 64: {
+
+              endMplsLabel_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return acl.Acl.internal_static_acl_AclMatch_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclMatch_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclMatch.class, acl.Acl.AclMatch.Builder.class);
+    }
+
+    public static final int DSCP_FIELD_NUMBER = 1;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 1;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 2;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 2;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int SRC_ADDRESS_FIELD_NUMBER = 3;
+    private volatile java.lang.Object srcAddress_;
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The srcAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getSrcAddress() {
+      java.lang.Object ref = srcAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The bytes for srcAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSrcAddressBytes() {
+      java.lang.Object ref = srcAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DST_ADDRESS_FIELD_NUMBER = 4;
+    private volatile java.lang.Object dstAddress_;
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The dstAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getDstAddress() {
+      java.lang.Object ref = dstAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The bytes for dstAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDstAddressBytes() {
+      java.lang.Object ref = dstAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SRC_PORT_FIELD_NUMBER = 5;
+    private int srcPort_;
+    /**
+     * <code>uint32 src_port = 5;</code>
+     * @return The srcPort.
+     */
+    @java.lang.Override
+    public int getSrcPort() {
+      return srcPort_;
+    }
+
+    public static final int DST_PORT_FIELD_NUMBER = 6;
+    private int dstPort_;
+    /**
+     * <code>uint32 dst_port = 6;</code>
+     * @return The dstPort.
+     */
+    @java.lang.Override
+    public int getDstPort() {
+      return dstPort_;
+    }
+
+    public static final int START_MPLS_LABEL_FIELD_NUMBER = 7;
+    private int startMplsLabel_;
+    /**
+     * <code>uint32 start_mpls_label = 7;</code>
+     * @return The startMplsLabel.
+     */
+    @java.lang.Override
+    public int getStartMplsLabel() {
+      return startMplsLabel_;
+    }
+
+    public static final int END_MPLS_LABEL_FIELD_NUMBER = 8;
+    private int endMplsLabel_;
+    /**
+     * <code>uint32 end_mpls_label = 8;</code>
+     * @return The endMplsLabel.
+     */
+    @java.lang.Override
+    public int getEndMplsLabel() {
+      return endMplsLabel_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (dscp_ != 0) {
+        output.writeUInt32(1, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(2, protocol_);
+      }
+      if (!getSrcAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, srcAddress_);
+      }
+      if (!getDstAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, dstAddress_);
+      }
+      if (srcPort_ != 0) {
+        output.writeUInt32(5, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        output.writeUInt32(6, dstPort_);
+      }
+      if (startMplsLabel_ != 0) {
+        output.writeUInt32(7, startMplsLabel_);
+      }
+      if (endMplsLabel_ != 0) {
+        output.writeUInt32(8, endMplsLabel_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (dscp_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, dscp_);
+      }
+      if (protocol_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, protocol_);
+      }
+      if (!getSrcAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, srcAddress_);
+      }
+      if (!getDstAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, dstAddress_);
+      }
+      if (srcPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, dstPort_);
+      }
+      if (startMplsLabel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, startMplsLabel_);
+      }
+      if (endMplsLabel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, endMplsLabel_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof acl.Acl.AclMatch)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclMatch other = (acl.Acl.AclMatch) obj;
+
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
+      if (!getSrcAddress()
+          .equals(other.getSrcAddress())) return false;
+      if (!getDstAddress()
+          .equals(other.getDstAddress())) return false;
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getStartMplsLabel()
+          != other.getStartMplsLabel()) return false;
+      if (getEndMplsLabel()
+          != other.getEndMplsLabel()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
+      hash = (37 * hash) + SRC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcAddress().hashCode();
+      hash = (37 * hash) + DST_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstAddress().hashCode();
+      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcPort();
+      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getDstPort();
+      hash = (37 * hash) + START_MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getStartMplsLabel();
+      hash = (37 * hash) + END_MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getEndMplsLabel();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclMatch parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclMatch parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(acl.Acl.AclMatch prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code acl.AclMatch}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclMatch)
+        acl.Acl.AclMatchOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclMatch_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclMatch_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclMatch.class, acl.Acl.AclMatch.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclMatch.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        dscp_ = 0;
+
+        protocol_ = 0;
+
+        srcAddress_ = "";
+
+        dstAddress_ = "";
+
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        startMplsLabel_ = 0;
+
+        endMplsLabel_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclMatch_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclMatch getDefaultInstanceForType() {
+        return acl.Acl.AclMatch.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclMatch build() {
+        acl.Acl.AclMatch result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclMatch buildPartial() {
+        acl.Acl.AclMatch result = new acl.Acl.AclMatch(this);
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
+        result.srcAddress_ = srcAddress_;
+        result.dstAddress_ = dstAddress_;
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.startMplsLabel_ = startMplsLabel_;
+        result.endMplsLabel_ = endMplsLabel_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof acl.Acl.AclMatch) {
+          return mergeFrom((acl.Acl.AclMatch)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclMatch other) {
+        if (other == acl.Acl.AclMatch.getDefaultInstance()) return this;
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
+        }
+        if (!other.getSrcAddress().isEmpty()) {
+          srcAddress_ = other.srcAddress_;
+          onChanged();
+        }
+        if (!other.getDstAddress().isEmpty()) {
+          dstAddress_ = other.dstAddress_;
+          onChanged();
+        }
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
+        }
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
+        }
+        if (other.getStartMplsLabel() != 0) {
+          setStartMplsLabel(other.getStartMplsLabel());
+        }
+        if (other.getEndMplsLabel() != 0) {
+          setEndMplsLabel(other.getEndMplsLabel());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        acl.Acl.AclMatch parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclMatch) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 1;</code>
+       * @return The dscp.
+       */
+      @java.lang.Override
+      public int getDscp() {
+        return dscp_;
+      }
+      /**
+       * <code>uint32 dscp = 1;</code>
+       * @param value The dscp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDscp(int value) {
+        
+        dscp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 dscp = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDscp() {
+        
+        dscp_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int protocol_ ;
+      /**
+       * <code>uint32 protocol = 2;</code>
+       * @return The protocol.
+       */
+      @java.lang.Override
+      public int getProtocol() {
+        return protocol_;
+      }
+      /**
+       * <code>uint32 protocol = 2;</code>
+       * @param value The protocol to set.
+       * @return This builder for chaining.
+       */
+      public Builder setProtocol(int value) {
+        
+        protocol_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 protocol = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearProtocol() {
+        
+        protocol_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object srcAddress_ = "";
+      /**
+       * <code>string src_address = 3;</code>
+       * @return The srcAddress.
+       */
+      public java.lang.String getSrcAddress() {
+        java.lang.Object ref = srcAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @return The bytes for srcAddress.
+       */
+      public com.google.protobuf.ByteString
+          getSrcAddressBytes() {
+        java.lang.Object ref = srcAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @param value The srcAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSrcAddress() {
+        
+        srcAddress_ = getDefaultInstance().getSrcAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @param value The bytes for srcAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object dstAddress_ = "";
+      /**
+       * <code>string dst_address = 4;</code>
+       * @return The dstAddress.
+       */
+      public java.lang.String getDstAddress() {
+        java.lang.Object ref = dstAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @return The bytes for dstAddress.
+       */
+      public com.google.protobuf.ByteString
+          getDstAddressBytes() {
+        java.lang.Object ref = dstAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @param value The dstAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstAddress() {
+        
+        dstAddress_ = getDefaultInstance().getDstAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @param value The bytes for dstAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int srcPort_ ;
+      /**
+       * <code>uint32 src_port = 5;</code>
+       * @return The srcPort.
+       */
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
+      }
+      /**
+       * <code>uint32 src_port = 5;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 src_port = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int dstPort_ ;
+      /**
+       * <code>uint32 dst_port = 6;</code>
+       * @return The dstPort.
+       */
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
+      }
+      /**
+       * <code>uint32 dst_port = 6;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 dst_port = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstPort() {
+        
+        dstPort_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int startMplsLabel_ ;
+      /**
+       * <code>uint32 start_mpls_label = 7;</code>
+       * @return The startMplsLabel.
+       */
+      @java.lang.Override
+      public int getStartMplsLabel() {
+        return startMplsLabel_;
+      }
+      /**
+       * <code>uint32 start_mpls_label = 7;</code>
+       * @param value The startMplsLabel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartMplsLabel(int value) {
+        
+        startMplsLabel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 start_mpls_label = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearStartMplsLabel() {
+        
+        startMplsLabel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int endMplsLabel_ ;
+      /**
+       * <code>uint32 end_mpls_label = 8;</code>
+       * @return The endMplsLabel.
+       */
+      @java.lang.Override
+      public int getEndMplsLabel() {
+        return endMplsLabel_;
+      }
+      /**
+       * <code>uint32 end_mpls_label = 8;</code>
+       * @param value The endMplsLabel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndMplsLabel(int value) {
+        
+        endMplsLabel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 end_mpls_label = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndMplsLabel() {
+        
+        endMplsLabel_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:acl.AclMatch)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclMatch)
+    private static final acl.Acl.AclMatch DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclMatch();
+    }
+
+    public static acl.Acl.AclMatch getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclMatch>
+        PARSER = new com.google.protobuf.AbstractParser<AclMatch>() {
+      @java.lang.Override
+      public AclMatch parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclMatch(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclMatch> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclMatch> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclMatch getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AclActionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclAction)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The enum numeric value on the wire for forwardAction.
+     */
+    int getForwardActionValue();
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The forwardAction.
+     */
+    acl.Acl.AclForwardActionEnum getForwardAction();
+
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The enum numeric value on the wire for logAction.
+     */
+    int getLogActionValue();
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The logAction.
+     */
+    acl.Acl.AclLogActionEnum getLogAction();
+  }
+  /**
+   * Protobuf type {@code acl.AclAction}
+   */
+  public static final class AclAction extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclAction)
+      AclActionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclAction.newBuilder() to construct.
+    private AclAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclAction() {
+      forwardAction_ = 0;
+      logAction_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclAction();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclAction(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              int rawValue = input.readEnum();
+
+              forwardAction_ = rawValue;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              logAction_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return acl.Acl.internal_static_acl_AclAction_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclAction_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclAction.class, acl.Acl.AclAction.Builder.class);
+    }
+
+    public static final int FORWARD_ACTION_FIELD_NUMBER = 1;
+    private int forwardAction_;
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The enum numeric value on the wire for forwardAction.
+     */
+    @java.lang.Override public int getForwardActionValue() {
+      return forwardAction_;
+    }
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The forwardAction.
+     */
+    @java.lang.Override public acl.Acl.AclForwardActionEnum getForwardAction() {
+      @SuppressWarnings("deprecation")
+      acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.valueOf(forwardAction_);
+      return result == null ? acl.Acl.AclForwardActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int LOG_ACTION_FIELD_NUMBER = 2;
+    private int logAction_;
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The enum numeric value on the wire for logAction.
+     */
+    @java.lang.Override public int getLogActionValue() {
+      return logAction_;
+    }
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The logAction.
+     */
+    @java.lang.Override public acl.Acl.AclLogActionEnum getLogAction() {
+      @SuppressWarnings("deprecation")
+      acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.valueOf(logAction_);
+      return result == null ? acl.Acl.AclLogActionEnum.UNRECOGNIZED : result;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (forwardAction_ != acl.Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, forwardAction_);
+      }
+      if (logAction_ != acl.Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(2, logAction_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (forwardAction_ != acl.Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, forwardAction_);
+      }
+      if (logAction_ != acl.Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, logAction_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof acl.Acl.AclAction)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclAction other = (acl.Acl.AclAction) obj;
+
+      if (forwardAction_ != other.forwardAction_) return false;
+      if (logAction_ != other.logAction_) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + FORWARD_ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + forwardAction_;
+      hash = (37 * hash) + LOG_ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + logAction_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclAction parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclAction parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(acl.Acl.AclAction prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code acl.AclAction}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclAction)
+        acl.Acl.AclActionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclAction_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclAction_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclAction.class, acl.Acl.AclAction.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclAction.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        forwardAction_ = 0;
+
+        logAction_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclAction_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclAction getDefaultInstanceForType() {
+        return acl.Acl.AclAction.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclAction build() {
+        acl.Acl.AclAction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclAction buildPartial() {
+        acl.Acl.AclAction result = new acl.Acl.AclAction(this);
+        result.forwardAction_ = forwardAction_;
+        result.logAction_ = logAction_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof acl.Acl.AclAction) {
+          return mergeFrom((acl.Acl.AclAction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclAction other) {
+        if (other == acl.Acl.AclAction.getDefaultInstance()) return this;
+        if (other.forwardAction_ != 0) {
+          setForwardActionValue(other.getForwardActionValue());
+        }
+        if (other.logAction_ != 0) {
+          setLogActionValue(other.getLogActionValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        acl.Acl.AclAction parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclAction) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int forwardAction_ = 0;
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @return The enum numeric value on the wire for forwardAction.
+       */
+      @java.lang.Override public int getForwardActionValue() {
+        return forwardAction_;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @param value The enum numeric value on the wire for forwardAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setForwardActionValue(int value) {
+        
+        forwardAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @return The forwardAction.
+       */
+      @java.lang.Override
+      public acl.Acl.AclForwardActionEnum getForwardAction() {
+        @SuppressWarnings("deprecation")
+        acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.valueOf(forwardAction_);
+        return result == null ? acl.Acl.AclForwardActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @param value The forwardAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setForwardAction(acl.Acl.AclForwardActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        forwardAction_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearForwardAction() {
+        
+        forwardAction_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int logAction_ = 0;
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @return The enum numeric value on the wire for logAction.
+       */
+      @java.lang.Override public int getLogActionValue() {
+        return logAction_;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @param value The enum numeric value on the wire for logAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLogActionValue(int value) {
+        
+        logAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @return The logAction.
+       */
+      @java.lang.Override
+      public acl.Acl.AclLogActionEnum getLogAction() {
+        @SuppressWarnings("deprecation")
+        acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.valueOf(logAction_);
+        return result == null ? acl.Acl.AclLogActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @param value The logAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLogAction(acl.Acl.AclLogActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        logAction_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLogAction() {
+        
+        logAction_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:acl.AclAction)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclAction)
+    private static final acl.Acl.AclAction DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclAction();
+    }
+
+    public static acl.Acl.AclAction getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclAction>
+        PARSER = new com.google.protobuf.AbstractParser<AclAction>() {
+      @java.lang.Override
+      public AclAction parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclAction(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclAction> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclAction> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclAction getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AclEntryOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclEntry)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 sequence_id = 1;</code>
+     * @return The sequenceId.
+     */
+    int getSequenceId();
+
+    /**
+     * <code>string description = 2;</code>
+     * @return The description.
+     */
+    java.lang.String getDescription();
+    /**
+     * <code>string description = 2;</code>
+     * @return The bytes for description.
+     */
+    com.google.protobuf.ByteString
+        getDescriptionBytes();
+
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return Whether the match field is set.
+     */
+    boolean hasMatch();
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return The match.
+     */
+    acl.Acl.AclMatch getMatch();
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     */
+    acl.Acl.AclMatchOrBuilder getMatchOrBuilder();
+
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return Whether the action field is set.
+     */
+    boolean hasAction();
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return The action.
+     */
+    acl.Acl.AclAction getAction();
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     */
+    acl.Acl.AclActionOrBuilder getActionOrBuilder();
+  }
+  /**
+   * Protobuf type {@code acl.AclEntry}
+   */
+  public static final class AclEntry extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclEntry)
+      AclEntryOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclEntry.newBuilder() to construct.
+    private AclEntry(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclEntry() {
+      description_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclEntry();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclEntry(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              sequenceId_ = input.readUInt32();
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              description_ = s;
+              break;
+            }
+            case 26: {
+              acl.Acl.AclMatch.Builder subBuilder = null;
+              if (match_ != null) {
+                subBuilder = match_.toBuilder();
+              }
+              match_ = input.readMessage(acl.Acl.AclMatch.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(match_);
+                match_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              acl.Acl.AclAction.Builder subBuilder = null;
+              if (action_ != null) {
+                subBuilder = action_.toBuilder();
+              }
+              action_ = input.readMessage(acl.Acl.AclAction.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(action_);
+                action_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return acl.Acl.internal_static_acl_AclEntry_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclEntry_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclEntry.class, acl.Acl.AclEntry.Builder.class);
+    }
+
+    public static final int SEQUENCE_ID_FIELD_NUMBER = 1;
+    private int sequenceId_;
+    /**
+     * <code>uint32 sequence_id = 1;</code>
+     * @return The sequenceId.
+     */
+    @java.lang.Override
+    public int getSequenceId() {
+      return sequenceId_;
+    }
+
+    public static final int DESCRIPTION_FIELD_NUMBER = 2;
+    private volatile java.lang.Object description_;
+    /**
+     * <code>string description = 2;</code>
+     * @return The description.
+     */
+    @java.lang.Override
+    public java.lang.String getDescription() {
+      java.lang.Object ref = description_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        description_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string description = 2;</code>
+     * @return The bytes for description.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDescriptionBytes() {
+      java.lang.Object ref = description_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        description_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int MATCH_FIELD_NUMBER = 3;
+    private acl.Acl.AclMatch match_;
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return Whether the match field is set.
+     */
+    @java.lang.Override
+    public boolean hasMatch() {
+      return match_ != null;
+    }
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return The match.
+     */
+    @java.lang.Override
+    public acl.Acl.AclMatch getMatch() {
+      return match_ == null ? acl.Acl.AclMatch.getDefaultInstance() : match_;
+    }
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclMatchOrBuilder getMatchOrBuilder() {
+      return getMatch();
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 4;
+    private acl.Acl.AclAction action_;
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return Whether the action field is set.
+     */
+    @java.lang.Override
+    public boolean hasAction() {
+      return action_ != null;
+    }
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return The action.
+     */
+    @java.lang.Override
+    public acl.Acl.AclAction getAction() {
+      return action_ == null ? acl.Acl.AclAction.getDefaultInstance() : action_;
+    }
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclActionOrBuilder getActionOrBuilder() {
+      return getAction();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (sequenceId_ != 0) {
+        output.writeUInt32(1, sequenceId_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_);
+      }
+      if (match_ != null) {
+        output.writeMessage(3, getMatch());
+      }
+      if (action_ != null) {
+        output.writeMessage(4, getAction());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (sequenceId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, sequenceId_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_);
+      }
+      if (match_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getMatch());
+      }
+      if (action_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getAction());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof acl.Acl.AclEntry)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclEntry other = (acl.Acl.AclEntry) obj;
+
+      if (getSequenceId()
+          != other.getSequenceId()) return false;
+      if (!getDescription()
+          .equals(other.getDescription())) return false;
+      if (hasMatch() != other.hasMatch()) return false;
+      if (hasMatch()) {
+        if (!getMatch()
+            .equals(other.getMatch())) return false;
+      }
+      if (hasAction() != other.hasAction()) return false;
+      if (hasAction()) {
+        if (!getAction()
+            .equals(other.getAction())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + SEQUENCE_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getSequenceId();
+      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getDescription().hashCode();
+      if (hasMatch()) {
+        hash = (37 * hash) + MATCH_FIELD_NUMBER;
+        hash = (53 * hash) + getMatch().hashCode();
+      }
+      if (hasAction()) {
+        hash = (37 * hash) + ACTION_FIELD_NUMBER;
+        hash = (53 * hash) + getAction().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclEntry parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclEntry parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(acl.Acl.AclEntry prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code acl.AclEntry}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclEntry)
+        acl.Acl.AclEntryOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclEntry_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclEntry_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclEntry.class, acl.Acl.AclEntry.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclEntry.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        sequenceId_ = 0;
+
+        description_ = "";
+
+        if (matchBuilder_ == null) {
+          match_ = null;
+        } else {
+          match_ = null;
+          matchBuilder_ = null;
+        }
+        if (actionBuilder_ == null) {
+          action_ = null;
+        } else {
+          action_ = null;
+          actionBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclEntry_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclEntry getDefaultInstanceForType() {
+        return acl.Acl.AclEntry.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclEntry build() {
+        acl.Acl.AclEntry result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclEntry buildPartial() {
+        acl.Acl.AclEntry result = new acl.Acl.AclEntry(this);
+        result.sequenceId_ = sequenceId_;
+        result.description_ = description_;
+        if (matchBuilder_ == null) {
+          result.match_ = match_;
+        } else {
+          result.match_ = matchBuilder_.build();
+        }
+        if (actionBuilder_ == null) {
+          result.action_ = action_;
+        } else {
+          result.action_ = actionBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof acl.Acl.AclEntry) {
+          return mergeFrom((acl.Acl.AclEntry)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclEntry other) {
+        if (other == acl.Acl.AclEntry.getDefaultInstance()) return this;
+        if (other.getSequenceId() != 0) {
+          setSequenceId(other.getSequenceId());
+        }
+        if (!other.getDescription().isEmpty()) {
+          description_ = other.description_;
+          onChanged();
+        }
+        if (other.hasMatch()) {
+          mergeMatch(other.getMatch());
+        }
+        if (other.hasAction()) {
+          mergeAction(other.getAction());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        acl.Acl.AclEntry parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclEntry) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int sequenceId_ ;
+      /**
+       * <code>uint32 sequence_id = 1;</code>
+       * @return The sequenceId.
+       */
+      @java.lang.Override
+      public int getSequenceId() {
+        return sequenceId_;
+      }
+      /**
+       * <code>uint32 sequence_id = 1;</code>
+       * @param value The sequenceId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSequenceId(int value) {
+        
+        sequenceId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 sequence_id = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSequenceId() {
+        
+        sequenceId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object description_ = "";
+      /**
+       * <code>string description = 2;</code>
+       * @return The description.
+       */
+      public java.lang.String getDescription() {
+        java.lang.Object ref = description_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          description_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @return The bytes for description.
+       */
+      public com.google.protobuf.ByteString
+          getDescriptionBytes() {
+        java.lang.Object ref = description_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          description_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @param value The description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        description_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDescription() {
+        
+        description_ = getDefaultInstance().getDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @param value The bytes for description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        description_ = value;
+        onChanged();
+        return this;
+      }
+
+      private acl.Acl.AclMatch match_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclMatch, acl.Acl.AclMatch.Builder, acl.Acl.AclMatchOrBuilder> matchBuilder_;
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       * @return Whether the match field is set.
+       */
+      public boolean hasMatch() {
+        return matchBuilder_ != null || match_ != null;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       * @return The match.
+       */
+      public acl.Acl.AclMatch getMatch() {
+        if (matchBuilder_ == null) {
+          return match_ == null ? acl.Acl.AclMatch.getDefaultInstance() : match_;
+        } else {
+          return matchBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder setMatch(acl.Acl.AclMatch value) {
+        if (matchBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          match_ = value;
+          onChanged();
+        } else {
+          matchBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder setMatch(
+          acl.Acl.AclMatch.Builder builderForValue) {
+        if (matchBuilder_ == null) {
+          match_ = builderForValue.build();
+          onChanged();
+        } else {
+          matchBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder mergeMatch(acl.Acl.AclMatch value) {
+        if (matchBuilder_ == null) {
+          if (match_ != null) {
+            match_ =
+              acl.Acl.AclMatch.newBuilder(match_).mergeFrom(value).buildPartial();
+          } else {
+            match_ = value;
+          }
+          onChanged();
+        } else {
+          matchBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder clearMatch() {
+        if (matchBuilder_ == null) {
+          match_ = null;
+          onChanged();
+        } else {
+          match_ = null;
+          matchBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public acl.Acl.AclMatch.Builder getMatchBuilder() {
+        
+        onChanged();
+        return getMatchFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public acl.Acl.AclMatchOrBuilder getMatchOrBuilder() {
+        if (matchBuilder_ != null) {
+          return matchBuilder_.getMessageOrBuilder();
+        } else {
+          return match_ == null ?
+              acl.Acl.AclMatch.getDefaultInstance() : match_;
+        }
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclMatch, acl.Acl.AclMatch.Builder, acl.Acl.AclMatchOrBuilder> 
+          getMatchFieldBuilder() {
+        if (matchBuilder_ == null) {
+          matchBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclMatch, acl.Acl.AclMatch.Builder, acl.Acl.AclMatchOrBuilder>(
+                  getMatch(),
+                  getParentForChildren(),
+                  isClean());
+          match_ = null;
+        }
+        return matchBuilder_;
+      }
+
+      private acl.Acl.AclAction action_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclAction, acl.Acl.AclAction.Builder, acl.Acl.AclActionOrBuilder> actionBuilder_;
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       * @return Whether the action field is set.
+       */
+      public boolean hasAction() {
+        return actionBuilder_ != null || action_ != null;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       * @return The action.
+       */
+      public acl.Acl.AclAction getAction() {
+        if (actionBuilder_ == null) {
+          return action_ == null ? acl.Acl.AclAction.getDefaultInstance() : action_;
+        } else {
+          return actionBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder setAction(acl.Acl.AclAction value) {
+        if (actionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          action_ = value;
+          onChanged();
+        } else {
+          actionBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder setAction(
+          acl.Acl.AclAction.Builder builderForValue) {
+        if (actionBuilder_ == null) {
+          action_ = builderForValue.build();
+          onChanged();
+        } else {
+          actionBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder mergeAction(acl.Acl.AclAction value) {
+        if (actionBuilder_ == null) {
+          if (action_ != null) {
+            action_ =
+              acl.Acl.AclAction.newBuilder(action_).mergeFrom(value).buildPartial();
+          } else {
+            action_ = value;
+          }
+          onChanged();
+        } else {
+          actionBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder clearAction() {
+        if (actionBuilder_ == null) {
+          action_ = null;
+          onChanged();
+        } else {
+          action_ = null;
+          actionBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public acl.Acl.AclAction.Builder getActionBuilder() {
+        
+        onChanged();
+        return getActionFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public acl.Acl.AclActionOrBuilder getActionOrBuilder() {
+        if (actionBuilder_ != null) {
+          return actionBuilder_.getMessageOrBuilder();
+        } else {
+          return action_ == null ?
+              acl.Acl.AclAction.getDefaultInstance() : action_;
+        }
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclAction, acl.Acl.AclAction.Builder, acl.Acl.AclActionOrBuilder> 
+          getActionFieldBuilder() {
+        if (actionBuilder_ == null) {
+          actionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclAction, acl.Acl.AclAction.Builder, acl.Acl.AclActionOrBuilder>(
+                  getAction(),
+                  getParentForChildren(),
+                  isClean());
+          action_ = null;
+        }
+        return actionBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:acl.AclEntry)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclEntry)
+    private static final acl.Acl.AclEntry DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclEntry();
+    }
+
+    public static acl.Acl.AclEntry getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclEntry>
+        PARSER = new com.google.protobuf.AbstractParser<AclEntry>() {
+      @java.lang.Override
+      public AclEntry parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclEntry(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclEntry> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclEntry> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclEntry getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AclRuleSetOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclRuleSet)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The enum numeric value on the wire for type.
+     */
+    int getTypeValue();
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The type.
+     */
+    acl.Acl.AclRuleTypeEnum getType();
+
+    /**
+     * <code>string description = 3;</code>
+     * @return The description.
+     */
+    java.lang.String getDescription();
+    /**
+     * <code>string description = 3;</code>
+     * @return The bytes for description.
+     */
+    com.google.protobuf.ByteString
+        getDescriptionBytes();
+
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The userId.
+     */
+    java.lang.String getUserId();
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The bytes for userId.
+     */
+    com.google.protobuf.ByteString
+        getUserIdBytes();
+
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    java.util.List<acl.Acl.AclEntry> 
+        getEntriesList();
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    acl.Acl.AclEntry getEntries(int index);
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    int getEntriesCount();
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    java.util.List<? extends acl.Acl.AclEntryOrBuilder> 
+        getEntriesOrBuilderList();
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    acl.Acl.AclEntryOrBuilder getEntriesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code acl.AclRuleSet}
+   */
+  public static final class AclRuleSet extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclRuleSet)
+      AclRuleSetOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclRuleSet.newBuilder() to construct.
+    private AclRuleSet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclRuleSet() {
+      name_ = "";
+      type_ = 0;
+      description_ = "";
+      userId_ = "";
+      entries_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclRuleSet();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclRuleSet(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              type_ = rawValue;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              description_ = s;
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              userId_ = s;
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                entries_ = new java.util.ArrayList<acl.Acl.AclEntry>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              entries_.add(
+                  input.readMessage(acl.Acl.AclEntry.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          entries_ = java.util.Collections.unmodifiableList(entries_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclRuleSet_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclRuleSet.class, acl.Acl.AclRuleSet.Builder.class);
+    }
+
+    public static final int NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    @java.lang.Override
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int TYPE_FIELD_NUMBER = 2;
+    private int type_;
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The enum numeric value on the wire for type.
+     */
+    @java.lang.Override public int getTypeValue() {
+      return type_;
+    }
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The type.
+     */
+    @java.lang.Override public acl.Acl.AclRuleTypeEnum getType() {
+      @SuppressWarnings("deprecation")
+      acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.valueOf(type_);
+      return result == null ? acl.Acl.AclRuleTypeEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int DESCRIPTION_FIELD_NUMBER = 3;
+    private volatile java.lang.Object description_;
+    /**
+     * <code>string description = 3;</code>
+     * @return The description.
+     */
+    @java.lang.Override
+    public java.lang.String getDescription() {
+      java.lang.Object ref = description_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        description_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string description = 3;</code>
+     * @return The bytes for description.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDescriptionBytes() {
+      java.lang.Object ref = description_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        description_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int USER_ID_FIELD_NUMBER = 4;
+    private volatile java.lang.Object userId_;
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The userId.
+     */
+    @java.lang.Override
+    public java.lang.String getUserId() {
+      java.lang.Object ref = userId_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        userId_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The bytes for userId.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUserIdBytes() {
+      java.lang.Object ref = userId_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        userId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ENTRIES_FIELD_NUMBER = 5;
+    private java.util.List<acl.Acl.AclEntry> entries_;
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<acl.Acl.AclEntry> getEntriesList() {
+      return entries_;
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends acl.Acl.AclEntryOrBuilder> 
+        getEntriesOrBuilderList() {
+      return entries_;
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public int getEntriesCount() {
+      return entries_.size();
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclEntry getEntries(int index) {
+      return entries_.get(index);
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclEntryOrBuilder getEntriesOrBuilder(
+        int index) {
+      return entries_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+      }
+      if (type_ != acl.Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED.getNumber()) {
+        output.writeEnum(2, type_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, description_);
+      }
+      if (!getUserIdBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, userId_);
+      }
+      for (int i = 0; i < entries_.size(); i++) {
+        output.writeMessage(5, entries_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+      }
+      if (type_ != acl.Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, type_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, description_);
+      }
+      if (!getUserIdBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, userId_);
+      }
+      for (int i = 0; i < entries_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, entries_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof acl.Acl.AclRuleSet)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclRuleSet other = (acl.Acl.AclRuleSet) obj;
+
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (type_ != other.type_) return false;
+      if (!getDescription()
+          .equals(other.getDescription())) return false;
+      if (!getUserId()
+          .equals(other.getUserId())) return false;
+      if (!getEntriesList()
+          .equals(other.getEntriesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + type_;
+      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getDescription().hashCode();
+      hash = (37 * hash) + USER_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getUserId().hashCode();
+      if (getEntriesCount() > 0) {
+        hash = (37 * hash) + ENTRIES_FIELD_NUMBER;
+        hash = (53 * hash) + getEntriesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclRuleSet parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclRuleSet parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(acl.Acl.AclRuleSet prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code acl.AclRuleSet}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclRuleSet)
+        acl.Acl.AclRuleSetOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclRuleSet_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclRuleSet.class, acl.Acl.AclRuleSet.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclRuleSet.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getEntriesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+
+        type_ = 0;
+
+        description_ = "";
+
+        userId_ = "";
+
+        if (entriesBuilder_ == null) {
+          entries_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          entriesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclRuleSet getDefaultInstanceForType() {
+        return acl.Acl.AclRuleSet.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclRuleSet build() {
+        acl.Acl.AclRuleSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclRuleSet buildPartial() {
+        acl.Acl.AclRuleSet result = new acl.Acl.AclRuleSet(this);
+        int from_bitField0_ = bitField0_;
+        result.name_ = name_;
+        result.type_ = type_;
+        result.description_ = description_;
+        result.userId_ = userId_;
+        if (entriesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            entries_ = java.util.Collections.unmodifiableList(entries_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.entries_ = entries_;
+        } else {
+          result.entries_ = entriesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof acl.Acl.AclRuleSet) {
+          return mergeFrom((acl.Acl.AclRuleSet)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclRuleSet other) {
+        if (other == acl.Acl.AclRuleSet.getDefaultInstance()) return this;
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.type_ != 0) {
+          setTypeValue(other.getTypeValue());
+        }
+        if (!other.getDescription().isEmpty()) {
+          description_ = other.description_;
+          onChanged();
+        }
+        if (!other.getUserId().isEmpty()) {
+          userId_ = other.userId_;
+          onChanged();
+        }
+        if (entriesBuilder_ == null) {
+          if (!other.entries_.isEmpty()) {
+            if (entries_.isEmpty()) {
+              entries_ = other.entries_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureEntriesIsMutable();
+              entries_.addAll(other.entries_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.entries_.isEmpty()) {
+            if (entriesBuilder_.isEmpty()) {
+              entriesBuilder_.dispose();
+              entriesBuilder_ = null;
+              entries_ = other.entries_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              entriesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getEntriesFieldBuilder() : null;
+            } else {
+              entriesBuilder_.addAllMessages(other.entries_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        acl.Acl.AclRuleSet parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclRuleSet) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 1;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int type_ = 0;
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @return The enum numeric value on the wire for type.
+       */
+      @java.lang.Override public int getTypeValue() {
+        return type_;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @param value The enum numeric value on the wire for type to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTypeValue(int value) {
+        
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @return The type.
+       */
+      @java.lang.Override
+      public acl.Acl.AclRuleTypeEnum getType() {
+        @SuppressWarnings("deprecation")
+        acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.valueOf(type_);
+        return result == null ? acl.Acl.AclRuleTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @param value The type to set.
+       * @return This builder for chaining.
+       */
+      public Builder setType(acl.Acl.AclRuleTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        type_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearType() {
+        
+        type_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object description_ = "";
+      /**
+       * <code>string description = 3;</code>
+       * @return The description.
+       */
+      public java.lang.String getDescription() {
+        java.lang.Object ref = description_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          description_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @return The bytes for description.
+       */
+      public com.google.protobuf.ByteString
+          getDescriptionBytes() {
+        java.lang.Object ref = description_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          description_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @param value The description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        description_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDescription() {
+        
+        description_ = getDefaultInstance().getDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @param value The bytes for description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        description_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object userId_ = "";
+      /**
+       * <code>string user_id = 4;</code>
+       * @return The userId.
+       */
+      public java.lang.String getUserId() {
+        java.lang.Object ref = userId_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          userId_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @return The bytes for userId.
+       */
+      public com.google.protobuf.ByteString
+          getUserIdBytes() {
+        java.lang.Object ref = userId_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          userId_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @param value The userId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUserId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        userId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUserId() {
+        
+        userId_ = getDefaultInstance().getUserId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @param value The bytes for userId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUserIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        userId_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<acl.Acl.AclEntry> entries_ =
+        java.util.Collections.emptyList();
+      private void ensureEntriesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          entries_ = new java.util.ArrayList<acl.Acl.AclEntry>(entries_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder> entriesBuilder_;
+
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public java.util.List<acl.Acl.AclEntry> getEntriesList() {
+        if (entriesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(entries_);
+        } else {
+          return entriesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public int getEntriesCount() {
+        if (entriesBuilder_ == null) {
+          return entries_.size();
+        } else {
+          return entriesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry getEntries(int index) {
+        if (entriesBuilder_ == null) {
+          return entries_.get(index);
+        } else {
+          return entriesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder setEntries(
+          int index, acl.Acl.AclEntry value) {
+        if (entriesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEntriesIsMutable();
+          entries_.set(index, value);
+          onChanged();
+        } else {
+          entriesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder setEntries(
+          int index, acl.Acl.AclEntry.Builder builderForValue) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          entriesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(acl.Acl.AclEntry value) {
+        if (entriesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEntriesIsMutable();
+          entries_.add(value);
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(
+          int index, acl.Acl.AclEntry value) {
+        if (entriesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEntriesIsMutable();
+          entries_.add(index, value);
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(
+          acl.Acl.AclEntry.Builder builderForValue) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.add(builderForValue.build());
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(
+          int index, acl.Acl.AclEntry.Builder builderForValue) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addAllEntries(
+          java.lang.Iterable<? extends acl.Acl.AclEntry> values) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, entries_);
+          onChanged();
+        } else {
+          entriesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder clearEntries() {
+        if (entriesBuilder_ == null) {
+          entries_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          entriesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder removeEntries(int index) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.remove(index);
+          onChanged();
+        } else {
+          entriesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry.Builder getEntriesBuilder(
+          int index) {
+        return getEntriesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntryOrBuilder getEntriesOrBuilder(
+          int index) {
+        if (entriesBuilder_ == null) {
+          return entries_.get(index);  } else {
+          return entriesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public java.util.List<? extends acl.Acl.AclEntryOrBuilder> 
+           getEntriesOrBuilderList() {
+        if (entriesBuilder_ != null) {
+          return entriesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(entries_);
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry.Builder addEntriesBuilder() {
+        return getEntriesFieldBuilder().addBuilder(
+            acl.Acl.AclEntry.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry.Builder addEntriesBuilder(
+          int index) {
+        return getEntriesFieldBuilder().addBuilder(
+            index, acl.Acl.AclEntry.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public java.util.List<acl.Acl.AclEntry.Builder> 
+           getEntriesBuilderList() {
+        return getEntriesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder> 
+          getEntriesFieldBuilder() {
+        if (entriesBuilder_ == null) {
+          entriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder>(
+                  entries_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          entries_ = null;
+        }
+        return entriesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:acl.AclRuleSet)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclRuleSet)
+    private static final acl.Acl.AclRuleSet DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclRuleSet();
+    }
+
+    public static acl.Acl.AclRuleSet getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclRuleSet>
+        PARSER = new com.google.protobuf.AbstractParser<AclRuleSet>() {
+      @java.lang.Override
+      public AclRuleSet parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclRuleSet(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclRuleSet> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclRuleSet> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclRuleSet getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclMatch_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclMatch_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclAction_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclAction_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclEntry_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclEntry_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclRuleSet_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclRuleSet_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\tacl.proto\022\003acl\"\252\001\n\010AclMatch\022\014\n\004dscp\030\001 " +
+      "\001(\r\022\020\n\010protocol\030\002 \001(\r\022\023\n\013src_address\030\003 \001" +
+      "(\t\022\023\n\013dst_address\030\004 \001(\t\022\020\n\010src_port\030\005 \001(" +
+      "\r\022\020\n\010dst_port\030\006 \001(\r\022\030\n\020start_mpls_label\030" +
+      "\007 \001(\r\022\026\n\016end_mpls_label\030\010 \001(\r\"i\n\tAclActi" +
+      "on\0221\n\016forward_action\030\001 \001(\0162\031.acl.AclForw" +
+      "ardActionEnum\022)\n\nlog_action\030\002 \001(\0162\025.acl." +
+      "AclLogActionEnum\"r\n\010AclEntry\022\023\n\013sequence" +
+      "_id\030\001 \001(\r\022\023\n\013description\030\002 \001(\t\022\034\n\005match\030" +
+      "\003 \001(\0132\r.acl.AclMatch\022\036\n\006action\030\004 \001(\0132\016.a" +
+      "cl.AclAction\"\204\001\n\nAclRuleSet\022\014\n\004name\030\001 \001(" +
+      "\t\022\"\n\004type\030\002 \001(\0162\024.acl.AclRuleTypeEnum\022\023\n" +
+      "\013description\030\003 \001(\t\022\017\n\007user_id\030\004 \001(\t\022\036\n\007e" +
+      "ntries\030\005 \003(\0132\r.acl.AclEntry*\231\001\n\017AclRuleT" +
+      "ypeEnum\022\031\n\025ACLRULETYPE_UNDEFINED\020\000\022\024\n\020AC" +
+      "LRULETYPE_IPV4\020\001\022\024\n\020ACLRULETYPE_IPV6\020\002\022\022" +
+      "\n\016ACLRULETYPE_L2\020\003\022\024\n\020ACLRULETYPE_MPLS\020\004" +
+      "\022\025\n\021ACLRULETYPE_MIXED\020\005*\227\001\n\024AclForwardAc" +
+      "tionEnum\022!\n\035ACLFORWARDINGACTION_UNDEFINE" +
+      "D\020\000\022\034\n\030ACLFORWARDINGACTION_DROP\020\001\022\036\n\032ACL" +
+      "FORWARDINGACTION_ACCEPT\020\002\022\036\n\032ACLFORWARDI" +
+      "NGACTION_REJECT\020\003*_\n\020AclLogActionEnum\022\032\n" +
+      "\026ACLLOGACTION_UNDEFINED\020\000\022\026\n\022ACLLOGACTIO" +
+      "N_NOLOG\020\001\022\027\n\023ACLLOGACTION_SYSLOG\020\002b\006prot" +
+      "o3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_acl_AclMatch_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_acl_AclMatch_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclMatch_descriptor,
+        new java.lang.String[] { "Dscp", "Protocol", "SrcAddress", "DstAddress", "SrcPort", "DstPort", "StartMplsLabel", "EndMplsLabel", });
+    internal_static_acl_AclAction_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_acl_AclAction_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclAction_descriptor,
+        new java.lang.String[] { "ForwardAction", "LogAction", });
+    internal_static_acl_AclEntry_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_acl_AclEntry_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclEntry_descriptor,
+        new java.lang.String[] { "SequenceId", "Description", "Match", "Action", });
+    internal_static_acl_AclRuleSet_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_acl_AclRuleSet_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclRuleSet_descriptor,
+        new java.lang.String[] { "Name", "Type", "Description", "UserId", "Entries", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/automation/target/generated-sources/grpc/automation/Automation.java b/src/automation/target/generated-sources/grpc/automation/Automation.java
index a44bc42294078fdba325d9dc9f149eaf1bd2bcbc..f3918e0fc18e6d97b8fd669fb307dcb94964b0e0 100644
--- a/src/automation/target/generated-sources/grpc/automation/Automation.java
+++ b/src/automation/target/generated-sources/grpc/automation/Automation.java
@@ -3977,424 +3977,6 @@ public final class Automation {
 
   }
 
-  public interface EmptyOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:automation.Empty)
-      com.google.protobuf.MessageOrBuilder {
-  }
-  /**
-   * Protobuf type {@code automation.Empty}
-   */
-  public static final class Empty extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:automation.Empty)
-      EmptyOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Empty.newBuilder() to construct.
-    private Empty(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Empty() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Empty();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Empty(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return automation.Automation.internal_static_automation_Empty_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return automation.Automation.internal_static_automation_Empty_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              automation.Automation.Empty.class, automation.Automation.Empty.Builder.class);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof automation.Automation.Empty)) {
-        return super.equals(obj);
-      }
-      automation.Automation.Empty other = (automation.Automation.Empty) obj;
-
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static automation.Automation.Empty parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static automation.Automation.Empty parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static automation.Automation.Empty parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static automation.Automation.Empty parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static automation.Automation.Empty parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static automation.Automation.Empty parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static automation.Automation.Empty parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static automation.Automation.Empty parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static automation.Automation.Empty parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static automation.Automation.Empty parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static automation.Automation.Empty parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static automation.Automation.Empty parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(automation.Automation.Empty prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code automation.Empty}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:automation.Empty)
-        automation.Automation.EmptyOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return automation.Automation.internal_static_automation_Empty_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return automation.Automation.internal_static_automation_Empty_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                automation.Automation.Empty.class, automation.Automation.Empty.Builder.class);
-      }
-
-      // Construct using automation.Automation.Empty.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return automation.Automation.internal_static_automation_Empty_descriptor;
-      }
-
-      @java.lang.Override
-      public automation.Automation.Empty getDefaultInstanceForType() {
-        return automation.Automation.Empty.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public automation.Automation.Empty build() {
-        automation.Automation.Empty result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public automation.Automation.Empty buildPartial() {
-        automation.Automation.Empty result = new automation.Automation.Empty(this);
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
-      }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
-      }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
-      }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
-      }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof automation.Automation.Empty) {
-          return mergeFrom((automation.Automation.Empty)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(automation.Automation.Empty other) {
-        if (other == automation.Automation.Empty.getDefaultInstance()) return this;
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        automation.Automation.Empty parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (automation.Automation.Empty) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:automation.Empty)
-    }
-
-    // @@protoc_insertion_point(class_scope:automation.Empty)
-    private static final automation.Automation.Empty DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new automation.Automation.Empty();
-    }
-
-    public static automation.Automation.Empty getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<Empty>
-        PARSER = new com.google.protobuf.AbstractParser<Empty>() {
-      @java.lang.Override
-      public Empty parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Empty(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<Empty> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Empty> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public automation.Automation.Empty getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_automation_DeviceRoleId_descriptor;
   private static final 
@@ -4420,11 +4002,6 @@ public final class Automation {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_automation_DeviceDeletionResult_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_automation_Empty_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_automation_Empty_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -4445,23 +4022,23 @@ public final class Automation {
       "evRoleId\030\001 \001(\0132\030.automation.DeviceRoleId" +
       "\0220\n\014devRoleState\030\002 \001(\0162\032.automation.ZtpD" +
       "eviceState\"\'\n\024DeviceDeletionResult\022\017\n\007de" +
-      "leted\030\001 \003(\t\"\007\n\005Empty*H\n\016DeviceRoleType\022\010" +
-      "\n\004NONE\020\000\022\013\n\007DEV_OPS\020\001\022\014\n\010DEV_CONF\020\002\022\021\n\rP" +
-      "IPELINE_CONF\020\003*~\n\016ZtpDeviceState\022\033\n\027ZTP_" +
-      "DEV_STATE_UNDEFINED\020\000\022\031\n\025ZTP_DEV_STATE_C" +
-      "REATED\020\001\022\031\n\025ZTP_DEV_STATE_UPDATED\020\002\022\031\n\025Z" +
-      "TP_DEV_STATE_DELETED\020\0032\273\003\n\021AutomationSer" +
-      "vice\022F\n\020ZtpGetDeviceRole\022\030.automation.De" +
-      "viceRoleId\032\026.automation.DeviceRole\"\000\022N\n\033" +
-      "ZtpGetDeviceRolesByDeviceId\022\021.context.De" +
-      "viceId\032\032.automation.DeviceRoleList\"\000\022?\n\006" +
-      "ZtpAdd\022\026.automation.DeviceRole\032\033.automat" +
-      "ion.DeviceRoleState\"\000\022B\n\tZtpUpdate\022\026.aut" +
-      "omation.DeviceRole\032\033.automation.DeviceRo" +
-      "leState\"\000\022B\n\tZtpDelete\022\026.automation.Devi" +
-      "ceRole\032\033.automation.DeviceRoleState\"\000\022E\n" +
-      "\014ZtpDeleteAll\022\021.automation.Empty\032 .autom" +
-      "ation.DeviceDeletionResult\"\000b\006proto3"
+      "leted\030\001 \003(\t*H\n\016DeviceRoleType\022\010\n\004NONE\020\000\022" +
+      "\013\n\007DEV_OPS\020\001\022\014\n\010DEV_CONF\020\002\022\021\n\rPIPELINE_C" +
+      "ONF\020\003*~\n\016ZtpDeviceState\022\033\n\027ZTP_DEV_STATE" +
+      "_UNDEFINED\020\000\022\031\n\025ZTP_DEV_STATE_CREATED\020\001\022" +
+      "\031\n\025ZTP_DEV_STATE_UPDATED\020\002\022\031\n\025ZTP_DEV_ST" +
+      "ATE_DELETED\020\0032\270\003\n\021AutomationService\022F\n\020Z" +
+      "tpGetDeviceRole\022\030.automation.DeviceRoleI" +
+      "d\032\026.automation.DeviceRole\"\000\022N\n\033ZtpGetDev" +
+      "iceRolesByDeviceId\022\021.context.DeviceId\032\032." +
+      "automation.DeviceRoleList\"\000\022?\n\006ZtpAdd\022\026." +
+      "automation.DeviceRole\032\033.automation.Devic" +
+      "eRoleState\"\000\022B\n\tZtpUpdate\022\026.automation.D" +
+      "eviceRole\032\033.automation.DeviceRoleState\"\000" +
+      "\022B\n\tZtpDelete\022\026.automation.DeviceRole\032\033." +
+      "automation.DeviceRoleState\"\000\022B\n\014ZtpDelet" +
+      "eAll\022\016.context.Empty\032 .automation.Device" +
+      "DeletionResult\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -4498,12 +4075,6 @@ public final class Automation {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_automation_DeviceDeletionResult_descriptor,
         new java.lang.String[] { "Deleted", });
-    internal_static_automation_Empty_descriptor =
-      getDescriptor().getMessageTypes().get(5);
-    internal_static_automation_Empty_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_automation_Empty_descriptor,
-        new java.lang.String[] { });
     context.ContextOuterClass.getDescriptor();
   }
 
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationService.java b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
index 9b772a499617f341ba742ccfe8ae8ade34366831..4df9e1098d2028bba58da0959512310ed3d2c4ba 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationService.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
@@ -18,7 +18,7 @@ public interface AutomationService extends MutinyService {
     
     io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request);
     
-    io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(automation.Automation.Empty request);
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(context.ContextOuterClass.Empty request);
     
     
     
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
index 52b1425cf6d3c5c59ae99621204689176892d043..74d420a1ee8c3c11f824c30fb96f694ddddc64fe 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
@@ -56,7 +56,7 @@ public class AutomationServiceBean extends MutinyAutomationServiceGrpc.Automatio
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(automation.Automation.Empty request) {
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(context.ContextOuterClass.Empty request) {
        try {
          return delegate.ztpDeleteAll(request);
        } catch (UnsupportedOperationException e) {
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
index 5dde73d5bfdbb401ed9fd89e38a6caa3e75cabbe..9dcad532a0238f6f14d8e6ca2aa64b445747e9e6 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
@@ -41,7 +41,7 @@ public class AutomationServiceClient implements AutomationService, MutinyClient<
        return stub.ztpDelete(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(automation.Automation.Empty request) {
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(context.ContextOuterClass.Empty request) {
        return stub.ztpDeleteAll(request);
     }
 
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
index 9f805796624bff8dfbd5f4b428fa21cf066ffb80..25f5feaf327702102d1ec6cd9ca6cc8ab74cf14f 100644
--- a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
@@ -169,27 +169,27 @@ public final class AutomationServiceGrpc {
     return getZtpDeleteMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<automation.Automation.Empty,
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
       automation.Automation.DeviceDeletionResult> getZtpDeleteAllMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "ZtpDeleteAll",
-      requestType = automation.Automation.Empty.class,
+      requestType = context.ContextOuterClass.Empty.class,
       responseType = automation.Automation.DeviceDeletionResult.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<automation.Automation.Empty,
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
       automation.Automation.DeviceDeletionResult> getZtpDeleteAllMethod() {
-    io.grpc.MethodDescriptor<automation.Automation.Empty, automation.Automation.DeviceDeletionResult> getZtpDeleteAllMethod;
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, automation.Automation.DeviceDeletionResult> getZtpDeleteAllMethod;
     if ((getZtpDeleteAllMethod = AutomationServiceGrpc.getZtpDeleteAllMethod) == null) {
       synchronized (AutomationServiceGrpc.class) {
         if ((getZtpDeleteAllMethod = AutomationServiceGrpc.getZtpDeleteAllMethod) == null) {
           AutomationServiceGrpc.getZtpDeleteAllMethod = getZtpDeleteAllMethod =
-              io.grpc.MethodDescriptor.<automation.Automation.Empty, automation.Automation.DeviceDeletionResult>newBuilder()
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, automation.Automation.DeviceDeletionResult>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpDeleteAll"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  automation.Automation.Empty.getDefaultInstance()))
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
                   automation.Automation.DeviceDeletionResult.getDefaultInstance()))
               .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpDeleteAll"))
@@ -285,7 +285,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public void ztpDeleteAll(automation.Automation.Empty request,
+    public void ztpDeleteAll(context.ContextOuterClass.Empty request,
         io.grpc.stub.StreamObserver<automation.Automation.DeviceDeletionResult> responseObserver) {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpDeleteAllMethod(), responseObserver);
     }
@@ -331,7 +331,7 @@ public final class AutomationServiceGrpc {
             getZtpDeleteAllMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                automation.Automation.Empty,
+                context.ContextOuterClass.Empty,
                 automation.Automation.DeviceDeletionResult>(
                   this, METHODID_ZTP_DELETE_ALL)))
           .build();
@@ -394,7 +394,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public void ztpDeleteAll(automation.Automation.Empty request,
+    public void ztpDeleteAll(context.ContextOuterClass.Empty request,
         io.grpc.stub.StreamObserver<automation.Automation.DeviceDeletionResult> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
           getChannel().newCall(getZtpDeleteAllMethod(), getCallOptions()), request, responseObserver);
@@ -452,7 +452,7 @@ public final class AutomationServiceGrpc {
 
     /**
      */
-    public automation.Automation.DeviceDeletionResult ztpDeleteAll(automation.Automation.Empty request) {
+    public automation.Automation.DeviceDeletionResult ztpDeleteAll(context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
           getChannel(), getZtpDeleteAllMethod(), getCallOptions(), request);
     }
@@ -515,7 +515,7 @@ public final class AutomationServiceGrpc {
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceDeletionResult> ztpDeleteAll(
-        automation.Automation.Empty request) {
+        context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
           getChannel().newCall(getZtpDeleteAllMethod(), getCallOptions()), request);
     }
@@ -566,7 +566,7 @@ public final class AutomationServiceGrpc {
               (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
           break;
         case METHODID_ZTP_DELETE_ALL:
-          serviceImpl.ztpDeleteAll((automation.Automation.Empty) request,
+          serviceImpl.ztpDeleteAll((context.ContextOuterClass.Empty) request,
               (io.grpc.stub.StreamObserver<automation.Automation.DeviceDeletionResult>) responseObserver);
           break;
         default:
diff --git a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
index 0783cbc965e487a020a36d25acca55c5a17c0640..9b641fcdd7733828c58ce563651ac3d46e697287 100644
--- a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
@@ -61,7 +61,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(automation.Automation.Empty request) {
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(context.ContextOuterClass.Empty request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpDeleteAll);
         }
 
@@ -108,7 +108,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(automation.Automation.Empty request) {
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceDeletionResult> ztpDeleteAll(context.ContextOuterClass.Empty request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -153,7 +153,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
                             automation.AutomationServiceGrpc.getZtpDeleteAllMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            automation.Automation.Empty,
+                                            context.ContextOuterClass.Empty,
                                             automation.Automation.DeviceDeletionResult>(
                                             this, METHODID_ZTP_DELETE_ALL, compression)))
                     .build();
@@ -217,7 +217,7 @@ public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtim
                             serviceImpl::ztpDelete);
                     break;
                 case METHODID_ZTP_DELETE_ALL:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.Empty) request,
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
                             (io.grpc.stub.StreamObserver<automation.Automation.DeviceDeletionResult>) responseObserver,
                             compression,
                             serviceImpl::ztpDeleteAll);
diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
index ee807d7a7c69256b7a4c99c5139fafe076898918..45a64fabb43bab645e97e9d80bc1825242006dce 100644
--- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -556,6 +556,10 @@ public final class ContextOuterClass {
      * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
      */
     SERVICESTATUS_PENDING_REMOVAL(3),
+    /**
+     * <code>SERVICESTATUS_SLA_VIOLATED = 4;</code>
+     */
+    SERVICESTATUS_SLA_VIOLATED(4),
     UNRECOGNIZED(-1),
     ;
 
@@ -575,6 +579,10 @@ public final class ContextOuterClass {
      * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
      */
     public static final int SERVICESTATUS_PENDING_REMOVAL_VALUE = 3;
+    /**
+     * <code>SERVICESTATUS_SLA_VIOLATED = 4;</code>
+     */
+    public static final int SERVICESTATUS_SLA_VIOLATED_VALUE = 4;
 
 
     public final int getNumber() {
@@ -605,6 +613,7 @@ public final class ContextOuterClass {
         case 1: return SERVICESTATUS_PLANNED;
         case 2: return SERVICESTATUS_ACTIVE;
         case 3: return SERVICESTATUS_PENDING_REMOVAL;
+        case 4: return SERVICESTATUS_SLA_VIOLATED;
         default: return null;
       }
     }
@@ -686,6 +695,10 @@ public final class ContextOuterClass {
      * <code>SLICESTATUS_DEINIT = 4;</code>
      */
     SLICESTATUS_DEINIT(4),
+    /**
+     * <code>SLICESTATUS_SLA_VIOLATED = 5;</code>
+     */
+    SLICESTATUS_SLA_VIOLATED(5),
     UNRECOGNIZED(-1),
     ;
 
@@ -709,6 +722,10 @@ public final class ContextOuterClass {
      * <code>SLICESTATUS_DEINIT = 4;</code>
      */
     public static final int SLICESTATUS_DEINIT_VALUE = 4;
+    /**
+     * <code>SLICESTATUS_SLA_VIOLATED = 5;</code>
+     */
+    public static final int SLICESTATUS_SLA_VIOLATED_VALUE = 5;
 
 
     public final int getNumber() {
@@ -740,6 +757,7 @@ public final class ContextOuterClass {
         case 2: return SLICESTATUS_INIT;
         case 3: return SLICESTATUS_ACTIVE;
         case 4: return SLICESTATUS_DEINIT;
+        case 5: return SLICESTATUS_SLA_VIOLATED;
         default: return null;
       }
     }
@@ -917,6 +935,177 @@ public final class ContextOuterClass {
     // @@protoc_insertion_point(enum_scope:context.ConfigActionEnum)
   }
 
+  /**
+   * Protobuf enum {@code context.IsolationLevelEnum}
+   */
+  public enum IsolationLevelEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>NO_ISOLATION = 0;</code>
+     */
+    NO_ISOLATION(0),
+    /**
+     * <code>PHYSICAL_ISOLATION = 1;</code>
+     */
+    PHYSICAL_ISOLATION(1),
+    /**
+     * <code>LOGICAL_ISOLATION = 2;</code>
+     */
+    LOGICAL_ISOLATION(2),
+    /**
+     * <code>PROCESS_ISOLATION = 3;</code>
+     */
+    PROCESS_ISOLATION(3),
+    /**
+     * <code>PHYSICAL_MEMORY_ISOLATION = 4;</code>
+     */
+    PHYSICAL_MEMORY_ISOLATION(4),
+    /**
+     * <code>PHYSICAL_NETWORK_ISOLATION = 5;</code>
+     */
+    PHYSICAL_NETWORK_ISOLATION(5),
+    /**
+     * <code>VIRTUAL_RESOURCE_ISOLATION = 6;</code>
+     */
+    VIRTUAL_RESOURCE_ISOLATION(6),
+    /**
+     * <code>NETWORK_FUNCTIONS_ISOLATION = 7;</code>
+     */
+    NETWORK_FUNCTIONS_ISOLATION(7),
+    /**
+     * <code>SERVICE_ISOLATION = 8;</code>
+     */
+    SERVICE_ISOLATION(8),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>NO_ISOLATION = 0;</code>
+     */
+    public static final int NO_ISOLATION_VALUE = 0;
+    /**
+     * <code>PHYSICAL_ISOLATION = 1;</code>
+     */
+    public static final int PHYSICAL_ISOLATION_VALUE = 1;
+    /**
+     * <code>LOGICAL_ISOLATION = 2;</code>
+     */
+    public static final int LOGICAL_ISOLATION_VALUE = 2;
+    /**
+     * <code>PROCESS_ISOLATION = 3;</code>
+     */
+    public static final int PROCESS_ISOLATION_VALUE = 3;
+    /**
+     * <code>PHYSICAL_MEMORY_ISOLATION = 4;</code>
+     */
+    public static final int PHYSICAL_MEMORY_ISOLATION_VALUE = 4;
+    /**
+     * <code>PHYSICAL_NETWORK_ISOLATION = 5;</code>
+     */
+    public static final int PHYSICAL_NETWORK_ISOLATION_VALUE = 5;
+    /**
+     * <code>VIRTUAL_RESOURCE_ISOLATION = 6;</code>
+     */
+    public static final int VIRTUAL_RESOURCE_ISOLATION_VALUE = 6;
+    /**
+     * <code>NETWORK_FUNCTIONS_ISOLATION = 7;</code>
+     */
+    public static final int NETWORK_FUNCTIONS_ISOLATION_VALUE = 7;
+    /**
+     * <code>SERVICE_ISOLATION = 8;</code>
+     */
+    public static final int SERVICE_ISOLATION_VALUE = 8;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static IsolationLevelEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static IsolationLevelEnum forNumber(int value) {
+      switch (value) {
+        case 0: return NO_ISOLATION;
+        case 1: return PHYSICAL_ISOLATION;
+        case 2: return LOGICAL_ISOLATION;
+        case 3: return PROCESS_ISOLATION;
+        case 4: return PHYSICAL_MEMORY_ISOLATION;
+        case 5: return PHYSICAL_NETWORK_ISOLATION;
+        case 6: return VIRTUAL_RESOURCE_ISOLATION;
+        case 7: return NETWORK_FUNCTIONS_ISOLATION;
+        case 8: return SERVICE_ISOLATION;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<IsolationLevelEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        IsolationLevelEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<IsolationLevelEnum>() {
+            public IsolationLevelEnum findValueByNumber(int number) {
+              return IsolationLevelEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(7);
+    }
+
+    private static final IsolationLevelEnum[] VALUES = values();
+
+    public static IsolationLevelEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private IsolationLevelEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.IsolationLevelEnum)
+  }
+
   public interface EmptyOrBuilder extends
       // @@protoc_insertion_point(interface_extends:context.Empty)
       com.google.protobuf.MessageOrBuilder {
@@ -1911,8 +2100,8 @@ public final class ContextOuterClass {
 
   }
 
-  public interface EventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Event)
+  public interface TimestampOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Timestamp)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -1920,39 +2109,27 @@ public final class ContextOuterClass {
      * @return The timestamp.
      */
     double getTimestamp();
-
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The enum numeric value on the wire for eventType.
-     */
-    int getEventTypeValue();
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The eventType.
-     */
-    context.ContextOuterClass.EventTypeEnum getEventType();
   }
   /**
-   * Protobuf type {@code context.Event}
+   * Protobuf type {@code context.Timestamp}
    */
-  public static final class Event extends
+  public static final class Timestamp extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Event)
-      EventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Timestamp)
+      TimestampOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Event.newBuilder() to construct.
-    private Event(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Timestamp.newBuilder() to construct.
+    private Timestamp(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Event() {
-      eventType_ = 0;
+    private Timestamp() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Event();
+      return new Timestamp();
     }
 
     @java.lang.Override
@@ -1960,7 +2137,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Event(
+    private Timestamp(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -1983,12 +2160,6 @@ public final class ContextOuterClass {
               timestamp_ = input.readDouble();
               break;
             }
-            case 16: {
-              int rawValue = input.readEnum();
-
-              eventType_ = rawValue;
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2010,15 +2181,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Event_descriptor;
+      return context.ContextOuterClass.internal_static_context_Timestamp_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Timestamp_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+              context.ContextOuterClass.Timestamp.class, context.ContextOuterClass.Timestamp.Builder.class);
     }
 
     public static final int TIMESTAMP_FIELD_NUMBER = 1;
@@ -2032,25 +2203,6 @@ public final class ContextOuterClass {
       return timestamp_;
     }
 
-    public static final int EVENT_TYPE_FIELD_NUMBER = 2;
-    private int eventType_;
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The enum numeric value on the wire for eventType.
-     */
-    @java.lang.Override public int getEventTypeValue() {
-      return eventType_;
-    }
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The eventType.
-     */
-    @java.lang.Override public context.ContextOuterClass.EventTypeEnum getEventType() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
-      return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
-    }
-
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2068,9 +2220,6 @@ public final class ContextOuterClass {
       if (timestamp_ != 0D) {
         output.writeDouble(1, timestamp_);
       }
-      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
-        output.writeEnum(2, eventType_);
-      }
       unknownFields.writeTo(output);
     }
 
@@ -2084,10 +2233,6 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeDoubleSize(1, timestamp_);
       }
-      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, eventType_);
-      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -2098,15 +2243,14 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Event)) {
+      if (!(obj instanceof context.ContextOuterClass.Timestamp)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Event other = (context.ContextOuterClass.Event) obj;
+      context.ContextOuterClass.Timestamp other = (context.ContextOuterClass.Timestamp) obj;
 
       if (java.lang.Double.doubleToLongBits(getTimestamp())
           != java.lang.Double.doubleToLongBits(
               other.getTimestamp())) return false;
-      if (eventType_ != other.eventType_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2121,76 +2265,74 @@ public final class ContextOuterClass {
       hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           java.lang.Double.doubleToLongBits(getTimestamp()));
-      hash = (37 * hash) + EVENT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + eventType_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseFrom(byte[] data)
+    public static context.ContextOuterClass.Timestamp parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Timestamp parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Timestamp parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Event parseDelimitedFrom(
+    public static context.ContextOuterClass.Timestamp parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2203,7 +2345,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Event prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Timestamp prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2219,26 +2361,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Event}
+     * Protobuf type {@code context.Timestamp}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Event)
-        context.ContextOuterClass.EventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Timestamp)
+        context.ContextOuterClass.TimestampOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+        return context.ContextOuterClass.internal_static_context_Timestamp_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Timestamp_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+                context.ContextOuterClass.Timestamp.class, context.ContextOuterClass.Timestamp.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Event.newBuilder()
+      // Construct using context.ContextOuterClass.Timestamp.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2258,25 +2400,23 @@ public final class ContextOuterClass {
         super.clear();
         timestamp_ = 0D;
 
-        eventType_ = 0;
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+        return context.ContextOuterClass.internal_static_context_Timestamp_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Event getDefaultInstanceForType() {
-        return context.ContextOuterClass.Event.getDefaultInstance();
+      public context.ContextOuterClass.Timestamp getDefaultInstanceForType() {
+        return context.ContextOuterClass.Timestamp.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Event build() {
-        context.ContextOuterClass.Event result = buildPartial();
+      public context.ContextOuterClass.Timestamp build() {
+        context.ContextOuterClass.Timestamp result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2284,10 +2424,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Event buildPartial() {
-        context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
+      public context.ContextOuterClass.Timestamp buildPartial() {
+        context.ContextOuterClass.Timestamp result = new context.ContextOuterClass.Timestamp(this);
         result.timestamp_ = timestamp_;
-        result.eventType_ = eventType_;
         onBuilt();
         return result;
       }
@@ -2326,22 +2465,19 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Event) {
-          return mergeFrom((context.ContextOuterClass.Event)other);
+        if (other instanceof context.ContextOuterClass.Timestamp) {
+          return mergeFrom((context.ContextOuterClass.Timestamp)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Event other) {
-        if (other == context.ContextOuterClass.Event.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.Timestamp other) {
+        if (other == context.ContextOuterClass.Timestamp.getDefaultInstance()) return this;
         if (other.getTimestamp() != 0D) {
           setTimestamp(other.getTimestamp());
         }
-        if (other.eventType_ != 0) {
-          setEventTypeValue(other.getEventTypeValue());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -2357,11 +2493,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Event parsedMessage = null;
+        context.ContextOuterClass.Timestamp parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Timestamp) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2401,60 +2537,6 @@ public final class ContextOuterClass {
         onChanged();
         return this;
       }
-
-      private int eventType_ = 0;
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @return The enum numeric value on the wire for eventType.
-       */
-      @java.lang.Override public int getEventTypeValue() {
-        return eventType_;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @param value The enum numeric value on the wire for eventType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEventTypeValue(int value) {
-        
-        eventType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @return The eventType.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.EventTypeEnum getEventType() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
-        return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @param value The eventType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEventType(context.ContextOuterClass.EventTypeEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        eventType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEventType() {
-        
-        eventType_ = 0;
-        onChanged();
-        return this;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -2468,89 +2550,97 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Event)
+      // @@protoc_insertion_point(builder_scope:context.Timestamp)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Event)
-    private static final context.ContextOuterClass.Event DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Timestamp)
+    private static final context.ContextOuterClass.Timestamp DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Event();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Timestamp();
     }
 
-    public static context.ContextOuterClass.Event getDefaultInstance() {
+    public static context.ContextOuterClass.Timestamp getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Event>
-        PARSER = new com.google.protobuf.AbstractParser<Event>() {
+    private static final com.google.protobuf.Parser<Timestamp>
+        PARSER = new com.google.protobuf.AbstractParser<Timestamp>() {
       @java.lang.Override
-      public Event parsePartialFrom(
+      public Timestamp parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Event(input, extensionRegistry);
+        return new Timestamp(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Event> parser() {
+    public static com.google.protobuf.Parser<Timestamp> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Event> getParserForType() {
+    public com.google.protobuf.Parser<Timestamp> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Event getDefaultInstanceForType() {
+    public context.ContextOuterClass.Timestamp getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextId)
+  public interface EventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Event)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return Whether the contextUuid field is set.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return Whether the timestamp field is set.
      */
-    boolean hasContextUuid();
+    boolean hasTimestamp();
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return The contextUuid.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return The timestamp.
      */
-    context.ContextOuterClass.Uuid getContextUuid();
+    context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
+     * <code>.context.Timestamp timestamp = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder();
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The enum numeric value on the wire for eventType.
+     */
+    int getEventTypeValue();
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The eventType.
+     */
+    context.ContextOuterClass.EventTypeEnum getEventType();
   }
   /**
-   * <pre>
-   * ----- Context -------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ContextId}
+   * Protobuf type {@code context.Event}
    */
-  public static final class ContextId extends
+  public static final class Event extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextId)
-      ContextIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Event)
+      EventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextId.newBuilder() to construct.
-    private ContextId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Event.newBuilder() to construct.
+    private Event(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextId() {
+    private Event() {
+      eventType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextId();
+      return new Event();
     }
 
     @java.lang.Override
@@ -2558,7 +2648,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextId(
+    private Event(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2577,18 +2667,24 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (contextUuid_ != null) {
-                subBuilder = contextUuid_.toBuilder();
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
               }
-              contextUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(contextUuid_);
-                contextUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
               }
 
               break;
             }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              eventType_ = rawValue;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2610,41 +2706,60 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+      return context.ContextOuterClass.internal_static_context_Event_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+              context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
     }
 
-    public static final int CONTEXT_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid contextUuid_;
+    public static final int TIMESTAMP_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Timestamp timestamp_;
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return Whether the contextUuid field is set.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return Whether the timestamp field is set.
      */
     @java.lang.Override
-    public boolean hasContextUuid() {
-      return contextUuid_ != null;
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
     }
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return The contextUuid.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return The timestamp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getContextUuid() {
-      return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
     }
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
+     * <code>.context.Timestamp timestamp = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
-      return getContextUuid();
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
+    }
+
+    public static final int EVENT_TYPE_FIELD_NUMBER = 2;
+    private int eventType_;
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The enum numeric value on the wire for eventType.
+     */
+    @java.lang.Override public int getEventTypeValue() {
+      return eventType_;
+    }
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The eventType.
+     */
+    @java.lang.Override public context.ContextOuterClass.EventTypeEnum getEventType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+      return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -2661,8 +2776,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextUuid_ != null) {
-        output.writeMessage(1, getContextUuid());
+      if (timestamp_ != null) {
+        output.writeMessage(1, getTimestamp());
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        output.writeEnum(2, eventType_);
       }
       unknownFields.writeTo(output);
     }
@@ -2673,9 +2791,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextUuid_ != null) {
+      if (timestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextUuid());
+          .computeMessageSize(1, getTimestamp());
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, eventType_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2687,16 +2809,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextId)) {
+      if (!(obj instanceof context.ContextOuterClass.Event)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextId other = (context.ContextOuterClass.ContextId) obj;
+      context.ContextOuterClass.Event other = (context.ContextOuterClass.Event) obj;
 
-      if (hasContextUuid() != other.hasContextUuid()) return false;
-      if (hasContextUuid()) {
-        if (!getContextUuid()
-            .equals(other.getContextUuid())) return false;
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
       }
+      if (eventType_ != other.eventType_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2708,78 +2831,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextUuid()) {
-        hash = (37 * hash) + CONTEXT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextUuid().hashCode();
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
       }
+      hash = (37 * hash) + EVENT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + eventType_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(byte[] data)
+    public static context.ContextOuterClass.Event parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Event parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Event parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextId parseDelimitedFrom(
+    public static context.ContextOuterClass.Event parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2792,7 +2917,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Event prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2808,30 +2933,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Context -------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ContextId}
+     * Protobuf type {@code context.Event}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextId)
-        context.ContextOuterClass.ContextIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Event)
+        context.ContextOuterClass.EventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+                context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextId.newBuilder()
+      // Construct using context.ContextOuterClass.Event.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2849,29 +2970,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextUuidBuilder_ == null) {
-          contextUuid_ = null;
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
         } else {
-          contextUuid_ = null;
-          contextUuidBuilder_ = null;
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
+        eventType_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextId.getDefaultInstance();
+      public context.ContextOuterClass.Event getDefaultInstanceForType() {
+        return context.ContextOuterClass.Event.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextId build() {
-        context.ContextOuterClass.ContextId result = buildPartial();
+      public context.ContextOuterClass.Event build() {
+        context.ContextOuterClass.Event result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2879,13 +3002,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextId buildPartial() {
-        context.ContextOuterClass.ContextId result = new context.ContextOuterClass.ContextId(this);
-        if (contextUuidBuilder_ == null) {
-          result.contextUuid_ = contextUuid_;
+      public context.ContextOuterClass.Event buildPartial() {
+        context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
         } else {
-          result.contextUuid_ = contextUuidBuilder_.build();
+          result.timestamp_ = timestampBuilder_.build();
         }
+        result.eventType_ = eventType_;
         onBuilt();
         return result;
       }
@@ -2924,18 +3048,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextId) {
-          return mergeFrom((context.ContextOuterClass.ContextId)other);
+        if (other instanceof context.ContextOuterClass.Event) {
+          return mergeFrom((context.ContextOuterClass.Event)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextId other) {
-        if (other == context.ContextOuterClass.ContextId.getDefaultInstance()) return this;
-        if (other.hasContextUuid()) {
-          mergeContextUuid(other.getContextUuid());
+      public Builder mergeFrom(context.ContextOuterClass.Event other) {
+        if (other == context.ContextOuterClass.Event.getDefaultInstance()) return this;
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
+        if (other.eventType_ != 0) {
+          setEventTypeValue(other.getEventTypeValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -2952,11 +3079,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextId parsedMessage = null;
+        context.ContextOuterClass.Event parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2966,123 +3093,177 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid contextUuid_;
+      private context.ContextOuterClass.Timestamp timestamp_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
-       * @return Whether the contextUuid field is set.
+       * <code>.context.Timestamp timestamp = 1;</code>
+       * @return Whether the timestamp field is set.
        */
-      public boolean hasContextUuid() {
-        return contextUuidBuilder_ != null || contextUuid_ != null;
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
-       * @return The contextUuid.
+       * <code>.context.Timestamp timestamp = 1;</code>
+       * @return The timestamp.
        */
-      public context.ContextOuterClass.Uuid getContextUuid() {
-        if (contextUuidBuilder_ == null) {
-          return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         } else {
-          return contextUuidBuilder_.getMessage();
+          return timestampBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder setContextUuid(context.ContextOuterClass.Uuid value) {
-        if (contextUuidBuilder_ == null) {
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextUuid_ = value;
+          timestamp_ = value;
           onChanged();
         } else {
-          contextUuidBuilder_.setMessage(value);
+          timestampBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder setContextUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (contextUuidBuilder_ == null) {
-          contextUuid_ = builderForValue.build();
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          contextUuidBuilder_.setMessage(builderForValue.build());
+          timestampBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
-        if (contextUuidBuilder_ == null) {
-          if (contextUuid_ != null) {
-            contextUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
           } else {
-            contextUuid_ = value;
+            timestamp_ = value;
           }
           onChanged();
         } else {
-          contextUuidBuilder_.mergeFrom(value);
+          timestampBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder clearContextUuid() {
-        if (contextUuidBuilder_ == null) {
-          contextUuid_ = null;
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
           onChanged();
         } else {
-          contextUuid_ = null;
-          contextUuidBuilder_ = null;
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
         
         onChanged();
-        return getContextUuidFieldBuilder().getBuilder();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
-        if (contextUuidBuilder_ != null) {
-          return contextUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
         } else {
-          return contextUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getContextUuidFieldBuilder() {
-        if (contextUuidBuilder_ == null) {
-          contextUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getContextUuid(),
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
                   getParentForChildren(),
                   isClean());
-          contextUuid_ = null;
+          timestamp_ = null;
         }
-        return contextUuidBuilder_;
+        return timestampBuilder_;
+      }
+
+      private int eventType_ = 0;
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return The enum numeric value on the wire for eventType.
+       */
+      @java.lang.Override public int getEventTypeValue() {
+        return eventType_;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @param value The enum numeric value on the wire for eventType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEventTypeValue(int value) {
+        
+        eventType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return The eventType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.EventTypeEnum getEventType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+        return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @param value The eventType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEventType(context.ContextOuterClass.EventTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        eventType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEventType() {
+        
+        eventType_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -3097,150 +3278,89 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextId)
+      // @@protoc_insertion_point(builder_scope:context.Event)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextId)
-    private static final context.ContextOuterClass.ContextId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Event)
+    private static final context.ContextOuterClass.Event DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Event();
     }
 
-    public static context.ContextOuterClass.ContextId getDefaultInstance() {
+    public static context.ContextOuterClass.Event getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextId>
-        PARSER = new com.google.protobuf.AbstractParser<ContextId>() {
+    private static final com.google.protobuf.Parser<Event>
+        PARSER = new com.google.protobuf.AbstractParser<Event>() {
       @java.lang.Override
-      public ContextId parsePartialFrom(
+      public Event parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextId(input, extensionRegistry);
+        return new Event(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextId> parser() {
+    public static com.google.protobuf.Parser<Event> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextId> getParserForType() {
+    public com.google.protobuf.Parser<Event> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Event getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Context)
+  public interface ContextIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    boolean hasContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
-     */
-    context.ContextOuterClass.ContextId getContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
-
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.TopologyId> 
-        getTopologyIdsList();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    context.ContextOuterClass.TopologyId getTopologyIds(int index);
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    int getTopologyIdsCount();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceIdsList();
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    context.ContextOuterClass.ServiceId getServiceIds(int index);
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    int getServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return Whether the controller field is set.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
      */
-    boolean hasController();
+    boolean hasContextUuid();
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return The controller.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
      */
-    context.ContextOuterClass.TeraFlowController getController();
+    context.ContextOuterClass.Uuid getContextUuid();
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.Uuid context_uuid = 1;</code>
      */
-    context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Context}
+   * <pre>
+   * ----- Context -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ContextId}
    */
-  public static final class Context extends
+  public static final class ContextId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Context)
-      ContextOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ContextId)
+      ContextIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Context.newBuilder() to construct.
-    private Context(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ContextId.newBuilder() to construct.
+    private ContextId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Context() {
-      topologyIds_ = java.util.Collections.emptyList();
-      serviceIds_ = java.util.Collections.emptyList();
+    private ContextId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Context();
+      return new ContextId();
     }
 
     @java.lang.Override
@@ -3248,7 +3368,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Context(
+    private ContextId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3256,7 +3376,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -3268,45 +3387,14 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              topologyIds_.add(
-                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              serviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              context.ContextOuterClass.TeraFlowController.Builder subBuilder = null;
-              if (controller_ != null) {
-                subBuilder = controller_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (contextUuid_ != null) {
+                subBuilder = contextUuid_.toBuilder();
               }
-              controller_ = input.readMessage(context.ContextOuterClass.TeraFlowController.parser(), extensionRegistry);
+              contextUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(controller_);
-                controller_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(contextUuid_);
+                contextUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -3326,211 +3414,78 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+              context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
+    public static final int CONTEXT_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid contextUuid_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public boolean hasContextUuid() {
+      return contextUuid_ != null;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.Uuid getContextUuid() {
+      return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.Uuid context_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+      return getContextUuid();
     }
 
-    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-      return topologyIds_;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
+
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList() {
-      return topologyIds_;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextUuid_ != null) {
+        output.writeMessage(1, getContextUuid());
+      }
+      unknownFields.writeTo(output);
     }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    @java.lang.Override
-    public int getTopologyIdsCount() {
-      return topologyIds_.size();
-    }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-      return topologyIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-        int index) {
-      return topologyIds_.get(index);
-    }
-
-    public static final int SERVICE_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-      return serviceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList() {
-      return serviceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public int getServiceIdsCount() {
-      return serviceIds_.size();
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-      return serviceIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index) {
-      return serviceIds_.get(index);
-    }
-
-    public static final int CONTROLLER_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.TeraFlowController controller_;
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return Whether the controller field is set.
-     */
-    @java.lang.Override
-    public boolean hasController() {
-      return controller_ != null;
-    }
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return The controller.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TeraFlowController getController() {
-      return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
-    }
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
-      return getController();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
-      }
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        output.writeMessage(2, topologyIds_.get(i));
-      }
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        output.writeMessage(3, serviceIds_.get(i));
-      }
-      if (controller_ != null) {
-        output.writeMessage(4, getController());
-      }
-      unknownFields.writeTo(output);
-    }
-
+
     @java.lang.Override
     public int getSerializedSize() {
       int size = memoizedSize;
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
-      }
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, topologyIds_.get(i));
-      }
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, serviceIds_.get(i));
-      }
-      if (controller_ != null) {
+      if (contextUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getController());
+          .computeMessageSize(1, getContextUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -3542,24 +3497,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Context)) {
+      if (!(obj instanceof context.ContextOuterClass.ContextId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Context other = (context.ContextOuterClass.Context) obj;
+      context.ContextOuterClass.ContextId other = (context.ContextOuterClass.ContextId) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (!getTopologyIdsList()
-          .equals(other.getTopologyIdsList())) return false;
-      if (!getServiceIdsList()
-          .equals(other.getServiceIdsList())) return false;
-      if (hasController() != other.hasController()) return false;
-      if (hasController()) {
-        if (!getController()
-            .equals(other.getController())) return false;
+      if (hasContextUuid() != other.hasContextUuid()) return false;
+      if (hasContextUuid()) {
+        if (!getContextUuid()
+            .equals(other.getContextUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -3572,90 +3518,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
-      }
-      if (getTopologyIdsCount() > 0) {
-        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyIdsList().hashCode();
-      }
-      if (getServiceIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceIdsList().hashCode();
-      }
-      if (hasController()) {
-        hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
-        hash = (53 * hash) + getController().hashCode();
+      if (hasContextUuid()) {
+        hash = (37 * hash) + CONTEXT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseFrom(byte[] data)
+    public static context.ContextOuterClass.ContextId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ContextId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ContextId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Context parseDelimitedFrom(
+    public static context.ContextOuterClass.ContextId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -3668,7 +3602,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Context prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ContextId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -3684,26 +3618,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Context}
+     * <pre>
+     * ----- Context -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ContextId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Context)
-        context.ContextOuterClass.ContextOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ContextId)
+        context.ContextOuterClass.ContextIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+                context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Context.newBuilder()
+      // Construct using context.ContextOuterClass.ContextId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -3716,36 +3654,16 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologyIdsFieldBuilder();
-          getServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
-        } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
-        }
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          topologyIdsBuilder_.clear();
-        }
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          serviceIdsBuilder_.clear();
-        }
-        if (controllerBuilder_ == null) {
-          controller_ = null;
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
         } else {
-          controller_ = null;
-          controllerBuilder_ = null;
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
         }
         return this;
       }
@@ -3753,17 +3671,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Context getDefaultInstanceForType() {
-        return context.ContextOuterClass.Context.getDefaultInstance();
+      public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Context build() {
-        context.ContextOuterClass.Context result = buildPartial();
+      public context.ContextOuterClass.ContextId build() {
+        context.ContextOuterClass.ContextId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -3771,36 +3689,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Context buildPartial() {
-        context.ContextOuterClass.Context result = new context.ContextOuterClass.Context(this);
-        int from_bitField0_ = bitField0_;
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
-        } else {
-          result.contextId_ = contextIdBuilder_.build();
-        }
-        if (topologyIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.topologyIds_ = topologyIds_;
-        } else {
-          result.topologyIds_ = topologyIdsBuilder_.build();
-        }
-        if (serviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.serviceIds_ = serviceIds_;
-        } else {
-          result.serviceIds_ = serviceIdsBuilder_.build();
-        }
-        if (controllerBuilder_ == null) {
-          result.controller_ = controller_;
+      public context.ContextOuterClass.ContextId buildPartial() {
+        context.ContextOuterClass.ContextId result = new context.ContextOuterClass.ContextId(this);
+        if (contextUuidBuilder_ == null) {
+          result.contextUuid_ = contextUuid_;
         } else {
-          result.controller_ = controllerBuilder_.build();
+          result.contextUuid_ = contextUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -3840,73 +3734,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Context) {
-          return mergeFrom((context.ContextOuterClass.Context)other);
+        if (other instanceof context.ContextOuterClass.ContextId) {
+          return mergeFrom((context.ContextOuterClass.ContextId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Context other) {
-        if (other == context.ContextOuterClass.Context.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (topologyIdsBuilder_ == null) {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIds_.isEmpty()) {
-              topologyIds_ = other.topologyIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureTopologyIdsIsMutable();
-              topologyIds_.addAll(other.topologyIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIdsBuilder_.isEmpty()) {
-              topologyIdsBuilder_.dispose();
-              topologyIdsBuilder_ = null;
-              topologyIds_ = other.topologyIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              topologyIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologyIdsFieldBuilder() : null;
-            } else {
-              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
-            }
-          }
-        }
-        if (serviceIdsBuilder_ == null) {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIds_.isEmpty()) {
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureServiceIdsIsMutable();
-              serviceIds_.addAll(other.serviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIdsBuilder_.isEmpty()) {
-              serviceIdsBuilder_.dispose();
-              serviceIdsBuilder_ = null;
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              serviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceIdsFieldBuilder() : null;
-            } else {
-              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
-            }
-          }
-        }
-        if (other.hasController()) {
-          mergeController(other.getController());
+      public Builder mergeFrom(context.ContextOuterClass.ContextId other) {
+        if (other == context.ContextOuterClass.ContextId.getDefaultInstance()) return this;
+        if (other.hasContextUuid()) {
+          mergeContextUuid(other.getContextUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -3923,11 +3762,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Context parsedMessage = null;
+        context.ContextOuterClass.ContextId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Context) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -3936,724 +3775,15924 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.ContextId contextId_;
+      private context.ContextOuterClass.Uuid contextUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return Whether the contextUuid field is set.
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public boolean hasContextUuid() {
+        return contextUuidBuilder_ != null || contextUuid_ != null;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return The contextUuid.
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public context.ContextOuterClass.Uuid getContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
         } else {
-          return contextIdBuilder_.getMessage();
+          return contextUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder setContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          contextUuid_ = value;
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          contextUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setContextUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = builderForValue.build();
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          contextUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+      public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
+          if (contextUuid_ != null) {
+            contextUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
           } else {
-            contextId_ = value;
+            contextUuid_ = value;
           }
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          contextUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder clearContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
         
         onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+        return getContextUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+        if (contextUuidBuilder_ != null) {
+          return contextUuidBuilder_.getMessageOrBuilder();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return contextUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getContextUuidFieldBuilder() {
+        if (contextUuidBuilder_ == null) {
+          contextUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getContextUuid(),
                   getParentForChildren(),
                   isClean());
-          contextId_ = null;
+          contextUuid_ = null;
         }
-        return contextIdBuilder_;
+        return contextUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
-        java.util.Collections.emptyList();
-      private void ensureTopologyIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
-          bitField0_ |= 0x00000001;
-         }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
 
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-        if (topologyIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologyIds_);
-        } else {
-          return topologyIdsBuilder_.getMessageList();
-        }
+      // @@protoc_insertion_point(builder_scope:context.ContextId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextId)
+    private static final context.ContextOuterClass.ContextId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextId();
+    }
+
+    public static context.ContextOuterClass.ContextId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextId>
+        PARSER = new com.google.protobuf.AbstractParser<ContextId>() {
+      @java.lang.Override
+      public ContextId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextId(input, extensionRegistry);
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+    };
+
+    public static com.google.protobuf.Parser<ContextId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Context)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    int getTopologyIdsCount();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    int getServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return Whether the controller field is set.
+     */
+    boolean hasController();
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return The controller.
+     */
+    context.ContextOuterClass.TeraFlowController getController();
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     */
+    context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Context}
+   */
+  public static final class Context extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Context)
+      ContextOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Context.newBuilder() to construct.
+    private Context(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Context() {
+      topologyIds_ = java.util.Collections.emptyList();
+      serviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Context();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Context(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.TeraFlowController.Builder subBuilder = null;
+              if (controller_ != null) {
+                subBuilder = controller_.toBuilder();
+              }
+              controller_ = input.readMessage(context.ContextOuterClass.TeraFlowController.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(controller_);
+                controller_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Context_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index) {
+      return topologyIds_.get(index);
+    }
+
+    public static final int SERVICE_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.get(index);
+    }
+
+    public static final int CONTROLLER_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.TeraFlowController controller_;
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return Whether the controller field is set.
+     */
+    @java.lang.Override
+    public boolean hasController() {
+      return controller_ != null;
+    }
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return The controller.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowController getController() {
+      return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+    }
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
+      return getController();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        output.writeMessage(2, topologyIds_.get(i));
+      }
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(3, serviceIds_.get(i));
+      }
+      if (controller_ != null) {
+        output.writeMessage(4, getController());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, topologyIds_.get(i));
+      }
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, serviceIds_.get(i));
+      }
+      if (controller_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getController());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Context)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Context other = (context.ContextOuterClass.Context) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) return false;
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
+      if (hasController() != other.hasController()) return false;
+      if (hasController()) {
+        if (!getController()
+            .equals(other.getController())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      }
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
+      }
+      if (hasController()) {
+        hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
+        hash = (53 * hash) + getController().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Context parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Context prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Context}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Context)
+        context.ContextOuterClass.ContextOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Context.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologyIdsFieldBuilder();
+          getServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        if (controllerBuilder_ == null) {
+          controller_ = null;
+        } else {
+          controller_ = null;
+          controllerBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context getDefaultInstanceForType() {
+        return context.ContextOuterClass.Context.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context build() {
+        context.ContextOuterClass.Context result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context buildPartial() {
+        context.ContextOuterClass.Context result = new context.ContextOuterClass.Context(this);
+        int from_bitField0_ = bitField0_;
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (topologyIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologyIds_ = topologyIds_;
+        } else {
+          result.topologyIds_ = topologyIdsBuilder_.build();
+        }
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
+        }
+        if (controllerBuilder_ == null) {
+          result.controller_ = controller_;
+        } else {
+          result.controller_ = controllerBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Context) {
+          return mergeFrom((context.ContextOuterClass.Context)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Context other) {
+        if (other == context.ContextOuterClass.Context.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologyIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologyIdsFieldBuilder() : null;
+            } else {
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+            }
+          }
+        }
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
+        }
+        if (other.hasController()) {
+          mergeController(other.getController());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Context parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Context) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologyIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        } else {
+          return topologyIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
+        } else {
+          return topologyIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
+        } else {
+          return topologyIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologyIds_);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+          int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologyIds_ = null;
+        }
+        return topologyIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        } else {
+          return serviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
+        } else {
+          return serviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceIds_);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+          int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.TeraFlowController controller_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> controllerBuilder_;
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       * @return Whether the controller field is set.
+       */
+      public boolean hasController() {
+        return controllerBuilder_ != null || controller_ != null;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       * @return The controller.
+       */
+      public context.ContextOuterClass.TeraFlowController getController() {
+        if (controllerBuilder_ == null) {
+          return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+        } else {
+          return controllerBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder setController(context.ContextOuterClass.TeraFlowController value) {
+        if (controllerBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          controller_ = value;
+          onChanged();
+        } else {
+          controllerBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder setController(
+          context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
+        if (controllerBuilder_ == null) {
+          controller_ = builderForValue.build();
+          onChanged();
+        } else {
+          controllerBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
+        if (controllerBuilder_ == null) {
+          if (controller_ != null) {
+            controller_ =
+              context.ContextOuterClass.TeraFlowController.newBuilder(controller_).mergeFrom(value).buildPartial();
+          } else {
+            controller_ = value;
+          }
+          onChanged();
+        } else {
+          controllerBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder clearController() {
+        if (controllerBuilder_ == null) {
+          controller_ = null;
+          onChanged();
+        } else {
+          controller_ = null;
+          controllerBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
+        
+        onChanged();
+        return getControllerFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
+        if (controllerBuilder_ != null) {
+          return controllerBuilder_.getMessageOrBuilder();
+        } else {
+          return controller_ == null ?
+              context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+        }
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> 
+          getControllerFieldBuilder() {
+        if (controllerBuilder_ == null) {
+          controllerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder>(
+                  getController(),
+                  getParentForChildren(),
+                  isClean());
+          controller_ = null;
+        }
+        return controllerBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Context)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Context)
+    private static final context.ContextOuterClass.Context DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Context();
+    }
+
+    public static context.ContextOuterClass.Context getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Context>
+        PARSER = new com.google.protobuf.AbstractParser<Context>() {
+      @java.lang.Override
+      public Context parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Context(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Context> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Context> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Context getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ContextId> 
+        getContextIdsList();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    context.ContextOuterClass.ContextId getContextIds(int index);
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    int getContextIdsCount();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+        getContextIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ContextIdList}
+   */
+  public static final class ContextIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextIdList)
+      ContextIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextIdList.newBuilder() to construct.
+    private ContextIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextIdList() {
+      contextIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              contextIds_.add(
+                  input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+    }
+
+    public static final int CONTEXT_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ContextId> contextIds_;
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
+      return contextIds_;
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+        getContextIdsOrBuilderList() {
+      return contextIds_;
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getContextIdsCount() {
+      return contextIds_.size();
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextIds(int index) {
+      return contextIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+        int index) {
+      return contextIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < contextIds_.size(); i++) {
+        output.writeMessage(1, contextIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < contextIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, contextIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextIdList other = (context.ContextOuterClass.ContextIdList) obj;
+
+      if (!getContextIdsList()
+          .equals(other.getContextIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getContextIdsCount() > 0) {
+        hash = (37 * hash) + CONTEXT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getContextIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ContextIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextIdList)
+        context.ContextOuterClass.ContextIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getContextIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdsBuilder_ == null) {
+          contextIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          contextIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList build() {
+        context.ContextOuterClass.ContextIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList buildPartial() {
+        context.ContextOuterClass.ContextIdList result = new context.ContextOuterClass.ContextIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (contextIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.contextIds_ = contextIds_;
+        } else {
+          result.contextIds_ = contextIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextIdList) {
+          return mergeFrom((context.ContextOuterClass.ContextIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextIdList other) {
+        if (other == context.ContextOuterClass.ContextIdList.getDefaultInstance()) return this;
+        if (contextIdsBuilder_ == null) {
+          if (!other.contextIds_.isEmpty()) {
+            if (contextIds_.isEmpty()) {
+              contextIds_ = other.contextIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureContextIdsIsMutable();
+              contextIds_.addAll(other.contextIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.contextIds_.isEmpty()) {
+            if (contextIdsBuilder_.isEmpty()) {
+              contextIdsBuilder_.dispose();
+              contextIdsBuilder_ = null;
+              contextIds_ = other.contextIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              contextIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getContextIdsFieldBuilder() : null;
+            } else {
+              contextIdsBuilder_.addAllMessages(other.contextIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ContextId> contextIds_ =
+        java.util.Collections.emptyList();
+      private void ensureContextIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>(contextIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
+        if (contextIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(contextIds_);
+        } else {
+          return contextIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public int getContextIdsCount() {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.size();
+        } else {
+          return contextIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId getContextIds(int index) {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.get(index);
+        } else {
+          return contextIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder setContextIds(
+          int index, context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.set(index, value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder setContextIds(
+          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.add(value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          int index, context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.add(index, value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addAllContextIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ContextId> values) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, contextIds_);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder clearContextIds() {
+        if (contextIdsBuilder_ == null) {
+          contextIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          contextIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder removeContextIds(int index) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.remove(index);
+          onChanged();
+        } else {
+          contextIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdsBuilder(
+          int index) {
+        return getContextIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+          int index) {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.get(index);  } else {
+          return contextIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+           getContextIdsOrBuilderList() {
+        if (contextIdsBuilder_ != null) {
+          return contextIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(contextIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder() {
+        return getContextIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ContextId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder(
+          int index) {
+        return getContextIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ContextId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ContextId.Builder> 
+           getContextIdsBuilderList() {
+        return getContextIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdsFieldBuilder() {
+        if (contextIdsBuilder_ == null) {
+          contextIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  contextIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          contextIds_ = null;
+        }
+        return contextIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextIdList)
+    private static final context.ContextOuterClass.ContextIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextIdList();
+    }
+
+    public static context.ContextOuterClass.ContextIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ContextIdList>() {
+      @java.lang.Override
+      public ContextIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Context> 
+        getContextsList();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    context.ContextOuterClass.Context getContexts(int index);
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    int getContextsCount();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+        getContextsOrBuilderList();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ContextList}
+   */
+  public static final class ContextList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextList)
+      ContextListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextList.newBuilder() to construct.
+    private ContextList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextList() {
+      contexts_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              contexts_.add(
+                  input.readMessage(context.ContextOuterClass.Context.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          contexts_ = java.util.Collections.unmodifiableList(contexts_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+    }
+
+    public static final int CONTEXTS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Context> contexts_;
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Context> getContextsList() {
+      return contexts_;
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+        getContextsOrBuilderList() {
+      return contexts_;
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public int getContextsCount() {
+      return contexts_.size();
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Context getContexts(int index) {
+      return contexts_.get(index);
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+        int index) {
+      return contexts_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < contexts_.size(); i++) {
+        output.writeMessage(1, contexts_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < contexts_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, contexts_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextList other = (context.ContextOuterClass.ContextList) obj;
+
+      if (!getContextsList()
+          .equals(other.getContextsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getContextsCount() > 0) {
+        hash = (37 * hash) + CONTEXTS_FIELD_NUMBER;
+        hash = (53 * hash) + getContextsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ContextList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextList)
+        context.ContextOuterClass.ContextListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getContextsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextsBuilder_ == null) {
+          contexts_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          contextsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList build() {
+        context.ContextOuterClass.ContextList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList buildPartial() {
+        context.ContextOuterClass.ContextList result = new context.ContextOuterClass.ContextList(this);
+        int from_bitField0_ = bitField0_;
+        if (contextsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            contexts_ = java.util.Collections.unmodifiableList(contexts_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.contexts_ = contexts_;
+        } else {
+          result.contexts_ = contextsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextList) {
+          return mergeFrom((context.ContextOuterClass.ContextList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextList other) {
+        if (other == context.ContextOuterClass.ContextList.getDefaultInstance()) return this;
+        if (contextsBuilder_ == null) {
+          if (!other.contexts_.isEmpty()) {
+            if (contexts_.isEmpty()) {
+              contexts_ = other.contexts_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureContextsIsMutable();
+              contexts_.addAll(other.contexts_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.contexts_.isEmpty()) {
+            if (contextsBuilder_.isEmpty()) {
+              contextsBuilder_.dispose();
+              contextsBuilder_ = null;
+              contexts_ = other.contexts_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              contextsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getContextsFieldBuilder() : null;
+            } else {
+              contextsBuilder_.addAllMessages(other.contexts_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Context> contexts_ =
+        java.util.Collections.emptyList();
+      private void ensureContextsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>(contexts_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> contextsBuilder_;
+
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Context> getContextsList() {
+        if (contextsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(contexts_);
+        } else {
+          return contextsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public int getContextsCount() {
+        if (contextsBuilder_ == null) {
+          return contexts_.size();
+        } else {
+          return contextsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context getContexts(int index) {
+        if (contextsBuilder_ == null) {
+          return contexts_.get(index);
+        } else {
+          return contextsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder setContexts(
+          int index, context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.set(index, value);
+          onChanged();
+        } else {
+          contextsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder setContexts(
+          int index, context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.add(value);
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          int index, context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.add(index, value);
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.add(builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          int index, context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addAllContexts(
+          java.lang.Iterable<? extends context.ContextOuterClass.Context> values) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, contexts_);
+          onChanged();
+        } else {
+          contextsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder clearContexts() {
+        if (contextsBuilder_ == null) {
+          contexts_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          contextsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder removeContexts(int index) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.remove(index);
+          onChanged();
+        } else {
+          contextsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder getContextsBuilder(
+          int index) {
+        return getContextsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+          int index) {
+        if (contextsBuilder_ == null) {
+          return contexts_.get(index);  } else {
+          return contextsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+           getContextsOrBuilderList() {
+        if (contextsBuilder_ != null) {
+          return contextsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(contexts_);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder addContextsBuilder() {
+        return getContextsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Context.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder addContextsBuilder(
+          int index) {
+        return getContextsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Context.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Context.Builder> 
+           getContextsBuilderList() {
+        return getContextsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> 
+          getContextsFieldBuilder() {
+        if (contextsBuilder_ == null) {
+          contextsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder>(
+                  contexts_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          contexts_ = null;
+        }
+        return contextsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextList)
+    private static final context.ContextOuterClass.ContextList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextList();
+    }
+
+    public static context.ContextOuterClass.ContextList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextList>
+        PARSER = new com.google.protobuf.AbstractParser<ContextList>() {
+      @java.lang.Override
+      public ContextList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.ContextEvent}
+   */
+  public static final class ContextEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextEvent)
+      ContextEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextEvent.newBuilder() to construct.
+    private ContextEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (contextId_ != null) {
+        output.writeMessage(2, getContextId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getContextId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ContextEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextEvent other = (context.ContextOuterClass.ContextEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ContextEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ContextEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextEvent)
+        context.ContextOuterClass.ContextEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent build() {
+        context.ContextOuterClass.ContextEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent buildPartial() {
+        context.ContextOuterClass.ContextEvent result = new context.ContextOuterClass.ContextEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ContextEvent) {
+          return mergeFrom((context.ContextOuterClass.ContextEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextEvent other) {
+        if (other == context.ContextOuterClass.ContextEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ContextEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ContextEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextEvent)
+    private static final context.ContextOuterClass.ContextEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextEvent();
+    }
+
+    public static context.ContextOuterClass.ContextEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ContextEvent>() {
+      @java.lang.Override
+      public ContextEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return Whether the topologyUuid field is set.
+     */
+    boolean hasTopologyUuid();
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return The topologyUuid.
+     */
+    context.ContextOuterClass.Uuid getTopologyUuid();
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Topology ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.TopologyId}
+   */
+  public static final class TopologyId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyId)
+      TopologyIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyId.newBuilder() to construct.
+    private TopologyId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (topologyUuid_ != null) {
+                subBuilder = topologyUuid_.toBuilder();
+              }
+              topologyUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyUuid_);
+                topologyUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int TOPOLOGY_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid topologyUuid_;
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return Whether the topologyUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyUuid() {
+      return topologyUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return The topologyUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getTopologyUuid() {
+      return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+    }
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
+      return getTopologyUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (topologyUuid_ != null) {
+        output.writeMessage(2, getTopologyUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (topologyUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyId other = (context.ContextOuterClass.TopologyId) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasTopologyUuid() != other.hasTopologyUuid()) return false;
+      if (hasTopologyUuid()) {
+        if (!getTopologyUuid()
+            .equals(other.getTopologyUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasTopologyUuid()) {
+        hash = (37 * hash) + TOPOLOGY_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Topology ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.TopologyId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyId)
+        context.ContextOuterClass.TopologyIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = null;
+        } else {
+          topologyUuid_ = null;
+          topologyUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId build() {
+        context.ContextOuterClass.TopologyId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId buildPartial() {
+        context.ContextOuterClass.TopologyId result = new context.ContextOuterClass.TopologyId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (topologyUuidBuilder_ == null) {
+          result.topologyUuid_ = topologyUuid_;
+        } else {
+          result.topologyUuid_ = topologyUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyId) {
+          return mergeFrom((context.ContextOuterClass.TopologyId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyId other) {
+        if (other == context.ContextOuterClass.TopologyId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasTopologyUuid()) {
+          mergeTopologyUuid(other.getTopologyUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid topologyUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> topologyUuidBuilder_;
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       * @return Whether the topologyUuid field is set.
+       */
+      public boolean hasTopologyUuid() {
+        return topologyUuidBuilder_ != null || topologyUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       * @return The topologyUuid.
+       */
+      public context.ContextOuterClass.Uuid getTopologyUuid() {
+        if (topologyUuidBuilder_ == null) {
+          return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+        } else {
+          return topologyUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder setTopologyUuid(context.ContextOuterClass.Uuid value) {
+        if (topologyUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyUuid_ = value;
+          onChanged();
+        } else {
+          topologyUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder setTopologyUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder mergeTopologyUuid(context.ContextOuterClass.Uuid value) {
+        if (topologyUuidBuilder_ == null) {
+          if (topologyUuid_ != null) {
+            topologyUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(topologyUuid_).mergeFrom(value).buildPartial();
+          } else {
+            topologyUuid_ = value;
+          }
+          onChanged();
+        } else {
+          topologyUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder clearTopologyUuid() {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = null;
+          onChanged();
+        } else {
+          topologyUuid_ = null;
+          topologyUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getTopologyUuidBuilder() {
+        
+        onChanged();
+        return getTopologyUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
+        if (topologyUuidBuilder_ != null) {
+          return topologyUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getTopologyUuidFieldBuilder() {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getTopologyUuid(),
+                  getParentForChildren(),
+                  isClean());
+          topologyUuid_ = null;
+        }
+        return topologyUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyId)
+    private static final context.ContextOuterClass.TopologyId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyId();
+    }
+
+    public static context.ContextOuterClass.TopologyId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyId>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyId>() {
+      @java.lang.Override
+      public TopologyId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Topology)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    context.ContextOuterClass.LinkId getLinkIds(int index);
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    int getLinkIdsCount();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Topology}
+   */
+  public static final class Topology extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Topology)
+      TopologyOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Topology.newBuilder() to construct.
+    private Topology(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Topology() {
+      deviceIds_ = java.util.Collections.emptyList();
+      linkIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Topology();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Topology(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
+    }
+
+    public static final int LINK_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getLinkIdsCount() {
+      return linkIds_.size();
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index) {
+      return linkIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(3, linkIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTopologyId());
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, linkIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Topology)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Topology other = (context.ContextOuterClass.Topology) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Topology prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Topology}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Topology)
+        context.ContextOuterClass.TopologyOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Topology.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+          getLinkIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+        return context.ContextOuterClass.Topology.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology build() {
+        context.ContextOuterClass.Topology result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology buildPartial() {
+        context.ContextOuterClass.Topology result = new context.ContextOuterClass.Topology(this);
+        int from_bitField0_ = bitField0_;
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.build();
+        }
+        if (linkIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.linkIds_ = linkIds_;
+        } else {
+          result.linkIds_ = linkIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Topology) {
+          return mergeFrom((context.ContextOuterClass.Topology)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Topology other) {
+        if (other == context.ContextOuterClass.Topology.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              linkIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkIdsFieldBuilder() : null;
+            } else {
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Topology parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Topology) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        } else {
+          return linkIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
+        } else {
+          return linkIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
+        } else {
+          return linkIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkIds_);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
+          onChanged();
+        } else {
+          linkIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+          int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          linkIds_ = null;
+        }
+        return linkIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Topology)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Topology)
+    private static final context.ContextOuterClass.Topology DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Topology();
+    }
+
+    public static context.ContextOuterClass.Topology getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Topology>
+        PARSER = new com.google.protobuf.AbstractParser<Topology>() {
+      @java.lang.Override
+      public Topology parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Topology(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Topology> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Topology> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    int getTopologyIdsCount();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.TopologyIdList}
+   */
+  public static final class TopologyIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
+      TopologyIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyIdList.newBuilder() to construct.
+    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyIdList() {
+      topologyIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index) {
+      return topologyIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        output.writeMessage(1, topologyIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, topologyIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
+
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.TopologyIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
+        context.ContextOuterClass.TopologyIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologyIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList build() {
+        context.ContextOuterClass.TopologyIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList buildPartial() {
+        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologyIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologyIds_ = topologyIds_;
+        } else {
+          result.topologyIds_ = topologyIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyIdList) {
+          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
+        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologyIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologyIdsFieldBuilder() : null;
+            } else {
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologyIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        } else {
+          return topologyIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
+        } else {
+          return topologyIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
+        } else {
+          return topologyIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologyIds_);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+          int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologyIds_ = null;
+        }
+        return topologyIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
+    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
+    }
+
+    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyIdList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
+      @java.lang.Override
+      public TopologyIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Topology> 
+        getTopologiesList();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    context.ContextOuterClass.Topology getTopologies(int index);
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    int getTopologiesCount();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.TopologyList}
+   */
+  public static final class TopologyList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyList)
+      TopologyListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyList.newBuilder() to construct.
+    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyList() {
+      topologies_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologies_.add(
+                  input.readMessage(context.ContextOuterClass.Topology.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          topologies_ = java.util.Collections.unmodifiableList(topologies_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+    }
+
+    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Topology> topologies_;
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+      return topologies_;
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList() {
+      return topologies_;
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public int getTopologiesCount() {
+      return topologies_.size();
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Topology getTopologies(int index) {
+      return topologies_.get(index);
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index) {
+      return topologies_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < topologies_.size(); i++) {
+        output.writeMessage(1, topologies_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < topologies_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, topologies_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
+
+      if (!getTopologiesList()
+          .equals(other.getTopologiesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getTopologiesCount() > 0) {
+        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologiesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.TopologyList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyList)
+        context.ContextOuterClass.TopologyListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologiesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologiesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList build() {
+        context.ContextOuterClass.TopologyList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList buildPartial() {
+        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologiesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologies_ = java.util.Collections.unmodifiableList(topologies_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologies_ = topologies_;
+        } else {
+          result.topologies_ = topologiesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyList) {
+          return mergeFrom((context.ContextOuterClass.TopologyList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
+        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
+        if (topologiesBuilder_ == null) {
+          if (!other.topologies_.isEmpty()) {
+            if (topologies_.isEmpty()) {
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologiesIsMutable();
+              topologies_.addAll(other.topologies_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologies_.isEmpty()) {
+            if (topologiesBuilder_.isEmpty()) {
+              topologiesBuilder_.dispose();
+              topologiesBuilder_ = null;
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologiesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologiesFieldBuilder() : null;
+            } else {
+              topologiesBuilder_.addAllMessages(other.topologies_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologiesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
+
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+        if (topologiesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologies_);
+        } else {
+          return topologiesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public int getTopologiesCount() {
+        if (topologiesBuilder_ == null) {
+          return topologies_.size();
+        } else {
+          return topologiesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology getTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);
+        } else {
+          return topologiesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.set(index, value);
+          onChanged();
+        } else {
+          topologiesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(value);
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(index, value);
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addAllTopologies(
+          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologies_);
+          onChanged();
+        } else {
+          topologiesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder clearTopologies() {
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologiesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder removeTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.remove(index);
+          onChanged();
+        } else {
+          topologiesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+          int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);  } else {
+          return topologiesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+           getTopologiesOrBuilderList() {
+        if (topologiesBuilder_ != null) {
+          return topologiesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologies_);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
+        return getTopologiesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Topology.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Topology.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Topology.Builder> 
+           getTopologiesBuilderList() {
+        return getTopologiesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
+          getTopologiesFieldBuilder() {
+        if (topologiesBuilder_ == null) {
+          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
+                  topologies_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologies_ = null;
+        }
+        return topologiesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyList)
+    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
+    }
+
+    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
+      @java.lang.Override
+      public TopologyList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.TopologyEvent}
+   */
+  public static final class TopologyEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
+      TopologyEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyEvent.newBuilder() to construct.
+    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        output.writeMessage(2, getTopologyId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.TopologyEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.TopologyEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.TopologyEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
+        context.ContextOuterClass.TopologyEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent build() {
+        context.ContextOuterClass.TopologyEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent buildPartial() {
+        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.TopologyEvent) {
+          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
+        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.TopologyEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.TopologyEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
+    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
+    }
+
+    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyEvent>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
+      @java.lang.Override
+      public TopologyEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
+     */
+    boolean hasDeviceUuid();
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
+     */
+    context.ContextOuterClass.Uuid getDeviceUuid();
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Device --------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.DeviceId}
+   */
+  public static final class DeviceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceId)
+      DeviceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceId.newBuilder() to construct.
+    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (deviceUuid_ != null) {
+                subBuilder = deviceUuid_.toBuilder();
+              }
+              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceUuid_);
+                deviceUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+    }
+
+    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid deviceUuid_;
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceUuid() {
+      return deviceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getDeviceUuid() {
+      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+    }
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+      return getDeviceUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (deviceUuid_ != null) {
+        output.writeMessage(1, getDeviceUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (deviceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDeviceUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
+
+      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
+      if (hasDeviceUuid()) {
+        if (!getDeviceUuid()
+            .equals(other.getDeviceUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasDeviceUuid()) {
+        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Device --------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.DeviceId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceId)
+        context.ContextOuterClass.DeviceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
+        } else {
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId build() {
+        context.ContextOuterClass.DeviceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId buildPartial() {
+        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
+        if (deviceUuidBuilder_ == null) {
+          result.deviceUuid_ = deviceUuid_;
+        } else {
+          result.deviceUuid_ = deviceUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceId) {
+          return mergeFrom((context.ContextOuterClass.DeviceId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
+        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
+        if (other.hasDeviceUuid()) {
+          mergeDeviceUuid(other.getDeviceUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid deviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return Whether the deviceUuid field is set.
+       */
+      public boolean hasDeviceUuid() {
+        return deviceUuidBuilder_ != null || deviceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return The deviceUuid.
+       */
+      public context.ContextOuterClass.Uuid getDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+        } else {
+          return deviceUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceUuid_ = value;
+          onChanged();
+        } else {
+          deviceUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder setDeviceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (deviceUuid_ != null) {
+            deviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            deviceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          deviceUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder clearDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
+          onChanged();
+        } else {
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
+        
+        onChanged();
+        return getDeviceUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+        if (deviceUuidBuilder_ != null) {
+          return deviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getDeviceUuidFieldBuilder() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getDeviceUuid(),
+                  getParentForChildren(),
+                  isClean());
+          deviceUuid_ = null;
+        }
+        return deviceUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceId)
+    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+    }
+
+    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceId>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
+      @java.lang.Override
+      public DeviceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Device)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The deviceType.
+     */
+    java.lang.String getDeviceType();
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The bytes for deviceType.
+     */
+    com.google.protobuf.ByteString
+        getDeviceTypeBytes();
+
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    boolean hasDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    context.ContextOuterClass.DeviceConfig getDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
+
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    int getDeviceOperationalStatusValue();
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The deviceOperationalStatus.
+     */
+    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
+
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return The count of deviceDrivers.
+     */
+    int getDeviceDriversCount();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    java.util.List<java.lang.Integer>
+    getDeviceDriversValueList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    int getDeviceDriversValue(int index);
+
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPoint> 
+        getDeviceEndpointsList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    int getDeviceEndpointsCount();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Device}
+   */
+  public static final class Device extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Device)
+      DeviceOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Device.newBuilder() to construct.
+    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Device() {
+      deviceType_ = "";
+      deviceOperationalStatus_ = 0;
+      deviceDrivers_ = java.util.Collections.emptyList();
+      deviceEndpoints_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Device();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Device(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              deviceType_ = s;
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
+              if (deviceConfig_ != null) {
+                subBuilder = deviceConfig_.toBuilder();
+              }
+              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceConfig_);
+                deviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+
+              deviceOperationalStatus_ = rawValue;
+              break;
+            }
+            case 40: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceDrivers_.add(rawValue);
+              break;
+            }
+            case 42: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                deviceDrivers_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 50: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              deviceEndpoints_.add(
+                  input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Device_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int DEVICE_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object deviceType_;
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The deviceType.
+     */
+    @java.lang.Override
+    public java.lang.String getDeviceType() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        deviceType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The bytes for deviceType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDeviceTypeBytes() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        deviceType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.DeviceConfig deviceConfig_;
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceConfig() {
+      return deviceConfig_ != null;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+      return getDeviceConfig();
+    }
+
+    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 4;
+    private int deviceOperationalStatus_;
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    @java.lang.Override public int getDeviceOperationalStatusValue() {
+      return deviceOperationalStatus_;
+    }
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The deviceOperationalStatus.
+     */
+    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 5;
+    private java.util.List<java.lang.Integer> deviceDrivers_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
+              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return The count of deviceDrivers.
+     */
+    @java.lang.Override
+    public int getDeviceDriversCount() {
+      return deviceDrivers_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getDeviceDriversValueList() {
+      return deviceDrivers_;
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public int getDeviceDriversValue(int index) {
+      return deviceDrivers_.get(index);
+    }
+    private int deviceDriversMemoizedSerializedSize;
+
+    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 6;
+    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public int getDeviceEndpointsCount() {
+      return deviceEndpoints_.size();
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+      return deviceEndpoints_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index) {
+      return deviceEndpoints_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (deviceId_ != null) {
+        output.writeMessage(1, getDeviceId());
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        output.writeMessage(3, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(4, deviceOperationalStatus_);
+      }
+      if (getDeviceDriversList().size() > 0) {
+        output.writeUInt32NoTag(42);
+        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
+      }
+      for (int i = 0; i < deviceDrivers_.size(); i++) {
+        output.writeEnumNoTag(deviceDrivers_.get(i));
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        output.writeMessage(6, deviceEndpoints_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDeviceId());
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, deviceOperationalStatus_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < deviceDrivers_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(deviceDrivers_.get(i));
+        }
+        size += dataSize;
+        if (!getDeviceDriversList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }deviceDriversMemoizedSerializedSize = dataSize;
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, deviceEndpoints_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Device)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
+
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (!getDeviceType()
+          .equals(other.getDeviceType())) return false;
+      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
+      if (hasDeviceConfig()) {
+        if (!getDeviceConfig()
+            .equals(other.getDeviceConfig())) return false;
+      }
+      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
+      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
+      if (!getDeviceEndpointsList()
+          .equals(other.getDeviceEndpointsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getDeviceType().hashCode();
+      if (hasDeviceConfig()) {
+        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceConfig().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + deviceOperationalStatus_;
+      if (getDeviceDriversCount() > 0) {
+        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
+        hash = (53 * hash) + deviceDrivers_.hashCode();
+      }
+      if (getDeviceEndpointsCount() > 0) {
+        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Device parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Device prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Device}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Device)
+        context.ContextOuterClass.DeviceOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Device.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceEndpointsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        deviceType_ = "";
+
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+        deviceOperationalStatus_ = 0;
+
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device getDefaultInstanceForType() {
+        return context.ContextOuterClass.Device.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device build() {
+        context.ContextOuterClass.Device result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device buildPartial() {
+        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        result.deviceType_ = deviceType_;
+        if (deviceConfigBuilder_ == null) {
+          result.deviceConfig_ = deviceConfig_;
+        } else {
+          result.deviceConfig_ = deviceConfigBuilder_.build();
+        }
+        result.deviceOperationalStatus_ = deviceOperationalStatus_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.deviceDrivers_ = deviceDrivers_;
+        if (deviceEndpointsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.deviceEndpoints_ = deviceEndpoints_;
+        } else {
+          result.deviceEndpoints_ = deviceEndpointsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Device) {
+          return mergeFrom((context.ContextOuterClass.Device)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Device other) {
+        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (!other.getDeviceType().isEmpty()) {
+          deviceType_ = other.deviceType_;
+          onChanged();
+        }
+        if (other.hasDeviceConfig()) {
+          mergeDeviceConfig(other.getDeviceConfig());
+        }
+        if (other.deviceOperationalStatus_ != 0) {
+          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
+        }
+        if (!other.deviceDrivers_.isEmpty()) {
+          if (deviceDrivers_.isEmpty()) {
+            deviceDrivers_ = other.deviceDrivers_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureDeviceDriversIsMutable();
+            deviceDrivers_.addAll(other.deviceDrivers_);
+          }
+          onChanged();
+        }
+        if (deviceEndpointsBuilder_ == null) {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpoints_.isEmpty()) {
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureDeviceEndpointsIsMutable();
+              deviceEndpoints_.addAll(other.deviceEndpoints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpointsBuilder_.isEmpty()) {
+              deviceEndpointsBuilder_.dispose();
+              deviceEndpointsBuilder_ = null;
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              deviceEndpointsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceEndpointsFieldBuilder() : null;
+            } else {
+              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Device parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+
+      private java.lang.Object deviceType_ = "";
+      /**
+       * <code>string device_type = 2;</code>
+       * @return The deviceType.
+       */
+      public java.lang.String getDeviceType() {
+        java.lang.Object ref = deviceType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          deviceType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @return The bytes for deviceType.
+       */
+      public com.google.protobuf.ByteString
+          getDeviceTypeBytes() {
+        java.lang.Object ref = deviceType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          deviceType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @param value The deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceType() {
+        
+        deviceType_ = getDefaultInstance().getDeviceType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @param value The bytes for deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceConfig deviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return Whether the deviceConfig field is set.
+       */
+      public boolean hasDeviceConfig() {
+        return deviceConfigBuilder_ != null || deviceConfig_ != null;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return The deviceConfig.
+       */
+      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        } else {
+          return deviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceConfig_ = value;
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder setDeviceConfig(
+          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (deviceConfig_ != null) {
+            deviceConfig_ =
+              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            deviceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          deviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder clearDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+          onChanged();
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+        
+        onChanged();
+        return getDeviceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+        if (deviceConfigBuilder_ != null) {
+          return deviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceConfig_ == null ?
+              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
+          getDeviceConfigFieldBuilder() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
+                  getDeviceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          deviceConfig_ = null;
+        }
+        return deviceConfigBuilder_;
+      }
+
+      private int deviceOperationalStatus_ = 0;
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return The enum numeric value on the wire for deviceOperationalStatus.
+       */
+      @java.lang.Override public int getDeviceOperationalStatusValue() {
+        return deviceOperationalStatus_;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatusValue(int value) {
+        
+        deviceOperationalStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return The deviceOperationalStatus.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @param value The deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        deviceOperationalStatus_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceOperationalStatus() {
+        
+        deviceOperationalStatus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> deviceDrivers_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceDriversIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
+          bitField0_ |= 0x00000001;
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return A list containing the deviceDrivers.
+       */
+      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return The count of deviceDrivers.
+       */
+      public int getDeviceDriversCount() {
+        return deviceDrivers_.size();
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the element to return.
+       * @return The deviceDrivers at the given index.
+       */
+      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index to set the value at.
+       * @param value The deviceDrivers to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDrivers(
+          int index, context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param value The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param values The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDrivers(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
+        ensureDeviceDriversIsMutable();
+        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
+          deviceDrivers_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceDrivers() {
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return A list containing the enum numeric values on the wire for deviceDrivers.
+       */
+      public java.util.List<java.lang.Integer>
+      getDeviceDriversValueList() {
+        return java.util.Collections.unmodifiableList(deviceDrivers_);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       */
+      public int getDeviceDriversValue(int index) {
+        return deviceDrivers_.get(index);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDriversValue(
+          int index, int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param value The enum numeric value on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDriversValue(int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param values The enum numeric values on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDriversValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureDeviceDriversIsMutable();
+        for (int value : values) {
+          deviceDrivers_.add(value);
+        }
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceEndpointsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+        if (deviceEndpointsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        } else {
+          return deviceEndpointsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public int getDeviceEndpointsCount() {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.size();
+        } else {
+          return deviceEndpointsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);
+        } else {
+          return deviceEndpointsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addAllDeviceEndpoints(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceEndpoints_);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder clearDeviceEndpoints() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder removeDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.remove(index);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+          int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);  } else {
+          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+           getDeviceEndpointsOrBuilderList() {
+        if (deviceEndpointsBuilder_ != null) {
+          return deviceEndpointsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
+           getDeviceEndpointsBuilderList() {
+        return getDeviceEndpointsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
+          getDeviceEndpointsFieldBuilder() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
+                  deviceEndpoints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceEndpoints_ = null;
+        }
+        return deviceEndpointsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Device)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Device)
+    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
+    }
+
+    public static context.ContextOuterClass.Device getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Device>
+        PARSER = new com.google.protobuf.AbstractParser<Device>() {
+      @java.lang.Override
+      public Device parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Device(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Device> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Device> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceConfig}
+   */
+  public static final class DeviceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
+      DeviceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceConfig.newBuilder() to construct.
+    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceConfig(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+    }
+
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < configRules_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, configRules_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
+
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceConfig prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
+        context.ContextOuterClass.DeviceConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig build() {
+        context.ContextOuterClass.DeviceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig buildPartial() {
+        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
+        } else {
+          result.configRules_ = configRulesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceConfig) {
+          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
+        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
+        } else {
+          return configRulesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
+        } else {
+          configRulesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
+          onChanged();
+        } else {
+          configRulesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(configRules_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          configRules_ = null;
+        }
+        return configRulesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
+    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
+    }
+
+    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
+      @java.lang.Override
+      public DeviceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceIdList}
+   */
+  public static final class DeviceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
+      DeviceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceIdList.newBuilder() to construct.
+    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceIdList() {
+      deviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(1, deviceIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, deviceIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
+
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
+        context.ContextOuterClass.DeviceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList build() {
+        context.ContextOuterClass.DeviceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList buildPartial() {
+        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceIdList) {
+          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
+        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
+    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
+    }
+
+    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
+      @java.lang.Override
+      public DeviceIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Device> 
+        getDevicesList();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    context.ContextOuterClass.Device getDevices(int index);
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    int getDevicesCount();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceList}
+   */
+  public static final class DeviceList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceList)
+      DeviceListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceList.newBuilder() to construct.
+    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceList() {
+      devices_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              devices_.add(
+                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          devices_ = java.util.Collections.unmodifiableList(devices_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+    }
+
+    public static final int DEVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Device> devices_;
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public int getDevicesCount() {
+      return devices_.size();
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDevices(int index) {
+      return devices_.get(index);
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index) {
+      return devices_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < devices_.size(); i++) {
+        output.writeMessage(1, devices_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < devices_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, devices_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
+
+      if (!getDevicesList()
+          .equals(other.getDevicesList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getDevicesCount() > 0) {
+        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getDevicesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceList)
+        context.ContextOuterClass.DeviceListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDevicesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          devicesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList build() {
+        context.ContextOuterClass.DeviceList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList buildPartial() {
+        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
+        int from_bitField0_ = bitField0_;
+        if (devicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            devices_ = java.util.Collections.unmodifiableList(devices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.devices_ = devices_;
+        } else {
+          result.devices_ = devicesBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceList) {
+          return mergeFrom((context.ContextOuterClass.DeviceList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
+        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
+        if (devicesBuilder_ == null) {
+          if (!other.devices_.isEmpty()) {
+            if (devices_.isEmpty()) {
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDevicesIsMutable();
+              devices_.addAll(other.devices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.devices_.isEmpty()) {
+            if (devicesBuilder_.isEmpty()) {
+              devicesBuilder_.dispose();
+              devicesBuilder_ = null;
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              devicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDevicesFieldBuilder() : null;
+            } else {
+              devicesBuilder_.addAllMessages(other.devices_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Device> devices_ =
+        java.util.Collections.emptyList();
+      private void ensureDevicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
+
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+        if (devicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(devices_);
+        } else {
+          return devicesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public int getDevicesCount() {
+        if (devicesBuilder_ == null) {
+          return devices_.size();
+        } else {
+          return devicesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device getDevices(int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);
+        } else {
+          return devicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.set(index, value);
+          onChanged();
+        } else {
+          devicesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.add(value);
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.add(index, value);
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addAllDevices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, devices_);
+          onChanged();
+        } else {
+          devicesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder clearDevices() {
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          devicesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder removeDevices(int index) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.remove(index);
+          onChanged();
+        } else {
+          devicesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
+          int index) {
+        return getDevicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+          int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);  } else {
+          return devicesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+           getDevicesOrBuilderList() {
+        if (devicesBuilder_ != null) {
+          return devicesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(devices_);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
+        return getDevicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Device.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
+          int index) {
+        return getDevicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Device.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Device.Builder> 
+           getDevicesBuilderList() {
+        return getDevicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
+          getDevicesFieldBuilder() {
+        if (devicesBuilder_ == null) {
+          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
+                  devices_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          devices_ = null;
+        }
+        return devicesBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceList)
+    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
+    }
+
+    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
+      @java.lang.Override
+      public DeviceList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.DeviceEvent}
+   */
+  public static final class DeviceEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
+      DeviceEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceEvent.newBuilder() to construct.
+    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceEvent(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
+              }
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+    }
+
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    @java.lang.Override
+    public boolean hasEvent() {
+      return event_ != null;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.DeviceEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.DeviceEvent prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.DeviceEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
+        context.ContextOuterClass.DeviceEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent build() {
+        context.ContextOuterClass.DeviceEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent buildPartial() {
+        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.DeviceEvent) {
+          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
+        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.DeviceEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
+        } else {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.DeviceEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
+    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
+    }
+
+    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
+      @java.lang.Override
+      public DeviceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
+     */
+    boolean hasLinkUuid();
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
+     */
+    context.ContextOuterClass.Uuid getLinkUuid();
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Link ----------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.LinkId}
+   */
+  public static final class LinkId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkId)
+      LinkIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkId.newBuilder() to construct.
+    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (linkUuid_ != null) {
+                subBuilder = linkUuid_.toBuilder();
+              }
+              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkUuid_);
+                linkUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+    }
+
+    public static final int LINK_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid linkUuid_;
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkUuid() {
+      return linkUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getLinkUuid() {
+      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+    }
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+      return getLinkUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (linkUuid_ != null) {
+        output.writeMessage(1, getLinkUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (linkUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getLinkUuid());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.LinkId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
+
+      if (hasLinkUuid() != other.hasLinkUuid()) return false;
+      if (hasLinkUuid()) {
+        if (!getLinkUuid()
+            .equals(other.getLinkUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasLinkUuid()) {
+        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.LinkId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Link ----------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.LinkId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkId)
+        context.ContextOuterClass.LinkIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
+        } else {
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId build() {
+        context.ContextOuterClass.LinkId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId buildPartial() {
+        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
+        if (linkUuidBuilder_ == null) {
+          result.linkUuid_ = linkUuid_;
+        } else {
+          result.linkUuid_ = linkUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.LinkId) {
+          return mergeFrom((context.ContextOuterClass.LinkId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
+        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
+        if (other.hasLinkUuid()) {
+          mergeLinkUuid(other.getLinkUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid linkUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return Whether the linkUuid field is set.
        */
-      public int getTopologyIdsCount() {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.size();
+      public boolean hasLinkUuid() {
+        return linkUuidBuilder_ != null || linkUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return The linkUuid.
+       */
+      public context.ContextOuterClass.Uuid getLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
         } else {
-          return topologyIdsBuilder_.getCount();
+          return linkUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkUuid_ = value;
+          onChanged();
+        } else {
+          linkUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder setLinkUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (linkUuid_ != null) {
+            linkUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
+          } else {
+            linkUuid_ = value;
+          }
+          onChanged();
+        } else {
+          linkUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder clearLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
+          onChanged();
+        } else {
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
+        
+        onChanged();
+        return getLinkUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+        if (linkUuidBuilder_ != null) {
+          return linkUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return linkUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getLinkUuidFieldBuilder() {
+        if (linkUuidBuilder_ == null) {
+          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getLinkUuid(),
+                  getParentForChildren(),
+                  isClean());
+          linkUuid_ = null;
+        }
+        return linkUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.LinkId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkId)
+    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
+    }
+
+    public static context.ContextOuterClass.LinkId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkId>
+        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
+      @java.lang.Override
+      public LinkId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Link)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
+     */
+    boolean hasLinkId();
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
+     */
+    context.ContextOuterClass.LinkId getLinkId();
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getLinkEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    int getLinkEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Link}
+   */
+  public static final class Link extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Link)
+      LinkOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Link.newBuilder() to construct.
+    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Link() {
+      linkEndpointIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Link();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Link(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
+              }
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              linkEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
         }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Link_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+    }
+
+    public static final int LINK_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.LinkId linkId_;
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkId() {
+      return linkId_ != null;
+    }
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    }
+    /**
+     * <code>.context.LinkId link_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
+    }
+
+    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getLinkEndpointIdsCount() {
+      return linkEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+      return linkEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+        int index) {
+      return linkEndpointIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (linkId_ != null) {
+        output.writeMessage(1, getLinkId());
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        output.writeMessage(2, linkEndpointIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (linkId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getLinkId());
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, linkEndpointIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Link)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
+
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
+      }
+      if (!getLinkEndpointIdsList()
+          .equals(other.getLinkEndpointIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
+      }
+      if (getLinkEndpointIdsCount() > 0) {
+        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Link parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Link parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Link parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Link prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Link}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Link)
+        context.ContextOuterClass.LinkOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Link.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinkEndpointIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
         } else {
-          return topologyIdsBuilder_.getMessage(index);
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          linkEndpointIdsBuilder_.clear();
         }
+        return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Link getDefaultInstanceForType() {
+        return context.ContextOuterClass.Link.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Link build() {
+        context.ContextOuterClass.Link result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Link buildPartial() {
+        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
+        int from_bitField0_ = bitField0_;
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
+        } else {
+          result.linkId_ = linkIdBuilder_.build();
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, value);
-          onChanged();
+          result.linkEndpointIds_ = linkEndpointIds_;
         } else {
-          topologyIdsBuilder_.setMessage(index, value);
+          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, builderForValue.build());
-          onChanged();
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Link) {
+          return mergeFrom((context.ContextOuterClass.Link)other);
         } else {
-          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      public Builder mergeFrom(context.ContextOuterClass.Link other) {
+        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIds_.isEmpty()) {
+              linkEndpointIds_ = other.linkEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinkEndpointIdsIsMutable();
+              linkEndpointIds_.addAll(other.linkEndpointIds_);
+            }
+            onChanged();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(value);
-          onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(value);
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIdsBuilder_.isEmpty()) {
+              linkEndpointIdsBuilder_.dispose();
+              linkEndpointIdsBuilder_ = null;
+              linkEndpointIds_ = other.linkEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linkEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkEndpointIdsFieldBuilder() : null;
+            } else {
+              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
+            }
+          }
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Link parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, value);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
+      private int bitField0_;
+
+      private context.ContextOuterClass.LinkId linkId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return Whether the linkId field is set.
+       */
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
+      }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return The linkId.
        */
-      public Builder addTopologyIds(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         } else {
-          topologyIdsBuilder_.addMessage(builderForValue.build());
+          return linkIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, builderForValue.build());
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkId_ = value;
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+          linkIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder addAllTopologyIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologyIds_);
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdsBuilder_.addAllMessages(values);
+          linkIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder clearTopologyIds() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+          } else {
+            linkId_ = value;
+          }
           onChanged();
         } else {
-          topologyIdsBuilder_.clear();
+          linkIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public Builder removeTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.remove(index);
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
           onChanged();
         } else {
-          topologyIdsBuilder_.remove(index);
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-          int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);  } else {
-          return topologyIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+        
+        onChanged();
+        return getLinkIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-           getTopologyIdsOrBuilderList() {
-        if (topologyIdsBuilder_ != null) {
-          return topologyIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(topologyIds_);
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.TopologyId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.LinkId link_id = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
-           getTopologyIdsBuilderList() {
-        return getTopologyIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdsFieldBuilder() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  topologyIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
                   getParentForChildren(),
                   isClean());
-          topologyIds_ = null;
+          linkId_ = null;
         }
-        return topologyIdsBuilder_;
+        return linkIdBuilder_;
       }
 
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
         java.util.Collections.emptyList();
-      private void ensureServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
-          bitField0_ |= 0x00000002;
+      private void ensureLinkEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
 
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-        if (serviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
         } else {
-          return serviceIdsBuilder_.getMessageList();
+          return linkEndpointIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public int getServiceIdsCount() {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.size();
+      public int getLinkEndpointIdsCount() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.size();
         } else {
-          return serviceIdsBuilder_.getCount();
+          return linkEndpointIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);
+      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);
         } else {
-          return serviceIdsBuilder_.getMessage(index);
+          return linkEndpointIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, value);
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, value);
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, value);
+          linkEndpointIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, builderForValue.build());
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
+      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(value);
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(value);
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(value);
+          linkEndpointIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, value);
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, value);
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(index, value);
+          linkEndpointIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(builderForValue.build());
+      public Builder addLinkEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(builderForValue.build());
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(builderForValue.build());
+          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, builderForValue.build());
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addAllServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
+      public Builder addAllLinkEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceIds_);
+              values, linkEndpointIds_);
           onChanged();
         } else {
-          serviceIdsBuilder_.addAllMessages(values);
+          linkEndpointIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder clearServiceIds() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder clearLinkEndpointIds() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          serviceIdsBuilder_.clear();
+          linkEndpointIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder removeServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.remove(index);
+      public Builder removeLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.remove(index);
           onChanged();
         } else {
-          serviceIdsBuilder_.remove(index);
+          linkEndpointIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
           int index) {
-        return getServiceIdsFieldBuilder().getBuilder(index);
+        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
           int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);  } else {
-          return serviceIdsBuilder_.getMessageOrBuilder(index);
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);  } else {
+          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceIdsOrBuilderList() {
-        if (serviceIdsBuilder_ != null) {
-          return serviceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getLinkEndpointIdsOrBuilderList() {
+        if (linkEndpointIdsBuilder_ != null) {
+          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
-        return getServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
           int index) {
-        return getServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceIdsBuilderList() {
-        return getServiceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getLinkEndpointIdsBuilderList() {
+        return getLinkEndpointIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdsFieldBuilder() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceIds_ = null;
-        }
-        return serviceIdsBuilder_;
-      }
-
-      private context.ContextOuterClass.TeraFlowController controller_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> controllerBuilder_;
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       * @return Whether the controller field is set.
-       */
-      public boolean hasController() {
-        return controllerBuilder_ != null || controller_ != null;
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       * @return The controller.
-       */
-      public context.ContextOuterClass.TeraFlowController getController() {
-        if (controllerBuilder_ == null) {
-          return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
-        } else {
-          return controllerBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      public Builder setController(context.ContextOuterClass.TeraFlowController value) {
-        if (controllerBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          controller_ = value;
-          onChanged();
-        } else {
-          controllerBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      public Builder setController(
-          context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
-        if (controllerBuilder_ == null) {
-          controller_ = builderForValue.build();
-          onChanged();
-        } else {
-          controllerBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
-        if (controllerBuilder_ == null) {
-          if (controller_ != null) {
-            controller_ =
-              context.ContextOuterClass.TeraFlowController.newBuilder(controller_).mergeFrom(value).buildPartial();
-          } else {
-            controller_ = value;
-          }
-          onChanged();
-        } else {
-          controllerBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      public Builder clearController() {
-        if (controllerBuilder_ == null) {
-          controller_ = null;
-          onChanged();
-        } else {
-          controller_ = null;
-          controllerBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
-        
-        onChanged();
-        return getControllerFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
-        if (controllerBuilder_ != null) {
-          return controllerBuilder_.getMessageOrBuilder();
-        } else {
-          return controller_ == null ?
-              context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
-        }
-      }
-      /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> 
-          getControllerFieldBuilder() {
-        if (controllerBuilder_ == null) {
-          controllerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder>(
-                  getController(),
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getLinkEndpointIdsFieldBuilder() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  linkEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          controller_ = null;
+          linkEndpointIds_ = null;
         }
-        return controllerBuilder_;
+        return linkEndpointIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -4668,95 +19707,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Context)
+      // @@protoc_insertion_point(builder_scope:context.Link)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Context)
-    private static final context.ContextOuterClass.Context DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Link)
+    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Context();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
     }
 
-    public static context.ContextOuterClass.Context getDefaultInstance() {
+    public static context.ContextOuterClass.Link getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Context>
-        PARSER = new com.google.protobuf.AbstractParser<Context>() {
+    private static final com.google.protobuf.Parser<Link>
+        PARSER = new com.google.protobuf.AbstractParser<Link>() {
       @java.lang.Override
-      public Context parsePartialFrom(
+      public Link parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Context(input, extensionRegistry);
+        return new Link(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Context> parser() {
+    public static com.google.protobuf.Parser<Link> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Context> getParserForType() {
+    public com.google.protobuf.Parser<Link> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Context getDefaultInstanceForType() {
+    public context.ContextOuterClass.Link getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextIdList)
+  public interface LinkIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.ContextId> 
-        getContextIdsList();
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    context.ContextOuterClass.ContextId getContextIds(int index);
+    context.ContextOuterClass.LinkId getLinkIds(int index);
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    int getContextIdsCount();
+    int getLinkIdsCount();
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
-        getContextIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ContextIdList}
+   * Protobuf type {@code context.LinkIdList}
    */
-  public static final class ContextIdList extends
+  public static final class LinkIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextIdList)
-      ContextIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkIdList)
+      LinkIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextIdList.newBuilder() to construct.
-    private ContextIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkIdList.newBuilder() to construct.
+    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextIdList() {
-      contextIds_ = java.util.Collections.emptyList();
+    private LinkIdList() {
+      linkIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextIdList();
+      return new LinkIdList();
     }
 
     @java.lang.Override
@@ -4764,7 +19803,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextIdList(
+    private LinkIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4785,11 +19824,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>();
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              contextIds_.add(
-                  input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry));
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -4808,7 +19847,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -4816,55 +19855,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
     }
 
-    public static final int CONTEXT_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ContextId> contextIds_;
+    public static final int LINK_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
-      return contextIds_;
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
-        getContextIdsOrBuilderList() {
-      return contextIds_;
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public int getContextIdsCount() {
-      return contextIds_.size();
+    public int getLinkIdsCount() {
+      return linkIds_.size();
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextIds(int index) {
-      return contextIds_.get(index);
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index) {
-      return contextIds_.get(index);
+      return linkIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4881,8 +19920,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < contextIds_.size(); i++) {
-        output.writeMessage(1, contextIds_.get(i));
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(1, linkIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -4893,9 +19932,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < contextIds_.size(); i++) {
+      for (int i = 0; i < linkIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, contextIds_.get(i));
+          .computeMessageSize(1, linkIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4907,13 +19946,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextIdList other = (context.ContextOuterClass.ContextIdList) obj;
+      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
 
-      if (!getContextIdsList()
-          .equals(other.getContextIdsList())) return false;
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4925,78 +19964,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getContextIdsCount() > 0) {
-        hash = (37 * hash) + CONTEXT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getContextIdsList().hashCode();
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5009,7 +20048,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5025,26 +20064,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ContextIdList}
+     * Protobuf type {@code context.LinkIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextIdList)
-        context.ContextOuterClass.ContextIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
+        context.ContextOuterClass.LinkIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextIdList.newBuilder()
+      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5057,17 +20096,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getContextIdsFieldBuilder();
+          getLinkIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdsBuilder_ == null) {
-          contextIds_ = java.util.Collections.emptyList();
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          contextIdsBuilder_.clear();
+          linkIdsBuilder_.clear();
         }
         return this;
       }
@@ -5075,17 +20114,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextIdList.getDefaultInstance();
+      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextIdList build() {
-        context.ContextOuterClass.ContextIdList result = buildPartial();
+      public context.ContextOuterClass.LinkIdList build() {
+        context.ContextOuterClass.LinkIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5093,17 +20132,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextIdList buildPartial() {
-        context.ContextOuterClass.ContextIdList result = new context.ContextOuterClass.ContextIdList(this);
+      public context.ContextOuterClass.LinkIdList buildPartial() {
+        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
         int from_bitField0_ = bitField0_;
-        if (contextIdsBuilder_ == null) {
+        if (linkIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.contextIds_ = contextIds_;
+          result.linkIds_ = linkIds_;
         } else {
-          result.contextIds_ = contextIdsBuilder_.build();
+          result.linkIds_ = linkIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -5143,39 +20182,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextIdList) {
-          return mergeFrom((context.ContextOuterClass.ContextIdList)other);
+        if (other instanceof context.ContextOuterClass.LinkIdList) {
+          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextIdList other) {
-        if (other == context.ContextOuterClass.ContextIdList.getDefaultInstance()) return this;
-        if (contextIdsBuilder_ == null) {
-          if (!other.contextIds_.isEmpty()) {
-            if (contextIds_.isEmpty()) {
-              contextIds_ = other.contextIds_;
+      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
+        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureContextIdsIsMutable();
-              contextIds_.addAll(other.contextIds_);
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.contextIds_.isEmpty()) {
-            if (contextIdsBuilder_.isEmpty()) {
-              contextIdsBuilder_.dispose();
-              contextIdsBuilder_ = null;
-              contextIds_ = other.contextIds_;
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              contextIdsBuilder_ = 
+              linkIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getContextIdsFieldBuilder() : null;
+                   getLinkIdsFieldBuilder() : null;
             } else {
-              contextIdsBuilder_.addAllMessages(other.contextIds_);
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
             }
           }
         }
@@ -5194,11 +20233,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextIdList parsedMessage = null;
+        context.ContextOuterClass.LinkIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -5209,244 +20248,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ContextId> contextIds_ =
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
         java.util.Collections.emptyList();
-      private void ensureContextIdsIsMutable() {
+      private void ensureLinkIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>(contextIds_);
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdsBuilder_;
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
 
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
-        if (contextIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(contextIds_);
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
         } else {
-          return contextIdsBuilder_.getMessageList();
+          return linkIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public int getContextIdsCount() {
-        if (contextIdsBuilder_ == null) {
-          return contextIds_.size();
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
         } else {
-          return contextIdsBuilder_.getCount();
+          return linkIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.ContextId getContextIds(int index) {
-        if (contextIdsBuilder_ == null) {
-          return contextIds_.get(index);
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
         } else {
-          return contextIdsBuilder_.getMessage(index);
+          return linkIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder setContextIds(
-          int index, context.ContextOuterClass.ContextId value) {
-        if (contextIdsBuilder_ == null) {
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextIdsIsMutable();
-          contextIds_.set(index, value);
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
           onChanged();
         } else {
-          contextIdsBuilder_.setMessage(index, value);
+          linkIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder setContextIds(
-          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.set(index, builderForValue.build());
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdsBuilder_.setMessage(index, builderForValue.build());
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContextIds(context.ContextOuterClass.ContextId value) {
-        if (contextIdsBuilder_ == null) {
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextIdsIsMutable();
-          contextIds_.add(value);
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(value);
+          linkIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContextIds(
-          int index, context.ContextOuterClass.ContextId value) {
-        if (contextIdsBuilder_ == null) {
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextIdsIsMutable();
-          contextIds_.add(index, value);
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(index, value);
+          linkIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContextIds(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.add(builderForValue.build());
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(builderForValue.build());
+          linkIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContextIds(
-          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.add(index, builderForValue.build());
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(index, builderForValue.build());
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addAllContextIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ContextId> values) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, contextIds_);
+              values, linkIds_);
           onChanged();
         } else {
-          contextIdsBuilder_.addAllMessages(values);
+          linkIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder clearContextIds() {
-        if (contextIdsBuilder_ == null) {
-          contextIds_ = java.util.Collections.emptyList();
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          contextIdsBuilder_.clear();
+          linkIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder removeContextIds(int index) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.remove(index);
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
           onChanged();
         } else {
-          contextIdsBuilder_.remove(index);
+          linkIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdsBuilder(
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
           int index) {
-        return getContextIdsFieldBuilder().getBuilder(index);
+        return getLinkIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
           int index) {
-        if (contextIdsBuilder_ == null) {
-          return contextIds_.get(index);  } else {
-          return contextIdsBuilder_.getMessageOrBuilder(index);
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
-           getContextIdsOrBuilderList() {
-        if (contextIdsBuilder_ != null) {
-          return contextIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(contextIds_);
+          return java.util.Collections.unmodifiableList(linkIds_);
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder() {
-        return getContextIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ContextId.getDefaultInstance());
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder(
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
           int index) {
-        return getContextIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ContextId.getDefaultInstance());
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ContextId.Builder> 
-           getContextIdsBuilderList() {
-        return getContextIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdsFieldBuilder() {
-        if (contextIdsBuilder_ == null) {
-          contextIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  contextIds_,
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          contextIds_ = null;
+          linkIds_ = null;
         }
-        return contextIdsBuilder_;
+        return linkIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -5461,95 +20500,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextIdList)
+      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextIdList)
-    private static final context.ContextOuterClass.ContextIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkIdList)
+    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
     }
 
-    public static context.ContextOuterClass.ContextIdList getDefaultInstance() {
+    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ContextIdList>() {
+    private static final com.google.protobuf.Parser<LinkIdList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
       @java.lang.Override
-      public ContextIdList parsePartialFrom(
+      public LinkIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextIdList(input, extensionRegistry);
+        return new LinkIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextIdList> parser() {
+    public static com.google.protobuf.Parser<LinkIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextIdList> getParserForType() {
+    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextList)
+  public interface LinkListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Context> 
-        getContextsList();
+    java.util.List<context.ContextOuterClass.Link> 
+        getLinksList();
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    context.ContextOuterClass.Context getContexts(int index);
+    context.ContextOuterClass.Link getLinks(int index);
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    int getContextsCount();
+    int getLinksCount();
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
-        getContextsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList();
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ContextList}
+   * Protobuf type {@code context.LinkList}
    */
-  public static final class ContextList extends
+  public static final class LinkList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextList)
-      ContextListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkList)
+      LinkListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextList.newBuilder() to construct.
-    private ContextList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkList.newBuilder() to construct.
+    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextList() {
-      contexts_ = java.util.Collections.emptyList();
+    private LinkList() {
+      links_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextList();
+      return new LinkList();
     }
 
     @java.lang.Override
@@ -5557,7 +20596,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextList(
+    private LinkList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -5578,11 +20617,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>();
+                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              contexts_.add(
-                  input.readMessage(context.ContextOuterClass.Context.parser(), extensionRegistry));
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -5601,7 +20640,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          contexts_ = java.util.Collections.unmodifiableList(contexts_);
+          links_ = java.util.Collections.unmodifiableList(links_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -5609,55 +20648,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
     }
 
-    public static final int CONTEXTS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Context> contexts_;
+    public static final int LINKS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Link> links_;
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Context> getContextsList() {
-      return contexts_;
+    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+      return links_;
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
-        getContextsOrBuilderList() {
-      return contexts_;
+    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList() {
+      return links_;
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public int getContextsCount() {
-      return contexts_.size();
+    public int getLinksCount() {
+      return links_.size();
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Context getContexts(int index) {
-      return contexts_.get(index);
+    public context.ContextOuterClass.Link getLinks(int index) {
+      return links_.get(index);
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
         int index) {
-      return contexts_.get(index);
+      return links_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -5674,8 +20713,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < contexts_.size(); i++) {
-        output.writeMessage(1, contexts_.get(i));
+      for (int i = 0; i < links_.size(); i++) {
+        output.writeMessage(1, links_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -5686,9 +20725,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < contexts_.size(); i++) {
+      for (int i = 0; i < links_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, contexts_.get(i));
+          .computeMessageSize(1, links_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -5700,13 +20739,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextList)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextList other = (context.ContextOuterClass.ContextList) obj;
+      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
 
-      if (!getContextsList()
-          .equals(other.getContextsList())) return false;
+      if (!getLinksList()
+          .equals(other.getLinksList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -5718,78 +20757,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getContextsCount() > 0) {
-        hash = (37 * hash) + CONTEXTS_FIELD_NUMBER;
-        hash = (53 * hash) + getContextsList().hashCode();
+      if (getLinksCount() > 0) {
+        hash = (37 * hash) + LINKS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinksList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextList parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5802,7 +20841,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5818,26 +20857,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ContextList}
+     * Protobuf type {@code context.LinkList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextList)
-        context.ContextOuterClass.ContextListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkList)
+        context.ContextOuterClass.LinkListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextList.newBuilder()
+      // Construct using context.ContextOuterClass.LinkList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5850,17 +20889,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getContextsFieldBuilder();
+          getLinksFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextsBuilder_ == null) {
-          contexts_ = java.util.Collections.emptyList();
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          contextsBuilder_.clear();
+          linksBuilder_.clear();
         }
         return this;
       }
@@ -5868,17 +20907,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextList.getDefaultInstance();
+      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextList build() {
-        context.ContextOuterClass.ContextList result = buildPartial();
+      public context.ContextOuterClass.LinkList build() {
+        context.ContextOuterClass.LinkList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5886,17 +20925,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextList buildPartial() {
-        context.ContextOuterClass.ContextList result = new context.ContextOuterClass.ContextList(this);
+      public context.ContextOuterClass.LinkList buildPartial() {
+        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
         int from_bitField0_ = bitField0_;
-        if (contextsBuilder_ == null) {
+        if (linksBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            contexts_ = java.util.Collections.unmodifiableList(contexts_);
+            links_ = java.util.Collections.unmodifiableList(links_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.contexts_ = contexts_;
+          result.links_ = links_;
         } else {
-          result.contexts_ = contextsBuilder_.build();
+          result.links_ = linksBuilder_.build();
         }
         onBuilt();
         return result;
@@ -5936,39 +20975,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextList) {
-          return mergeFrom((context.ContextOuterClass.ContextList)other);
+        if (other instanceof context.ContextOuterClass.LinkList) {
+          return mergeFrom((context.ContextOuterClass.LinkList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextList other) {
-        if (other == context.ContextOuterClass.ContextList.getDefaultInstance()) return this;
-        if (contextsBuilder_ == null) {
-          if (!other.contexts_.isEmpty()) {
-            if (contexts_.isEmpty()) {
-              contexts_ = other.contexts_;
+      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
+        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
+        if (linksBuilder_ == null) {
+          if (!other.links_.isEmpty()) {
+            if (links_.isEmpty()) {
+              links_ = other.links_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureContextsIsMutable();
-              contexts_.addAll(other.contexts_);
+              ensureLinksIsMutable();
+              links_.addAll(other.links_);
             }
             onChanged();
           }
         } else {
-          if (!other.contexts_.isEmpty()) {
-            if (contextsBuilder_.isEmpty()) {
-              contextsBuilder_.dispose();
-              contextsBuilder_ = null;
-              contexts_ = other.contexts_;
+          if (!other.links_.isEmpty()) {
+            if (linksBuilder_.isEmpty()) {
+              linksBuilder_.dispose();
+              linksBuilder_ = null;
+              links_ = other.links_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              contextsBuilder_ = 
+              linksBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getContextsFieldBuilder() : null;
+                   getLinksFieldBuilder() : null;
             } else {
-              contextsBuilder_.addAllMessages(other.contexts_);
+              linksBuilder_.addAllMessages(other.links_);
             }
           }
         }
@@ -5987,11 +21026,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextList parsedMessage = null;
+        context.ContextOuterClass.LinkList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -6002,244 +21041,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Context> contexts_ =
+      private java.util.List<context.ContextOuterClass.Link> links_ =
         java.util.Collections.emptyList();
-      private void ensureContextsIsMutable() {
+      private void ensureLinksIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>(contexts_);
+          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> contextsBuilder_;
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
 
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Context> getContextsList() {
-        if (contextsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(contexts_);
+      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+        if (linksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(links_);
         } else {
-          return contextsBuilder_.getMessageList();
+          return linksBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public int getContextsCount() {
-        if (contextsBuilder_ == null) {
-          return contexts_.size();
+      public int getLinksCount() {
+        if (linksBuilder_ == null) {
+          return links_.size();
         } else {
-          return contextsBuilder_.getCount();
+          return linksBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.Context getContexts(int index) {
-        if (contextsBuilder_ == null) {
-          return contexts_.get(index);
+      public context.ContextOuterClass.Link getLinks(int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);
         } else {
-          return contextsBuilder_.getMessage(index);
+          return linksBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder setContexts(
-          int index, context.ContextOuterClass.Context value) {
-        if (contextsBuilder_ == null) {
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextsIsMutable();
-          contexts_.set(index, value);
+          ensureLinksIsMutable();
+          links_.set(index, value);
           onChanged();
         } else {
-          contextsBuilder_.setMessage(index, value);
+          linksBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder setContexts(
-          int index, context.ContextOuterClass.Context.Builder builderForValue) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.set(index, builderForValue.build());
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.set(index, builderForValue.build());
           onChanged();
         } else {
-          contextsBuilder_.setMessage(index, builderForValue.build());
+          linksBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder addContexts(context.ContextOuterClass.Context value) {
-        if (contextsBuilder_ == null) {
+      public Builder addLinks(context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextsIsMutable();
-          contexts_.add(value);
+          ensureLinksIsMutable();
+          links_.add(value);
           onChanged();
         } else {
-          contextsBuilder_.addMessage(value);
+          linksBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder addContexts(
-          int index, context.ContextOuterClass.Context value) {
-        if (contextsBuilder_ == null) {
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextsIsMutable();
-          contexts_.add(index, value);
+          ensureLinksIsMutable();
+          links_.add(index, value);
           onChanged();
         } else {
-          contextsBuilder_.addMessage(index, value);
+          linksBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder addContexts(
-          context.ContextOuterClass.Context.Builder builderForValue) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.add(builderForValue.build());
+      public Builder addLinks(
+          context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
           onChanged();
         } else {
-          contextsBuilder_.addMessage(builderForValue.build());
+          linksBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder addContexts(
-          int index, context.ContextOuterClass.Context.Builder builderForValue) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.add(index, builderForValue.build());
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(index, builderForValue.build());
           onChanged();
         } else {
-          contextsBuilder_.addMessage(index, builderForValue.build());
+          linksBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder addAllContexts(
-          java.lang.Iterable<? extends context.ContextOuterClass.Context> values) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
+      public Builder addAllLinks(
+          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, contexts_);
+              values, links_);
           onChanged();
         } else {
-          contextsBuilder_.addAllMessages(values);
+          linksBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder clearContexts() {
-        if (contextsBuilder_ == null) {
-          contexts_ = java.util.Collections.emptyList();
+      public Builder clearLinks() {
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          contextsBuilder_.clear();
+          linksBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder removeContexts(int index) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.remove(index);
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
           onChanged();
         } else {
-          contextsBuilder_.remove(index);
+          linksBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.Context.Builder getContextsBuilder(
+      public context.ContextOuterClass.Link.Builder getLinksBuilder(
           int index) {
-        return getContextsFieldBuilder().getBuilder(index);
+        return getLinksFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
           int index) {
-        if (contextsBuilder_ == null) {
-          return contexts_.get(index);  } else {
-          return contextsBuilder_.getMessageOrBuilder(index);
+        if (linksBuilder_ == null) {
+          return links_.get(index);  } else {
+          return linksBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
-           getContextsOrBuilderList() {
-        if (contextsBuilder_ != null) {
-          return contextsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+           getLinksOrBuilderList() {
+        if (linksBuilder_ != null) {
+          return linksBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(contexts_);
+          return java.util.Collections.unmodifiableList(links_);
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.Context.Builder addContextsBuilder() {
-        return getContextsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Context.getDefaultInstance());
+      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
+        return getLinksFieldBuilder().addBuilder(
+            context.ContextOuterClass.Link.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.Context.Builder addContextsBuilder(
+      public context.ContextOuterClass.Link.Builder addLinksBuilder(
           int index) {
-        return getContextsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Context.getDefaultInstance());
+        return getLinksFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Link.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Context.Builder> 
-           getContextsBuilderList() {
-        return getContextsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Link.Builder> 
+           getLinksBuilderList() {
+        return getLinksFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> 
-          getContextsFieldBuilder() {
-        if (contextsBuilder_ == null) {
-          contextsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder>(
-                  contexts_,
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
+          getLinksFieldBuilder() {
+        if (linksBuilder_ == null) {
+          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
+                  links_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          contexts_ = null;
+          links_ = null;
         }
-        return contextsBuilder_;
+        return linksBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -6254,48 +21293,48 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextList)
+      // @@protoc_insertion_point(builder_scope:context.LinkList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextList)
-    private static final context.ContextOuterClass.ContextList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkList)
+    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
     }
 
-    public static context.ContextOuterClass.ContextList getDefaultInstance() {
+    public static context.ContextOuterClass.LinkList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextList>
-        PARSER = new com.google.protobuf.AbstractParser<ContextList>() {
+    private static final com.google.protobuf.Parser<LinkList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
       @java.lang.Override
-      public ContextList parsePartialFrom(
+      public LinkList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextList(input, extensionRegistry);
+        return new LinkList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextList> parser() {
+    public static com.google.protobuf.Parser<LinkList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextList> getParserForType() {
+    public com.google.protobuf.Parser<LinkList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextEvent)
+  public interface LinkEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -6314,40 +21353,40 @@ public final class ContextOuterClass {
     context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
      */
-    boolean hasContextId();
+    boolean hasLinkId();
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return The contextId.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
      */
-    context.ContextOuterClass.ContextId getContextId();
+    context.ContextOuterClass.LinkId getLinkId();
     /**
-     * <code>.context.ContextId context_id = 2;</code>
+     * <code>.context.LinkId link_id = 2;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ContextEvent}
+   * Protobuf type {@code context.LinkEvent}
    */
-  public static final class ContextEvent extends
+  public static final class LinkEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextEvent)
-      ContextEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkEvent)
+      LinkEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextEvent.newBuilder() to construct.
-    private ContextEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkEvent.newBuilder() to construct.
+    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextEvent() {
+    private LinkEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextEvent();
+      return new LinkEvent();
     }
 
     @java.lang.Override
@@ -6355,7 +21394,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextEvent(
+    private LinkEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -6387,14 +21426,14 @@ public final class ContextOuterClass {
               break;
             }
             case 18: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
               }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -6420,15 +21459,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
     }
 
     public static final int EVENT_FIELD_NUMBER = 1;
@@ -6457,30 +21496,30 @@ public final class ContextOuterClass {
       return getEvent();
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ContextId contextId_;
+    public static final int LINK_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.LinkId linkId_;
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public boolean hasLinkId() {
+      return linkId_ != null;
     }
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return The contextId.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
     }
     /**
-     * <code>.context.ContextId context_id = 2;</code>
+     * <code>.context.LinkId link_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -6500,8 +21539,8 @@ public final class ContextOuterClass {
       if (event_ != null) {
         output.writeMessage(1, getEvent());
       }
-      if (contextId_ != null) {
-        output.writeMessage(2, getContextId());
+      if (linkId_ != null) {
+        output.writeMessage(2, getLinkId());
       }
       unknownFields.writeTo(output);
     }
@@ -6516,9 +21555,9 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getEvent());
       }
-      if (contextId_ != null) {
+      if (linkId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getContextId());
+          .computeMessageSize(2, getLinkId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -6530,20 +21569,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextEvent other = (context.ContextOuterClass.ContextEvent) obj;
+      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
 
       if (hasEvent() != other.hasEvent()) return false;
       if (hasEvent()) {
         if (!getEvent()
             .equals(other.getEvent())) return false;
       }
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -6560,78 +21599,78 @@ public final class ContextOuterClass {
         hash = (37 * hash) + EVENT_FIELD_NUMBER;
         hash = (53 * hash) + getEvent().hashCode();
       }
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -6644,7 +21683,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -6660,26 +21699,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ContextEvent}
+     * Protobuf type {@code context.LinkEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextEvent)
-        context.ContextOuterClass.ContextEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
+        context.ContextOuterClass.LinkEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextEvent.newBuilder()
+      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -6703,11 +21742,11 @@ public final class ContextOuterClass {
           event_ = null;
           eventBuilder_ = null;
         }
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
         return this;
       }
@@ -6715,17 +21754,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextEvent.getDefaultInstance();
+      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextEvent build() {
-        context.ContextOuterClass.ContextEvent result = buildPartial();
+      public context.ContextOuterClass.LinkEvent build() {
+        context.ContextOuterClass.LinkEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -6733,17 +21772,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextEvent buildPartial() {
-        context.ContextOuterClass.ContextEvent result = new context.ContextOuterClass.ContextEvent(this);
+      public context.ContextOuterClass.LinkEvent buildPartial() {
+        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
         if (eventBuilder_ == null) {
           result.event_ = event_;
         } else {
           result.event_ = eventBuilder_.build();
         }
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
         } else {
-          result.contextId_ = contextIdBuilder_.build();
+          result.linkId_ = linkIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -6783,21 +21822,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextEvent) {
-          return mergeFrom((context.ContextOuterClass.ContextEvent)other);
+        if (other instanceof context.ContextOuterClass.LinkEvent) {
+          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextEvent other) {
-        if (other == context.ContextOuterClass.ContextEvent.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
+        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
         if (other.hasEvent()) {
           mergeEvent(other.getEvent());
         }
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -6814,11 +21853,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextEvent parsedMessage = null;
+        context.ContextOuterClass.LinkEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -6947,123 +21986,123 @@ public final class ContextOuterClass {
         return eventBuilder_;
       }
 
-      private context.ContextOuterClass.ContextId contextId_;
+      private context.ContextOuterClass.LinkId linkId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
       /**
-       * <code>.context.ContextId context_id = 2;</code>
-       * @return Whether the contextId field is set.
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return Whether the linkId field is set.
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
-       * @return The contextId.
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return The linkId.
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         } else {
-          return contextIdBuilder_.getMessage();
+          return linkIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          linkId_ = value;
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          linkIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          linkIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
           } else {
-            contextId_ = value;
+            linkId_ = value;
           }
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          linkIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
         
         onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+        return getLinkIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
                   getParentForChildren(),
                   isClean());
-          contextId_ = null;
+          linkId_ = null;
         }
-        return contextIdBuilder_;
+        return linkIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7078,48 +22117,48 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextEvent)
+      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextEvent)
-    private static final context.ContextOuterClass.ContextEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkEvent)
+    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
     }
 
-    public static context.ContextOuterClass.ContextEvent getDefaultInstance() {
+    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ContextEvent>() {
+    private static final com.google.protobuf.Parser<LinkEvent>
+        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
       @java.lang.Override
-      public ContextEvent parsePartialFrom(
+      public LinkEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextEvent(input, extensionRegistry);
+        return new LinkEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextEvent> parser() {
+    public static com.google.protobuf.Parser<LinkEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextEvent> getParserForType() {
+    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyId)
+  public interface ServiceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -7138,44 +22177,44 @@ public final class ContextOuterClass {
     context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
 
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return Whether the topologyUuid field is set.
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
      */
-    boolean hasTopologyUuid();
+    boolean hasServiceUuid();
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return The topologyUuid.
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
      */
-    context.ContextOuterClass.Uuid getTopologyUuid();
+    context.ContextOuterClass.Uuid getServiceUuid();
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
   }
   /**
    * <pre>
-   * ----- Topology ------------------------------------------------------------------------------------------------------
+   * ----- Service -------------------------------------------------------------------------------------------------------
    * </pre>
    *
-   * Protobuf type {@code context.TopologyId}
+   * Protobuf type {@code context.ServiceId}
    */
-  public static final class TopologyId extends
+  public static final class ServiceId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyId)
-      TopologyIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceId)
+      ServiceIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyId.newBuilder() to construct.
-    private TopologyId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceId.newBuilder() to construct.
+    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyId() {
+    private ServiceId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyId();
+      return new ServiceId();
     }
 
     @java.lang.Override
@@ -7183,7 +22222,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyId(
+    private ServiceId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -7216,13 +22255,13 @@ public final class ContextOuterClass {
             }
             case 18: {
               context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (topologyUuid_ != null) {
-                subBuilder = topologyUuid_.toBuilder();
+              if (serviceUuid_ != null) {
+                subBuilder = serviceUuid_.toBuilder();
               }
-              topologyUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyUuid_);
-                topologyUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(serviceUuid_);
+                serviceUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -7248,15 +22287,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
     }
 
     public static final int CONTEXT_ID_FIELD_NUMBER = 1;
@@ -7285,30 +22324,30 @@ public final class ContextOuterClass {
       return getContextId();
     }
 
-    public static final int TOPOLOGY_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid topologyUuid_;
+    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid serviceUuid_;
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return Whether the topologyUuid field is set.
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
      */
     @java.lang.Override
-    public boolean hasTopologyUuid() {
-      return topologyUuid_ != null;
+    public boolean hasServiceUuid() {
+      return serviceUuid_ != null;
     }
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return The topologyUuid.
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getTopologyUuid() {
-      return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+    public context.ContextOuterClass.Uuid getServiceUuid() {
+      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
     }
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
-      return getTopologyUuid();
+    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+      return getServiceUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -7328,8 +22367,8 @@ public final class ContextOuterClass {
       if (contextId_ != null) {
         output.writeMessage(1, getContextId());
       }
-      if (topologyUuid_ != null) {
-        output.writeMessage(2, getTopologyUuid());
+      if (serviceUuid_ != null) {
+        output.writeMessage(2, getServiceUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -7344,9 +22383,9 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getContextId());
       }
-      if (topologyUuid_ != null) {
+      if (serviceUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTopologyUuid());
+          .computeMessageSize(2, getServiceUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -7358,20 +22397,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyId)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyId other = (context.ContextOuterClass.TopologyId) obj;
+      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
 
       if (hasContextId() != other.hasContextId()) return false;
       if (hasContextId()) {
         if (!getContextId()
             .equals(other.getContextId())) return false;
       }
-      if (hasTopologyUuid() != other.hasTopologyUuid()) return false;
-      if (hasTopologyUuid()) {
-        if (!getTopologyUuid()
-            .equals(other.getTopologyUuid())) return false;
+      if (hasServiceUuid() != other.hasServiceUuid()) return false;
+      if (hasServiceUuid()) {
+        if (!getServiceUuid()
+            .equals(other.getServiceUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -7388,78 +22427,78 @@ public final class ContextOuterClass {
         hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
         hash = (53 * hash) + getContextId().hashCode();
       }
-      if (hasTopologyUuid()) {
-        hash = (37 * hash) + TOPOLOGY_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyUuid().hashCode();
+      if (hasServiceUuid()) {
+        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -7472,7 +22511,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -7489,29 +22528,29 @@ public final class ContextOuterClass {
     }
     /**
      * <pre>
-     * ----- Topology ------------------------------------------------------------------------------------------------------
+     * ----- Service -------------------------------------------------------------------------------------------------------
      * </pre>
      *
-     * Protobuf type {@code context.TopologyId}
+     * Protobuf type {@code context.ServiceId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyId)
-        context.ContextOuterClass.TopologyIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceId)
+        context.ContextOuterClass.ServiceIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyId.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -7535,11 +22574,11 @@ public final class ContextOuterClass {
           contextId_ = null;
           contextIdBuilder_ = null;
         }
-        if (topologyUuidBuilder_ == null) {
-          topologyUuid_ = null;
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
         } else {
-          topologyUuid_ = null;
-          topologyUuidBuilder_ = null;
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
         }
         return this;
       }
@@ -7547,17 +22586,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyId.getDefaultInstance();
+      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyId build() {
-        context.ContextOuterClass.TopologyId result = buildPartial();
+      public context.ContextOuterClass.ServiceId build() {
+        context.ContextOuterClass.ServiceId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -7565,17 +22604,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyId buildPartial() {
-        context.ContextOuterClass.TopologyId result = new context.ContextOuterClass.TopologyId(this);
+      public context.ContextOuterClass.ServiceId buildPartial() {
+        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
         if (contextIdBuilder_ == null) {
           result.contextId_ = contextId_;
         } else {
           result.contextId_ = contextIdBuilder_.build();
         }
-        if (topologyUuidBuilder_ == null) {
-          result.topologyUuid_ = topologyUuid_;
+        if (serviceUuidBuilder_ == null) {
+          result.serviceUuid_ = serviceUuid_;
         } else {
-          result.topologyUuid_ = topologyUuidBuilder_.build();
+          result.serviceUuid_ = serviceUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -7615,21 +22654,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyId) {
-          return mergeFrom((context.ContextOuterClass.TopologyId)other);
+        if (other instanceof context.ContextOuterClass.ServiceId) {
+          return mergeFrom((context.ContextOuterClass.ServiceId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyId other) {
-        if (other == context.ContextOuterClass.TopologyId.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
+        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
         if (other.hasContextId()) {
           mergeContextId(other.getContextId());
         }
-        if (other.hasTopologyUuid()) {
-          mergeTopologyUuid(other.getTopologyUuid());
+        if (other.hasServiceUuid()) {
+          mergeServiceUuid(other.getServiceUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -7646,11 +22685,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyId parsedMessage = null;
+        context.ContextOuterClass.ServiceId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -7779,123 +22818,123 @@ public final class ContextOuterClass {
         return contextIdBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid topologyUuid_;
+      private context.ContextOuterClass.Uuid serviceUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> topologyUuidBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
-       * @return Whether the topologyUuid field is set.
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return Whether the serviceUuid field is set.
        */
-      public boolean hasTopologyUuid() {
-        return topologyUuidBuilder_ != null || topologyUuid_ != null;
+      public boolean hasServiceUuid() {
+        return serviceUuidBuilder_ != null || serviceUuid_ != null;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
-       * @return The topologyUuid.
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return The serviceUuid.
        */
-      public context.ContextOuterClass.Uuid getTopologyUuid() {
-        if (topologyUuidBuilder_ == null) {
-          return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+      public context.ContextOuterClass.Uuid getServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
         } else {
-          return topologyUuidBuilder_.getMessage();
+          return serviceUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public Builder setTopologyUuid(context.ContextOuterClass.Uuid value) {
-        if (topologyUuidBuilder_ == null) {
+      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyUuid_ = value;
+          serviceUuid_ = value;
           onChanged();
         } else {
-          topologyUuidBuilder_.setMessage(value);
+          serviceUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public Builder setTopologyUuid(
+      public Builder setServiceUuid(
           context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (topologyUuidBuilder_ == null) {
-          topologyUuid_ = builderForValue.build();
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = builderForValue.build();
           onChanged();
         } else {
-          topologyUuidBuilder_.setMessage(builderForValue.build());
+          serviceUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public Builder mergeTopologyUuid(context.ContextOuterClass.Uuid value) {
-        if (topologyUuidBuilder_ == null) {
-          if (topologyUuid_ != null) {
-            topologyUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(topologyUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (serviceUuid_ != null) {
+            serviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
           } else {
-            topologyUuid_ = value;
+            serviceUuid_ = value;
           }
           onChanged();
         } else {
-          topologyUuidBuilder_.mergeFrom(value);
+          serviceUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public Builder clearTopologyUuid() {
-        if (topologyUuidBuilder_ == null) {
-          topologyUuid_ = null;
+      public Builder clearServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
           onChanged();
         } else {
-          topologyUuid_ = null;
-          topologyUuidBuilder_ = null;
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getTopologyUuidBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
         
         onChanged();
-        return getTopologyUuidFieldBuilder().getBuilder();
+        return getServiceUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
-        if (topologyUuidBuilder_ != null) {
-          return topologyUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+        if (serviceUuidBuilder_ != null) {
+          return serviceUuidBuilder_.getMessageOrBuilder();
         } else {
-          return topologyUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+          return serviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
         }
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getTopologyUuidFieldBuilder() {
-        if (topologyUuidBuilder_ == null) {
-          topologyUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getServiceUuidFieldBuilder() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getTopologyUuid(),
+                  getServiceUuid(),
                   getParentForChildren(),
                   isClean());
-          topologyUuid_ = null;
+          serviceUuid_ = null;
         }
-        return topologyUuidBuilder_;
+        return serviceUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7910,135 +22949,192 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyId)
+      // @@protoc_insertion_point(builder_scope:context.ServiceId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyId)
-    private static final context.ContextOuterClass.TopologyId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceId)
+    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
     }
 
-    public static context.ContextOuterClass.TopologyId getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyId>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyId>() {
+    private static final com.google.protobuf.Parser<ServiceId>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
       @java.lang.Override
-      public TopologyId parsePartialFrom(
+      public ServiceId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyId(input, extensionRegistry);
+        return new ServiceId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyId> parser() {
+    public static com.google.protobuf.Parser<ServiceId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyId> getParserForType() {
+    public com.google.protobuf.Parser<ServiceId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Topology)
+  public interface ServiceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Service)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
      */
-    boolean hasTopologyId();
+    boolean hasServiceId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The enum numeric value on the wire for serviceType.
      */
-    java.util.List<context.ContextOuterClass.DeviceId> 
-        getDeviceIdsList();
+    int getServiceTypeValue();
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The serviceType.
+     */
+    context.ContextOuterClass.ServiceTypeEnum getServiceType();
+
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getServiceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    int getServiceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getServiceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    context.ContextOuterClass.Constraint getServiceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    int getServiceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+        int index);
+
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return Whether the serviceStatus field is set.
      */
-    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    boolean hasServiceStatus();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return The serviceStatus.
      */
-    int getDeviceIdsCount();
+    context.ContextOuterClass.ServiceStatus getServiceStatus();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ServiceStatus service_status = 5;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList();
+    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
+
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return Whether the serviceConfig field is set.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index);
-
+    boolean hasServiceConfig();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return The serviceConfig.
      */
-    java.util.List<context.ContextOuterClass.LinkId> 
-        getLinkIdsList();
+    context.ContextOuterClass.ServiceConfig getServiceConfig();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.ServiceConfig service_config = 6;</code>
      */
-    context.ContextOuterClass.LinkId getLinkIds(int index);
+    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
+
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return Whether the timestamp field is set.
      */
-    int getLinkIdsCount();
+    boolean hasTimestamp();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return The timestamp.
      */
-    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList();
+    context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Timestamp timestamp = 7;</code>
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Topology}
+   * Protobuf type {@code context.Service}
    */
-  public static final class Topology extends
+  public static final class Service extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Topology)
-      TopologyOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Service)
+      ServiceOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Topology.newBuilder() to construct.
-    private Topology(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Service.newBuilder() to construct.
+    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Topology() {
-      deviceIds_ = java.util.Collections.emptyList();
-      linkIds_ = java.util.Collections.emptyList();
+    private Service() {
+      serviceType_ = 0;
+      serviceEndpointIds_ = java.util.Collections.emptyList();
+      serviceConstraints_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Topology();
+      return new Service();
     }
 
     @java.lang.Override
@@ -8046,7 +23142,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Topology(
+    private Service(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -8066,34 +23162,79 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
               }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 18: {
+            case 16: {
+              int rawValue = input.readEnum();
+
+              serviceType_ = rawValue;
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              deviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              serviceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
               break;
             }
-            case 26: {
+            case 34: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
                 mutable_bitField0_ |= 0x00000002;
               }
-              linkIds_.add(
-                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              serviceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
+              if (serviceStatus_ != null) {
+                subBuilder = serviceStatus_.toBuilder();
+              }
+              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceStatus_);
+                serviceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
+              if (serviceConfig_ != null) {
+                subBuilder = serviceConfig_.toBuilder();
+              }
+              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceConfig_);
+                serviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -8112,10 +23253,10 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
         }
         if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -8123,121 +23264,218 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      return context.ContextOuterClass.internal_static_context_Service_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
     }
 
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
+    public static final int SERVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
 
-    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    public static final int SERVICE_TYPE_FIELD_NUMBER = 2;
+    private int serviceType_;
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The enum numeric value on the wire for serviceType.
+     */
+    @java.lang.Override public int getServiceTypeValue() {
+      return serviceType_;
+    }
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The serviceType.
+     */
+    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-      return deviceIds_;
+    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+      return serviceEndpointIds_;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList() {
-      return deviceIds_;
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList() {
+      return serviceEndpointIds_;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public int getDeviceIdsCount() {
-      return deviceIds_.size();
+    public int getServiceEndpointIdsCount() {
+      return serviceEndpointIds_.size();
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-      return deviceIds_.get(index);
+    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+      return serviceEndpointIds_.get(index);
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
         int index) {
-      return deviceIds_.get(index);
+      return serviceEndpointIds_.get(index);
     }
 
-    public static final int LINK_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-      return linkIds_;
+    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+      return serviceConstraints_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList() {
-      return linkIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList() {
+      return serviceConstraints_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
      */
     @java.lang.Override
-    public int getLinkIdsCount() {
-      return linkIds_.size();
+    public int getServiceConstraintsCount() {
+      return serviceConstraints_.size();
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkIds(int index) {
-      return linkIds_.get(index);
+    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+      return serviceConstraints_.get(index);
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
         int index) {
-      return linkIds_.get(index);
+      return serviceConstraints_.get(index);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ServiceStatus serviceStatus_;
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceStatus() {
+      return serviceStatus_ != null;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return The serviceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+      return getServiceStatus();
+    }
+
+    public static final int SERVICE_CONFIG_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceConfig serviceConfig_;
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceConfig() {
+      return serviceConfig_ != null;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return The serviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+      return getServiceConfig();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -8254,14 +23492,26 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
+      if (serviceId_ != null) {
+        output.writeMessage(1, getServiceId());
       }
-      for (int i = 0; i < deviceIds_.size(); i++) {
-        output.writeMessage(2, deviceIds_.get(i));
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(2, serviceType_);
       }
-      for (int i = 0; i < linkIds_.size(); i++) {
-        output.writeMessage(3, linkIds_.get(i));
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        output.writeMessage(3, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        output.writeMessage(4, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        output.writeMessage(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        output.writeMessage(6, getServiceConfig());
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(7, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -8272,17 +23522,33 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
+      if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
+          .computeMessageSize(1, getServiceId());
       }
-      for (int i = 0; i < deviceIds_.size(); i++) {
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, deviceIds_.get(i));
+          .computeEnumSize(2, serviceType_);
       }
-      for (int i = 0; i < linkIds_.size(); i++) {
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, linkIds_.get(i));
+          .computeMessageSize(3, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceConfig());
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -8294,20 +23560,36 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Topology)) {
+      if (!(obj instanceof context.ContextOuterClass.Service)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Topology other = (context.ContextOuterClass.Topology) obj;
+      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (serviceType_ != other.serviceType_) return false;
+      if (!getServiceEndpointIdsList()
+          .equals(other.getServiceEndpointIdsList())) return false;
+      if (!getServiceConstraintsList()
+          .equals(other.getServiceConstraintsList())) return false;
+      if (hasServiceStatus() != other.hasServiceStatus()) return false;
+      if (hasServiceStatus()) {
+        if (!getServiceStatus()
+            .equals(other.getServiceStatus())) return false;
+      }
+      if (hasServiceConfig() != other.hasServiceConfig()) return false;
+      if (hasServiceConfig()) {
+        if (!getServiceConfig()
+            .equals(other.getServiceConfig())) return false;
+      }
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
       }
-      if (!getDeviceIdsList()
-          .equals(other.getDeviceIdsList())) return false;
-      if (!getLinkIdsList()
-          .equals(other.getLinkIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8319,86 +23601,100 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
       }
-      if (getDeviceIdsCount() > 0) {
-        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + serviceType_;
+      if (getServiceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
       }
-      if (getLinkIdsCount() > 0) {
-        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkIdsList().hashCode();
+      if (getServiceConstraintsCount() > 0) {
+        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConstraintsList().hashCode();
+      }
+      if (hasServiceStatus()) {
+        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceStatus().hashCode();
+      }
+      if (hasServiceConfig()) {
+        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConfig().hashCode();
+      }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseFrom(byte[] data)
+    public static context.ContextOuterClass.Service parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Service parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Service parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Topology parseDelimitedFrom(
+    public static context.ContextOuterClass.Service parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -8411,7 +23707,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Topology prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -8427,26 +23723,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Topology}
+     * Protobuf type {@code context.Service}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Topology)
-        context.ContextOuterClass.TopologyOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Service)
+        context.ContextOuterClass.ServiceOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Topology.newBuilder()
+      // Construct using context.ContextOuterClass.Service.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -8459,30 +23755,50 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDeviceIdsFieldBuilder();
-          getLinkIdsFieldBuilder();
+          getServiceEndpointIdsFieldBuilder();
+          getServiceConstraintsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
+        serviceType_ = 0;
+
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          deviceIdsBuilder_.clear();
+          serviceEndpointIdsBuilder_.clear();
         }
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
         } else {
-          linkIdsBuilder_.clear();
+          serviceConstraintsBuilder_.clear();
+        }
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
         return this;
       }
@@ -8490,17 +23806,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Topology getDefaultInstanceForType() {
-        return context.ContextOuterClass.Topology.getDefaultInstance();
+      public context.ContextOuterClass.Service getDefaultInstanceForType() {
+        return context.ContextOuterClass.Service.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Topology build() {
-        context.ContextOuterClass.Topology result = buildPartial();
+      public context.ContextOuterClass.Service build() {
+        context.ContextOuterClass.Service result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -8508,31 +23824,47 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Topology buildPartial() {
-        context.ContextOuterClass.Topology result = new context.ContextOuterClass.Topology(this);
+      public context.ContextOuterClass.Service buildPartial() {
+        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
         int from_bitField0_ = bitField0_;
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
         } else {
-          result.topologyId_ = topologyIdBuilder_.build();
+          result.serviceId_ = serviceIdBuilder_.build();
         }
-        if (deviceIdsBuilder_ == null) {
+        result.serviceType_ = serviceType_;
+        if (serviceEndpointIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.deviceIds_ = deviceIds_;
+          result.serviceEndpointIds_ = serviceEndpointIds_;
         } else {
-          result.deviceIds_ = deviceIdsBuilder_.build();
+          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
         }
-        if (linkIdsBuilder_ == null) {
+        if (serviceConstraintsBuilder_ == null) {
           if (((bitField0_ & 0x00000002) != 0)) {
-            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
             bitField0_ = (bitField0_ & ~0x00000002);
           }
-          result.linkIds_ = linkIds_;
+          result.serviceConstraints_ = serviceConstraints_;
         } else {
-          result.linkIds_ = linkIdsBuilder_.build();
+          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
+        }
+        if (serviceStatusBuilder_ == null) {
+          result.serviceStatus_ = serviceStatus_;
+        } else {
+          result.serviceStatus_ = serviceStatusBuilder_.build();
+        }
+        if (serviceConfigBuilder_ == null) {
+          result.serviceConfig_ = serviceConfig_;
+        } else {
+          result.serviceConfig_ = serviceConfigBuilder_.build();
+        }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
         }
         onBuilt();
         return result;
@@ -8572,71 +23904,83 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Topology) {
-          return mergeFrom((context.ContextOuterClass.Topology)other);
+        if (other instanceof context.ContextOuterClass.Service) {
+          return mergeFrom((context.ContextOuterClass.Service)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Topology other) {
-        if (other == context.ContextOuterClass.Topology.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.Service other) {
+        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
-        if (deviceIdsBuilder_ == null) {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIds_.isEmpty()) {
-              deviceIds_ = other.deviceIds_;
+        if (other.serviceType_ != 0) {
+          setServiceTypeValue(other.getServiceTypeValue());
+        }
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIds_.isEmpty()) {
+              serviceEndpointIds_ = other.serviceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureDeviceIdsIsMutable();
-              deviceIds_.addAll(other.deviceIds_);
+              ensureServiceEndpointIdsIsMutable();
+              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIdsBuilder_.isEmpty()) {
-              deviceIdsBuilder_.dispose();
-              deviceIdsBuilder_ = null;
-              deviceIds_ = other.deviceIds_;
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIdsBuilder_.isEmpty()) {
+              serviceEndpointIdsBuilder_.dispose();
+              serviceEndpointIdsBuilder_ = null;
+              serviceEndpointIds_ = other.serviceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              deviceIdsBuilder_ = 
+              serviceEndpointIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceIdsFieldBuilder() : null;
+                   getServiceEndpointIdsFieldBuilder() : null;
             } else {
-              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
             }
           }
         }
-        if (linkIdsBuilder_ == null) {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIds_.isEmpty()) {
-              linkIds_ = other.linkIds_;
+        if (serviceConstraintsBuilder_ == null) {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraints_.isEmpty()) {
+              serviceConstraints_ = other.serviceConstraints_;
               bitField0_ = (bitField0_ & ~0x00000002);
             } else {
-              ensureLinkIdsIsMutable();
-              linkIds_.addAll(other.linkIds_);
+              ensureServiceConstraintsIsMutable();
+              serviceConstraints_.addAll(other.serviceConstraints_);
             }
             onChanged();
           }
         } else {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIdsBuilder_.isEmpty()) {
-              linkIdsBuilder_.dispose();
-              linkIdsBuilder_ = null;
-              linkIds_ = other.linkIds_;
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraintsBuilder_.isEmpty()) {
+              serviceConstraintsBuilder_.dispose();
+              serviceConstraintsBuilder_ = null;
+              serviceConstraints_ = other.serviceConstraints_;
               bitField0_ = (bitField0_ & ~0x00000002);
-              linkIdsBuilder_ = 
+              serviceConstraintsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkIdsFieldBuilder() : null;
+                   getServiceConstraintsFieldBuilder() : null;
             } else {
-              linkIdsBuilder_.addAllMessages(other.linkIds_);
+              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
             }
           }
         }
+        if (other.hasServiceStatus()) {
+          mergeServiceStatus(other.getServiceStatus());
+        }
+        if (other.hasServiceConfig()) {
+          mergeServiceConfig(other.getServiceConfig());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -8652,11 +23996,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Topology parsedMessage = null;
+        context.ContextOuterClass.Service parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Topology) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8667,603 +24011,1014 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private context.ContextOuterClass.TopologyId topologyId_;
+      private context.ContextOuterClass.ServiceId serviceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return Whether the serviceId field is set.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>.context.ServiceId service_id = 1;</code>
+       * @return The serviceId.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          return topologyIdBuilder_.getMessage();
+          return serviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.ServiceId service_id = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyId_ = value;
+          serviceId_ = value;
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          serviceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.ServiceId service_id = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.ServiceId service_id = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
           } else {
-            topologyId_ = value;
+            serviceId_ = value;
           }
           onChanged();
         } else {
-          topologyIdBuilder_.mergeFrom(value);
+          serviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.ServiceId service_id = 1;</code>
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.ServiceId service_id = 1;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
         onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.ServiceId service_id = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private int serviceType_ = 0;
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return The enum numeric value on the wire for serviceType.
+       */
+      @java.lang.Override public int getServiceTypeValue() {
+        return serviceType_;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @param value The enum numeric value on the wire for serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceTypeValue(int value) {
+        
+        serviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return The serviceType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @param value The serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceType() {
+        
+        serviceType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        } else {
+          return serviceEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public int getServiceEndpointIdsCount() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.size();
+        } else {
+          return serviceEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);
+        } else {
+          return serviceEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(value);
         }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder addAllServiceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceEndpointIds_);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder clearServiceEndpointIds() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder removeServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+          int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);  } else {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getServiceEndpointIdsOrBuilderList() {
+        if (serviceEndpointIdsBuilder_ != null) {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getServiceEndpointIdsBuilderList() {
+        return getServiceEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getServiceEndpointIdsFieldBuilder() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  serviceEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          topologyId_ = null;
+          serviceEndpointIds_ = null;
         }
-        return topologyIdBuilder_;
+        return serviceEndpointIdsBuilder_;
       }
 
-      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
         java.util.Collections.emptyList();
-      private void ensureDeviceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-          bitField0_ |= 0x00000001;
+      private void ensureServiceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
+          bitField0_ |= 0x00000002;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
 
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-        if (deviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+        if (serviceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
         } else {
-          return deviceIdsBuilder_.getMessageList();
+          return serviceConstraintsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public int getDeviceIdsCount() {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.size();
+      public int getServiceConstraintsCount() {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.size();
         } else {
-          return deviceIdsBuilder_.getCount();
+          return serviceConstraintsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);
+      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);
         } else {
-          return deviceIdsBuilder_.getMessage(index);
+          return serviceConstraintsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, value);
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, value);
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, value);
+          serviceConstraintsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, builderForValue.build());
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(value);
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(value);
+          serviceConstraintsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, value);
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, value);
+          serviceConstraintsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder addDeviceIds(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(builderForValue.build());
+      public Builder addServiceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(builderForValue.build());
+          serviceConstraintsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, builderForValue.build());
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder addAllDeviceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
+      public Builder addAllServiceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceIds_);
+              values, serviceConstraints_);
           onChanged();
         } else {
-          deviceIdsBuilder_.addAllMessages(values);
+          serviceConstraintsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder clearDeviceIds() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder clearServiceConstraints() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
         } else {
-          deviceIdsBuilder_.clear();
+          serviceConstraintsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder removeDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.remove(index);
+      public Builder removeServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.remove(index);
           onChanged();
         } else {
-          deviceIdsBuilder_.remove(index);
+          serviceConstraintsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
           int index) {
-        return getDeviceIdsFieldBuilder().getBuilder(index);
+        return getServiceConstraintsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
           int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);  } else {
-          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);  } else {
+          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-           getDeviceIdsOrBuilderList() {
-        if (deviceIdsBuilder_ != null) {
-          return deviceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getServiceConstraintsOrBuilderList() {
+        if (serviceConstraintsBuilder_ != null) {
+          return serviceConstraintsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
           int index) {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
-           getDeviceIdsBuilderList() {
-        return getDeviceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getServiceConstraintsBuilderList() {
+        return getServiceConstraintsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdsFieldBuilder() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  deviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getServiceConstraintsFieldBuilder() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  serviceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
                   isClean());
-          deviceIds_ = null;
+          serviceConstraints_ = null;
         }
-        return deviceIdsBuilder_;
+        return serviceConstraintsBuilder_;
       }
 
-      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
-        java.util.Collections.emptyList();
-      private void ensureLinkIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
-          bitField0_ |= 0x00000002;
-         }
+      private context.ContextOuterClass.ServiceStatus serviceStatus_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       * @return Whether the serviceStatus field is set.
+       */
+      public boolean hasServiceStatus() {
+        return serviceStatusBuilder_ != null || serviceStatus_ != null;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
-
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       * @return The serviceStatus.
        */
-      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-        if (linkIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkIds_);
+      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
         } else {
-          return linkIdsBuilder_.getMessageList();
+          return serviceStatusBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public int getLinkIdsCount() {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.size();
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceStatus_ = value;
+          onChanged();
         } else {
-          return linkIdsBuilder_.getCount();
+          serviceStatusBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public context.ContextOuterClass.LinkId getLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);
+      public Builder setServiceStatus(
+          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = builderForValue.build();
+          onChanged();
         } else {
-          return linkIdsBuilder_.getMessage(index);
+          serviceStatusBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (serviceStatus_ != null) {
+            serviceStatus_ =
+              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            serviceStatus_ = value;
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, value);
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, value);
+          serviceStatusBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, builderForValue.build());
+      public Builder clearServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, builderForValue.build());
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
+        
+        onChanged();
+        return getServiceStatusFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+        if (serviceStatusBuilder_ != null) {
+          return serviceStatusBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceStatus_ == null ?
+              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+        }
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
+          getServiceStatusFieldBuilder() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
+                  getServiceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          serviceStatus_ = null;
+        }
+        return serviceStatusBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceConfig serviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return Whether the serviceConfig field is set.
+       */
+      public boolean hasServiceConfig() {
+        return serviceConfigBuilder_ != null || serviceConfig_ != null;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return The serviceConfig.
+       */
+      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        } else {
+          return serviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(value);
+          serviceConfig_ = value;
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(value);
+          serviceConfigBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder setServiceConfig(
+          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (serviceConfig_ != null) {
+            serviceConfig_ =
+              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            serviceConfig_ = value;
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, value);
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, value);
+          serviceConfigBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder addLinkIds(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(builderForValue.build());
+      public Builder clearServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(builderForValue.build());
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
+        
+        onChanged();
+        return getServiceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+        if (serviceConfigBuilder_ != null) {
+          return serviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceConfig_ == null ?
+              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
+          getServiceConfigFieldBuilder() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
+                  getServiceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          serviceConfig_ = null;
+        }
+        return serviceConfigBuilder_;
+      }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 7;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 7;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, builderForValue.build());
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, builderForValue.build());
+          timestampBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public Builder addAllLinkIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkIds_);
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdsBuilder_.addAllMessages(values);
+          timestampBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public Builder clearLinkIds() {
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
           onChanged();
         } else {
-          linkIdsBuilder_.clear();
+          timestampBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public Builder removeLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.remove(index);
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
           onChanged();
         } else {
-          linkIdsBuilder_.remove(index);
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-          int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);  } else {
-          return linkIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-           getLinkIdsOrBuilderList() {
-        if (linkIdsBuilder_ != null) {
-          return linkIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(linkIds_);
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
-        return getLinkIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.LinkId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.LinkId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
-           getLinkIdsBuilderList() {
-        return getLinkIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdsFieldBuilder() {
-        if (linkIdsBuilder_ == null) {
-          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  linkIds_,
-                  ((bitField0_ & 0x00000002) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
                   getParentForChildren(),
                   isClean());
-          linkIds_ = null;
+          timestamp_ = null;
         }
-        return linkIdsBuilder_;
+        return timestampBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -9278,95 +25033,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Topology)
+      // @@protoc_insertion_point(builder_scope:context.Service)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Topology)
-    private static final context.ContextOuterClass.Topology DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Service)
+    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Topology();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
     }
 
-    public static context.ContextOuterClass.Topology getDefaultInstance() {
+    public static context.ContextOuterClass.Service getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Topology>
-        PARSER = new com.google.protobuf.AbstractParser<Topology>() {
+    private static final com.google.protobuf.Parser<Service>
+        PARSER = new com.google.protobuf.AbstractParser<Service>() {
       @java.lang.Override
-      public Topology parsePartialFrom(
+      public Service parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Topology(input, extensionRegistry);
+        return new Service(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Topology> parser() {
+    public static com.google.protobuf.Parser<Service> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Topology> getParserForType() {
+    public com.google.protobuf.Parser<Service> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+    public context.ContextOuterClass.Service getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+  public interface ServiceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.TopologyId> 
-        getTopologyIdsList();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
-     */
-    context.ContextOuterClass.TopologyId getTopologyIds(int index);
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
-     */
-    int getTopologyIdsCount();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
      */
-    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList();
+    int getServiceStatusValue();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
   }
   /**
-   * Protobuf type {@code context.TopologyIdList}
+   * Protobuf type {@code context.ServiceStatus}
    */
-  public static final class TopologyIdList extends
+  public static final class ServiceStatus extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
-      TopologyIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
+      ServiceStatusOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyIdList.newBuilder() to construct.
-    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceStatus.newBuilder() to construct.
+    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyIdList() {
-      topologyIds_ = java.util.Collections.emptyList();
+    private ServiceStatus() {
+      serviceStatus_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyIdList();
+      return new ServiceStatus();
     }
 
     @java.lang.Override
@@ -9374,7 +25116,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyIdList(
+    private ServiceStatus(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -9382,7 +25124,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -9393,13 +25134,10 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              topologyIds_.add(
-                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+            case 8: {
+              int rawValue = input.readEnum();
+
+              serviceStatus_ = rawValue;
               break;
             }
             default: {
@@ -9417,64 +25155,40 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
     }
 
-    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-      return topologyIds_;
-    }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList() {
-      return topologyIds_;
-    }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
-     */
-    @java.lang.Override
-    public int getTopologyIdsCount() {
-      return topologyIds_.size();
-    }
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
+    private int serviceStatus_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-      return topologyIds_.get(index);
+    @java.lang.Override public int getServiceStatusValue() {
+      return serviceStatus_;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-        int index) {
-      return topologyIds_.get(index);
+    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -9491,8 +25205,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        output.writeMessage(1, topologyIds_.get(i));
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, serviceStatus_);
       }
       unknownFields.writeTo(output);
     }
@@ -9503,9 +25217,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < topologyIds_.size(); i++) {
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, topologyIds_.get(i));
+          .computeEnumSize(1, serviceStatus_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -9517,13 +25231,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
+      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
 
-      if (!getTopologyIdsList()
-          .equals(other.getTopologyIdsList())) return false;
+      if (serviceStatus_ != other.serviceStatus_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -9535,78 +25248,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getTopologyIdsCount() > 0) {
-        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyIdsList().hashCode();
-      }
+      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + serviceStatus_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceStatus parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -9619,7 +25330,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -9635,26 +25346,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyIdList}
+     * Protobuf type {@code context.ServiceStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
-        context.ContextOuterClass.TopologyIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceStatus)
+        context.ContextOuterClass.ServiceStatusOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -9667,35 +25378,30 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologyIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          topologyIdsBuilder_.clear();
-        }
+        serviceStatus_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
+      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList build() {
-        context.ContextOuterClass.TopologyIdList result = buildPartial();
+      public context.ContextOuterClass.ServiceStatus build() {
+        context.ContextOuterClass.ServiceStatus result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -9703,18 +25409,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList buildPartial() {
-        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (topologyIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.topologyIds_ = topologyIds_;
-        } else {
-          result.topologyIds_ = topologyIdsBuilder_.build();
-        }
+      public context.ContextOuterClass.ServiceStatus buildPartial() {
+        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
+        result.serviceStatus_ = serviceStatus_;
         onBuilt();
         return result;
       }
@@ -9741,322 +25438,112 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyIdList) {
-          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
-        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
-        if (topologyIdsBuilder_ == null) {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIds_.isEmpty()) {
-              topologyIds_ = other.topologyIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureTopologyIdsIsMutable();
-              topologyIds_.addAll(other.topologyIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIdsBuilder_.isEmpty()) {
-              topologyIdsBuilder_.dispose();
-              topologyIdsBuilder_ = null;
-              topologyIds_ = other.topologyIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              topologyIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologyIdsFieldBuilder() : null;
-            } else {
-              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.TopologyIdList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
-        java.util.Collections.emptyList();
-      private void ensureTopologyIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
-
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-        if (topologyIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologyIds_);
-        } else {
-          return topologyIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public int getTopologyIdsCount() {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.size();
-        } else {
-          return topologyIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);
-        } else {
-          return topologyIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, value);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          topologyIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(value);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, value);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder addTopologyIds(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          topologyIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, builderForValue.build());
-          onChanged();
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceStatus) {
+          return mergeFrom((context.ContextOuterClass.ServiceStatus)other);
         } else {
-          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder addAllTopologyIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologyIds_);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.addAllMessages(values);
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceStatus other) {
+        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
+        if (other.serviceStatus_ != 0) {
+          setServiceStatusValue(other.getServiceStatusValue());
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder clearTopologyIds() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.clear();
-        }
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public Builder removeTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.remove(index);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.remove(index);
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceStatus parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
         return this;
       }
+
+      private int serviceStatus_ = 0;
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The enum numeric value on the wire for serviceStatus.
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-          int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);  } else {
-          return topologyIdsBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override public int getServiceStatusValue() {
+        return serviceStatus_;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The enum numeric value on the wire for serviceStatus to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-           getTopologyIdsOrBuilderList() {
-        if (topologyIdsBuilder_ != null) {
-          return topologyIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(topologyIds_);
-        }
+      public Builder setServiceStatusValue(int value) {
+        
+        serviceStatus_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The serviceStatus.
        */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The serviceStatus to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceStatus_ = value.getNumber();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
-           getTopologyIdsBuilderList() {
-        return getTopologyIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdsFieldBuilder() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  topologyIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          topologyIds_ = null;
-        }
-        return topologyIdsBuilder_;
+      public Builder clearServiceStatus() {
+        
+        serviceStatus_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -10071,95 +25558,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyIdList)
+      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
-    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
+    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
     }
 
-    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyIdList>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
+    private static final com.google.protobuf.Parser<ServiceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
       @java.lang.Override
-      public TopologyIdList parsePartialFrom(
+      public ServiceStatus parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyIdList(input, extensionRegistry);
+        return new ServiceStatus(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyIdList> parser() {
+    public static com.google.protobuf.Parser<ServiceStatus> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
+    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyList)
+  public interface ServiceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Topology> 
-        getTopologiesList();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.Topology getTopologies(int index);
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    int getTopologiesCount();
+    int getConfigRulesCount();
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-        getTopologiesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.TopologyList}
+   * Protobuf type {@code context.ServiceConfig}
    */
-  public static final class TopologyList extends
+  public static final class ServiceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyList)
-      TopologyListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
+      ServiceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyList.newBuilder() to construct.
-    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceConfig.newBuilder() to construct.
+    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyList() {
-      topologies_ = java.util.Collections.emptyList();
+    private ServiceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyList();
+      return new ServiceConfig();
     }
 
     @java.lang.Override
@@ -10167,7 +25654,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyList(
+    private ServiceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10188,11 +25675,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              topologies_.add(
-                  input.readMessage(context.ContextOuterClass.Topology.parser(), extensionRegistry));
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -10211,7 +25698,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologies_ = java.util.Collections.unmodifiableList(topologies_);
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -10219,55 +25706,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
     }
 
-    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Topology> topologies_;
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
-      return topologies_;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-        getTopologiesOrBuilderList() {
-      return topologies_;
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public int getTopologiesCount() {
-      return topologies_.size();
+    public int getConfigRulesCount() {
+      return configRules_.size();
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Topology getTopologies(int index) {
-      return topologies_.get(index);
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
     }
     /**
-     * <code>repeated .context.Topology topologies = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index) {
-      return topologies_.get(index);
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -10284,8 +25771,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < topologies_.size(); i++) {
-        output.writeMessage(1, topologies_.get(i));
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -10296,9 +25783,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < topologies_.size(); i++) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, topologies_.get(i));
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -10310,13 +25797,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyList)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
+      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
 
-      if (!getTopologiesList()
-          .equals(other.getTopologiesList())) return false;
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10328,78 +25815,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getTopologiesCount() > 0) {
-        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologiesList().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyList parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyList parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -10412,7 +25899,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -10428,26 +25915,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyList}
+     * Protobuf type {@code context.ServiceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyList)
-        context.ContextOuterClass.TopologyListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceConfig)
+        context.ContextOuterClass.ServiceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -10460,17 +25947,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologiesFieldBuilder();
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologiesBuilder_ == null) {
-          topologies_ = java.util.Collections.emptyList();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          topologiesBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -10478,17 +25965,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyList.getDefaultInstance();
+      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyList build() {
-        context.ContextOuterClass.TopologyList result = buildPartial();
+      public context.ContextOuterClass.ServiceConfig build() {
+        context.ContextOuterClass.ServiceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -10496,17 +25983,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyList buildPartial() {
-        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
+      public context.ContextOuterClass.ServiceConfig buildPartial() {
+        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
         int from_bitField0_ = bitField0_;
-        if (topologiesBuilder_ == null) {
+        if (configRulesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            topologies_ = java.util.Collections.unmodifiableList(topologies_);
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.topologies_ = topologies_;
+          result.configRules_ = configRules_;
         } else {
-          result.topologies_ = topologiesBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -10546,39 +26033,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyList) {
-          return mergeFrom((context.ContextOuterClass.TopologyList)other);
+        if (other instanceof context.ContextOuterClass.ServiceConfig) {
+          return mergeFrom((context.ContextOuterClass.ServiceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
-        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
-        if (topologiesBuilder_ == null) {
-          if (!other.topologies_.isEmpty()) {
-            if (topologies_.isEmpty()) {
-              topologies_ = other.topologies_;
+      public Builder mergeFrom(context.ContextOuterClass.ServiceConfig other) {
+        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureTopologiesIsMutable();
-              topologies_.addAll(other.topologies_);
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
             }
             onChanged();
           }
         } else {
-          if (!other.topologies_.isEmpty()) {
-            if (topologiesBuilder_.isEmpty()) {
-              topologiesBuilder_.dispose();
-              topologiesBuilder_ = null;
-              topologies_ = other.topologies_;
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              topologiesBuilder_ = 
+              configRulesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologiesFieldBuilder() : null;
+                   getConfigRulesFieldBuilder() : null;
             } else {
-              topologiesBuilder_.addAllMessages(other.topologies_);
+              configRulesBuilder_.addAllMessages(other.configRules_);
             }
           }
         }
@@ -10597,11 +26084,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyList parsedMessage = null;
+        context.ContextOuterClass.ServiceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -10612,244 +26099,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
         java.util.Collections.emptyList();
-      private void ensureTopologiesIsMutable() {
+      private void ensureConfigRulesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
-        if (topologiesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologies_);
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
         } else {
-          return topologiesBuilder_.getMessageList();
+          return configRulesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public int getTopologiesCount() {
-        if (topologiesBuilder_ == null) {
-          return topologies_.size();
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return topologiesBuilder_.getCount();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Topology getTopologies(int index) {
-        if (topologiesBuilder_ == null) {
-          return topologies_.get(index);
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
         } else {
-          return topologiesBuilder_.getMessage(index);
+          return configRulesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setTopologies(
-          int index, context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.set(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          topologiesBuilder_.setMessage(index, value);
+          configRulesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setTopologies(
-          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.set(index, builderForValue.build());
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          topologiesBuilder_.setMessage(index, builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addTopologies(context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.add(value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(value);
+          configRulesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addTopologies(
-          int index, context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.add(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(index, value);
+          configRulesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addTopologies(
-          context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.add(builderForValue.build());
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(builderForValue.build());
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addTopologies(
-          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.add(index, builderForValue.build());
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(index, builderForValue.build());
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addAllTopologies(
-          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologies_);
+              values, configRules_);
           onChanged();
         } else {
-          topologiesBuilder_.addAllMessages(values);
+          configRulesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearTopologies() {
-        if (topologiesBuilder_ == null) {
-          topologies_ = java.util.Collections.emptyList();
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          topologiesBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder removeTopologies(int index) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.remove(index);
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          topologiesBuilder_.remove(index);
+          configRulesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
           int index) {
-        return getTopologiesFieldBuilder().getBuilder(index);
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
           int index) {
-        if (topologiesBuilder_ == null) {
-          return topologies_.get(index);  } else {
-          return topologiesBuilder_.getMessageOrBuilder(index);
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-           getTopologiesOrBuilderList() {
-        if (topologiesBuilder_ != null) {
-          return topologiesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(topologies_);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
-        return getTopologiesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Topology.getDefaultInstance());
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
           int index) {
-        return getTopologiesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Topology.getDefaultInstance());
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Topology.Builder> 
-           getTopologiesBuilderList() {
-        return getTopologiesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
-          getTopologiesFieldBuilder() {
-        if (topologiesBuilder_ == null) {
-          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
-                  topologies_,
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          topologies_ = null;
+          configRules_ = null;
         }
-        return topologiesBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -10864,100 +26351,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyList)
+      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyList)
-    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
+    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
     }
 
-    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyList>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
+    private static final com.google.protobuf.Parser<ServiceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
       @java.lang.Override
-      public TopologyList parsePartialFrom(
+      public ServiceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyList(input, extensionRegistry);
+        return new ServiceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyList> parser() {
+    public static com.google.protobuf.Parser<ServiceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyList> getParserForType() {
+    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
+  public interface ServiceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return Whether the topologyId field is set.
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    boolean hasTopologyId();
+    int getServiceIdsCount();
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return The topologyId.
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.TopologyEvent}
+   * Protobuf type {@code context.ServiceIdList}
    */
-  public static final class TopologyEvent extends
+  public static final class ServiceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
-      TopologyEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
+      ServiceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyEvent.newBuilder() to construct.
-    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceIdList.newBuilder() to construct.
+    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyEvent() {
+    private ServiceIdList() {
+      serviceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyEvent();
+      return new ServiceIdList();
     }
 
     @java.lang.Override
@@ -10965,7 +26447,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyEvent(
+    private ServiceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10973,6 +26455,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -10984,29 +26467,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11024,73 +26490,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
+    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
     }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return Whether the topologyId field is set.
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
     }
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return The topologyId.
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
     }
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11107,11 +26564,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (topologyId_ != null) {
-        output.writeMessage(2, getTopologyId());
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(1, serviceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11122,13 +26576,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (topologyId_ != null) {
+      for (int i = 0; i < serviceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTopologyId());
+          .computeMessageSize(1, serviceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11140,21 +26590,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
+      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11166,82 +26608,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -11254,7 +26692,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -11270,26 +26708,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyEvent}
+     * Protobuf type {@code context.ServiceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
-        context.ContextOuterClass.TopologyEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceIdList)
+        context.ContextOuterClass.ServiceIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -11302,22 +26740,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          serviceIdsBuilder_.clear();
         }
         return this;
       }
@@ -11325,17 +26758,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
+      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent build() {
-        context.ContextOuterClass.TopologyEvent result = buildPartial();
+      public context.ContextOuterClass.ServiceIdList build() {
+        context.ContextOuterClass.ServiceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -11343,17 +26776,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent buildPartial() {
-        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
+      public context.ContextOuterClass.ServiceIdList buildPartial() {
+        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.serviceIds_ = serviceIds_;
         } else {
-          result.topologyId_ = topologyIdBuilder_.build();
+          result.serviceIds_ = serviceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -11393,21 +26826,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyEvent) {
-          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
+        if (other instanceof context.ContextOuterClass.ServiceIdList) {
+          return mergeFrom((context.ContextOuterClass.ServiceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
-        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.ServiceIdList other) {
+        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -11424,11 +26877,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyEvent parsedMessage = null;
+        context.ContextOuterClass.ServiceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -11437,243 +26890,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        } else {
+          return serviceIdsBuilder_.getMessageList();
+        }
+      }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
         } else {
-          return eventBuilder_.getMessage();
+          return serviceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          serviceIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          serviceIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          serviceIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          serviceIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.TopologyId topologyId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
-      /**
-       * <code>.context.TopologyId topology_id = 2;</code>
-       * @return Whether the topologyId field is set.
-       */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
-       * @return The topologyId.
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceIds_);
+          onChanged();
         } else {
-          return topologyIdBuilder_.getMessage();
+          serviceIdsBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          topologyId_ = value;
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          serviceIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          serviceIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
-          } else {
-            topologyId_ = value;
-          }
-          onChanged();
-        } else {
-          topologyIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+          int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(serviceIds_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
-        
-        onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        }
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          topologyId_ = null;
+          serviceIds_ = null;
         }
-        return topologyIdBuilder_;
+        return serviceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -11688,89 +27144,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyEvent)
+      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
-    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
+    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
     }
 
-    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyEvent>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
+    private static final com.google.protobuf.Parser<ServiceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
       @java.lang.Override
-      public TopologyEvent parsePartialFrom(
+      public ServiceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyEvent(input, extensionRegistry);
+        return new ServiceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyEvent> parser() {
+    public static com.google.protobuf.Parser<ServiceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
+    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceId)
+  public interface ServiceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return Whether the deviceUuid field is set.
+     * <code>repeated .context.Service services = 1;</code>
      */
-    boolean hasDeviceUuid();
+    java.util.List<context.ContextOuterClass.Service> 
+        getServicesList();
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return The deviceUuid.
+     * <code>repeated .context.Service services = 1;</code>
      */
-    context.ContextOuterClass.Uuid getDeviceUuid();
+    context.ContextOuterClass.Service getServices(int index);
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
+    int getServicesCount();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Device --------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.DeviceId}
+   * Protobuf type {@code context.ServiceList}
    */
-  public static final class DeviceId extends
+  public static final class ServiceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceId)
-      DeviceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceList)
+      ServiceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceId.newBuilder() to construct.
-    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceList.newBuilder() to construct.
+    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceId() {
+    private ServiceList() {
+      services_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceId();
+      return new ServiceList();
     }
 
     @java.lang.Override
@@ -11778,7 +27240,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceId(
+    private ServiceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11786,6 +27248,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -11797,16 +27260,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (deviceUuid_ != null) {
-                subBuilder = deviceUuid_.toBuilder();
-              }
-              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceUuid_);
-                deviceUuid_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              services_.add(
+                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11824,47 +27283,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          services_ = java.util.Collections.unmodifiableList(services_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
     }
 
-    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid deviceUuid_;
+    public static final int SERVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Service> services_;
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return Whether the deviceUuid field is set.
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public boolean hasDeviceUuid() {
-      return deviceUuid_ != null;
+    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+      return services_;
     }
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return The deviceUuid.
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getDeviceUuid() {
-      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList() {
+      return services_;
     }
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-      return getDeviceUuid();
+    public int getServicesCount() {
+      return services_.size();
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Service getServices(int index) {
+      return services_.get(index);
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index) {
+      return services_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11881,8 +27357,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (deviceUuid_ != null) {
-        output.writeMessage(1, getDeviceUuid());
+      for (int i = 0; i < services_.size(); i++) {
+        output.writeMessage(1, services_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11893,9 +27369,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (deviceUuid_ != null) {
+      for (int i = 0; i < services_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDeviceUuid());
+          .computeMessageSize(1, services_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11907,16 +27383,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceId)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
+      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
 
-      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
-      if (hasDeviceUuid()) {
-        if (!getDeviceUuid()
-            .equals(other.getDeviceUuid())) return false;
-      }
+      if (!getServicesList()
+          .equals(other.getServicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11928,78 +27401,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDeviceUuid()) {
-        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceUuid().hashCode();
+      if (getServicesCount() > 0) {
+        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getServicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12012,7 +27485,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12028,30 +27501,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Device --------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.DeviceId}
+     * Protobuf type {@code context.ServiceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceId)
-        context.ContextOuterClass.DeviceIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceList)
+        context.ContextOuterClass.ServiceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceId.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12064,16 +27533,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getServicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = null;
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          deviceUuid_ = null;
-          deviceUuidBuilder_ = null;
+          servicesBuilder_.clear();
         }
         return this;
       }
@@ -12081,17 +27551,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceId.getDefaultInstance();
+      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId build() {
-        context.ContextOuterClass.DeviceId result = buildPartial();
+      public context.ContextOuterClass.ServiceList build() {
+        context.ContextOuterClass.ServiceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -12099,12 +27569,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId buildPartial() {
-        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
-        if (deviceUuidBuilder_ == null) {
-          result.deviceUuid_ = deviceUuid_;
+      public context.ContextOuterClass.ServiceList buildPartial() {
+        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
+        int from_bitField0_ = bitField0_;
+        if (servicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            services_ = java.util.Collections.unmodifiableList(services_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.services_ = services_;
         } else {
-          result.deviceUuid_ = deviceUuidBuilder_.build();
+          result.services_ = servicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -12144,18 +27619,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceId) {
-          return mergeFrom((context.ContextOuterClass.DeviceId)other);
+        if (other instanceof context.ContextOuterClass.ServiceList) {
+          return mergeFrom((context.ContextOuterClass.ServiceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
-        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
-        if (other.hasDeviceUuid()) {
-          mergeDeviceUuid(other.getDeviceUuid());
+      public Builder mergeFrom(context.ContextOuterClass.ServiceList other) {
+        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
+        if (servicesBuilder_ == null) {
+          if (!other.services_.isEmpty()) {
+            if (services_.isEmpty()) {
+              services_ = other.services_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServicesIsMutable();
+              services_.addAll(other.services_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.services_.isEmpty()) {
+            if (servicesBuilder_.isEmpty()) {
+              servicesBuilder_.dispose();
+              servicesBuilder_ = null;
+              services_ = other.services_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              servicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServicesFieldBuilder() : null;
+            } else {
+              servicesBuilder_.addAllMessages(other.services_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -12172,11 +27670,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceId parsedMessage = null;
+        context.ContextOuterClass.ServiceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12185,124 +27683,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Service> services_ =
+        java.util.Collections.emptyList();
+      private void ensureServicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
 
-      private context.ContextOuterClass.Uuid deviceUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
-       * @return Whether the deviceUuid field is set.
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public boolean hasDeviceUuid() {
-        return deviceUuidBuilder_ != null || deviceUuid_ != null;
+      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+        if (servicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(services_);
+        } else {
+          return servicesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
-       * @return The deviceUuid.
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getDeviceUuid() {
-        if (deviceUuidBuilder_ == null) {
-          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+      public int getServicesCount() {
+        if (servicesBuilder_ == null) {
+          return services_.size();
         } else {
-          return deviceUuidBuilder_.getMessage();
+          return servicesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
-        if (deviceUuidBuilder_ == null) {
+      public context.ContextOuterClass.Service getServices(int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);
+        } else {
+          return servicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceUuid_ = value;
+          ensureServicesIsMutable();
+          services_.set(index, value);
           onChanged();
         } else {
-          deviceUuidBuilder_.setMessage(value);
+          servicesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setDeviceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = builderForValue.build();
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceUuidBuilder_.setMessage(builderForValue.build());
+          servicesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
-        if (deviceUuidBuilder_ == null) {
-          if (deviceUuid_ != null) {
-            deviceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
-          } else {
-            deviceUuid_ = value;
+      public Builder addServices(context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureServicesIsMutable();
+          services_.add(value);
           onChanged();
         } else {
-          deviceUuidBuilder_.mergeFrom(value);
+          servicesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder clearDeviceUuid() {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = null;
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServicesIsMutable();
+          services_.add(index, value);
           onChanged();
         } else {
-          deviceUuid_ = null;
-          deviceUuidBuilder_ = null;
+          servicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
-        
-        onChanged();
-        return getDeviceUuidFieldBuilder().getBuilder();
+      public Builder addServices(
+          context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(builderForValue.build());
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-        if (deviceUuidBuilder_ != null) {
-          return deviceUuidBuilder_.getMessageOrBuilder();
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          return deviceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+          servicesBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getDeviceUuidFieldBuilder() {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getDeviceUuid(),
+      public Builder addAllServices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, services_);
+          onChanged();
+        } else {
+          servicesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder clearServices() {
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          servicesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder removeServices(int index) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.remove(index);
+          onChanged();
+        } else {
+          servicesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder getServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+          int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);  } else {
+          return servicesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+           getServicesOrBuilderList() {
+        if (servicesBuilder_ != null) {
+          return servicesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(services_);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
+        return getServicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Service.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder addServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Service.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Service.Builder> 
+           getServicesBuilderList() {
+        return getServicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
+          getServicesFieldBuilder() {
+        if (servicesBuilder_ == null) {
+          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
+                  services_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          deviceUuid_ = null;
+          services_ = null;
         }
-        return deviceUuidBuilder_;
+        return servicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -12317,180 +27937,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceId)
+      // @@protoc_insertion_point(builder_scope:context.ServiceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceId)
-    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceList)
+    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
     }
 
-    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceId>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
+    private static final com.google.protobuf.Parser<ServiceList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
       @java.lang.Override
-      public DeviceId parsePartialFrom(
+      public ServiceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceId(input, extensionRegistry);
+        return new ServiceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceId> parser() {
+    public static com.google.protobuf.Parser<ServiceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+    public com.google.protobuf.Parser<ServiceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Device)
+  public interface ServiceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The deviceType.
-     */
-    java.lang.String getDeviceType();
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The bytes for deviceType.
-     */
-    com.google.protobuf.ByteString
-        getDeviceTypeBytes();
-
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
-     */
-    boolean hasDeviceConfig();
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
-     */
-    context.ContextOuterClass.DeviceConfig getDeviceConfig();
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     */
-    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
-
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The enum numeric value on the wire for deviceOperationalStatus.
-     */
-    int getDeviceOperationalStatusValue();
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The deviceOperationalStatus.
-     */
-    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
-
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the deviceDrivers.
-     */
-    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return The count of deviceDrivers.
-     */
-    int getDeviceDriversCount();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the element to return.
-     * @return The deviceDrivers at the given index.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
+    boolean hasEvent();
     /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    java.util.List<java.lang.Integer>
-    getDeviceDriversValueList();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     * <code>.context.Event event = 1;</code>
      */
-    int getDeviceDriversValue(int index);
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPoint> 
-        getDeviceEndpointsList();
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    int getDeviceEndpointsCount();
+    boolean hasServiceId();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-        getDeviceEndpointsOrBuilderList();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
      */
-    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
-        int index);
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Device}
+   * Protobuf type {@code context.ServiceEvent}
    */
-  public static final class Device extends
+  public static final class ServiceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Device)
-      DeviceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
+      ServiceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Device.newBuilder() to construct.
-    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceEvent.newBuilder() to construct.
+    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Device() {
-      deviceType_ = "";
-      deviceOperationalStatus_ = 0;
-      deviceDrivers_ = java.util.Collections.emptyList();
-      deviceEndpoints_ = java.util.Collections.emptyList();
+    private ServiceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Device();
+      return new ServiceEvent();
     }
 
     @java.lang.Override
@@ -12498,7 +28038,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Device(
+    private ServiceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -12506,7 +28046,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -12518,73 +28057,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              deviceType_ = s;
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
-              if (deviceConfig_ != null) {
-                subBuilder = deviceConfig_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceConfig_);
-                deviceConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 32: {
-              int rawValue = input.readEnum();
-
-              deviceOperationalStatus_ = rawValue;
-              break;
-            }
-            case 40: {
-              int rawValue = input.readEnum();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              deviceDrivers_.add(rawValue);
-              break;
-            }
-            case 42: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                deviceDrivers_.add(rawValue);
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
               }
-              input.popLimit(oldLimit);
+
               break;
             }
-            case 50: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
-                mutable_bitField0_ |= 0x00000002;
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
               }
-              deviceEndpoints_.add(
-                  input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry));
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -12602,234 +28097,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
-    }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return The deviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
-    }
-
-    public static final int DEVICE_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object deviceType_;
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The deviceType.
-     */
-    @java.lang.Override
-    public java.lang.String getDeviceType() {
-      java.lang.Object ref = deviceType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        deviceType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The bytes for deviceType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDeviceTypeBytes() {
-      java.lang.Object ref = deviceType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        deviceType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.DeviceConfig deviceConfig_;
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceConfig() {
-      return deviceConfig_ != null;
-    }
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-    }
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-      return getDeviceConfig();
-    }
-
-    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 4;
-    private int deviceOperationalStatus_;
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The enum numeric value on the wire for deviceOperationalStatus.
-     */
-    @java.lang.Override public int getDeviceOperationalStatusValue() {
-      return deviceOperationalStatus_;
-    }
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The deviceOperationalStatus.
-     */
-    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
-      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
     }
 
-    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 5;
-    private java.util.List<java.lang.Integer> deviceDrivers_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
-              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
-                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the deviceDrivers.
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return The count of deviceDrivers.
-     */
-    @java.lang.Override
-    public int getDeviceDriversCount() {
-      return deviceDrivers_.size();
-    }
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the element to return.
-     * @return The deviceDrivers at the given index.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
-      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getDeviceDriversValueList() {
-      return deviceDrivers_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getDeviceDriversValue(int index) {
-      return deviceDrivers_.get(index);
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
-    private int deviceDriversMemoizedSerializedSize;
 
-    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 6;
-    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
-      return deviceEndpoints_;
-    }
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-        getDeviceEndpointsOrBuilderList() {
-      return deviceEndpoints_;
-    }
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public int getDeviceEndpointsCount() {
-      return deviceEndpoints_.size();
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
-      return deviceEndpoints_.get(index);
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
-        int index) {
-      return deviceEndpoints_.get(index);
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -12846,28 +28180,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (deviceId_ != null) {
-        output.writeMessage(1, getDeviceId());
-      }
-      if (!getDeviceTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceType_);
-      }
-      if (deviceConfig_ != null) {
-        output.writeMessage(3, getDeviceConfig());
-      }
-      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(4, deviceOperationalStatus_);
-      }
-      if (getDeviceDriversList().size() > 0) {
-        output.writeUInt32NoTag(42);
-        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
-      }
-      for (int i = 0; i < deviceDrivers_.size(); i++) {
-        output.writeEnumNoTag(deviceDrivers_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
-      for (int i = 0; i < deviceEndpoints_.size(); i++) {
-        output.writeMessage(6, deviceEndpoints_.get(i));
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
       }
       unknownFields.writeTo(output);
     }
@@ -12878,36 +28195,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDeviceId());
-      }
-      if (!getDeviceTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceType_);
-      }
-      if (deviceConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getDeviceConfig());
-      }
-      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, deviceOperationalStatus_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < deviceDrivers_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(deviceDrivers_.get(i));
-        }
-        size += dataSize;
-        if (!getDeviceDriversList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }deviceDriversMemoizedSerializedSize = dataSize;
+          .computeMessageSize(1, getEvent());
       }
-      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+      if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, deviceEndpoints_.get(i));
+          .computeMessageSize(2, getServiceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -12919,27 +28213,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Device)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
+      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
 
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
-      if (!getDeviceType()
-          .equals(other.getDeviceType())) return false;
-      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
-      if (hasDeviceConfig()) {
-        if (!getDeviceConfig()
-            .equals(other.getDeviceConfig())) return false;
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
       }
-      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
-      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
-      if (!getDeviceEndpointsList()
-          .equals(other.getDeviceEndpointsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12951,94 +28239,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getDeviceType().hashCode();
-      if (hasDeviceConfig()) {
-        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceConfig().hashCode();
-      }
-      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + deviceOperationalStatus_;
-      if (getDeviceDriversCount() > 0) {
-        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
-        hash = (53 * hash) + deviceDrivers_.hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
-      if (getDeviceEndpointsCount() > 0) {
-        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -13051,7 +28327,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Device prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -13067,26 +28343,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Device}
+     * Protobuf type {@code context.ServiceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Device)
-        context.ContextOuterClass.DeviceOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
+        context.ContextOuterClass.ServiceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Device.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -13099,35 +28375,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDeviceEndpointsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        deviceType_ = "";
-
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
-        deviceOperationalStatus_ = 0;
-
-        deviceDrivers_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpoints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
         } else {
-          deviceEndpointsBuilder_.clear();
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
         return this;
       }
@@ -13135,17 +28398,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Device getDefaultInstanceForType() {
-        return context.ContextOuterClass.Device.getDefaultInstance();
+      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Device build() {
-        context.ContextOuterClass.Device result = buildPartial();
+      public context.ContextOuterClass.ServiceEvent build() {
+        context.ContextOuterClass.ServiceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -13153,34 +28416,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Device buildPartial() {
-        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
-        int from_bitField0_ = bitField0_;
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        result.deviceType_ = deviceType_;
-        if (deviceConfigBuilder_ == null) {
-          result.deviceConfig_ = deviceConfig_;
+      public context.ContextOuterClass.ServiceEvent buildPartial() {
+        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.deviceConfig_ = deviceConfigBuilder_.build();
-        }
-        result.deviceOperationalStatus_ = deviceOperationalStatus_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-          bitField0_ = (bitField0_ & ~0x00000001);
+          result.event_ = eventBuilder_.build();
         }
-        result.deviceDrivers_ = deviceDrivers_;
-        if (deviceEndpointsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.deviceEndpoints_ = deviceEndpoints_;
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
         } else {
-          result.deviceEndpoints_ = deviceEndpointsBuilder_.build();
+          result.serviceId_ = serviceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -13220,64 +28466,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Device) {
-          return mergeFrom((context.ContextOuterClass.Device)other);
+        if (other instanceof context.ContextOuterClass.ServiceEvent) {
+          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.Device other) {
-        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (!other.getDeviceType().isEmpty()) {
-          deviceType_ = other.deviceType_;
-          onChanged();
-        }
-        if (other.hasDeviceConfig()) {
-          mergeDeviceConfig(other.getDeviceConfig());
-        }
-        if (other.deviceOperationalStatus_ != 0) {
-          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
-        }
-        if (!other.deviceDrivers_.isEmpty()) {
-          if (deviceDrivers_.isEmpty()) {
-            deviceDrivers_ = other.deviceDrivers_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureDeviceDriversIsMutable();
-            deviceDrivers_.addAll(other.deviceDrivers_);
-          }
-          onChanged();
-        }
-        if (deviceEndpointsBuilder_ == null) {
-          if (!other.deviceEndpoints_.isEmpty()) {
-            if (deviceEndpoints_.isEmpty()) {
-              deviceEndpoints_ = other.deviceEndpoints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureDeviceEndpointsIsMutable();
-              deviceEndpoints_.addAll(other.deviceEndpoints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.deviceEndpoints_.isEmpty()) {
-            if (deviceEndpointsBuilder_.isEmpty()) {
-              deviceEndpointsBuilder_.dispose();
-              deviceEndpointsBuilder_ = null;
-              deviceEndpoints_ = other.deviceEndpoints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              deviceEndpointsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceEndpointsFieldBuilder() : null;
-            } else {
-              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
-            }
-          }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
+        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -13294,11 +28497,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Device parsedMessage = null;
+        context.ContextOuterClass.ServiceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -13307,754 +28510,1075 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.DeviceId deviceId_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
-       * @return Whether the deviceId field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
-       * @return The deviceId.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return deviceIdBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceId_ = value;
+          event_ = value;
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            deviceId_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.context.DeviceId device_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
-          deviceId_ = null;
+          event_ = null;
         }
-        return deviceIdBuilder_;
+        return eventBuilder_;
       }
 
-      private java.lang.Object deviceType_ = "";
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <code>string device_type = 2;</code>
-       * @return The deviceType.
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
        */
-      public java.lang.String getDeviceType() {
-        java.lang.Object ref = deviceType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          deviceType_ = s;
-          return s;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          return (java.lang.String) ref;
+          return serviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string device_type = 2;</code>
-       * @return The bytes for deviceType.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getDeviceTypeBytes() {
-        java.lang.Object ref = deviceType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          deviceType_ = b;
-          return b;
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          serviceIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string device_type = 2;</code>
-       * @param value The deviceType to set.
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder setDeviceType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        deviceType_ = value;
-        onChanged();
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string device_type = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder clearDeviceType() {
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
         
-        deviceType_ = getDefaultInstance().getDeviceType();
         onChanged();
-        return this;
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
+    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
+    }
+
+    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
+      @java.lang.Override
+      public ServiceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SliceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return Whether the sliceUuid field is set.
+     */
+    boolean hasSliceUuid();
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return The sliceUuid.
+     */
+    context.ContextOuterClass.Uuid getSliceUuid();
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Slice ---------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.SliceId}
+   */
+  public static final class SliceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.SliceId)
+      SliceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SliceId.newBuilder() to construct.
+    private SliceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SliceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SliceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SliceId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (sliceUuid_ != null) {
+                subBuilder = sliceUuid_.toBuilder();
+              }
+              sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceUuid_);
+                sliceUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int SLICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid sliceUuid_;
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return Whether the sliceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceUuid() {
+      return sliceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return The sliceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getSliceUuid() {
+      return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+    }
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
+      return getSliceUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
       }
-      /**
-       * <code>string device_type = 2;</code>
-       * @param value The bytes for deviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        deviceType_ = value;
-        onChanged();
-        return this;
+      if (sliceUuid_ != null) {
+        output.writeMessage(2, getSliceUuid());
       }
+      unknownFields.writeTo(output);
+    }
 
-      private context.ContextOuterClass.DeviceConfig deviceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return Whether the deviceConfig field is set.
-       */
-      public boolean hasDeviceConfig() {
-        return deviceConfigBuilder_ != null || deviceConfig_ != null;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return The deviceConfig.
-       */
-      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        } else {
-          return deviceConfigBuilder_.getMessage();
-        }
+      if (sliceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceUuid());
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceConfig_ = value;
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(value);
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
 
-        return this;
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(
-          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+      if (!(obj instanceof context.ContextOuterClass.SliceId)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (deviceConfig_ != null) {
-            deviceConfig_ =
-              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            deviceConfig_ = value;
-          }
-          onChanged();
-        } else {
-          deviceConfigBuilder_.mergeFrom(value);
-        }
+      context.ContextOuterClass.SliceId other = (context.ContextOuterClass.SliceId) obj;
 
-        return this;
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder clearDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
-          onChanged();
-        } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
-        }
+      if (hasSliceUuid() != other.hasSliceUuid()) return false;
+      if (hasSliceUuid()) {
+        if (!getSliceUuid()
+            .equals(other.getSliceUuid())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
 
-        return this;
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
-        
-        onChanged();
-        return getDeviceConfigFieldBuilder().getBuilder();
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-        if (deviceConfigBuilder_ != null) {
-          return deviceConfigBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceConfig_ == null ?
-              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        }
+      if (hasSliceUuid()) {
+        hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceUuid().hashCode();
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
-          getDeviceConfigFieldBuilder() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
-                  getDeviceConfig(),
-                  getParentForChildren(),
-                  isClean());
-          deviceConfig_ = null;
-        }
-        return deviceConfigBuilder_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.SliceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.SliceId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.SliceId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Slice ---------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.SliceId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.SliceId)
+        context.ContextOuterClass.SliceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
       }
 
-      private int deviceOperationalStatus_ = 0;
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return The enum numeric value on the wire for deviceOperationalStatus.
-       */
-      @java.lang.Override public int getDeviceOperationalStatusValue() {
-        return deviceOperationalStatus_;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
       }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceOperationalStatusValue(int value) {
-        
-        deviceOperationalStatus_ = value;
-        onChanged();
-        return this;
+
+      // Construct using context.ContextOuterClass.SliceId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return The deviceOperationalStatus.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
-        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @param value The deviceOperationalStatus to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        
-        deviceOperationalStatus_ = value.getNumber();
-        onChanged();
-        return this;
       }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceOperationalStatus() {
-        
-        deviceOperationalStatus_ = 0;
-        onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = null;
+        } else {
+          sliceUuid_ = null;
+          sliceUuidBuilder_ = null;
+        }
         return this;
       }
 
-      private java.util.List<java.lang.Integer> deviceDrivers_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceDriversIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return A list containing the deviceDrivers.
-       */
-      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return The count of deviceDrivers.
-       */
-      public int getDeviceDriversCount() {
-        return deviceDrivers_.size();
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the element to return.
-       * @return The deviceDrivers at the given index.
-       */
-      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
-        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceId.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index to set the value at.
-       * @param value The deviceDrivers to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceDrivers(
-          int index, context.ContextOuterClass.DeviceDriverEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceId build() {
+        context.ContextOuterClass.SliceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.set(index, value.getNumber());
-        onChanged();
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param value The deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+
+      @java.lang.Override
+      public context.ContextOuterClass.SliceId buildPartial() {
+        context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
         }
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.add(value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param values The deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllDeviceDrivers(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
-        ensureDeviceDriversIsMutable();
-        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
-          deviceDrivers_.add(value.getNumber());
+        if (sliceUuidBuilder_ == null) {
+          result.sliceUuid_ = sliceUuid_;
+        } else {
+          result.sliceUuid_ = sliceUuidBuilder_.build();
         }
-        onChanged();
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceDrivers() {
-        deviceDrivers_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return A list containing the enum numeric values on the wire for deviceDrivers.
-       */
-      public java.util.List<java.lang.Integer>
-      getDeviceDriversValueList() {
-        return java.util.Collections.unmodifiableList(deviceDrivers_);
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of deviceDrivers at the given index.
-       */
-      public int getDeviceDriversValue(int index) {
-        return deviceDrivers_.get(index);
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of deviceDrivers at the given index.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceDriversValue(
-          int index, int value) {
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.set(index, value);
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param value The enum numeric value on the wire for deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addDeviceDriversValue(int value) {
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.add(value);
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param values The enum numeric values on the wire for deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllDeviceDriversValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureDeviceDriversIsMutable();
-        for (int value : values) {
-          deviceDrivers_.add(value);
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.SliceId) {
+          return mergeFrom((context.ContextOuterClass.SliceId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.SliceId other) {
+        if (other == context.ContextOuterClass.SliceId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
         }
+        if (other.hasSliceUuid()) {
+          mergeSliceUuid(other.getSliceUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
 
-      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceEndpointsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
-          bitField0_ |= 0x00000002;
-         }
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
-        if (deviceEndpointsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceEndpoints_);
-        } else {
-          return deviceEndpointsBuilder_.getMessageList();
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.SliceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
+        return this;
       }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
        */
-      public int getDeviceEndpointsCount() {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.size();
-        } else {
-          return deviceEndpointsBuilder_.getCount();
-        }
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
        */
-      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.get(index);
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         } else {
-          return deviceEndpointsBuilder_.getMessage(index);
+          return contextIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.set(index, value);
+          contextId_ = value;
           onChanged();
         } else {
-          deviceEndpointsBuilder_.setMessage(index, value);
+          contextIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.set(index, builderForValue.build());
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
           onChanged();
         } else {
-          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
+          contextIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
           }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(value);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addMessage(value);
+          contextIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(index, value);
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addMessage(index, value);
+          contextId_ = null;
+          contextIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDeviceEndpoints(
-          context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
         } else {
-          deviceEndpointsBuilder_.addMessage(builderForValue.build());
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
         }
-        return this;
+        return contextIdBuilder_;
       }
+
+      private context.ContextOuterClass.Uuid sliceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
+       * @return Whether the sliceUuid field is set.
        */
-      public Builder addAllDeviceEndpoints(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceEndpoints_);
-          onChanged();
+      public boolean hasSliceUuid() {
+        return sliceUuidBuilder_ != null || sliceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid slice_uuid = 2;</code>
+       * @return The sliceUuid.
+       */
+      public context.ContextOuterClass.Uuid getSliceUuid() {
+        if (sliceUuidBuilder_ == null) {
+          return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
         } else {
-          deviceEndpointsBuilder_.addAllMessages(values);
+          return sliceUuidBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public Builder clearDeviceEndpoints() {
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpoints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder setSliceUuid(context.ContextOuterClass.Uuid value) {
+        if (sliceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceUuid_ = value;
           onChanged();
         } else {
-          deviceEndpointsBuilder_.clear();
+          sliceUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public Builder removeDeviceEndpoints(int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.remove(index);
+      public Builder setSliceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = builderForValue.build();
           onChanged();
         } else {
-          deviceEndpointsBuilder_.remove(index);
+          sliceUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
-       */
-      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
-          int index) {
-        return getDeviceEndpointsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
-          int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.get(index);  } else {
-          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
+        if (sliceUuidBuilder_ == null) {
+          if (sliceUuid_ != null) {
+            sliceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            sliceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          sliceUuidBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-           getDeviceEndpointsOrBuilderList() {
-        if (deviceEndpointsBuilder_ != null) {
-          return deviceEndpointsBuilder_.getMessageOrBuilderList();
+      public Builder clearSliceUuid() {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+          sliceUuid_ = null;
+          sliceUuidBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
-        return getDeviceEndpointsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPoint.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
+        
+        onChanged();
+        return getSliceUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
-          int index) {
-        return getDeviceEndpointsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
+        if (sliceUuidBuilder_ != null) {
+          return sliceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+        }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
-           getDeviceEndpointsBuilderList() {
-        return getDeviceEndpointsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
-          getDeviceEndpointsFieldBuilder() {
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
-                  deviceEndpoints_,
-                  ((bitField0_ & 0x00000002) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSliceUuidFieldBuilder() {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSliceUuid(),
                   getParentForChildren(),
                   isClean());
-          deviceEndpoints_ = null;
+          sliceUuid_ = null;
         }
-        return deviceEndpointsBuilder_;
+        return sliceUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -14069,95 +29593,245 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Device)
+      // @@protoc_insertion_point(builder_scope:context.SliceId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Device)
-    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceId)
+    private static final context.ContextOuterClass.SliceId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceId();
     }
 
-    public static context.ContextOuterClass.Device getDefaultInstance() {
+    public static context.ContextOuterClass.SliceId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Device>
-        PARSER = new com.google.protobuf.AbstractParser<Device>() {
+    private static final com.google.protobuf.Parser<SliceId>
+        PARSER = new com.google.protobuf.AbstractParser<SliceId>() {
       @java.lang.Override
-      public Device parsePartialFrom(
+      public SliceId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Device(input, extensionRegistry);
+        return new SliceId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Device> parser() {
+    public static com.google.protobuf.Parser<SliceId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Device> getParserForType() {
+    public com.google.protobuf.Parser<SliceId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Device getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
-  }
+  }
+
+  public interface SliceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Slice)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getSliceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointId getSliceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    int getSliceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getSliceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getSliceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    context.ContextOuterClass.Constraint getSliceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    int getSliceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getSliceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSliceServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSliceServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    int getSliceServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSliceServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceSubsliceIdsList();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    context.ContextOuterClass.SliceId getSliceSubsliceIds(int index);
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    int getSliceSubsliceIdsCount();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceSubsliceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return Whether the sliceStatus field is set.
+     */
+    boolean hasSliceStatus();
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return The sliceStatus.
+     */
+    context.ContextOuterClass.SliceStatus getSliceStatus();
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     */
+    context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
 
-  public interface DeviceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
-      com.google.protobuf.MessageOrBuilder {
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    boolean hasSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    context.ContextOuterClass.SliceConfig getSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder();
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
+     * @return Whether the sliceOwner field is set.
      */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
+    boolean hasSliceOwner();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
+     * @return The sliceOwner.
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    context.ContextOuterClass.SliceOwner getSliceOwner();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
-    int getConfigRulesCount();
+    context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
+     * @return Whether the timestamp field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    boolean hasTimestamp();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
+     * @return The timestamp.
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index);
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 9;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code context.DeviceConfig}
+   * Protobuf type {@code context.Slice}
    */
-  public static final class DeviceConfig extends
+  public static final class Slice extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
-      DeviceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Slice)
+      SliceOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceConfig.newBuilder() to construct.
-    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Slice.newBuilder() to construct.
+    private Slice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private Slice() {
+      sliceEndpointIds_ = java.util.Collections.emptyList();
+      sliceConstraints_ = java.util.Collections.emptyList();
+      sliceServiceIds_ = java.util.Collections.emptyList();
+      sliceSubsliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceConfig();
+      return new Slice();
     }
 
     @java.lang.Override
@@ -14165,7 +29839,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceConfig(
+    private Slice(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -14185,12 +29859,104 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              sliceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              sliceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              sliceServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
+                sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              sliceSubsliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
+              if (sliceStatus_ != null) {
+                subBuilder = sliceStatus_.toBuilder();
+              }
+              sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceStatus_);
+                sliceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
+              if (sliceConfig_ != null) {
+                subBuilder = sliceConfig_.toBuilder();
+              }
+              sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceConfig_);
+                sliceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
+              context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
+              if (sliceOwner_ != null) {
+                subBuilder = sliceOwner_.toBuilder();
+              }
+              sliceOwner_ = input.readMessage(context.ContextOuterClass.SliceOwner.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceOwner_);
+                sliceOwner_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 74: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
+              }
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -14209,7 +29975,16 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+          sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -14217,55 +29992,305 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      return context.ContextOuterClass.internal_static_context_Slice_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+              context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int SLICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>.context.SliceId slice_id = 1;</code>
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
+
+    public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
+      return sliceEndpointIds_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getSliceEndpointIdsOrBuilderList() {
+      return sliceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getSliceEndpointIdsCount() {
+      return sliceEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
+      return sliceEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
         int index) {
-      return configRules_.get(index);
+      return sliceEndpointIds_.get(index);
+    }
+
+    public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
+      return sliceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getSliceConstraintsOrBuilderList() {
+      return sliceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public int getSliceConstraintsCount() {
+      return sliceConstraints_.size();
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
+      return sliceConstraints_.get(index);
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+        int index) {
+      return sliceConstraints_.get(index);
+    }
+
+    public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
+      return sliceServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSliceServiceIdsOrBuilderList() {
+      return sliceServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSliceServiceIdsCount() {
+      return sliceServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
+      return sliceServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+        int index) {
+      return sliceServiceIds_.get(index);
+    }
+
+    public static final int SLICE_SUBSLICE_IDS_FIELD_NUMBER = 5;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
+      return sliceSubsliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceSubsliceIdsOrBuilderList() {
+      return sliceSubsliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public int getSliceSubsliceIdsCount() {
+      return sliceSubsliceIds_.size();
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
+      return sliceSubsliceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+        int index) {
+      return sliceSubsliceIds_.get(index);
+    }
+
+    public static final int SLICE_STATUS_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.SliceStatus sliceStatus_;
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return Whether the sliceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceStatus() {
+      return sliceStatus_ != null;
+    }
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return The sliceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatus getSliceStatus() {
+      return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+    }
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
+      return getSliceStatus();
+    }
+
+    public static final int SLICE_CONFIG_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceConfig sliceConfig_;
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceConfig() {
+      return sliceConfig_ != null;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfig getSliceConfig() {
+      return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+      return getSliceConfig();
+    }
+
+    public static final int SLICE_OWNER_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.SliceOwner sliceOwner_;
+    /**
+     * <code>.context.SliceOwner slice_owner = 8;</code>
+     * @return Whether the sliceOwner field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceOwner() {
+      return sliceOwner_ != null;
+    }
+    /**
+     * <code>.context.SliceOwner slice_owner = 8;</code>
+     * @return The sliceOwner.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceOwner getSliceOwner() {
+      return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
+    }
+    /**
+     * <code>.context.SliceOwner slice_owner = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
+      return getSliceOwner();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 9;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 9;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 9;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 9;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -14282,8 +30307,32 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      if (sliceId_ != null) {
+        output.writeMessage(1, getSliceId());
+      }
+      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
+        output.writeMessage(2, sliceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < sliceConstraints_.size(); i++) {
+        output.writeMessage(3, sliceConstraints_.get(i));
+      }
+      for (int i = 0; i < sliceServiceIds_.size(); i++) {
+        output.writeMessage(4, sliceServiceIds_.get(i));
+      }
+      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+        output.writeMessage(5, sliceSubsliceIds_.get(i));
+      }
+      if (sliceStatus_ != null) {
+        output.writeMessage(6, getSliceStatus());
+      }
+      if (sliceConfig_ != null) {
+        output.writeMessage(7, getSliceConfig());
+      }
+      if (sliceOwner_ != null) {
+        output.writeMessage(8, getSliceOwner());
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(9, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -14294,9 +30343,41 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, configRules_.get(i));
+          .computeMessageSize(1, getSliceId());
+      }
+      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, sliceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < sliceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, sliceConstraints_.get(i));
+      }
+      for (int i = 0; i < sliceServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, sliceServiceIds_.get(i));
+      }
+      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, sliceSubsliceIds_.get(i));
+      }
+      if (sliceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getSliceStatus());
+      }
+      if (sliceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceConfig());
+      }
+      if (sliceOwner_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getSliceOwner());
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -14308,13 +30389,44 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.Slice)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
+      context.ContextOuterClass.Slice other = (context.ContextOuterClass.Slice) obj;
 
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
+      if (!getSliceEndpointIdsList()
+          .equals(other.getSliceEndpointIdsList())) return false;
+      if (!getSliceConstraintsList()
+          .equals(other.getSliceConstraintsList())) return false;
+      if (!getSliceServiceIdsList()
+          .equals(other.getSliceServiceIdsList())) return false;
+      if (!getSliceSubsliceIdsList()
+          .equals(other.getSliceSubsliceIdsList())) return false;
+      if (hasSliceStatus() != other.hasSliceStatus()) return false;
+      if (hasSliceStatus()) {
+        if (!getSliceStatus()
+            .equals(other.getSliceStatus())) return false;
+      }
+      if (hasSliceConfig() != other.hasSliceConfig()) return false;
+      if (hasSliceConfig()) {
+        if (!getSliceConfig()
+            .equals(other.getSliceConfig())) return false;
+      }
+      if (hasSliceOwner() != other.hasSliceOwner()) return false;
+      if (hasSliceOwner()) {
+        if (!getSliceOwner()
+            .equals(other.getSliceOwner())) return false;
+      }
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -14324,80 +30436,112 @@ public final class ContextOuterClass {
       if (memoizedHashCode != 0) {
         return memoizedHashCode;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().hashCode();
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
+      }
+      if (getSliceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceEndpointIdsList().hashCode();
+      }
+      if (getSliceConstraintsCount() > 0) {
+        hash = (37 * hash) + SLICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConstraintsList().hashCode();
+      }
+      if (getSliceServiceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceServiceIdsList().hashCode();
+      }
+      if (getSliceSubsliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_SUBSLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceSubsliceIdsList().hashCode();
+      }
+      if (hasSliceStatus()) {
+        hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceStatus().hashCode();
+      }
+      if (hasSliceConfig()) {
+        hash = (37 * hash) + SLICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConfig().hashCode();
+      }
+      if (hasSliceOwner()) {
+        hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceOwner().hashCode();
+      }
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(byte[] data)
+    public static context.ContextOuterClass.Slice parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Slice parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Slice parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(
+    public static context.ContextOuterClass.Slice parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -14410,7 +30554,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Slice prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -14426,26 +30570,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceConfig}
+     * Protobuf type {@code context.Slice}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
-        context.ContextOuterClass.DeviceConfigOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Slice)
+        context.ContextOuterClass.SliceOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+                context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.Slice.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -14458,17 +30602,68 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
+          getSliceEndpointIdsFieldBuilder();
+          getSliceConstraintsFieldBuilder();
+          getSliceServiceIdsFieldBuilder();
+          getSliceSubsliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          configRulesBuilder_.clear();
+          sliceEndpointIdsBuilder_.clear();
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          sliceConstraintsBuilder_.clear();
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          sliceServiceIdsBuilder_.clear();
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          sliceSubsliceIdsBuilder_.clear();
+        }
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = null;
+        } else {
+          sliceStatus_ = null;
+          sliceStatusBuilder_ = null;
+        }
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = null;
+        } else {
+          sliceOwner_ = null;
+          sliceOwnerBuilder_ = null;
+        }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
         return this;
       }
@@ -14476,17 +30671,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
+      public context.ContextOuterClass.Slice getDefaultInstanceForType() {
+        return context.ContextOuterClass.Slice.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig build() {
-        context.ContextOuterClass.DeviceConfig result = buildPartial();
+      public context.ContextOuterClass.Slice build() {
+        context.ContextOuterClass.Slice result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -14494,17 +30689,69 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig buildPartial() {
-        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+      public context.ContextOuterClass.Slice buildPartial() {
+        context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
         int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
+        if (sliceEndpointIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.configRules_ = configRules_;
+          result.sliceEndpointIds_ = sliceEndpointIds_;
         } else {
-          result.configRules_ = configRulesBuilder_.build();
+          result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.sliceConstraints_ = sliceConstraints_;
+        } else {
+          result.sliceConstraints_ = sliceConstraintsBuilder_.build();
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.sliceServiceIds_ = sliceServiceIds_;
+        } else {
+          result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) != 0)) {
+            sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.sliceSubsliceIds_ = sliceSubsliceIds_;
+        } else {
+          result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
+        }
+        if (sliceStatusBuilder_ == null) {
+          result.sliceStatus_ = sliceStatus_;
+        } else {
+          result.sliceStatus_ = sliceStatusBuilder_.build();
+        }
+        if (sliceConfigBuilder_ == null) {
+          result.sliceConfig_ = sliceConfig_;
+        } else {
+          result.sliceConfig_ = sliceConfigBuilder_.build();
+        }
+        if (sliceOwnerBuilder_ == null) {
+          result.sliceOwner_ = sliceOwner_;
+        } else {
+          result.sliceOwner_ = sliceOwnerBuilder_.build();
+        }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
         }
         onBuilt();
         return result;
@@ -14544,42 +30791,135 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceConfig) {
-          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
+        if (other instanceof context.ContextOuterClass.Slice) {
+          return mergeFrom((context.ContextOuterClass.Slice)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
-        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
+      public Builder mergeFrom(context.ContextOuterClass.Slice other) {
+        if (other == context.ContextOuterClass.Slice.getDefaultInstance()) return this;
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (!other.sliceEndpointIds_.isEmpty()) {
+            if (sliceEndpointIds_.isEmpty()) {
+              sliceEndpointIds_ = other.sliceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
+              ensureSliceEndpointIdsIsMutable();
+              sliceEndpointIds_.addAll(other.sliceEndpointIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
+          if (!other.sliceEndpointIds_.isEmpty()) {
+            if (sliceEndpointIdsBuilder_.isEmpty()) {
+              sliceEndpointIdsBuilder_.dispose();
+              sliceEndpointIdsBuilder_ = null;
+              sliceEndpointIds_ = other.sliceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
+              sliceEndpointIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
+                   getSliceEndpointIdsFieldBuilder() : null;
             } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
+              sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
+            }
+          }
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          if (!other.sliceConstraints_.isEmpty()) {
+            if (sliceConstraints_.isEmpty()) {
+              sliceConstraints_ = other.sliceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSliceConstraintsIsMutable();
+              sliceConstraints_.addAll(other.sliceConstraints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceConstraints_.isEmpty()) {
+            if (sliceConstraintsBuilder_.isEmpty()) {
+              sliceConstraintsBuilder_.dispose();
+              sliceConstraintsBuilder_ = null;
+              sliceConstraints_ = other.sliceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              sliceConstraintsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceConstraintsFieldBuilder() : null;
+            } else {
+              sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
+            }
+          }
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          if (!other.sliceServiceIds_.isEmpty()) {
+            if (sliceServiceIds_.isEmpty()) {
+              sliceServiceIds_ = other.sliceServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureSliceServiceIdsIsMutable();
+              sliceServiceIds_.addAll(other.sliceServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceServiceIds_.isEmpty()) {
+            if (sliceServiceIdsBuilder_.isEmpty()) {
+              sliceServiceIdsBuilder_.dispose();
+              sliceServiceIdsBuilder_ = null;
+              sliceServiceIds_ = other.sliceServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              sliceServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceServiceIdsFieldBuilder() : null;
+            } else {
+              sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
+            }
+          }
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (!other.sliceSubsliceIds_.isEmpty()) {
+            if (sliceSubsliceIds_.isEmpty()) {
+              sliceSubsliceIds_ = other.sliceSubsliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureSliceSubsliceIdsIsMutable();
+              sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceSubsliceIds_.isEmpty()) {
+            if (sliceSubsliceIdsBuilder_.isEmpty()) {
+              sliceSubsliceIdsBuilder_.dispose();
+              sliceSubsliceIdsBuilder_ = null;
+              sliceSubsliceIds_ = other.sliceSubsliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              sliceSubsliceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceSubsliceIdsFieldBuilder() : null;
+            } else {
+              sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
             }
           }
         }
+        if (other.hasSliceStatus()) {
+          mergeSliceStatus(other.getSliceStatus());
+        }
+        if (other.hasSliceConfig()) {
+          mergeSliceConfig(other.getSliceConfig());
+        }
+        if (other.hasSliceOwner()) {
+          mergeSliceOwner(other.getSliceOwner());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -14595,11 +30935,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceConfig parsedMessage = null;
+        context.ContextOuterClass.Slice parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Slice) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14610,1830 +30950,1559 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ =
         java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
+      private void ensureSliceEndpointIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> sliceEndpointIdsBuilder_;
 
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
+      public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
         } else {
-          return configRulesBuilder_.getMessageList();
+          return sliceEndpointIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
+      public int getSliceEndpointIdsCount() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.size();
         } else {
-          return configRulesBuilder_.getCount();
+          return sliceEndpointIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
+      public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.get(index);
         } else {
-          return configRulesBuilder_.getMessage(index);
+          return sliceEndpointIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder setSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.set(index, value);
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, value);
+          sliceEndpointIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
+      public Builder setSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
+          sliceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder addSliceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(value);
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(value);
+          sliceEndpointIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder addSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(index, value);
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, value);
+          sliceEndpointIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
+      public Builder addSliceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(builderForValue.build());
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
+          sliceEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
+      public Builder addSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
+          sliceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
+      public Builder addAllSliceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
+              values, sliceEndpointIds_);
           onChanged();
         } else {
-          configRulesBuilder_.addAllMessages(values);
+          sliceEndpointIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
+      public Builder clearSliceEndpointIds() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          configRulesBuilder_.clear();
+          sliceEndpointIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
+      public Builder removeSliceEndpointIds(int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.remove(index);
           onChanged();
         } else {
-          configRulesBuilder_.remove(index);
+          sliceEndpointIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+      public context.ContextOuterClass.EndPointId.Builder getSliceEndpointIdsBuilder(
           int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
+        return getSliceEndpointIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+      public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
           int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.get(index);  } else {
+          return sliceEndpointIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getSliceEndpointIdsOrBuilderList() {
+        if (sliceEndpointIdsBuilder_ != null) {
+          return sliceEndpointIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(configRules_);
+          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder() {
+        return getSliceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder(
           int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+        return getSliceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getSliceEndpointIdsBuilderList() {
+        return getSliceEndpointIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
-          getConfigRulesFieldBuilder() {
-        if (configRulesBuilder_ == null) {
-          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
-                  configRules_,
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getSliceEndpointIdsFieldBuilder() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  sliceEndpointIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          configRules_ = null;
-        }
-        return configRulesBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.DeviceConfig)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
-    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
-    }
-
-    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<DeviceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
-      @java.lang.Override
-      public DeviceConfig parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceConfig(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<DeviceConfig> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface DeviceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.DeviceId> 
-        getDeviceIdsList();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    context.ContextOuterClass.DeviceId getDeviceIds(int index);
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    int getDeviceIdsCount();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code context.DeviceIdList}
-   */
-  public static final class DeviceIdList extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
-      DeviceIdListOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use DeviceIdList.newBuilder() to construct.
-    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private DeviceIdList() {
-      deviceIds_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new DeviceIdList();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private DeviceIdList(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              deviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+          sliceEndpointIds_ = null;
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
-    }
-
-    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-      return deviceIds_;
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList() {
-      return deviceIds_;
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public int getDeviceIdsCount() {
-      return deviceIds_.size();
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-      return deviceIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index) {
-      return deviceIds_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < deviceIds_.size(); i++) {
-        output.writeMessage(1, deviceIds_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < deviceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, deviceIds_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.DeviceIdList)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
-
-      if (!getDeviceIdsList()
-          .equals(other.getDeviceIdsList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
-      }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getDeviceIdsCount() > 0) {
-        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceIdsList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceIdList prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code context.DeviceIdList}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
-        context.ContextOuterClass.DeviceIdListOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+        return sliceEndpointIdsBuilder_;
       }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+      private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
+          bitField0_ |= 0x00000002;
+         }
       }
 
-      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> sliceConstraintsBuilder_;
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
+        if (sliceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceConstraints_);
+        } else {
+          return sliceConstraintsBuilder_.getMessageList();
+        }
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getDeviceIdsFieldBuilder();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public int getSliceConstraintsCount() {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.size();
+        } else {
+          return sliceConstraintsBuilder_.getCount();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.get(index);
         } else {
-          deviceIdsBuilder_.clear();
+          return sliceConstraintsBuilder_.getMessage(index);
         }
-        return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder setSliceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder setSliceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList build() {
-        context.ContextOuterClass.DeviceIdList result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(value);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(value);
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList buildPartial() {
-        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (deviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          result.deviceIds_ = deviceIds_;
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(index, value);
+          onChanged();
         } else {
-          result.deviceIds_ = deviceIdsBuilder_.build();
+          sliceConstraintsBuilder_.addMessage(index, value);
         }
-        onBuilt();
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addAllSliceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceConstraints_);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder clearSliceConstraints() {
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder removeSliceConstraints(int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.remove(index);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.remove(index);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getSliceConstraintsBuilder(
+          int index) {
+        return getSliceConstraintsFieldBuilder().getBuilder(index);
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceIdList) {
-          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+          int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.get(index);  } else {
+          return sliceConstraintsBuilder_.getMessageOrBuilder(index);
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
-        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
-        if (deviceIdsBuilder_ == null) {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIds_.isEmpty()) {
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDeviceIdsIsMutable();
-              deviceIds_.addAll(other.deviceIds_);
-            }
-            onChanged();
-          }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getSliceConstraintsOrBuilderList() {
+        if (sliceConstraintsBuilder_ != null) {
+          return sliceConstraintsBuilder_.getMessageOrBuilderList();
         } else {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIdsBuilder_.isEmpty()) {
-              deviceIdsBuilder_.dispose();
-              deviceIdsBuilder_ = null;
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              deviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceIdsFieldBuilder() : null;
-            } else {
-              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
-            }
-          }
+          return java.util.Collections.unmodifiableList(sliceConstraints_);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder() {
+        return getSliceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.DeviceIdList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder(
+          int index) {
+        return getSliceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getSliceConstraintsBuilderList() {
+        return getSliceConstraintsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getSliceConstraintsFieldBuilder() {
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  sliceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceConstraints_ = null;
         }
-        return this;
+        return sliceConstraintsBuilder_;
       }
-      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+      private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ =
         java.util.Collections.emptyList();
-      private void ensureDeviceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-          bitField0_ |= 0x00000001;
+      private void ensureSliceServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
+          bitField0_ |= 0x00000004;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> sliceServiceIdsBuilder_;
 
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-        if (deviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+      public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
+        if (sliceServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceServiceIds_);
         } else {
-          return deviceIdsBuilder_.getMessageList();
+          return sliceServiceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public int getDeviceIdsCount() {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.size();
+      public int getSliceServiceIdsCount() {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.size();
         } else {
-          return deviceIdsBuilder_.getCount();
+          return sliceServiceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);
+      public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.get(index);
         } else {
-          return deviceIdsBuilder_.getMessage(index);
+          return sliceServiceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder setSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, value);
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.set(index, value);
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, value);
+          sliceServiceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, builderForValue.build());
+      public Builder setSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+          sliceServiceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder addSliceServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(value);
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(value);
+          sliceServiceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder addSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, value);
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(index, value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, value);
+          sliceServiceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder addDeviceIds(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(builderForValue.build());
+      public Builder addSliceServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(builderForValue.build());
+          sliceServiceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, builderForValue.build());
+      public Builder addSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+          sliceServiceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder addAllDeviceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
+      public Builder addAllSliceServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceIds_);
+              values, sliceServiceIds_);
           onChanged();
         } else {
-          deviceIdsBuilder_.addAllMessages(values);
+          sliceServiceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder clearDeviceIds() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder clearSliceServiceIds() {
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
           onChanged();
         } else {
-          deviceIdsBuilder_.clear();
+          sliceServiceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder removeDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.remove(index);
+      public Builder removeSliceServiceIds(int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.remove(index);
           onChanged();
         } else {
-          deviceIdsBuilder_.remove(index);
+          sliceServiceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+      public context.ContextOuterClass.ServiceId.Builder getSliceServiceIdsBuilder(
           int index) {
-        return getDeviceIdsFieldBuilder().getBuilder(index);
+        return getSliceServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+      public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
           int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);  } else {
-          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.get(index);  } else {
+          return sliceServiceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-           getDeviceIdsOrBuilderList() {
-        if (deviceIdsBuilder_ != null) {
-          return deviceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSliceServiceIdsOrBuilderList() {
+        if (sliceServiceIdsBuilder_ != null) {
+          return sliceServiceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+          return java.util.Collections.unmodifiableList(sliceServiceIds_);
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder() {
+        return getSliceServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder(
           int index) {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+        return getSliceServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
-           getDeviceIdsBuilderList() {
-        return getDeviceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSliceServiceIdsBuilderList() {
+        return getSliceServiceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdsFieldBuilder() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  deviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSliceServiceIdsFieldBuilder() {
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  sliceServiceIds_,
+                  ((bitField0_ & 0x00000004) != 0),
                   getParentForChildren(),
                   isClean());
-          deviceIds_ = null;
+          sliceServiceIds_ = null;
         }
-        return deviceIdsBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+        return sliceServiceIdsBuilder_;
       }
 
-
-      // @@protoc_insertion_point(builder_scope:context.DeviceIdList)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
-    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
-    }
-
-    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<DeviceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
-      @java.lang.Override
-      public DeviceIdList parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceIdList(input, extensionRegistry);
+      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceSubsliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
+          bitField0_ |= 0x00000008;
+         }
       }
-    };
-
-    public static com.google.protobuf.Parser<DeviceIdList> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface DeviceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceList)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Device> 
-        getDevicesList();
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    context.ContextOuterClass.Device getDevices(int index);
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    int getDevicesCount();
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-        getDevicesOrBuilderList();
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code context.DeviceList}
-   */
-  public static final class DeviceList extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceList)
-      DeviceListOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use DeviceList.newBuilder() to construct.
-    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private DeviceList() {
-      devices_ = java.util.Collections.emptyList();
-    }
 
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new DeviceList();
-    }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private DeviceList(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
-      }
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              devices_.add(
-                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          devices_ = java.util.Collections.unmodifiableList(devices_);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+        } else {
+          return sliceSubsliceIdsBuilder_.getMessageList();
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
-    }
-
-    public static final int DEVICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Device> devices_;
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
-      return devices_;
-    }
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-        getDevicesOrBuilderList() {
-      return devices_;
-    }
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    @java.lang.Override
-    public int getDevicesCount() {
-      return devices_.size();
-    }
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Device getDevices(int index) {
-      return devices_.get(index);
-    }
-    /**
-     * <code>repeated .context.Device devices = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-        int index) {
-      return devices_.get(index);
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      for (int i = 0; i < devices_.size(); i++) {
-        output.writeMessage(1, devices_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < devices_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, devices_.get(i));
-      }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceList)) {
-        return super.equals(obj);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public int getSliceSubsliceIdsCount() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.size();
+        } else {
+          return sliceSubsliceIdsBuilder_.getCount();
+        }
       }
-      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
-
-      if (!getDevicesList()
-          .equals(other.getDevicesList())) return false;
-      if (!unknownFields.equals(other.unknownFields)) return false;
-      return true;
-    }
-
-    @java.lang.Override
-    public int hashCode() {
-      if (memoizedHashCode != 0) {
-        return memoizedHashCode;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.get(index);
+        } else {
+          return sliceSubsliceIdsBuilder_.getMessage(index);
+        }
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      if (getDevicesCount() > 0) {
-        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
-        hash = (53 * hash) + getDevicesList().hashCode();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, value);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.DeviceList parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input, extensionRegistry);
-    }
-
-    @java.lang.Override
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder() {
-      return DEFAULT_INSTANCE.toBuilder();
-    }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceList prototype) {
-      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
-    }
-    @java.lang.Override
-    public Builder toBuilder() {
-      return this == DEFAULT_INSTANCE
-          ? new Builder() : new Builder().mergeFrom(this);
-    }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code context.DeviceList}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceList)
-        context.ContextOuterClass.DeviceListOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(value);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(value);
+        }
+        return this;
       }
-
-      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(index, value);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getDevicesFieldBuilder();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (devicesBuilder_ == null) {
-          devices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addAllSliceSubsliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceSubsliceIds_);
+          onChanged();
         } else {
-          devicesBuilder_.clear();
+          sliceSubsliceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder clearSliceSubsliceIds() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.clear();
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceList.getDefaultInstance();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder removeSliceSubsliceIds(int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.remove(index);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.remove(index);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceList build() {
-        context.ContextOuterClass.DeviceList result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceSubsliceIdsBuilder(
+          int index) {
+        return getSliceSubsliceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+          int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.get(index);  } else {
+          return sliceSubsliceIdsBuilder_.getMessageOrBuilder(index);
         }
-        return result;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.DeviceList buildPartial() {
-        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
-        int from_bitField0_ = bitField0_;
-        if (devicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            devices_ = java.util.Collections.unmodifiableList(devices_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.devices_ = devices_;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceSubsliceIdsOrBuilderList() {
+        if (sliceSubsliceIdsBuilder_ != null) {
+          return sliceSubsliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          result.devices_ = devicesBuilder_.build();
+          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
         }
-        onBuilt();
-        return result;
-      }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder() {
+        return getSliceSubsliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder(
+          int index) {
+        return getSliceSubsliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceSubsliceIdsBuilderList() {
+        return getSliceSubsliceIdsFieldBuilder().getBuilderList();
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceSubsliceIdsFieldBuilder() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceSubsliceIds_,
+                  ((bitField0_ & 0x00000008) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceSubsliceIds_ = null;
+        }
+        return sliceSubsliceIdsBuilder_;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+
+      private context.ContextOuterClass.SliceStatus sliceStatus_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> sliceStatusBuilder_;
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       * @return Whether the sliceStatus field is set.
+       */
+      public boolean hasSliceStatus() {
+        return sliceStatusBuilder_ != null || sliceStatus_ != null;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceList) {
-          return mergeFrom((context.ContextOuterClass.DeviceList)other);
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       * @return The sliceStatus.
+       */
+      public context.ContextOuterClass.SliceStatus getSliceStatus() {
+        if (sliceStatusBuilder_ == null) {
+          return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return sliceStatusBuilder_.getMessage();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
-        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
-        if (devicesBuilder_ == null) {
-          if (!other.devices_.isEmpty()) {
-            if (devices_.isEmpty()) {
-              devices_ = other.devices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDevicesIsMutable();
-              devices_.addAll(other.devices_);
-            }
-            onChanged();
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       */
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          sliceStatus_ = value;
+          onChanged();
         } else {
-          if (!other.devices_.isEmpty()) {
-            if (devicesBuilder_.isEmpty()) {
-              devicesBuilder_.dispose();
-              devicesBuilder_ = null;
-              devices_ = other.devices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              devicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDevicesFieldBuilder() : null;
-            } else {
-              devicesBuilder_.addAllMessages(other.devices_);
-            }
-          }
+          sliceStatusBuilder_.setMessage(value);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
+
         return this;
       }
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       */
+      public Builder setSliceStatus(
+          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceStatusBuilder_.setMessage(builderForValue.build());
+        }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.DeviceList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       */
+      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (sliceStatus_ != null) {
+            sliceStatus_ =
+              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            sliceStatus_ = value;
           }
+          onChanged();
+        } else {
+          sliceStatusBuilder_.mergeFrom(value);
         }
+
         return this;
       }
-      private int bitField0_;
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       */
+      public Builder clearSliceStatus() {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = null;
+          onChanged();
+        } else {
+          sliceStatus_ = null;
+          sliceStatusBuilder_ = null;
+        }
 
-      private java.util.List<context.ContextOuterClass.Device> devices_ =
-        java.util.Collections.emptyList();
-      private void ensureDevicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
-          bitField0_ |= 0x00000001;
-         }
+        return this;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
-
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
-        if (devicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(devices_);
+      public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
+        
+        onChanged();
+        return getSliceStatusFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       */
+      public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
+        if (sliceStatusBuilder_ != null) {
+          return sliceStatusBuilder_.getMessageOrBuilder();
         } else {
-          return devicesBuilder_.getMessageList();
+          return sliceStatus_ == null ?
+              context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
         }
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public int getDevicesCount() {
-        if (devicesBuilder_ == null) {
-          return devices_.size();
-        } else {
-          return devicesBuilder_.getCount();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> 
+          getSliceStatusFieldBuilder() {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder>(
+                  getSliceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          sliceStatus_ = null;
         }
+        return sliceStatusBuilder_;
       }
+
+      private context.ContextOuterClass.SliceConfig sliceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> sliceConfigBuilder_;
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return Whether the sliceConfig field is set.
        */
-      public context.ContextOuterClass.Device getDevices(int index) {
-        if (devicesBuilder_ == null) {
-          return devices_.get(index);
+      public boolean hasSliceConfig() {
+        return sliceConfigBuilder_ != null || sliceConfig_ != null;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return The sliceConfig.
+       */
+      public context.ContextOuterClass.SliceConfig getSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
         } else {
-          return devicesBuilder_.getMessage(index);
+          return sliceConfigBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceConfig slice_config = 7;</code>
        */
-      public Builder setDevices(
-          int index, context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
+      public Builder setSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDevicesIsMutable();
-          devices_.set(index, value);
+          sliceConfig_ = value;
           onChanged();
         } else {
-          devicesBuilder_.setMessage(index, value);
+          sliceConfigBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceConfig slice_config = 7;</code>
        */
-      public Builder setDevices(
-          int index, context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.set(index, builderForValue.build());
+      public Builder setSliceConfig(
+          context.ContextOuterClass.SliceConfig.Builder builderForValue) {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = builderForValue.build();
           onChanged();
         } else {
-          devicesBuilder_.setMessage(index, builderForValue.build());
+          sliceConfigBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceConfig slice_config = 7;</code>
        */
-      public Builder addDevices(context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (sliceConfig_ != null) {
+            sliceConfig_ =
+              context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            sliceConfig_ = value;
           }
-          ensureDevicesIsMutable();
-          devices_.add(value);
           onChanged();
         } else {
-          devicesBuilder_.addMessage(value);
+          sliceConfigBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceConfig slice_config = 7;</code>
        */
-      public Builder addDevices(
-          int index, context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
+      public Builder clearSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+          onChanged();
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
+        
+        onChanged();
+        return getSliceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+        if (sliceConfigBuilder_ != null) {
+          return sliceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceConfig_ == null ?
+              context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
+          getSliceConfigFieldBuilder() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
+                  getSliceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          sliceConfig_ = null;
+        }
+        return sliceConfigBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceOwner sliceOwner_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> sliceOwnerBuilder_;
+      /**
+       * <code>.context.SliceOwner slice_owner = 8;</code>
+       * @return Whether the sliceOwner field is set.
+       */
+      public boolean hasSliceOwner() {
+        return sliceOwnerBuilder_ != null || sliceOwner_ != null;
+      }
+      /**
+       * <code>.context.SliceOwner slice_owner = 8;</code>
+       * @return The sliceOwner.
+       */
+      public context.ContextOuterClass.SliceOwner getSliceOwner() {
+        if (sliceOwnerBuilder_ == null) {
+          return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
+        } else {
+          return sliceOwnerBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceOwner slice_owner = 8;</code>
+       */
+      public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
+        if (sliceOwnerBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDevicesIsMutable();
-          devices_.add(index, value);
+          sliceOwner_ = value;
           onChanged();
         } else {
-          devicesBuilder_.addMessage(index, value);
+          sliceOwnerBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
-      public Builder addDevices(
-          context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.add(builderForValue.build());
+      public Builder setSliceOwner(
+          context.ContextOuterClass.SliceOwner.Builder builderForValue) {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = builderForValue.build();
           onChanged();
         } else {
-          devicesBuilder_.addMessage(builderForValue.build());
+          sliceOwnerBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
-      public Builder addDevices(
-          int index, context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.add(index, builderForValue.build());
+      public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
+        if (sliceOwnerBuilder_ == null) {
+          if (sliceOwner_ != null) {
+            sliceOwner_ =
+              context.ContextOuterClass.SliceOwner.newBuilder(sliceOwner_).mergeFrom(value).buildPartial();
+          } else {
+            sliceOwner_ = value;
+          }
           onChanged();
         } else {
-          devicesBuilder_.addMessage(index, builderForValue.build());
+          sliceOwnerBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
-      public Builder addAllDevices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, devices_);
+      public Builder clearSliceOwner() {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = null;
           onChanged();
         } else {
-          devicesBuilder_.addAllMessages(values);
+          sliceOwner_ = null;
+          sliceOwnerBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceOwner slice_owner = 8;</code>
+       */
+      public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
+        
+        onChanged();
+        return getSliceOwnerFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceOwner slice_owner = 8;</code>
+       */
+      public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
+        if (sliceOwnerBuilder_ != null) {
+          return sliceOwnerBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceOwner_ == null ?
+              context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
+        }
+      }
+      /**
+       * <code>.context.SliceOwner slice_owner = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
+          getSliceOwnerFieldBuilder() {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwnerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder>(
+                  getSliceOwner(),
+                  getParentForChildren(),
+                  isClean());
+          sliceOwner_ = null;
+        }
+        return sliceOwnerBuilder_;
+      }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
+      /**
+       * <code>.context.Timestamp timestamp = 9;</code>
+       * @return Whether the timestamp field is set.
+       */
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 9;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        } else {
+          return timestampBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public Builder clearDevices() {
-        if (devicesBuilder_ == null) {
-          devices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
           onChanged();
         } else {
-          devicesBuilder_.clear();
+          timestampBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public Builder removeDevices(int index) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.remove(index);
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          devicesBuilder_.remove(index);
+          timestampBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
-          int index) {
-        return getDevicesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-          int index) {
-        if (devicesBuilder_ == null) {
-          return devices_.get(index);  } else {
-          return devicesBuilder_.getMessageOrBuilder(index);
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
+          } else {
+            timestamp_ = value;
+          }
+          onChanged();
+        } else {
+          timestampBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-           getDevicesOrBuilderList() {
-        if (devicesBuilder_ != null) {
-          return devicesBuilder_.getMessageOrBuilderList();
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(devices_);
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
-        return getDevicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Device.getDefaultInstance());
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
-          int index) {
-        return getDevicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Device.getDefaultInstance());
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
-      public java.util.List<context.ContextOuterClass.Device.Builder> 
-           getDevicesBuilderList() {
-        return getDevicesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
-          getDevicesFieldBuilder() {
-        if (devicesBuilder_ == null) {
-          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
-                  devices_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
+          getTimestampFieldBuilder() {
+        if (timestampBuilder_ == null) {
+          timestampBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder>(
+                  getTimestamp(),
                   getParentForChildren(),
                   isClean());
-          devices_ = null;
+          timestamp_ = null;
         }
-        return devicesBuilder_;
+        return timestampBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -16448,100 +32517,98 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceList)
+      // @@protoc_insertion_point(builder_scope:context.Slice)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceList)
-    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Slice)
+    private static final context.ContextOuterClass.Slice DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Slice();
     }
 
-    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
+    public static context.ContextOuterClass.Slice getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceList>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
+    private static final com.google.protobuf.Parser<Slice>
+        PARSER = new com.google.protobuf.AbstractParser<Slice>() {
       @java.lang.Override
-      public DeviceList parsePartialFrom(
+      public Slice parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceList(input, extensionRegistry);
+        return new Slice(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceList> parser() {
+    public static com.google.protobuf.Parser<Slice> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceList> getParserForType() {
+    public com.google.protobuf.Parser<Slice> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Slice getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
+  public interface SliceOwnerOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceOwner)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return Whether the ownerUuid field is set.
      */
-    boolean hasEvent();
+    boolean hasOwnerUuid();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return The ownerUuid.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.Uuid getOwnerUuid();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder();
 
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>string owner_string = 2;</code>
+     * @return The ownerString.
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    java.lang.String getOwnerString();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The bytes for ownerString.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    com.google.protobuf.ByteString
+        getOwnerStringBytes();
   }
   /**
-   * Protobuf type {@code context.DeviceEvent}
+   * Protobuf type {@code context.SliceOwner}
    */
-  public static final class DeviceEvent extends
+  public static final class SliceOwner extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
-      DeviceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceOwner)
+      SliceOwnerOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceEvent.newBuilder() to construct.
-    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceOwner.newBuilder() to construct.
+    private SliceOwner(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceEvent() {
+    private SliceOwner() {
+      ownerString_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceEvent();
+      return new SliceOwner();
     }
 
     @java.lang.Override
@@ -16549,7 +32616,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceEvent(
+    private SliceOwner(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -16568,29 +32635,22 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (ownerUuid_ != null) {
+                subBuilder = ownerUuid_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              ownerUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(ownerUuid_);
+                ownerUuid_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              ownerString_ = s;
               break;
             }
             default: {
@@ -16614,67 +32674,79 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+              context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int OWNER_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid ownerUuid_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return Whether the ownerUuid field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasOwnerUuid() {
+      return ownerUuid_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return The ownerUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.Uuid getOwnerUuid() {
+      return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
+      return getOwnerUuid();
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
+    public static final int OWNER_STRING_FIELD_NUMBER = 2;
+    private volatile java.lang.Object ownerString_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>string owner_string = 2;</code>
+     * @return The ownerString.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.lang.String getOwnerString() {
+      java.lang.Object ref = ownerString_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        ownerString_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The bytes for ownerString.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public com.google.protobuf.ByteString
+        getOwnerStringBytes() {
+      java.lang.Object ref = ownerString_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        ownerString_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -16691,11 +32763,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (ownerUuid_ != null) {
+        output.writeMessage(1, getOwnerUuid());
       }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
+      if (!getOwnerStringBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ownerString_);
       }
       unknownFields.writeTo(output);
     }
@@ -16706,13 +32778,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (ownerUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getOwnerUuid());
       }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
+      if (!getOwnerStringBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ownerString_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -16724,21 +32795,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceOwner)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
+      context.ContextOuterClass.SliceOwner other = (context.ContextOuterClass.SliceOwner) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
+      if (hasOwnerUuid() != other.hasOwnerUuid()) return false;
+      if (hasOwnerUuid()) {
+        if (!getOwnerUuid()
+            .equals(other.getOwnerUuid())) return false;
       }
+      if (!getOwnerString()
+          .equals(other.getOwnerString())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -16750,82 +32818,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
+      if (hasOwnerUuid()) {
+        hash = (37 * hash) + OWNER_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getOwnerUuid().hashCode();
       }
+      hash = (37 * hash) + OWNER_STRING_FIELD_NUMBER;
+      hash = (53 * hash) + getOwnerString().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceOwner parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceOwner parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -16838,7 +32904,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceOwner prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -16854,26 +32920,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceEvent}
+     * Protobuf type {@code context.SliceOwner}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
-        context.ContextOuterClass.DeviceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceOwner)
+        context.ContextOuterClass.SliceOwnerOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+                context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.SliceOwner.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -16891,35 +32957,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = null;
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          ownerUuid_ = null;
+          ownerUuidBuilder_ = null;
         }
+        ownerString_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
+      public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceOwner.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent build() {
-        context.ContextOuterClass.DeviceEvent result = buildPartial();
+      public context.ContextOuterClass.SliceOwner build() {
+        context.ContextOuterClass.SliceOwner result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -16927,18 +32989,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent buildPartial() {
-        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
+      public context.ContextOuterClass.SliceOwner buildPartial() {
+        context.ContextOuterClass.SliceOwner result = new context.ContextOuterClass.SliceOwner(this);
+        if (ownerUuidBuilder_ == null) {
+          result.ownerUuid_ = ownerUuid_;
         } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
+          result.ownerUuid_ = ownerUuidBuilder_.build();
         }
+        result.ownerString_ = ownerString_;
         onBuilt();
         return result;
       }
@@ -16977,21 +33035,22 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceEvent) {
-          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
+        if (other instanceof context.ContextOuterClass.SliceOwner) {
+          return mergeFrom((context.ContextOuterClass.SliceOwner)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
-        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.SliceOwner other) {
+        if (other == context.ContextOuterClass.SliceOwner.getDefaultInstance()) return this;
+        if (other.hasOwnerUuid()) {
+          mergeOwnerUuid(other.getOwnerUuid());
         }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
+        if (!other.getOwnerString().isEmpty()) {
+          ownerString_ = other.ownerString_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -17008,11 +33067,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceEvent parsedMessage = null;
+        context.ContextOuterClass.SliceOwner parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceOwner) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -17022,242 +33081,199 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.Uuid ownerUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> ownerUuidBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       * @return Whether the ownerUuid field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasOwnerUuid() {
+        return ownerUuidBuilder_ != null || ownerUuid_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       * @return The ownerUuid.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.Uuid getOwnerUuid() {
+        if (ownerUuidBuilder_ == null) {
+          return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
         } else {
-          return eventBuilder_.getMessage();
+          return ownerUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setOwnerUuid(context.ContextOuterClass.Uuid value) {
+        if (ownerUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ownerUuid_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          ownerUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setOwnerUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          ownerUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeOwnerUuid(context.ContextOuterClass.Uuid value) {
+        if (ownerUuidBuilder_ == null) {
+          if (ownerUuid_ != null) {
+            ownerUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(ownerUuid_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            ownerUuid_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          ownerUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearOwnerUuid() {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          ownerUuid_ = null;
+          ownerUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getOwnerUuidBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getOwnerUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
+        if (ownerUuidBuilder_ != null) {
+          return ownerUuidBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return ownerUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getOwnerUuidFieldBuilder() {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getOwnerUuid(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          ownerUuid_ = null;
         }
-        return eventBuilder_;
+        return ownerUuidBuilder_;
       }
 
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
-      }
+      private java.lang.Object ownerString_ = "";
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>string owner_string = 2;</code>
+       * @return The ownerString.
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
+      public java.lang.String getOwnerString() {
+        java.lang.Object ref = ownerString_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          ownerString_ = s;
+          return s;
         } else {
-          deviceIdBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>string owner_string = 2;</code>
+       * @return The bytes for ownerString.
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
+      public com.google.protobuf.ByteString
+          getOwnerStringBytes() {
+        java.lang.Object ref = ownerString_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          ownerString_ = b;
+          return b;
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>string owner_string = 2;</code>
+       * @param value The ownerString to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
-        }
-
+      public Builder setOwnerString(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        ownerString_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>string owner_string = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
+      public Builder clearOwnerString() {
+        
+        ownerString_ = getDefaultInstance().getOwnerString();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>string owner_string = 2;</code>
+       * @param value The bytes for ownerString to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+      public Builder setOwnerStringBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
+        ownerString_ = value;
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
-      }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
-        }
-        return deviceIdBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -17272,89 +33288,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceEvent)
+      // @@protoc_insertion_point(builder_scope:context.SliceOwner)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
-    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceOwner)
+    private static final context.ContextOuterClass.SliceOwner DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceOwner();
     }
 
-    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.SliceOwner getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
+    private static final com.google.protobuf.Parser<SliceOwner>
+        PARSER = new com.google.protobuf.AbstractParser<SliceOwner>() {
       @java.lang.Override
-      public DeviceEvent parsePartialFrom(
+      public SliceOwner parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceEvent(input, extensionRegistry);
+        return new SliceOwner(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceEvent> parser() {
+    public static com.google.protobuf.Parser<SliceOwner> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
+    public com.google.protobuf.Parser<SliceOwner> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkId)
+  public interface SliceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceStatus)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return Whether the linkUuid field is set.
-     */
-    boolean hasLinkUuid();
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return The linkUuid.
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The enum numeric value on the wire for sliceStatus.
      */
-    context.ContextOuterClass.Uuid getLinkUuid();
+    int getSliceStatusValue();
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The sliceStatus.
      */
-    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
+    context.ContextOuterClass.SliceStatusEnum getSliceStatus();
   }
   /**
-   * <pre>
-   * ----- Link ----------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.LinkId}
+   * Protobuf type {@code context.SliceStatus}
    */
-  public static final class LinkId extends
+  public static final class SliceStatus extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkId)
-      LinkIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceStatus)
+      SliceStatusOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkId.newBuilder() to construct.
-    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceStatus.newBuilder() to construct.
+    private SliceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkId() {
+    private SliceStatus() {
+      sliceStatus_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkId();
+      return new SliceStatus();
     }
 
     @java.lang.Override
@@ -17362,7 +33371,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkId(
+    private SliceStatus(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -17380,17 +33389,10 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (linkUuid_ != null) {
-                subBuilder = linkUuid_.toBuilder();
-              }
-              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkUuid_);
-                linkUuid_ = subBuilder.buildPartial();
-              }
+            case 8: {
+              int rawValue = input.readEnum();
 
+              sliceStatus_ = rawValue;
               break;
             }
             default: {
@@ -17414,41 +33416,34 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+              context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
     }
 
-    public static final int LINK_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid linkUuid_;
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return Whether the linkUuid field is set.
-     */
-    @java.lang.Override
-    public boolean hasLinkUuid() {
-      return linkUuid_ != null;
-    }
+    public static final int SLICE_STATUS_FIELD_NUMBER = 1;
+    private int sliceStatus_;
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return The linkUuid.
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The enum numeric value on the wire for sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.Uuid getLinkUuid() {
-      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+    @java.lang.Override public int getSliceStatusValue() {
+      return sliceStatus_;
     }
     /**
-     * <code>.context.Uuid link_uuid = 1;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-      return getLinkUuid();
+    @java.lang.Override public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+      return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -17465,8 +33460,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (linkUuid_ != null) {
-        output.writeMessage(1, getLinkUuid());
+      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, sliceStatus_);
       }
       unknownFields.writeTo(output);
     }
@@ -17477,9 +33472,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (linkUuid_ != null) {
+      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getLinkUuid());
+          .computeEnumSize(1, sliceStatus_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -17491,16 +33486,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkId)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceStatus)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
+      context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
 
-      if (hasLinkUuid() != other.hasLinkUuid()) return false;
-      if (hasLinkUuid()) {
-        if (!getLinkUuid()
-            .equals(other.getLinkUuid())) return false;
-      }
+      if (sliceStatus_ != other.sliceStatus_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -17512,78 +33503,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasLinkUuid()) {
-        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkUuid().hashCode();
-      }
+      hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + sliceStatus_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceStatus parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkId parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkId parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -17596,7 +33585,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceStatus prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -17612,30 +33601,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Link ----------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.LinkId}
+     * Protobuf type {@code context.SliceStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkId)
-        context.ContextOuterClass.LinkIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceStatus)
+        context.ContextOuterClass.SliceStatusOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+                context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkId.newBuilder()
+      // Construct using context.ContextOuterClass.SliceStatus.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -17653,29 +33638,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = null;
-        } else {
-          linkUuid_ = null;
-          linkUuidBuilder_ = null;
-        }
+        sliceStatus_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkId.getDefaultInstance();
+      public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceStatus.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkId build() {
-        context.ContextOuterClass.LinkId result = buildPartial();
+      public context.ContextOuterClass.SliceStatus build() {
+        context.ContextOuterClass.SliceStatus result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -17683,13 +33664,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkId buildPartial() {
-        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
-        if (linkUuidBuilder_ == null) {
-          result.linkUuid_ = linkUuid_;
-        } else {
-          result.linkUuid_ = linkUuidBuilder_.build();
-        }
+      public context.ContextOuterClass.SliceStatus buildPartial() {
+        context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
+        result.sliceStatus_ = sliceStatus_;
         onBuilt();
         return result;
       }
@@ -17728,18 +33705,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkId) {
-          return mergeFrom((context.ContextOuterClass.LinkId)other);
+        if (other instanceof context.ContextOuterClass.SliceStatus) {
+          return mergeFrom((context.ContextOuterClass.SliceStatus)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
-        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
-        if (other.hasLinkUuid()) {
-          mergeLinkUuid(other.getLinkUuid());
+      public Builder mergeFrom(context.ContextOuterClass.SliceStatus other) {
+        if (other == context.ContextOuterClass.SliceStatus.getDefaultInstance()) return this;
+        if (other.sliceStatus_ != 0) {
+          setSliceStatusValue(other.getSliceStatusValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -17756,11 +33733,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkId parsedMessage = null;
+        context.ContextOuterClass.SliceStatus parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -17770,123 +33747,58 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid linkUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
-      /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       * @return Whether the linkUuid field is set.
-       */
-      public boolean hasLinkUuid() {
-        return linkUuidBuilder_ != null || linkUuid_ != null;
-      }
-      /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       * @return The linkUuid.
-       */
-      public context.ContextOuterClass.Uuid getLinkUuid() {
-        if (linkUuidBuilder_ == null) {
-          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
-        } else {
-          return linkUuidBuilder_.getMessage();
-        }
-      }
+      private int sliceStatus_ = 0;
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return The enum numeric value on the wire for sliceStatus.
        */
-      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
-        if (linkUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          linkUuid_ = value;
-          onChanged();
-        } else {
-          linkUuidBuilder_.setMessage(value);
-        }
-
-        return this;
+      @java.lang.Override public int getSliceStatusValue() {
+        return sliceStatus_;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @param value The enum numeric value on the wire for sliceStatus to set.
+       * @return This builder for chaining.
        */
-      public Builder setLinkUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = builderForValue.build();
-          onChanged();
-        } else {
-          linkUuidBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder setSliceStatusValue(int value) {
+        
+        sliceStatus_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return The sliceStatus.
        */
-      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
-        if (linkUuidBuilder_ == null) {
-          if (linkUuid_ != null) {
-            linkUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
-          } else {
-            linkUuid_ = value;
-          }
-          onChanged();
-        } else {
-          linkUuidBuilder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+        return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @param value The sliceStatus to set.
+       * @return This builder for chaining.
        */
-      public Builder clearLinkUuid() {
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = null;
-          onChanged();
-        } else {
-          linkUuid_ = null;
-          linkUuidBuilder_ = null;
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        
+        sliceStatus_ = value.getNumber();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
+      public Builder clearSliceStatus() {
         
+        sliceStatus_ = 0;
         onChanged();
-        return getLinkUuidFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       */
-      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-        if (linkUuidBuilder_ != null) {
-          return linkUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return linkUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
-        }
-      }
-      /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getLinkUuidFieldBuilder() {
-        if (linkUuidBuilder_ == null) {
-          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getLinkUuid(),
-                  getParentForChildren(),
-                  isClean());
-          linkUuid_ = null;
-        }
-        return linkUuidBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -17901,110 +33813,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkId)
+      // @@protoc_insertion_point(builder_scope:context.SliceStatus)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkId)
-    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceStatus)
+    private static final context.ContextOuterClass.SliceStatus DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceStatus();
     }
 
-    public static context.ContextOuterClass.LinkId getDefaultInstance() {
+    public static context.ContextOuterClass.SliceStatus getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkId>
-        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
+    private static final com.google.protobuf.Parser<SliceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<SliceStatus>() {
       @java.lang.Override
-      public LinkId parsePartialFrom(
+      public SliceStatus parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkId(input, extensionRegistry);
+        return new SliceStatus(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkId> parser() {
+    public static com.google.protobuf.Parser<SliceStatus> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkId> getParserForType() {
+    public com.google.protobuf.Parser<SliceStatus> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Link)
+  public interface SliceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return Whether the linkId field is set.
-     */
-    boolean hasLinkId();
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return The linkId.
-     */
-    context.ContextOuterClass.LinkId getLinkId();
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
-
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getLinkEndpointIdsList();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    int getLinkEndpointIdsCount();
+    int getConfigRulesCount();
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getLinkEndpointIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.Link}
+   * Protobuf type {@code context.SliceConfig}
    */
-  public static final class Link extends
+  public static final class SliceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Link)
-      LinkOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceConfig)
+      SliceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Link.newBuilder() to construct.
-    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceConfig.newBuilder() to construct.
+    private SliceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Link() {
-      linkEndpointIds_ = java.util.Collections.emptyList();
+    private SliceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Link();
+      return new SliceConfig();
     }
 
     @java.lang.Override
@@ -18012,7 +33909,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Link(
+    private SliceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -18032,25 +33929,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.LinkId.Builder subBuilder = null;
-              if (linkId_ != null) {
-                subBuilder = linkId_.toBuilder();
-              }
-              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkId_);
-                linkId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              linkEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -18069,7 +33953,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -18077,81 +33961,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
-    }
-
-    public static final int LINK_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.LinkId linkId_;
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return Whether the linkId field is set.
-     */
-    @java.lang.Override
-    public boolean hasLinkId() {
-      return linkId_ != null;
-    }
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return The linkId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkId() {
-      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-    }
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-      return getLinkId();
+              context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
     }
 
-    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
-      return linkEndpointIds_;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getLinkEndpointIdsOrBuilderList() {
-      return linkEndpointIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public int getLinkEndpointIdsCount() {
-      return linkEndpointIds_.size();
+    public int getConfigRulesCount() {
+      return configRules_.size();
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
-      return linkEndpointIds_.get(index);
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
     }
     /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index) {
-      return linkEndpointIds_.get(index);
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -18168,11 +34026,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (linkId_ != null) {
-        output.writeMessage(1, getLinkId());
-      }
-      for (int i = 0; i < linkEndpointIds_.size(); i++) {
-        output.writeMessage(2, linkEndpointIds_.get(i));
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -18183,13 +34038,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (linkId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getLinkId());
-      }
-      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, linkEndpointIds_.get(i));
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -18201,18 +34052,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Link)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
+      context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
 
-      if (hasLinkId() != other.hasLinkId()) return false;
-      if (hasLinkId()) {
-        if (!getLinkId()
-            .equals(other.getLinkId())) return false;
-      }
-      if (!getLinkEndpointIdsList()
-          .equals(other.getLinkEndpointIdsList())) return false;
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -18224,82 +34070,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasLinkId()) {
-        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkId().hashCode();
-      }
-      if (getLinkEndpointIdsCount() > 0) {
-        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Link parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Link parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -18312,7 +34154,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Link prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -18328,26 +34170,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Link}
+     * Protobuf type {@code context.SliceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Link)
-        context.ContextOuterClass.LinkOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceConfig)
+        context.ContextOuterClass.SliceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+                context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Link.newBuilder()
+      // Construct using context.ContextOuterClass.SliceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -18360,23 +34202,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinkEndpointIdsFieldBuilder();
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
-        } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
-        }
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIds_ = java.util.Collections.emptyList();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          linkEndpointIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -18384,17 +34220,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Link getDefaultInstanceForType() {
-        return context.ContextOuterClass.Link.getDefaultInstance();
+      public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Link build() {
-        context.ContextOuterClass.Link result = buildPartial();
+      public context.ContextOuterClass.SliceConfig build() {
+        context.ContextOuterClass.SliceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -18402,22 +34238,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Link buildPartial() {
-        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
+      public context.ContextOuterClass.SliceConfig buildPartial() {
+        context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
         int from_bitField0_ = bitField0_;
-        if (linkIdBuilder_ == null) {
-          result.linkId_ = linkId_;
-        } else {
-          result.linkId_ = linkIdBuilder_.build();
-        }
-        if (linkEndpointIdsBuilder_ == null) {
+        if (configRulesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.linkEndpointIds_ = linkEndpointIds_;
+          result.configRules_ = configRules_;
         } else {
-          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -18457,42 +34288,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Link) {
-          return mergeFrom((context.ContextOuterClass.Link)other);
+        if (other instanceof context.ContextOuterClass.SliceConfig) {
+          return mergeFrom((context.ContextOuterClass.SliceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Link other) {
-        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
-        if (other.hasLinkId()) {
-          mergeLinkId(other.getLinkId());
-        }
-        if (linkEndpointIdsBuilder_ == null) {
-          if (!other.linkEndpointIds_.isEmpty()) {
-            if (linkEndpointIds_.isEmpty()) {
-              linkEndpointIds_ = other.linkEndpointIds_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceConfig other) {
+        if (other == context.ContextOuterClass.SliceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureLinkEndpointIdsIsMutable();
-              linkEndpointIds_.addAll(other.linkEndpointIds_);
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
             }
             onChanged();
           }
         } else {
-          if (!other.linkEndpointIds_.isEmpty()) {
-            if (linkEndpointIdsBuilder_.isEmpty()) {
-              linkEndpointIdsBuilder_.dispose();
-              linkEndpointIdsBuilder_ = null;
-              linkEndpointIds_ = other.linkEndpointIds_;
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              linkEndpointIdsBuilder_ = 
+              configRulesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkEndpointIdsFieldBuilder() : null;
+                   getConfigRulesFieldBuilder() : null;
             } else {
-              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
+              configRulesBuilder_.addAllMessages(other.configRules_);
             }
           }
         }
@@ -18511,11 +34339,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Link parsedMessage = null;
+        context.ContextOuterClass.SliceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -18526,363 +34354,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private context.ContextOuterClass.LinkId linkId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       * @return Whether the linkId field is set.
-       */
-      public boolean hasLinkId() {
-        return linkIdBuilder_ != null || linkId_ != null;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       * @return The linkId.
-       */
-      public context.ContextOuterClass.LinkId getLinkId() {
-        if (linkIdBuilder_ == null) {
-          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        } else {
-          return linkIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          linkId_ = value;
-          onChanged();
-        } else {
-          linkIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder setLinkId(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdBuilder_ == null) {
-          linkId_ = builderForValue.build();
-          onChanged();
-        } else {
-          linkIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (linkId_ != null) {
-            linkId_ =
-              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
-          } else {
-            linkId_ = value;
-          }
-          onChanged();
-        } else {
-          linkIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public Builder clearLinkId() {
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
-          onChanged();
-        } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
-        
-        onChanged();
-        return getLinkIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-        if (linkIdBuilder_ != null) {
-          return linkIdBuilder_.getMessageOrBuilder();
-        } else {
-          return linkId_ == null ?
-              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdFieldBuilder() {
-        if (linkIdBuilder_ == null) {
-          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  getLinkId(),
-                  getParentForChildren(),
-                  isClean());
-          linkId_ = null;
-        }
-        return linkIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
         java.util.Collections.emptyList();
-      private void ensureLinkEndpointIdsIsMutable() {
+      private void ensureConfigRulesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
-        if (linkEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
         } else {
-          return linkEndpointIdsBuilder_.getMessageList();
+          return configRulesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public int getLinkEndpointIdsCount() {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.size();
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return linkEndpointIdsBuilder_.getCount();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.get(index);
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
         } else {
-          return linkEndpointIdsBuilder_.getMessage(index);
+          return configRulesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.set(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.setMessage(index, value);
+          configRulesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.set(index, builderForValue.build());
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(value);
+          configRulesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(index, value);
+          configRulesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addLinkEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(builderForValue.build());
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(index, builderForValue.build());
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addAllLinkEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkEndpointIds_);
+              values, configRules_);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addAllMessages(values);
+          configRulesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearLinkEndpointIds() {
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIds_ = java.util.Collections.emptyList();
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder removeLinkEndpointIds(int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.remove(index);
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.remove(index);
+          configRulesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
           int index) {
-        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
           int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.get(index);  } else {
-          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getLinkEndpointIdsOrBuilderList() {
-        if (linkEndpointIdsBuilder_ != null) {
-          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
-        return getLinkEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
           int index) {
-        return getLinkEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getLinkEndpointIdsBuilderList() {
-        return getLinkEndpointIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getLinkEndpointIdsFieldBuilder() {
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  linkEndpointIds_,
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          linkEndpointIds_ = null;
+          configRules_ = null;
         }
-        return linkEndpointIdsBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -18897,95 +34606,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Link)
+      // @@protoc_insertion_point(builder_scope:context.SliceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Link)
-    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceConfig)
+    private static final context.ContextOuterClass.SliceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceConfig();
     }
 
-    public static context.ContextOuterClass.Link getDefaultInstance() {
+    public static context.ContextOuterClass.SliceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Link>
-        PARSER = new com.google.protobuf.AbstractParser<Link>() {
+    private static final com.google.protobuf.Parser<SliceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<SliceConfig>() {
       @java.lang.Override
-      public Link parsePartialFrom(
+      public SliceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Link(input, extensionRegistry);
+        return new SliceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Link> parser() {
+    public static com.google.protobuf.Parser<SliceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Link> getParserForType() {
+    public com.google.protobuf.Parser<SliceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Link getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
+  public interface SliceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.LinkId> 
-        getLinkIdsList();
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.LinkId getLinkIds(int index);
+    context.ContextOuterClass.SliceId getSliceIds(int index);
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    int getLinkIdsCount();
+    int getSliceIdsCount();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.LinkIdList}
+   * Protobuf type {@code context.SliceIdList}
    */
-  public static final class LinkIdList extends
+  public static final class SliceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkIdList)
-      LinkIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceIdList)
+      SliceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkIdList.newBuilder() to construct.
-    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceIdList.newBuilder() to construct.
+    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkIdList() {
-      linkIds_ = java.util.Collections.emptyList();
+    private SliceIdList() {
+      sliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkIdList();
+      return new SliceIdList();
     }
 
     @java.lang.Override
@@ -18993,7 +34702,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkIdList(
+    private SliceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -19014,11 +34723,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              linkIds_.add(
-                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -19037,7 +34746,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -19045,55 +34754,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
     }
 
-    public static final int LINK_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    public static final int SLICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-      return linkIds_;
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList() {
-      return linkIds_;
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public int getLinkIdsCount() {
-      return linkIds_.size();
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkIds(int index) {
-      return linkIds_.get(index);
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index) {
-      return linkIds_.get(index);
+      return sliceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -19110,8 +34819,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < linkIds_.size(); i++) {
-        output.writeMessage(1, linkIds_.get(i));
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(1, sliceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -19122,9 +34831,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < linkIds_.size(); i++) {
+      for (int i = 0; i < sliceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, linkIds_.get(i));
+          .computeMessageSize(1, sliceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -19136,13 +34845,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
+      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
 
-      if (!getLinkIdsList()
-          .equals(other.getLinkIdsList())) return false;
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -19154,78 +34863,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getLinkIdsCount() > 0) {
-        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkIdsList().hashCode();
+      if (getSliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -19238,7 +34947,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -19254,26 +34963,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkIdList}
+     * Protobuf type {@code context.SliceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
-        context.ContextOuterClass.LinkIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
+        context.ContextOuterClass.SliceIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -19286,17 +34995,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinkIdsFieldBuilder();
+          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          linkIdsBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
@@ -19304,17 +35013,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
+      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList build() {
-        context.ContextOuterClass.LinkIdList result = buildPartial();
+      public context.ContextOuterClass.SliceIdList build() {
+        context.ContextOuterClass.SliceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -19322,17 +35031,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList buildPartial() {
-        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
+      public context.ContextOuterClass.SliceIdList buildPartial() {
+        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
         int from_bitField0_ = bitField0_;
-        if (linkIdsBuilder_ == null) {
+        if (sliceIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.linkIds_ = linkIds_;
+          result.sliceIds_ = sliceIds_;
         } else {
-          result.linkIds_ = linkIdsBuilder_.build();
+          result.sliceIds_ = sliceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -19372,39 +35081,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkIdList) {
-          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
+        if (other instanceof context.ContextOuterClass.SliceIdList) {
+          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
-        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
-        if (linkIdsBuilder_ == null) {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIds_.isEmpty()) {
-              linkIds_ = other.linkIds_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
+        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
+        if (sliceIdsBuilder_ == null) {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIds_.isEmpty()) {
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureLinkIdsIsMutable();
-              linkIds_.addAll(other.linkIds_);
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIdsBuilder_.isEmpty()) {
-              linkIdsBuilder_.dispose();
-              linkIdsBuilder_ = null;
-              linkIds_ = other.linkIds_;
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              linkIdsBuilder_ = 
+              sliceIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkIdsFieldBuilder() : null;
+                   getSliceIdsFieldBuilder() : null;
             } else {
-              linkIdsBuilder_.addAllMessages(other.linkIds_);
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
             }
           }
         }
@@ -19423,11 +35132,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkIdList parsedMessage = null;
+        context.ContextOuterClass.SliceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -19438,244 +35147,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
         java.util.Collections.emptyList();
-      private void ensureLinkIdsIsMutable() {
+      private void ensureSliceIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
 
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-        if (linkIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkIds_);
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
         } else {
-          return linkIdsBuilder_.getMessageList();
+          return sliceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public int getLinkIdsCount() {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.size();
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
         } else {
-          return linkIdsBuilder_.getCount();
+          return sliceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkId getLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
         } else {
-          return linkIdsBuilder_.getMessage(index);
+          return sliceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, value);
+          sliceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, builderForValue.build());
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, builderForValue.build());
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(value);
+          sliceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, value);
+          sliceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addLinkIds(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(builderForValue.build());
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(builderForValue.build());
+          sliceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, builderForValue.build());
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, builderForValue.build());
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addAllLinkIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkIds_);
+              values, sliceIds_);
           onChanged();
         } else {
-          linkIdsBuilder_.addAllMessages(values);
+          sliceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearLinkIds() {
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          linkIdsBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder removeLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.remove(index);
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
           onChanged();
         } else {
-          linkIdsBuilder_.remove(index);
+          sliceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
           int index) {
-        return getLinkIdsFieldBuilder().getBuilder(index);
+        return getSliceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
           int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);  } else {
-          return linkIdsBuilder_.getMessageOrBuilder(index);
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-           getLinkIdsOrBuilderList() {
-        if (linkIdsBuilder_ != null) {
-          return linkIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(linkIds_);
+          return java.util.Collections.unmodifiableList(sliceIds_);
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
-        return getLinkIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.LinkId.getDefaultInstance());
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
           int index) {
-        return getLinkIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
-           getLinkIdsBuilderList() {
-        return getLinkIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdsFieldBuilder() {
-        if (linkIdsBuilder_ == null) {
-          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  linkIds_,
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          linkIds_ = null;
+          sliceIds_ = null;
         }
-        return linkIdsBuilder_;
+        return sliceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -19690,95 +35399,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
+      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkIdList)
-    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceIdList)
+    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
     }
 
-    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkIdList>
-        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
+    private static final com.google.protobuf.Parser<SliceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
       @java.lang.Override
-      public LinkIdList parsePartialFrom(
+      public SliceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkIdList(input, extensionRegistry);
+        return new SliceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkIdList> parser() {
+    public static com.google.protobuf.Parser<SliceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
+    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkList)
+  public interface SliceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Link> 
-        getLinksList();
+    java.util.List<context.ContextOuterClass.Slice> 
+        getSlicesList();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.Link getLinks(int index);
+    context.ContextOuterClass.Slice getSlices(int index);
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    int getLinksCount();
+    int getSlicesCount();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-        getLinksOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.LinkList}
+   * Protobuf type {@code context.SliceList}
    */
-  public static final class LinkList extends
+  public static final class SliceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkList)
-      LinkListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceList)
+      SliceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkList.newBuilder() to construct.
-    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceList.newBuilder() to construct.
+    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkList() {
-      links_ = java.util.Collections.emptyList();
+    private SliceList() {
+      slices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkList();
+      return new SliceList();
     }
 
     @java.lang.Override
@@ -19786,7 +35495,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkList(
+    private SliceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -19807,11 +35516,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
+                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              links_.add(
-                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
+              slices_.add(
+                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -19830,7 +35539,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          links_ = java.util.Collections.unmodifiableList(links_);
+          slices_ = java.util.Collections.unmodifiableList(slices_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -19838,55 +35547,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
     }
 
-    public static final int LINKS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Link> links_;
+    public static final int SLICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Slice> slices_;
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
-      return links_;
+    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+      return slices_;
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-        getLinksOrBuilderList() {
-      return links_;
+    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList() {
+      return slices_;
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public int getLinksCount() {
-      return links_.size();
+    public int getSlicesCount() {
+      return slices_.size();
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Link getLinks(int index) {
-      return links_.get(index);
+    public context.ContextOuterClass.Slice getSlices(int index) {
+      return slices_.get(index);
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
         int index) {
-      return links_.get(index);
+      return slices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -19903,8 +35612,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < links_.size(); i++) {
-        output.writeMessage(1, links_.get(i));
+      for (int i = 0; i < slices_.size(); i++) {
+        output.writeMessage(1, slices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -19915,9 +35624,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < links_.size(); i++) {
+      for (int i = 0; i < slices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, links_.get(i));
+          .computeMessageSize(1, slices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -19929,13 +35638,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
+      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
 
-      if (!getLinksList()
-          .equals(other.getLinksList())) return false;
+      if (!getSlicesList()
+          .equals(other.getSlicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -19947,78 +35656,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getLinksCount() > 0) {
-        hash = (37 * hash) + LINKS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinksList().hashCode();
+      if (getSlicesCount() > 0) {
+        hash = (37 * hash) + SLICES_FIELD_NUMBER;
+        hash = (53 * hash) + getSlicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -20031,7 +35740,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -20047,26 +35756,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkList}
+     * Protobuf type {@code context.SliceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkList)
-        context.ContextOuterClass.LinkListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceList)
+        context.ContextOuterClass.SliceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -20079,17 +35788,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinksFieldBuilder();
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linksBuilder_ == null) {
-          links_ = java.util.Collections.emptyList();
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          linksBuilder_.clear();
+          slicesBuilder_.clear();
         }
         return this;
       }
@@ -20097,17 +35806,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkList.getDefaultInstance();
+      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList build() {
-        context.ContextOuterClass.LinkList result = buildPartial();
+      public context.ContextOuterClass.SliceList build() {
+        context.ContextOuterClass.SliceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -20115,17 +35824,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList buildPartial() {
-        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
+      public context.ContextOuterClass.SliceList buildPartial() {
+        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
         int from_bitField0_ = bitField0_;
-        if (linksBuilder_ == null) {
+        if (slicesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            links_ = java.util.Collections.unmodifiableList(links_);
+            slices_ = java.util.Collections.unmodifiableList(slices_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.links_ = links_;
+          result.slices_ = slices_;
         } else {
-          result.links_ = linksBuilder_.build();
+          result.slices_ = slicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -20165,39 +35874,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkList) {
-          return mergeFrom((context.ContextOuterClass.LinkList)other);
+        if (other instanceof context.ContextOuterClass.SliceList) {
+          return mergeFrom((context.ContextOuterClass.SliceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
-        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
-        if (linksBuilder_ == null) {
-          if (!other.links_.isEmpty()) {
-            if (links_.isEmpty()) {
-              links_ = other.links_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
+        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
+        if (slicesBuilder_ == null) {
+          if (!other.slices_.isEmpty()) {
+            if (slices_.isEmpty()) {
+              slices_ = other.slices_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureLinksIsMutable();
-              links_.addAll(other.links_);
+              ensureSlicesIsMutable();
+              slices_.addAll(other.slices_);
             }
             onChanged();
           }
         } else {
-          if (!other.links_.isEmpty()) {
-            if (linksBuilder_.isEmpty()) {
-              linksBuilder_.dispose();
-              linksBuilder_ = null;
-              links_ = other.links_;
+          if (!other.slices_.isEmpty()) {
+            if (slicesBuilder_.isEmpty()) {
+              slicesBuilder_.dispose();
+              slicesBuilder_ = null;
+              slices_ = other.slices_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              linksBuilder_ = 
+              slicesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinksFieldBuilder() : null;
+                   getSlicesFieldBuilder() : null;
             } else {
-              linksBuilder_.addAllMessages(other.links_);
+              slicesBuilder_.addAllMessages(other.slices_);
             }
           }
         }
@@ -20216,11 +35925,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkList parsedMessage = null;
+        context.ContextOuterClass.SliceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -20231,244 +35940,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Link> links_ =
+      private java.util.List<context.ContextOuterClass.Slice> slices_ =
         java.util.Collections.emptyList();
-      private void ensureLinksIsMutable() {
+      private void ensureSlicesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
+          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
-        if (linksBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(links_);
+      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+        if (slicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(slices_);
         } else {
-          return linksBuilder_.getMessageList();
+          return slicesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public int getLinksCount() {
-        if (linksBuilder_ == null) {
-          return links_.size();
+      public int getSlicesCount() {
+        if (slicesBuilder_ == null) {
+          return slices_.size();
         } else {
-          return linksBuilder_.getCount();
+          return slicesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Link getLinks(int index) {
-        if (linksBuilder_ == null) {
-          return links_.get(index);
+      public context.ContextOuterClass.Slice getSlices(int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);
         } else {
-          return linksBuilder_.getMessage(index);
+          return slicesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setLinks(
-          int index, context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinksIsMutable();
-          links_.set(index, value);
+          ensureSlicesIsMutable();
+          slices_.set(index, value);
           onChanged();
         } else {
-          linksBuilder_.setMessage(index, value);
+          slicesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setLinks(
-          int index, context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.set(index, builderForValue.build());
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          linksBuilder_.setMessage(index, builderForValue.build());
+          slicesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder addLinks(context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
+      public Builder addSlices(context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinksIsMutable();
-          links_.add(value);
+          ensureSlicesIsMutable();
+          slices_.add(value);
           onChanged();
         } else {
-          linksBuilder_.addMessage(value);
+          slicesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder addLinks(
-          int index, context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinksIsMutable();
-          links_.add(index, value);
+          ensureSlicesIsMutable();
+          slices_.add(index, value);
           onChanged();
         } else {
-          linksBuilder_.addMessage(index, value);
+          slicesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder addLinks(
-          context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.add(builderForValue.build());
+      public Builder addSlices(
+          context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(builderForValue.build());
           onChanged();
         } else {
-          linksBuilder_.addMessage(builderForValue.build());
+          slicesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder addLinks(
-          int index, context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.add(index, builderForValue.build());
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(index, builderForValue.build());
           onChanged();
         } else {
-          linksBuilder_.addMessage(index, builderForValue.build());
+          slicesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder addAllLinks(
-          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
+      public Builder addAllSlices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, links_);
+              values, slices_);
           onChanged();
         } else {
-          linksBuilder_.addAllMessages(values);
+          slicesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearLinks() {
-        if (linksBuilder_ == null) {
-          links_ = java.util.Collections.emptyList();
+      public Builder clearSlices() {
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          linksBuilder_.clear();
+          slicesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder removeLinks(int index) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.remove(index);
+      public Builder removeSlices(int index) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.remove(index);
           onChanged();
         } else {
-          linksBuilder_.remove(index);
+          slicesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Link.Builder getLinksBuilder(
+      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
           int index) {
-        return getLinksFieldBuilder().getBuilder(index);
+        return getSlicesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
           int index) {
-        if (linksBuilder_ == null) {
-          return links_.get(index);  } else {
-          return linksBuilder_.getMessageOrBuilder(index);
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);  } else {
+          return slicesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-           getLinksOrBuilderList() {
-        if (linksBuilder_ != null) {
-          return linksBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+           getSlicesOrBuilderList() {
+        if (slicesBuilder_ != null) {
+          return slicesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(links_);
+          return java.util.Collections.unmodifiableList(slices_);
         }
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
-        return getLinksFieldBuilder().addBuilder(
-            context.ContextOuterClass.Link.getDefaultInstance());
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
+        return getSlicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Link.Builder addLinksBuilder(
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
           int index) {
-        return getLinksFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Link.getDefaultInstance());
+        return getSlicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Link.Builder> 
-           getLinksBuilderList() {
-        return getLinksFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Slice.Builder> 
+           getSlicesBuilderList() {
+        return getSlicesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
-          getLinksFieldBuilder() {
-        if (linksBuilder_ == null) {
-          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
-                  links_,
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
+          getSlicesFieldBuilder() {
+        if (slicesBuilder_ == null) {
+          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
+                  slices_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          links_ = null;
+          slices_ = null;
         }
-        return linksBuilder_;
+        return slicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -20483,48 +36192,48 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkList)
+      // @@protoc_insertion_point(builder_scope:context.SliceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkList)
-    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceList)
+    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
     }
 
-    public static context.ContextOuterClass.LinkList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkList>
-        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
+    private static final com.google.protobuf.Parser<SliceList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
       @java.lang.Override
-      public LinkList parsePartialFrom(
+      public SliceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkList(input, extensionRegistry);
+        return new SliceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkList> parser() {
+    public static com.google.protobuf.Parser<SliceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkList> getParserForType() {
+    public com.google.protobuf.Parser<SliceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
+  public interface SliceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -20543,40 +36252,40 @@ public final class ContextOuterClass {
     context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return Whether the linkId field is set.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
      */
-    boolean hasLinkId();
+    boolean hasSliceId();
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return The linkId.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
      */
-    context.ContextOuterClass.LinkId getLinkId();
+    context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <code>.context.LinkId link_id = 2;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.LinkEvent}
+   * Protobuf type {@code context.SliceEvent}
    */
-  public static final class LinkEvent extends
+  public static final class SliceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkEvent)
-      LinkEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceEvent)
+      SliceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkEvent.newBuilder() to construct.
-    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceEvent.newBuilder() to construct.
+    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkEvent() {
+    private SliceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkEvent();
+      return new SliceEvent();
     }
 
     @java.lang.Override
@@ -20584,7 +36293,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkEvent(
+    private SliceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -20616,14 +36325,14 @@ public final class ContextOuterClass {
               break;
             }
             case 18: {
-              context.ContextOuterClass.LinkId.Builder subBuilder = null;
-              if (linkId_ != null) {
-                subBuilder = linkId_.toBuilder();
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
               }
-              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(linkId_);
-                linkId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -20649,15 +36358,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
     }
 
     public static final int EVENT_FIELD_NUMBER = 1;
@@ -20686,30 +36395,30 @@ public final class ContextOuterClass {
       return getEvent();
     }
 
-    public static final int LINK_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.LinkId linkId_;
+    public static final int SLICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return Whether the linkId field is set.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public boolean hasLinkId() {
-      return linkId_ != null;
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return The linkId.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkId() {
-      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>.context.LinkId link_id = 2;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-      return getLinkId();
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -20729,8 +36438,8 @@ public final class ContextOuterClass {
       if (event_ != null) {
         output.writeMessage(1, getEvent());
       }
-      if (linkId_ != null) {
-        output.writeMessage(2, getLinkId());
+      if (sliceId_ != null) {
+        output.writeMessage(2, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -20745,9 +36454,9 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getEvent());
       }
-      if (linkId_ != null) {
+      if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getLinkId());
+          .computeMessageSize(2, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -20759,20 +36468,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
+      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
 
       if (hasEvent() != other.hasEvent()) return false;
       if (hasEvent()) {
         if (!getEvent()
             .equals(other.getEvent())) return false;
       }
-      if (hasLinkId() != other.hasLinkId()) return false;
-      if (hasLinkId()) {
-        if (!getLinkId()
-            .equals(other.getLinkId())) return false;
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -20789,78 +36498,78 @@ public final class ContextOuterClass {
         hash = (37 * hash) + EVENT_FIELD_NUMBER;
         hash = (53 * hash) + getEvent().hashCode();
       }
-      if (hasLinkId()) {
-        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkId().hashCode();
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -20873,7 +36582,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -20889,26 +36598,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkEvent}
+     * Protobuf type {@code context.SliceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
-        context.ContextOuterClass.LinkEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
+        context.ContextOuterClass.SliceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
+      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -20932,11 +36641,11 @@ public final class ContextOuterClass {
           event_ = null;
           eventBuilder_ = null;
         }
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
         return this;
       }
@@ -20944,17 +36653,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
+      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent build() {
-        context.ContextOuterClass.LinkEvent result = buildPartial();
+      public context.ContextOuterClass.SliceEvent build() {
+        context.ContextOuterClass.SliceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -20962,17 +36671,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent buildPartial() {
-        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
+      public context.ContextOuterClass.SliceEvent buildPartial() {
+        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
         if (eventBuilder_ == null) {
           result.event_ = event_;
         } else {
           result.event_ = eventBuilder_.build();
         }
-        if (linkIdBuilder_ == null) {
-          result.linkId_ = linkId_;
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
         } else {
-          result.linkId_ = linkIdBuilder_.build();
+          result.sliceId_ = sliceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -21012,21 +36721,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkEvent) {
-          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
+        if (other instanceof context.ContextOuterClass.SliceEvent) {
+          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
-        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
+        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
         if (other.hasEvent()) {
           mergeEvent(other.getEvent());
         }
-        if (other.hasLinkId()) {
-          mergeLinkId(other.getLinkId());
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -21043,11 +36752,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkEvent parsedMessage = null;
+        context.ContextOuterClass.SliceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -21176,123 +36885,123 @@ public final class ContextOuterClass {
         return eventBuilder_;
       }
 
-      private context.ContextOuterClass.LinkId linkId_;
+      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>.context.LinkId link_id = 2;</code>
-       * @return Whether the linkId field is set.
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return Whether the sliceId field is set.
        */
-      public boolean hasLinkId() {
-        return linkIdBuilder_ != null || linkId_ != null;
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
-       * @return The linkId.
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.LinkId getLinkId() {
-        if (linkIdBuilder_ == null) {
-          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return linkIdBuilder_.getMessage();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          linkId_ = value;
+          sliceId_ = value;
           onChanged();
         } else {
-          linkIdBuilder_.setMessage(value);
+          sliceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder setLinkId(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdBuilder_ == null) {
-          linkId_ = builderForValue.build();
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdBuilder_.setMessage(builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (linkId_ != null) {
-            linkId_ =
-              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
           } else {
-            linkId_ = value;
+            sliceId_ = value;
           }
           onChanged();
         } else {
-          linkIdBuilder_.mergeFrom(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder clearLinkId() {
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
         
         onChanged();
-        return getLinkIdFieldBuilder().getBuilder();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-        if (linkIdBuilder_ != null) {
-          return linkIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          return linkId_ == null ?
-              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdFieldBuilder() {
-        if (linkIdBuilder_ == null) {
-          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  getLinkId(),
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
                   getParentForChildren(),
                   isClean());
-          linkId_ = null;
+          sliceId_ = null;
         }
-        return linkIdBuilder_;
+        return sliceIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -21307,104 +37016,89 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
+      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkEvent)
-    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceEvent)
+    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
     }
 
-    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
+    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkEvent>
-        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
+    private static final com.google.protobuf.Parser<SliceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
       @java.lang.Override
-      public LinkEvent parsePartialFrom(
+      public SliceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkEvent(input, extensionRegistry);
+        return new SliceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkEvent> parser() {
+    public static com.google.protobuf.Parser<SliceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
+    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceId)
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    boolean hasContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
-     */
-    context.ContextOuterClass.ContextId getContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
-
-    /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return Whether the serviceUuid field is set.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
-    boolean hasServiceUuid();
+    boolean hasConnectionUuid();
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return The serviceUuid.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
-    context.ContextOuterClass.Uuid getServiceUuid();
+    context.ContextOuterClass.Uuid getConnectionUuid();
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
   }
   /**
    * <pre>
-   * ----- Service -------------------------------------------------------------------------------------------------------
+   * ----- Connection ----------------------------------------------------------------------------------------------------
    * </pre>
    *
-   * Protobuf type {@code context.ServiceId}
+   * Protobuf type {@code context.ConnectionId}
    */
-  public static final class ServiceId extends
+  public static final class ConnectionId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceId)
-      ServiceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceId.newBuilder() to construct.
-    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceId() {
+    private ConnectionId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceId();
+      return new ConnectionId();
     }
 
     @java.lang.Override
@@ -21412,7 +37106,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceId(
+    private ConnectionId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -21431,27 +37125,14 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
               context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (serviceUuid_ != null) {
-                subBuilder = serviceUuid_.toBuilder();
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
               }
-              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceUuid_);
-                serviceUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -21477,67 +37158,41 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
-    }
-
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
-    }
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
-    }
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
     }
 
-    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid serviceUuid_;
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return Whether the serviceUuid field is set.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
     @java.lang.Override
-    public boolean hasServiceUuid() {
-      return serviceUuid_ != null;
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
     }
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return The serviceUuid.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getServiceUuid() {
-      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
     }
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
+     * <code>.context.Uuid connection_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-      return getServiceUuid();
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -21554,11 +37209,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
-      }
-      if (serviceUuid_ != null) {
-        output.writeMessage(2, getServiceUuid());
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -21569,13 +37221,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
-      }
-      if (serviceUuid_ != null) {
+      if (connectionUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceUuid());
+          .computeMessageSize(1, getConnectionUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -21587,20 +37235,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (hasServiceUuid() != other.hasServiceUuid()) return false;
-      if (hasServiceUuid()) {
-        if (!getServiceUuid()
-            .equals(other.getServiceUuid())) return false;
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -21613,82 +37256,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
-      }
-      if (hasServiceUuid()) {
-        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceUuid().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceId parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -21701,7 +37340,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -21718,29 +37357,29 @@ public final class ContextOuterClass {
     }
     /**
      * <pre>
-     * ----- Service -------------------------------------------------------------------------------------------------------
+     * ----- Connection ----------------------------------------------------------------------------------------------------
      * </pre>
      *
-     * Protobuf type {@code context.ServiceId}
+     * Protobuf type {@code context.ConnectionId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceId)
-        context.ContextOuterClass.ServiceIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -21758,17 +37397,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
-        } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
-        }
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = null;
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
         } else {
-          serviceUuid_ = null;
-          serviceUuidBuilder_ = null;
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
         return this;
       }
@@ -21776,17 +37409,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceId.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId build() {
-        context.ContextOuterClass.ServiceId result = buildPartial();
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -21794,17 +37427,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId buildPartial() {
-        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
-        } else {
-          result.contextId_ = contextIdBuilder_.build();
-        }
-        if (serviceUuidBuilder_ == null) {
-          result.serviceUuid_ = serviceUuid_;
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
         } else {
-          result.serviceUuid_ = serviceUuidBuilder_.build();
+          result.connectionUuid_ = connectionUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -21844,21 +37472,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceId) {
-          return mergeFrom((context.ContextOuterClass.ServiceId)other);
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
-        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (other.hasServiceUuid()) {
-          mergeServiceUuid(other.getServiceUuid());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -21875,11 +37500,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceId parsedMessage = null;
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -21889,242 +37514,123 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.ContextId contextId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
-       */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
-       */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
-        } else {
-          return contextIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          contextId_ = value;
-          onChanged();
-        } else {
-          contextIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
-          onChanged();
-        } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
-          } else {
-            contextId_ = value;
-          }
-          onChanged();
-        } else {
-          contextIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
-          onChanged();
-        } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
-        
-        onChanged();
-        return getContextIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
-        } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
-        }
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
-                  getParentForChildren(),
-                  isClean());
-          contextId_ = null;
-        }
-        return contextIdBuilder_;
-      }
-
-      private context.ContextOuterClass.Uuid serviceUuid_;
+      private context.ContextOuterClass.Uuid connectionUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
-       * @return Whether the serviceUuid field is set.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public boolean hasServiceUuid() {
-        return serviceUuidBuilder_ != null || serviceUuid_ != null;
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
-       * @return The serviceUuid.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
        */
-      public context.ContextOuterClass.Uuid getServiceUuid() {
-        if (serviceUuidBuilder_ == null) {
-          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return serviceUuidBuilder_.getMessage();
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
-        if (serviceUuidBuilder_ == null) {
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceUuid_ = value;
+          connectionUuid_ = value;
           onChanged();
         } else {
-          serviceUuidBuilder_.setMessage(value);
+          connectionUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setServiceUuid(
+      public Builder setConnectionUuid(
           context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = builderForValue.build();
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
           onChanged();
         } else {
-          serviceUuidBuilder_.setMessage(builderForValue.build());
+          connectionUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
-        if (serviceUuidBuilder_ == null) {
-          if (serviceUuid_ != null) {
-            serviceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
           } else {
-            serviceUuid_ = value;
+            connectionUuid_ = value;
           }
           onChanged();
         } else {
-          serviceUuidBuilder_.mergeFrom(value);
+          connectionUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder clearServiceUuid() {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = null;
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
           onChanged();
         } else {
-          serviceUuid_ = null;
-          serviceUuidBuilder_ = null;
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
         
         onChanged();
-        return getServiceUuidFieldBuilder().getBuilder();
+        return getConnectionUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-        if (serviceUuidBuilder_ != null) {
-          return serviceUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
         } else {
-          return serviceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         }
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getServiceUuidFieldBuilder() {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getServiceUuid(),
+                  getConnectionUuid(),
                   getParentForChildren(),
                   isClean());
-          serviceUuid_ = null;
+          connectionUuid_ = null;
         }
-        return serviceUuidBuilder_;
+        return connectionUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -22139,177 +37645,83 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceId)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceId)
-    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceId>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public ServiceId parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceId(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<ServiceId> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<ServiceId> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ServiceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Service)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
-
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The enum numeric value on the wire for serviceType.
-     */
-    int getServiceTypeValue();
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The serviceType.
-     */
-    context.ContextOuterClass.ServiceTypeEnum getServiceType();
-
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getServiceEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    int getServiceEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getServiceEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-        int index);
+        return new ConnectionId(input, extensionRegistry);
+      }
+    };
 
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    java.util.List<context.ContextOuterClass.Constraint> 
-        getServiceConstraintsList();
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    context.ContextOuterClass.Constraint getServiceConstraints(int index);
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    int getServiceConstraintsCount();
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getServiceConstraintsOrBuilderList();
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-        int index);
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
+      return PARSER;
+    }
 
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return Whether the serviceStatus field is set.
-     */
-    boolean hasServiceStatus();
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return The serviceStatus.
-     */
-    context.ContextOuterClass.ServiceStatus getServiceStatus();
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     */
-    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionSettings_L0OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return Whether the serviceConfig field is set.
-     */
-    boolean hasServiceConfig();
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return The serviceConfig.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    context.ContextOuterClass.ServiceConfig getServiceConfig();
+    java.lang.String getLspSymbolicName();
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
-    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
+    com.google.protobuf.ByteString
+        getLspSymbolicNameBytes();
   }
   /**
-   * Protobuf type {@code context.Service}
+   * Protobuf type {@code context.ConnectionSettings_L0}
    */
-  public static final class Service extends
+  public static final class ConnectionSettings_L0 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Service)
-      ServiceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
+      ConnectionSettings_L0OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Service.newBuilder() to construct.
-    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L0.newBuilder() to construct.
+    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Service() {
-      serviceType_ = 0;
-      serviceEndpointIds_ = java.util.Collections.emptyList();
-      serviceConstraints_ = java.util.Collections.emptyList();
+    private ConnectionSettings_L0() {
+      lspSymbolicName_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Service();
+      return new ConnectionSettings_L0();
     }
 
     @java.lang.Override
@@ -22317,7 +37729,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Service(
+    private ConnectionSettings_L0(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -22325,7 +37737,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -22337,66 +37748,9 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 16: {
-              int rawValue = input.readEnum();
-
-              serviceType_ = rawValue;
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              serviceEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              serviceConstraints_.add(
-                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
-              if (serviceStatus_ != null) {
-                subBuilder = serviceStatus_.toBuilder();
-              }
-              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceStatus_);
-                serviceStatus_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
-              if (serviceConfig_ != null) {
-                subBuilder = serviceConfig_.toBuilder();
-              }
-              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceConfig_);
-                serviceConfig_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -22414,204 +37768,59 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return The serviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
-    }
-
-    public static final int SERVICE_TYPE_FIELD_NUMBER = 2;
-    private int serviceType_;
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The enum numeric value on the wire for serviceType.
-     */
-    @java.lang.Override public int getServiceTypeValue() {
-      return serviceType_;
-    }
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The serviceType.
-     */
-    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
-      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
-    }
-
-    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
-      return serviceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getServiceEndpointIdsOrBuilderList() {
-      return serviceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public int getServiceEndpointIdsCount() {
-      return serviceEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
-      return serviceEndpointIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-        int index) {
-      return serviceEndpointIds_.get(index);
-    }
-
-    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
-      return serviceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getServiceConstraintsOrBuilderList() {
-      return serviceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public int getServiceConstraintsCount() {
-      return serviceConstraints_.size();
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
-      return serviceConstraints_.get(index);
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-        int index) {
-      return serviceConstraints_.get(index);
-    }
-
-    public static final int SERVICE_STATUS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ServiceStatus serviceStatus_;
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return Whether the serviceStatus field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceStatus() {
-      return serviceStatus_ != null;
-    }
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return The serviceStatus.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
-      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
-    }
-    /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-      return getServiceStatus();
+              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
     }
 
-    public static final int SERVICE_CONFIG_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.ServiceConfig serviceConfig_;
-    /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return Whether the serviceConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceConfig() {
-      return serviceConfig_ != null;
-    }
+    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object lspSymbolicName_;
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return The serviceConfig.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
-      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+    public java.lang.String getLspSymbolicName() {
+      java.lang.Object ref = lspSymbolicName_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        lspSymbolicName_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-      return getServiceConfig();
+    public com.google.protobuf.ByteString
+        getLspSymbolicNameBytes() {
+      java.lang.Object ref = lspSymbolicName_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        lspSymbolicName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -22628,23 +37837,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (serviceId_ != null) {
-        output.writeMessage(1, getServiceId());
-      }
-      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(2, serviceType_);
-      }
-      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
-        output.writeMessage(3, serviceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < serviceConstraints_.size(); i++) {
-        output.writeMessage(4, serviceConstraints_.get(i));
-      }
-      if (serviceStatus_ != null) {
-        output.writeMessage(5, getServiceStatus());
-      }
-      if (serviceConfig_ != null) {
-        output.writeMessage(6, getServiceConfig());
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
       }
       unknownFields.writeTo(output);
     }
@@ -22655,29 +37849,8 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getServiceId());
-      }
-      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, serviceType_);
-      }
-      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, serviceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < serviceConstraints_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, serviceConstraints_.get(i));
-      }
-      if (serviceStatus_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getServiceStatus());
-      }
-      if (serviceConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getServiceConfig());
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -22689,31 +37862,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Service)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
+      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
 
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (serviceType_ != other.serviceType_) return false;
-      if (!getServiceEndpointIdsList()
-          .equals(other.getServiceEndpointIdsList())) return false;
-      if (!getServiceConstraintsList()
-          .equals(other.getServiceConstraintsList())) return false;
-      if (hasServiceStatus() != other.hasServiceStatus()) return false;
-      if (hasServiceStatus()) {
-        if (!getServiceStatus()
-            .equals(other.getServiceStatus())) return false;
-      }
-      if (hasServiceConfig() != other.hasServiceConfig()) return false;
-      if (hasServiceConfig()) {
-        if (!getServiceConfig()
-            .equals(other.getServiceConfig())) return false;
-      }
+      if (!getLspSymbolicName()
+          .equals(other.getLspSymbolicName())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -22725,96 +37880,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + serviceType_;
-      if (getServiceEndpointIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
-      }
-      if (getServiceConstraintsCount() > 0) {
-        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceConstraintsList().hashCode();
-      }
-      if (hasServiceStatus()) {
-        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceStatus().hashCode();
-      }
-      if (hasServiceConfig()) {
-        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceConfig().hashCode();
-      }
+      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getLspSymbolicName().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Service parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Service parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -22827,7 +37962,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -22843,26 +37978,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Service}
+     * Protobuf type {@code context.ConnectionSettings_L0}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Service)
-        context.ContextOuterClass.ServiceOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
+        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Service.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -22875,62 +38010,30 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServiceEndpointIdsFieldBuilder();
-          getServiceConstraintsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        serviceType_ = 0;
+        lspSymbolicName_ = "";
 
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          serviceEndpointIdsBuilder_.clear();
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          serviceConstraintsBuilder_.clear();
-        }
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = null;
-        } else {
-          serviceStatus_ = null;
-          serviceStatusBuilder_ = null;
-        }
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = null;
-        } else {
-          serviceConfig_ = null;
-          serviceConfigBuilder_ = null;
-        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service getDefaultInstanceForType() {
-        return context.ContextOuterClass.Service.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service build() {
-        context.ContextOuterClass.Service result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L0 build() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -22938,43 +38041,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service buildPartial() {
-        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
-        int from_bitField0_ = bitField0_;
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        result.serviceType_ = serviceType_;
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.serviceEndpointIds_ = serviceEndpointIds_;
-        } else {
-          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.serviceConstraints_ = serviceConstraints_;
-        } else {
-          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
-        }
-        if (serviceStatusBuilder_ == null) {
-          result.serviceStatus_ = serviceStatus_;
-        } else {
-          result.serviceStatus_ = serviceStatusBuilder_.build();
-        }
-        if (serviceConfigBuilder_ == null) {
-          result.serviceConfig_ = serviceConfig_;
-        } else {
-          result.serviceConfig_ = serviceConfigBuilder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
+        result.lspSymbolicName_ = lspSymbolicName_;
         onBuilt();
         return result;
       }
@@ -23013,79 +38082,19 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Service) {
-          return mergeFrom((context.ContextOuterClass.Service)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Service other) {
-        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
-        }
-        if (other.serviceType_ != 0) {
-          setServiceTypeValue(other.getServiceTypeValue());
-        }
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (!other.serviceEndpointIds_.isEmpty()) {
-            if (serviceEndpointIds_.isEmpty()) {
-              serviceEndpointIds_ = other.serviceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServiceEndpointIdsIsMutable();
-              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceEndpointIds_.isEmpty()) {
-            if (serviceEndpointIdsBuilder_.isEmpty()) {
-              serviceEndpointIdsBuilder_.dispose();
-              serviceEndpointIdsBuilder_ = null;
-              serviceEndpointIds_ = other.serviceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              serviceEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceEndpointIdsFieldBuilder() : null;
-            } else {
-              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
-            }
-          }
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          if (!other.serviceConstraints_.isEmpty()) {
-            if (serviceConstraints_.isEmpty()) {
-              serviceConstraints_ = other.serviceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureServiceConstraintsIsMutable();
-              serviceConstraints_.addAll(other.serviceConstraints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceConstraints_.isEmpty()) {
-            if (serviceConstraintsBuilder_.isEmpty()) {
-              serviceConstraintsBuilder_.dispose();
-              serviceConstraintsBuilder_ = null;
-              serviceConstraints_ = other.serviceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              serviceConstraintsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceConstraintsFieldBuilder() : null;
-            } else {
-              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
-            }
-          }
-        }
-        if (other.hasServiceStatus()) {
-          mergeServiceStatus(other.getServiceStatus());
-        }
-        if (other.hasServiceConfig()) {
-          mergeServiceConfig(other.getServiceConfig());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
+        if (!other.getLspSymbolicName().isEmpty()) {
+          lspSymbolicName_ = other.lspSymbolicName_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -23102,11 +38111,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Service parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -23115,897 +38124,1079 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       * @return The serviceId.
-       */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
-      }
+      private java.lang.Object lspSymbolicName_ = "";
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The lspSymbolicName.
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
+      public java.lang.String getLspSymbolicName() {
+        java.lang.Object ref = lspSymbolicName_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          lspSymbolicName_ = s;
+          return s;
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          return (java.lang.String) ref;
         }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The bytes for lspSymbolicName.
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
+      public com.google.protobuf.ByteString
+          getLspSymbolicNameBytes() {
+        java.lang.Object ref = lspSymbolicName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          lspSymbolicName_ = b;
+          return b;
         } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
+          return (com.google.protobuf.ByteString) ref;
         }
-        return serviceIdBuilder_;
-      }
-
-      private int serviceType_ = 0;
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return The enum numeric value on the wire for serviceType.
-       */
-      @java.lang.Override public int getServiceTypeValue() {
-        return serviceType_;
       }
       /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @param value The enum numeric value on the wire for serviceType to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setServiceTypeValue(int value) {
-        
-        serviceType_ = value;
+      public Builder setLspSymbolicName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return The serviceType.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
-        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @param value The serviceType to set.
+       * <code>string lsp_symbolic_name = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
+      public Builder clearLspSymbolicName() {
         
-        serviceType_ = value.getNumber();
+        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The bytes for lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder clearServiceType() {
+      public Builder setLspSymbolicNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
-        serviceType_ = 0;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
 
-      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
 
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        } else {
-          return serviceEndpointIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public int getServiceEndpointIdsCount() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.size();
-        } else {
-          return serviceEndpointIdsBuilder_.getCount();
-        }
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
+    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
+    }
+
+    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
+      @java.lang.Override
+      public ConnectionSettings_L0 parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings_L0(input, extensionRegistry);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.get(index);
-        } else {
-          return serviceEndpointIdsBuilder_.getMessage(index);
-        }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionSettings_L2OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
+     */
+    java.lang.String getSrcMacAddress();
+    /**
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
+     */
+    com.google.protobuf.ByteString
+        getSrcMacAddressBytes();
+
+    /**
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
+     */
+    java.lang.String getDstMacAddress();
+    /**
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstMacAddressBytes();
+
+    /**
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
+     */
+    int getEtherType();
+
+    /**
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
+     */
+    int getVlanId();
+
+    /**
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
+     */
+    int getMplsLabel();
+
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    int getMplsTrafficClass();
+  }
+  /**
+   * Protobuf type {@code context.ConnectionSettings_L2}
+   */
+  public static final class ConnectionSettings_L2 extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
+      ConnectionSettings_L2OrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionSettings_L2.newBuilder() to construct.
+    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionSettings_L2() {
+      srcMacAddress_ = "";
+      dstMacAddress_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionSettings_L2();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionSettings_L2(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder setServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              srcMacAddress_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstMacAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              etherType_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              vlanId_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              mplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              mplsTrafficClass_ = input.readUInt32();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
           }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.set(index, value);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.setMessage(index, value);
         }
-        return this;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder setServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+    }
+
+    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcMacAddress_;
+    /**
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getSrcMacAddress() {
+      java.lang.Object ref = srcMacAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcMacAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSrcMacAddressBytes() {
+      java.lang.Object ref = srcMacAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcMacAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstMacAddress_;
+    /**
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getDstMacAddress() {
+      java.lang.Object ref = dstMacAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstMacAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDstMacAddressBytes() {
+      java.lang.Object ref = dstMacAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstMacAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
+    private int etherType_;
+    /**
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
+     */
+    @java.lang.Override
+    public int getEtherType() {
+      return etherType_;
+    }
+
+    public static final int VLAN_ID_FIELD_NUMBER = 4;
+    private int vlanId_;
+    /**
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
+     */
+    @java.lang.Override
+    public int getVlanId() {
+      return vlanId_;
+    }
+
+    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
+    private int mplsLabel_;
+    /**
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
+     */
+    @java.lang.Override
+    public int getMplsLabel() {
+      return mplsLabel_;
+    }
+
+    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
+    private int mplsTrafficClass_;
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    @java.lang.Override
+    public int getMplsTrafficClass() {
+      return mplsTrafficClass_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(value);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(value);
-        }
-        return this;
+      if (!getDstMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(index, value);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      if (etherType_ != 0) {
+        output.writeUInt32(3, etherType_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      if (vlanId_ != 0) {
+        output.writeUInt32(4, vlanId_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      if (mplsLabel_ != 0) {
+        output.writeUInt32(5, mplsLabel_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addAllServiceEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceEndpointIds_);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addAllMessages(values);
-        }
-        return this;
+      if (mplsTrafficClass_ != 0) {
+        output.writeUInt32(6, mplsTrafficClass_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder clearServiceEndpointIds() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.clear();
-        }
-        return this;
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder removeServiceEndpointIds(int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.remove(index);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.remove(index);
-        }
-        return this;
+      if (!getDstMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
-          int index) {
-        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+      if (etherType_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, etherType_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-          int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.get(index);  } else {
-          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
-        }
+      if (vlanId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, vlanId_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getServiceEndpointIdsOrBuilderList() {
-        if (serviceEndpointIdsBuilder_ != null) {
-          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        }
+      if (mplsLabel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, mplsLabel_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
-        return getServiceEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      if (mplsTrafficClass_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, mplsTrafficClass_);
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
-          int index) {
-        return getServiceEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getServiceEndpointIdsBuilderList() {
-        return getServiceEndpointIdsFieldBuilder().getBuilderList();
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
+        return super.equals(obj);
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getServiceEndpointIdsFieldBuilder() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  serviceEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceEndpointIds_ = null;
-        }
-        return serviceEndpointIdsBuilder_;
+      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
+
+      if (!getSrcMacAddress()
+          .equals(other.getSrcMacAddress())) return false;
+      if (!getDstMacAddress()
+          .equals(other.getDstMacAddress())) return false;
+      if (getEtherType()
+          != other.getEtherType()) return false;
+      if (getVlanId()
+          != other.getVlanId()) return false;
+      if (getMplsLabel()
+          != other.getMplsLabel()) return false;
+      if (getMplsTrafficClass()
+          != other.getMplsTrafficClass()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcMacAddress().hashCode();
+      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstMacAddress().hashCode();
+      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEtherType();
+      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getVlanId();
+      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsLabel();
+      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsTrafficClass();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
 
-      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceConstraintsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
-          bitField0_ |= 0x00000002;
-         }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionSettings_L2}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
+        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+      }
 
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
-        if (serviceConstraintsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceConstraints_);
-        } else {
-          return serviceConstraintsBuilder_.getMessageList();
-        }
+      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public int getServiceConstraintsCount() {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.size();
-        } else {
-          return serviceConstraintsBuilder_.getCount();
-        }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.get(index);
-        } else {
-          return serviceConstraintsBuilder_.getMessage(index);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder setServiceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.set(index, value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.setMessage(index, value);
-        }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        srcMacAddress_ = "";
+
+        dstMacAddress_ = "";
+
+        etherType_ = 0;
+
+        vlanId_ = 0;
+
+        mplsLabel_ = 0;
+
+        mplsTrafficClass_ = 0;
+
         return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder setServiceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(value);
-        }
-        return this;
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(index, value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(index, value);
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionSettings_L2 build() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
+        result.srcMacAddress_ = srcMacAddress_;
+        result.dstMacAddress_ = dstMacAddress_;
+        result.etherType_ = etherType_;
+        result.vlanId_ = vlanId_;
+        result.mplsLabel_ = mplsLabel_;
+        result.mplsTrafficClass_ = mplsTrafficClass_;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(index, builderForValue.build());
-          onChanged();
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
         } else {
-          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addAllServiceConstraints(
-          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceConstraints_);
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
+        if (!other.getSrcMacAddress().isEmpty()) {
+          srcMacAddress_ = other.srcMacAddress_;
           onChanged();
-        } else {
-          serviceConstraintsBuilder_.addAllMessages(values);
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder clearServiceConstraints() {
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (!other.getDstMacAddress().isEmpty()) {
+          dstMacAddress_ = other.dstMacAddress_;
           onChanged();
-        } else {
-          serviceConstraintsBuilder_.clear();
         }
+        if (other.getEtherType() != 0) {
+          setEtherType(other.getEtherType());
+        }
+        if (other.getVlanId() != 0) {
+          setVlanId(other.getVlanId());
+        }
+        if (other.getMplsLabel() != 0) {
+          setMplsLabel(other.getMplsLabel());
+        }
+        if (other.getMplsTrafficClass() != 0) {
+          setMplsTrafficClass(other.getMplsTrafficClass());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder removeServiceConstraints(int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.remove(index);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.remove(index);
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
         return this;
       }
+
+      private java.lang.Object srcMacAddress_ = "";
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
-          int index) {
-        return getServiceConstraintsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @return The srcMacAddress.
        */
-      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-          int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.get(index);  } else {
-          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
+      public java.lang.String getSrcMacAddress() {
+        java.lang.Object ref = srcMacAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcMacAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @return The bytes for srcMacAddress.
        */
-      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-           getServiceConstraintsOrBuilderList() {
-        if (serviceConstraintsBuilder_ != null) {
-          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+      public com.google.protobuf.ByteString
+          getSrcMacAddressBytes() {
+        java.lang.Object ref = srcMacAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcMacAddress_ = b;
+          return b;
         } else {
-          return java.util.Collections.unmodifiableList(serviceConstraints_);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @param value The srcMacAddress to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
-        return getServiceConstraintsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Constraint.getDefaultInstance());
+      public Builder setSrcMacAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcMacAddress_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
-          int index) {
-        return getServiceConstraintsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      public Builder clearSrcMacAddress() {
+        
+        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @param value The bytes for srcMacAddress to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
-           getServiceConstraintsBuilderList() {
-        return getServiceConstraintsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
-          getServiceConstraintsFieldBuilder() {
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
-                  serviceConstraints_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceConstraints_ = null;
-        }
-        return serviceConstraintsBuilder_;
+      public Builder setSrcMacAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcMacAddress_ = value;
+        onChanged();
+        return this;
       }
 
-      private context.ContextOuterClass.ServiceStatus serviceStatus_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       * @return Whether the serviceStatus field is set.
-       */
-      public boolean hasServiceStatus() {
-        return serviceStatusBuilder_ != null || serviceStatus_ != null;
-      }
+      private java.lang.Object dstMacAddress_ = "";
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       * @return The serviceStatus.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The dstMacAddress.
        */
-      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
-        if (serviceStatusBuilder_ == null) {
-          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+      public java.lang.String getDstMacAddress() {
+        java.lang.Object ref = dstMacAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstMacAddress_ = s;
+          return s;
         } else {
-          return serviceStatusBuilder_.getMessage();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @return The bytes for dstMacAddress.
        */
-      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
-        if (serviceStatusBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceStatus_ = value;
-          onChanged();
+      public com.google.protobuf.ByteString
+          getDstMacAddressBytes() {
+        java.lang.Object ref = dstMacAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstMacAddress_ = b;
+          return b;
         } else {
-          serviceStatusBuilder_.setMessage(value);
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The dstMacAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder setServiceStatus(
-          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceStatusBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder setDstMacAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstMacAddress_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
-        if (serviceStatusBuilder_ == null) {
-          if (serviceStatus_ != null) {
-            serviceStatus_ =
-              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
-          } else {
-            serviceStatus_ = value;
-          }
-          onChanged();
-        } else {
-          serviceStatusBuilder_.mergeFrom(value);
-        }
-
+      public Builder clearDstMacAddress() {
+        
+        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The bytes for dstMacAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder clearServiceStatus() {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = null;
-          onChanged();
-        } else {
-          serviceStatus_ = null;
-          serviceStatusBuilder_ = null;
-        }
-
+      public Builder setDstMacAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstMacAddress_ = value;
+        onChanged();
         return this;
       }
+
+      private int etherType_ ;
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @return The etherType.
        */
-      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
-        
-        onChanged();
-        return getServiceStatusFieldBuilder().getBuilder();
+      @java.lang.Override
+      public int getEtherType() {
+        return etherType_;
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @param value The etherType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-        if (serviceStatusBuilder_ != null) {
-          return serviceStatusBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceStatus_ == null ?
-              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
-        }
+      public Builder setEtherType(int value) {
+        
+        etherType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
-          getServiceStatusFieldBuilder() {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
-                  getServiceStatus(),
-                  getParentForChildren(),
-                  isClean());
-          serviceStatus_ = null;
-        }
-        return serviceStatusBuilder_;
+      public Builder clearEtherType() {
+        
+        etherType_ = 0;
+        onChanged();
+        return this;
       }
 
-      private context.ContextOuterClass.ServiceConfig serviceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
+      private int vlanId_ ;
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       * @return Whether the serviceConfig field is set.
+       * <code>uint32 vlan_id = 4;</code>
+       * @return The vlanId.
        */
-      public boolean hasServiceConfig() {
-        return serviceConfigBuilder_ != null || serviceConfig_ != null;
+      @java.lang.Override
+      public int getVlanId() {
+        return vlanId_;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       * @return The serviceConfig.
+       * <code>uint32 vlan_id = 4;</code>
+       * @param value The vlanId to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
-        if (serviceConfigBuilder_ == null) {
-          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
-        } else {
-          return serviceConfigBuilder_.getMessage();
-        }
+      public Builder setVlanId(int value) {
+        
+        vlanId_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 vlan_id = 4;</code>
+       * @return This builder for chaining.
        */
-      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
-        if (serviceConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceConfig_ = value;
-          onChanged();
-        } else {
-          serviceConfigBuilder_.setMessage(value);
-        }
-
+      public Builder clearVlanId() {
+        
+        vlanId_ = 0;
+        onChanged();
         return this;
       }
+
+      private int mplsLabel_ ;
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @return The mplsLabel.
        */
-      public Builder setServiceConfig(
-          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceConfigBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
+      @java.lang.Override
+      public int getMplsLabel() {
+        return mplsLabel_;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @param value The mplsLabel to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
-        if (serviceConfigBuilder_ == null) {
-          if (serviceConfig_ != null) {
-            serviceConfig_ =
-              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            serviceConfig_ = value;
-          }
-          onChanged();
-        } else {
-          serviceConfigBuilder_.mergeFrom(value);
-        }
-
+      public Builder setMplsLabel(int value) {
+        
+        mplsLabel_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearServiceConfig() {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = null;
-          onChanged();
-        } else {
-          serviceConfig_ = null;
-          serviceConfigBuilder_ = null;
-        }
-
+      public Builder clearMplsLabel() {
+        
+        mplsLabel_ = 0;
+        onChanged();
         return this;
       }
+
+      private int mplsTrafficClass_ ;
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return The mplsTrafficClass.
        */
-      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
-        
-        onChanged();
-        return getServiceConfigFieldBuilder().getBuilder();
+      @java.lang.Override
+      public int getMplsTrafficClass() {
+        return mplsTrafficClass_;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @param value The mplsTrafficClass to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-        if (serviceConfigBuilder_ != null) {
-          return serviceConfigBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceConfig_ == null ?
-              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
-        }
+      public Builder setMplsTrafficClass(int value) {
+        
+        mplsTrafficClass_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
-          getServiceConfigFieldBuilder() {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
-                  getServiceConfig(),
-                  getParentForChildren(),
-                  isClean());
-          serviceConfig_ = null;
-        }
-        return serviceConfigBuilder_;
+      public Builder clearMplsTrafficClass() {
+        
+        mplsTrafficClass_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -24020,82 +39211,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Service)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Service)
-    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
+    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
     }
 
-    public static context.ContextOuterClass.Service getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Service>
-        PARSER = new com.google.protobuf.AbstractParser<Service>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
       @java.lang.Override
-      public Service parsePartialFrom(
+      public ConnectionSettings_L2 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Service(input, extensionRegistry);
+        return new ConnectionSettings_L2(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Service> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Service> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Service getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceStatusOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
+  public interface ConnectionSettings_L3OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The enum numeric value on the wire for serviceStatus.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    int getServiceStatusValue();
+    java.lang.String getSrcIpAddress();
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The serviceStatus.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
-    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
+    com.google.protobuf.ByteString
+        getSrcIpAddressBytes();
+
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
+     */
+    java.lang.String getDstIpAddress();
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstIpAddressBytes();
+
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    int getDscp();
+
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ServiceStatus}
+   * Protobuf type {@code context.ConnectionSettings_L3}
    */
-  public static final class ServiceStatus extends
+  public static final class ConnectionSettings_L3 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
-      ServiceStatusOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
+      ConnectionSettings_L3OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceStatus.newBuilder() to construct.
-    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L3.newBuilder() to construct.
+    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceStatus() {
-      serviceStatus_ = 0;
+    private ConnectionSettings_L3() {
+      srcIpAddress_ = "";
+      dstIpAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceStatus();
+      return new ConnectionSettings_L3();
     }
 
     @java.lang.Override
@@ -24103,7 +39326,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceStatus(
+    private ConnectionSettings_L3(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -24121,10 +39344,31 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              serviceStatus_ = rawValue;
+              srcIpAddress_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstIpAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              dscp_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -24148,34 +39392,124 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
     }
 
-    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
-    private int serviceStatus_;
+    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcIpAddress_;
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The enum numeric value on the wire for serviceStatus.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    @java.lang.Override public int getServiceStatusValue() {
-      return serviceStatus_;
+    @java.lang.Override
+    public java.lang.String getSrcIpAddress() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcIpAddress_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The serviceStatus.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
-    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
-      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSrcIpAddressBytes() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstIpAddress_;
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getDstIpAddress() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstIpAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDstIpAddressBytes() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DSCP_FIELD_NUMBER = 3;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 4;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int TTL_FIELD_NUMBER = 5;
+    private int ttl_;
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    @java.lang.Override
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -24192,8 +39526,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(1, serviceStatus_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      }
+      if (!getDstIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
+        output.writeUInt32(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(4, protocol_);
+      }
+      if (ttl_ != 0) {
+        output.writeUInt32(5, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -24204,9 +39550,23 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      }
+      if (!getDstIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, protocol_);
+      }
+      if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, serviceStatus_);
+          .computeUInt32Size(5, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -24218,12 +39578,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
-
-      if (serviceStatus_ != other.serviceStatus_) return false;
+      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
+
+      if (!getSrcIpAddress()
+          .equals(other.getSrcIpAddress())) return false;
+      if (!getDstIpAddress()
+          .equals(other.getDstIpAddress())) return false;
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -24235,76 +39604,84 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + serviceStatus_;
+      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcIpAddress().hashCode();
+      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstIpAddress().hashCode();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -24317,7 +39694,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -24333,26 +39710,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceStatus}
+     * Protobuf type {@code context.ConnectionSettings_L3}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceStatus)
-        context.ContextOuterClass.ServiceStatusOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
+        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -24370,7 +39747,15 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        serviceStatus_ = 0;
+        srcIpAddress_ = "";
+
+        dstIpAddress_ = "";
+
+        dscp_ = 0;
+
+        protocol_ = 0;
+
+        ttl_ = 0;
 
         return this;
       }
@@ -24378,17 +39763,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus build() {
-        context.ContextOuterClass.ServiceStatus result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L3 build() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -24396,9 +39781,13 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus buildPartial() {
-        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
-        result.serviceStatus_ = serviceStatus_;
+      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
+        result.srcIpAddress_ = srcIpAddress_;
+        result.dstIpAddress_ = dstIpAddress_;
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -24437,18 +39826,32 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceStatus) {
-          return mergeFrom((context.ContextOuterClass.ServiceStatus)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceStatus other) {
-        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
-        if (other.serviceStatus_ != 0) {
-          setServiceStatusValue(other.getServiceStatusValue());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
+        if (!other.getSrcIpAddress().isEmpty()) {
+          srcIpAddress_ = other.srcIpAddress_;
+          onChanged();
+        }
+        if (!other.getDstIpAddress().isEmpty()) {
+          dstIpAddress_ = other.dstIpAddress_;
+          onChanged();
+        }
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
+        }
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -24465,11 +39868,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceStatus parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -24479,56 +39882,247 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int serviceStatus_ = 0;
+      private java.lang.Object srcIpAddress_ = "";
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @return The enum numeric value on the wire for serviceStatus.
+       * <code>string src_ip_address = 1;</code>
+       * @return The srcIpAddress.
        */
-      @java.lang.Override public int getServiceStatusValue() {
-        return serviceStatus_;
+      public java.lang.String getSrcIpAddress() {
+        java.lang.Object ref = srcIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @param value The enum numeric value on the wire for serviceStatus to set.
+       * <code>string src_ip_address = 1;</code>
+       * @return The bytes for srcIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getSrcIpAddressBytes() {
+        java.lang.Object ref = srcIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The srcIpAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setServiceStatusValue(int value) {
-        
-        serviceStatus_ = value;
+      public Builder setSrcIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @return The serviceStatus.
+       * <code>string src_ip_address = 1;</code>
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
-        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+      public Builder clearSrcIpAddress() {
+        
+        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @param value The serviceStatus to set.
+       * <code>string src_ip_address = 1;</code>
+       * @param value The bytes for srcIpAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
+      public Builder setSrcIpAddressBytes(
+          com.google.protobuf.ByteString value) {
         if (value == null) {
-          throw new NullPointerException();
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object dstIpAddress_ = "";
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return The dstIpAddress.
+       */
+      public java.lang.String getDstIpAddress() {
+        java.lang.Object ref = dstIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return The bytes for dstIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getDstIpAddressBytes() {
+        java.lang.Object ref = dstIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstIpAddress() {
         
-        serviceStatus_ = value.getNumber();
+        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The bytes for dstIpAddress to set.
        * @return This builder for chaining.
        */
-      public Builder clearServiceStatus() {
+      public Builder setDstIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
-        serviceStatus_ = 0;
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @return The dscp.
+       */
+      @java.lang.Override
+      public int getDscp() {
+        return dscp_;
+      }
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @param value The dscp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDscp(int value) {
+        
+        dscp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDscp() {
+        
+        dscp_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int protocol_ ;
+      /**
+       * <code>uint32 protocol = 4;</code>
+       * @return The protocol.
+       */
+      @java.lang.Override
+      public int getProtocol() {
+        return protocol_;
+      }
+      /**
+       * <code>uint32 protocol = 4;</code>
+       * @param value The protocol to set.
+       * @return This builder for chaining.
+       */
+      public Builder setProtocol(int value) {
+        
+        protocol_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 protocol = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearProtocol() {
+        
+        protocol_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int ttl_ ;
+      /**
+       * <code>uint32 ttl = 5;</code>
+       * @return The ttl.
+       */
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
+      }
+      /**
+       * <code>uint32 ttl = 5;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTtl(int value) {
+        
+        ttl_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 ttl = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
         onChanged();
         return this;
       }
@@ -24545,95 +40139,94 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
-    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
+    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
     }
 
-    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceStatus>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
       @java.lang.Override
-      public ServiceStatus parsePartialFrom(
+      public ConnectionSettings_L3 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceStatus(input, extensionRegistry);
+        return new ConnectionSettings_L3(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceStatus> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
+  public interface ConnectionSettings_L4OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
-    /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    int getSrcPort();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
-    int getConfigRulesCount();
+    int getDstPort();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    int getTcpFlags();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index);
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ServiceConfig}
+   * Protobuf type {@code context.ConnectionSettings_L4}
    */
-  public static final class ServiceConfig extends
+  public static final class ConnectionSettings_L4 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
-      ServiceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
+      ConnectionSettings_L4OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceConfig.newBuilder() to construct.
-    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L4.newBuilder() to construct.
+    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private ConnectionSettings_L4() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceConfig();
+      return new ConnectionSettings_L4();
     }
 
     @java.lang.Override
@@ -24641,7 +40234,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceConfig(
+    private ConnectionSettings_L4(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -24649,7 +40242,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -24660,13 +40252,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+            case 8: {
+
+              srcPort_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              dstPort_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              tcpFlags_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -24684,64 +40287,65 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int SRC_PORT_FIELD_NUMBER = 1;
+    private int srcPort_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
-    }
-    /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public int getSrcPort() {
+      return srcPort_;
     }
+
+    public static final int DST_PORT_FIELD_NUMBER = 2;
+    private int dstPort_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    public int getDstPort() {
+      return dstPort_;
     }
+
+    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
+    private int tcpFlags_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    public int getTcpFlags() {
+      return tcpFlags_;
     }
+
+    public static final int TTL_FIELD_NUMBER = 4;
+    private int ttl_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index) {
-      return configRules_.get(index);
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -24758,8 +40362,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      if (srcPort_ != 0) {
+        output.writeUInt32(1, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        output.writeUInt32(2, dstPort_);
+      }
+      if (tcpFlags_ != 0) {
+        output.writeUInt32(3, tcpFlags_);
+      }
+      if (ttl_ != 0) {
+        output.writeUInt32(4, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -24770,9 +40383,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      if (srcPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, configRules_.get(i));
+          .computeUInt32Size(1, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, dstPort_);
+      }
+      if (tcpFlags_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, tcpFlags_);
+      }
+      if (ttl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -24784,13 +40409,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
+      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
 
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getTcpFlags()
+          != other.getTcpFlags()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -24802,78 +40433,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().hashCode();
-      }
+      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcPort();
+      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getDstPort();
+      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
+      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -24886,7 +40521,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -24902,26 +40537,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceConfig}
+     * Protobuf type {@code context.ConnectionSettings_L4}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceConfig)
-        context.ContextOuterClass.ServiceConfigOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
+        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -24934,35 +40569,36 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          configRulesBuilder_.clear();
-        }
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        tcpFlags_ = 0;
+
+        ttl_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig build() {
-        context.ContextOuterClass.ServiceConfig result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L4 build() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -24970,18 +40606,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig buildPartial() {
-        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
-        int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.configRules_ = configRules_;
-        } else {
-          result.configRules_ = configRulesBuilder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.tcpFlags_ = tcpFlags_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -25009,321 +40639,190 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder setRepeatedField(
           com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
-      }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceConfig) {
-          return mergeFrom((context.ContextOuterClass.ServiceConfig)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.ServiceConfig other) {
-        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
-            } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ServiceConfig parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
-        java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
-
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
-        } else {
-          return configRulesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
-        } else {
-          return configRulesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
-        } else {
-          return configRulesBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
-          onChanged();
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
         } else {
-          configRulesBuilder_.setMessage(index, value);
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
+        }
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
         }
+        if (other.getTcpFlags() != 0) {
+          setTcpFlags(other.getTcpFlags());
+        }
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(value);
         }
         return this;
       }
+
+      private int srcPort_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return The srcPort.
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
-        }
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
         return this;
       }
+
+      private int dstPort_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return The dstPort.
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
-          onChanged();
-        } else {
-          configRulesBuilder_.addAllMessages(values);
-        }
-        return this;
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          configRulesBuilder_.clear();
-        }
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
-          onChanged();
-        } else {
-          configRulesBuilder_.remove(index);
-        }
+      public Builder clearDstPort() {
+        
+        dstPort_ = 0;
+        onChanged();
         return this;
       }
+
+      private int tcpFlags_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return The tcpFlags.
        */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
+      @java.lang.Override
+      public int getTcpFlags() {
+        return tcpFlags_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @param value The tcpFlags to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-          int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
-        }
+      public Builder setTcpFlags(int value) {
+        
+        tcpFlags_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(configRules_);
-        }
+      public Builder clearTcpFlags() {
+        
+        tcpFlags_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int ttl_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return The ttl.
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public Builder setTtl(int value) {
+        
+        ttl_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
-          getConfigRulesFieldBuilder() {
-        if (configRulesBuilder_ == null) {
-          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
-                  configRules_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          configRules_ = null;
-        }
-        return configRulesBuilder_;
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -25338,95 +40837,130 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
-    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
+    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
     }
 
-    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
       @java.lang.Override
-      public ServiceConfig parsePartialFrom(
+      public ConnectionSettings_L4 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceConfig(input, extensionRegistry);
+        return new ConnectionSettings_L4(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceConfig> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
+  public interface ConnectionSettingsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceIdsList();
+    boolean hasL0();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
-    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    context.ContextOuterClass.ConnectionSettings_L0 getL0();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
-    int getServiceIdsCount();
+    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
+
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList();
+    boolean hasL2();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionSettings_L2 getL2();
+    /**
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
+
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
+     */
+    boolean hasL3();
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
+     */
+    context.ContextOuterClass.ConnectionSettings_L3 getL3();
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     */
+    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
+
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
+     */
+    boolean hasL4();
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
+     */
+    context.ContextOuterClass.ConnectionSettings_L4 getL4();
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     */
+    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
   }
   /**
-   * Protobuf type {@code context.ServiceIdList}
+   * Protobuf type {@code context.ConnectionSettings}
    */
-  public static final class ServiceIdList extends
+  public static final class ConnectionSettings extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
-      ServiceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
+      ConnectionSettingsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceIdList.newBuilder() to construct.
-    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings.newBuilder() to construct.
+    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceIdList() {
-      serviceIds_ = java.util.Collections.emptyList();
+    private ConnectionSettings() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceIdList();
+      return new ConnectionSettings();
     }
 
     @java.lang.Override
@@ -25434,7 +40968,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceIdList(
+    private ConnectionSettings(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -25442,7 +40976,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -25454,12 +40987,55 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
+              if (l0_ != null) {
+                subBuilder = l0_.toBuilder();
               }
-              serviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l0_);
+                l0_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
+              if (l2_ != null) {
+                subBuilder = l2_.toBuilder();
+              }
+              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l2_);
+                l2_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
+              if (l3_ != null) {
+                subBuilder = l3_.toBuilder();
+              }
+              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l3_);
+                l3_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
+              if (l4_ != null) {
+                subBuilder = l4_.toBuilder();
+              }
+              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l4_);
+                l4_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -25477,64 +41053,125 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
     }
 
-    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    public static final int L0_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-      return serviceIds_;
+    public boolean hasL0() {
+      return l0_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList() {
-      return serviceIds_;
+    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
     @java.lang.Override
-    public int getServiceIdsCount() {
-      return serviceIds_.size();
+    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+      return getL0();
     }
+
+    public static final int L2_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-      return serviceIds_.get(index);
+    public boolean hasL2() {
+      return l2_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index) {
-      return serviceIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+      return getL2();
+    }
+
+    public static final int L3_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
+     */
+    @java.lang.Override
+    public boolean hasL3() {
+      return l3_ != null;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+      return getL3();
+    }
+
+    public static final int L4_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
+     */
+    @java.lang.Override
+    public boolean hasL4() {
+      return l4_ != null;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+      return getL4();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -25551,8 +41188,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        output.writeMessage(1, serviceIds_.get(i));
+      if (l0_ != null) {
+        output.writeMessage(1, getL0());
+      }
+      if (l2_ != null) {
+        output.writeMessage(2, getL2());
+      }
+      if (l3_ != null) {
+        output.writeMessage(3, getL3());
+      }
+      if (l4_ != null) {
+        output.writeMessage(4, getL4());
       }
       unknownFields.writeTo(output);
     }
@@ -25563,9 +41209,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < serviceIds_.size(); i++) {
+      if (l0_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, serviceIds_.get(i));
+          .computeMessageSize(1, getL0());
+      }
+      if (l2_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getL2());
+      }
+      if (l3_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getL3());
+      }
+      if (l4_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getL4());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -25577,13 +41235,31 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
+      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
 
-      if (!getServiceIdsList()
-          .equals(other.getServiceIdsList())) return false;
+      if (hasL0() != other.hasL0()) return false;
+      if (hasL0()) {
+        if (!getL0()
+            .equals(other.getL0())) return false;
+      }
+      if (hasL2() != other.hasL2()) return false;
+      if (hasL2()) {
+        if (!getL2()
+            .equals(other.getL2())) return false;
+      }
+      if (hasL3() != other.hasL3()) return false;
+      if (hasL3()) {
+        if (!getL3()
+            .equals(other.getL3())) return false;
+      }
+      if (hasL4() != other.hasL4()) return false;
+      if (hasL4()) {
+        if (!getL4()
+            .equals(other.getL4())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -25595,78 +41271,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getServiceIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceIdsList().hashCode();
+      if (hasL0()) {
+        hash = (37 * hash) + L0_FIELD_NUMBER;
+        hash = (53 * hash) + getL0().hashCode();
+      }
+      if (hasL2()) {
+        hash = (37 * hash) + L2_FIELD_NUMBER;
+        hash = (53 * hash) + getL2().hashCode();
+      }
+      if (hasL3()) {
+        hash = (37 * hash) + L3_FIELD_NUMBER;
+        hash = (53 * hash) + getL3().hashCode();
+      }
+      if (hasL4()) {
+        hash = (37 * hash) + L4_FIELD_NUMBER;
+        hash = (53 * hash) + getL4().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -25679,7 +41367,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -25695,26 +41383,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceIdList}
+     * Protobuf type {@code context.ConnectionSettings}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceIdList)
-        context.ContextOuterClass.ServiceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
+        context.ContextOuterClass.ConnectionSettingsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -25727,17 +41415,34 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (l0Builder_ == null) {
+          l0_ = null;
         } else {
-          serviceIdsBuilder_.clear();
+          l0_ = null;
+          l0Builder_ = null;
+        }
+        if (l2Builder_ == null) {
+          l2_ = null;
+        } else {
+          l2_ = null;
+          l2Builder_ = null;
+        }
+        if (l3Builder_ == null) {
+          l3_ = null;
+        } else {
+          l3_ = null;
+          l3Builder_ = null;
+        }
+        if (l4Builder_ == null) {
+          l4_ = null;
+        } else {
+          l4_ = null;
+          l4Builder_ = null;
         }
         return this;
       }
@@ -25745,17 +41450,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList build() {
-        context.ContextOuterClass.ServiceIdList result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings build() {
+        context.ContextOuterClass.ConnectionSettings result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -25763,17 +41468,27 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList buildPartial() {
-        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (serviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.serviceIds_ = serviceIds_;
+      public context.ContextOuterClass.ConnectionSettings buildPartial() {
+        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
+        if (l0Builder_ == null) {
+          result.l0_ = l0_;
         } else {
-          result.serviceIds_ = serviceIdsBuilder_.build();
+          result.l0_ = l0Builder_.build();
+        }
+        if (l2Builder_ == null) {
+          result.l2_ = l2_;
+        } else {
+          result.l2_ = l2Builder_.build();
+        }
+        if (l3Builder_ == null) {
+          result.l3_ = l3_;
+        } else {
+          result.l3_ = l3Builder_.build();
+        }
+        if (l4Builder_ == null) {
+          result.l4_ = l4_;
+        } else {
+          result.l4_ = l4Builder_.build();
         }
         onBuilt();
         return result;
@@ -25813,41 +41528,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceIdList) {
-          return mergeFrom((context.ContextOuterClass.ServiceIdList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceIdList other) {
-        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
-        if (serviceIdsBuilder_ == null) {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIds_.isEmpty()) {
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServiceIdsIsMutable();
-              serviceIds_.addAll(other.serviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIdsBuilder_.isEmpty()) {
-              serviceIdsBuilder_.dispose();
-              serviceIdsBuilder_ = null;
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              serviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceIdsFieldBuilder() : null;
-            } else {
-              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
+        }
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
+        }
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
+        }
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -25864,11 +41565,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceIdList parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -25877,246 +41578,481 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
-          bitField0_ |= 0x00000001;
-         }
+      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return Whether the l0 field is set.
+       */
+      public boolean hasL0() {
+        return l0Builder_ != null || l0_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+        } else {
+          return l0Builder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l0_ = value;
+          onChanged();
+        } else {
+          l0Builder_.setMessage(value);
+        }
+
+        return this;
       }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
+          onChanged();
+        } else {
+          l0Builder_.setMessage(builderForValue.build());
+        }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (l0_ != null) {
+            l0_ =
+              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
+          } else {
+            l0_ = value;
+          }
+          onChanged();
+        } else {
+          l0Builder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
+          onChanged();
+        } else {
+          l0_ = null;
+          l0Builder_ = null;
+        }
 
+        return this;
+      }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-        if (serviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+        
+        onChanged();
+        return getL0FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
         } else {
-          return serviceIdsBuilder_.getMessageList();
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public int getServiceIdsCount() {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.size();
-        } else {
-          return serviceIdsBuilder_.getCount();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
+          getL0FieldBuilder() {
+        if (l0Builder_ == null) {
+          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
+                  getL0(),
+                  getParentForChildren(),
+                  isClean());
+          l0_ = null;
         }
+        return l0Builder_;
       }
+
+      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return Whether the l2 field is set.
        */
-      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);
+      public boolean hasL2() {
+        return l2Builder_ != null || l2_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return The l2.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+        if (l2Builder_ == null) {
+          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         } else {
-          return serviceIdsBuilder_.getMessage(index);
+          return l2Builder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
+      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, value);
+          l2_ = value;
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, value);
+          l2Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, builderForValue.build());
+      public Builder setL2(
+          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
+        if (l2Builder_ == null) {
+          l2_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+          l2Builder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
+          if (l2_ != null) {
+            l2_ =
+              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
+          } else {
+            l2_ = value;
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(value);
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(value);
+          l2Builder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
+      public Builder clearL2() {
+        if (l2Builder_ == null) {
+          l2_ = null;
+          onChanged();
+        } else {
+          l2_ = null;
+          l2Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
+        
+        onChanged();
+        return getL2FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+        if (l2Builder_ != null) {
+          return l2Builder_.getMessageOrBuilder();
+        } else {
+          return l2_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
+          getL2FieldBuilder() {
+        if (l2Builder_ == null) {
+          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
+                  getL2(),
+                  getParentForChildren(),
+                  isClean());
+          l2_ = null;
+        }
+        return l2Builder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return Whether the l3 field is set.
+       */
+      public boolean hasL3() {
+        return l3Builder_ != null || l3_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return The l3.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+        if (l3Builder_ == null) {
+          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
+        } else {
+          return l3Builder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       */
+      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, value);
+          l3_ = value;
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(index, value);
+          l3Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(builderForValue.build());
+      public Builder setL3(
+          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
+        if (l3Builder_ == null) {
+          l3_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(builderForValue.build());
+          l3Builder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, builderForValue.build());
+      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (l3_ != null) {
+            l3_ =
+              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
+          } else {
+            l3_ = value;
+          }
           onChanged();
         } else {
-          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+          l3Builder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addAllServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceIds_);
+      public Builder clearL3() {
+        if (l3Builder_ == null) {
+          l3_ = null;
           onChanged();
         } else {
-          serviceIdsBuilder_.addAllMessages(values);
+          l3_ = null;
+          l3Builder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder clearServiceIds() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
+        
+        onChanged();
+        return getL3FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+        if (l3Builder_ != null) {
+          return l3Builder_.getMessageOrBuilder();
         } else {
-          serviceIdsBuilder_.clear();
+          return l3_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder removeServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.remove(index);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
+          getL3FieldBuilder() {
+        if (l3Builder_ == null) {
+          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
+                  getL3(),
+                  getParentForChildren(),
+                  isClean());
+          l3_ = null;
+        }
+        return l3Builder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return Whether the l4 field is set.
+       */
+      public boolean hasL4() {
+        return l4Builder_ != null || l4_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return The l4.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+        if (l4Builder_ == null) {
+          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        } else {
+          return l4Builder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       */
+      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l4_ = value;
           onChanged();
         } else {
-          serviceIdsBuilder_.remove(index);
+          l4Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().getBuilder(index);
+      public Builder setL4(
+          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
+        if (l4Builder_ == null) {
+          l4_ = builderForValue.build();
+          onChanged();
+        } else {
+          l4Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-          int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);  } else {
-          return serviceIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (l4_ != null) {
+            l4_ =
+              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
+          } else {
+            l4_ = value;
+          }
+          onChanged();
+        } else {
+          l4Builder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceIdsOrBuilderList() {
-        if (serviceIdsBuilder_ != null) {
-          return serviceIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearL4() {
+        if (l4Builder_ == null) {
+          l4_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+          l4_ = null;
+          l4Builder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
-        return getServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
+        
+        onChanged();
+        return getL4FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+        if (l4Builder_ != null) {
+          return l4Builder_.getMessageOrBuilder();
+        } else {
+          return l4_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceIdsBuilderList() {
-        return getServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdsFieldBuilder() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
+          getL4FieldBuilder() {
+        if (l4Builder_ == null) {
+          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
+                  getL4(),
                   getParentForChildren(),
                   isClean());
-          serviceIds_ = null;
+          l4_ = null;
         }
-        return serviceIdsBuilder_;
+        return l4Builder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -26131,95 +42067,165 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
-    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
+    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
     }
 
-    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
       @java.lang.Override
-      public ServiceIdList parsePartialFrom(
+      public ConnectionSettings parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceIdList(input, extensionRegistry);
+        return new ConnectionSettings(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceIdList> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceList)
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
-    java.util.List<context.ContextOuterClass.Service> 
-        getServicesList();
+    boolean hasConnectionId();
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.Service getServices(int index);
+    context.ContextOuterClass.ConnectionId getConnectionId();
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
      */
-    int getServicesCount();
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-        getServicesOrBuilderList();
+    boolean hasServiceId();
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathHopsEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    int getPathHopsEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSubServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    int getSubServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
         int index);
+
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    boolean hasSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    context.ContextOuterClass.ConnectionSettings getSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ServiceList}
+   * Protobuf type {@code context.Connection}
    */
-  public static final class ServiceList extends
+  public static final class Connection extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceList)
-      ServiceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceList.newBuilder() to construct.
-    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceList() {
-      services_ = java.util.Collections.emptyList();
+    private Connection() {
+      pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      subServiceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceList();
+      return new Connection();
     }
 
     @java.lang.Override
@@ -26227,7 +42233,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceList(
+    private Connection(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -26247,12 +42253,60 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
+                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              services_.add(
-                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
+              pathHopsEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              subServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
+              if (settings_ != null) {
+                subBuilder = settings_.toBuilder();
+              }
+              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(settings_);
+                settings_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -26271,7 +42325,10 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          services_ = java.util.Collections.unmodifiableList(services_);
+          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -26279,55 +42336,173 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathHopsEndpointIdsCount() {
+      return pathHopsEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
     }
-
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList() {
+      return subServiceIds_;
     }
-
-    public static final int SERVICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Service> services_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
-      return services_;
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
     }
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-        getServicesOrBuilderList() {
-      return services_;
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
     }
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
      */
     @java.lang.Override
-    public int getServicesCount() {
-      return services_.size();
+    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index) {
+      return subServiceIds_.get(index);
     }
+
+    public static final int SETTINGS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ConnectionSettings settings_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Service getServices(int index) {
-      return services_.get(index);
+    public boolean hasSettings() {
+      return settings_ != null;
     }
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-        int index) {
-      return services_.get(index);
+    public context.ContextOuterClass.ConnectionSettings getSettings() {
+      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+      return getSettings();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -26344,8 +42519,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < services_.size(); i++) {
-        output.writeMessage(1, services_.get(i));
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        output.writeMessage(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        output.writeMessage(5, getSettings());
       }
       unknownFields.writeTo(output);
     }
@@ -26356,9 +42543,25 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < services_.size(); i++) {
+      if (connectionId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, services_.get(i));
+          .computeMessageSize(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getSettings());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -26370,13 +42573,30 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
 
-      if (!getServicesList()
-          .equals(other.getServicesList())) return false;
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getPathHopsEndpointIdsList()
+          .equals(other.getPathHopsEndpointIdsList())) return false;
+      if (!getSubServiceIdsList()
+          .equals(other.getSubServiceIdsList())) return false;
+      if (hasSettings() != other.hasSettings()) return false;
+      if (hasSettings()) {
+        if (!getSettings()
+            .equals(other.getSettings())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -26388,78 +42608,94 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getServicesCount() > 0) {
-        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
-        hash = (53 * hash) + getServicesList().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (getPathHopsEndpointIdsCount() > 0) {
+        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      }
+      if (getSubServiceIdsCount() > 0) {
+        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      }
+      if (hasSettings()) {
+        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
+        hash = (53 * hash) + getSettings().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceList parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -26472,7 +42708,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -26488,428 +42724,1109 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceList}
+     * Protobuf type {@code context.Connection}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceList)
-        context.ContextOuterClass.ServiceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPathHopsEndpointIdsFieldBuilder();
+          getSubServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
+        } else {
+          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.subServiceIds_ = subServiceIds_;
+        } else {
+          result.subServiceIds_ = subServiceIdsBuilder_.build();
+        }
+        if (settingsBuilder_ == null) {
+          result.settings_ = settings_;
+        } else {
+          result.settings_ = settingsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIds_.isEmpty()) {
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathHopsEndpointIdsIsMutable();
+              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
+              pathHopsEndpointIdsBuilder_.dispose();
+              pathHopsEndpointIdsBuilder_ = null;
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathHopsEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathHopsEndpointIdsFieldBuilder() : null;
+            } else {
+              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
+            }
+          }
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIds_.isEmpty()) {
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSubServiceIdsIsMutable();
+              subServiceIds_.addAll(other.subServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIdsBuilder_.isEmpty()) {
+              subServiceIdsBuilder_.dispose();
+              subServiceIdsBuilder_ = null;
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              subServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubServiceIdsFieldBuilder() : null;
+            } else {
+              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+            }
+          }
+        }
+        if (other.hasSettings()) {
+          mergeSettings(other.getSettings());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Connection parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
+       */
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
       }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
-
-      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
       }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+        return this;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getServicesFieldBuilder();
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (servicesBuilder_ == null) {
-          services_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
         } else {
-          servicesBuilder_.clear();
+          serviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
 
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
       }
 
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceList.getDefaultInstance();
+      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensurePathHopsEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
       }
 
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceList build() {
-        context.ContextOuterClass.ServiceList result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessageList();
         }
-        return result;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceList buildPartial() {
-        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
-        int from_bitField0_ = bitField0_;
-        if (servicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            services_ = java.util.Collections.unmodifiableList(services_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.services_ = services_;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
         } else {
-          result.services_ = servicesBuilder_.build();
+          return pathHopsEndpointIdsBuilder_.getCount();
         }
-        onBuilt();
-        return result;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
+        }
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceList) {
-          return mergeFrom((context.ContextOuterClass.ServiceList)other);
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.ServiceList other) {
-        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
-        if (servicesBuilder_ == null) {
-          if (!other.services_.isEmpty()) {
-            if (services_.isEmpty()) {
-              services_ = other.services_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServicesIsMutable();
-              services_.addAll(other.services_);
-            }
-            onChanged();
-          }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addAllPathHopsEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, pathHopsEndpointIds_);
+          onChanged();
         } else {
-          if (!other.services_.isEmpty()) {
-            if (servicesBuilder_.isEmpty()) {
-              servicesBuilder_.dispose();
-              servicesBuilder_ = null;
-              services_ = other.services_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              servicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServicesFieldBuilder() : null;
-            } else {
-              servicesBuilder_.addAllMessages(other.services_);
-            }
-          }
+          pathHopsEndpointIdsBuilder_.addAllMessages(values);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder clearPathHopsEndpointIds() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ServiceList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder removePathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.remove(index);
         }
         return this;
       }
-      private int bitField0_;
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+          int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);  } else {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathHopsEndpointIdsOrBuilderList() {
+        if (pathHopsEndpointIdsBuilder_ != null) {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathHopsEndpointIdsBuilderList() {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathHopsEndpointIdsFieldBuilder() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  pathHopsEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          pathHopsEndpointIds_ = null;
+        }
+        return pathHopsEndpointIdsBuilder_;
+      }
 
-      private java.util.List<context.ContextOuterClass.Service> services_ =
+      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
         java.util.Collections.emptyList();
-      private void ensureServicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
-          bitField0_ |= 0x00000001;
+      private void ensureSubServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
+          bitField0_ |= 0x00000002;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
 
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
-        if (servicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(services_);
+      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+        if (subServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
         } else {
-          return servicesBuilder_.getMessageList();
+          return subServiceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public int getServicesCount() {
-        if (servicesBuilder_ == null) {
-          return services_.size();
+      public int getSubServiceIdsCount() {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.size();
         } else {
-          return servicesBuilder_.getCount();
+          return subServiceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.Service getServices(int index) {
-        if (servicesBuilder_ == null) {
-          return services_.get(index);
+      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);
         } else {
-          return servicesBuilder_.getMessage(index);
+          return subServiceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public Builder setServices(
-          int index, context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServicesIsMutable();
-          services_.set(index, value);
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, value);
           onChanged();
         } else {
-          servicesBuilder_.setMessage(index, value);
+          subServiceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder setServices(
-          int index, context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.set(index, builderForValue.build());
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          servicesBuilder_.setMessage(index, builderForValue.build());
+          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder addServices(context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServicesIsMutable();
-          services_.add(value);
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
           onChanged();
         } else {
-          servicesBuilder_.addMessage(value);
+          subServiceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder addServices(
-          int index, context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServicesIsMutable();
-          services_.add(index, value);
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
           onChanged();
         } else {
-          servicesBuilder_.addMessage(index, value);
+          subServiceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder addServices(
-          context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.add(builderForValue.build());
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          servicesBuilder_.addMessage(builderForValue.build());
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder addServices(
-          int index, context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.add(index, builderForValue.build());
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          servicesBuilder_.addMessage(index, builderForValue.build());
+          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder addAllServices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
+      public Builder addAllSubServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, services_);
+              values, subServiceIds_);
           onChanged();
         } else {
-          servicesBuilder_.addAllMessages(values);
+          subServiceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder clearServices() {
-        if (servicesBuilder_ == null) {
-          services_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder clearSubServiceIds() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
         } else {
-          servicesBuilder_.clear();
+          subServiceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder removeServices(int index) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.remove(index);
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
           onChanged();
         } else {
-          servicesBuilder_.remove(index);
+          subServiceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.Service.Builder getServicesBuilder(
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
           int index) {
-        return getServicesFieldBuilder().getBuilder(index);
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
           int index) {
-        if (servicesBuilder_ == null) {
-          return services_.get(index);  } else {
-          return servicesBuilder_.getMessageOrBuilder(index);
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);  } else {
+          return subServiceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-           getServicesOrBuilderList() {
-        if (servicesBuilder_ != null) {
-          return servicesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSubServiceIdsOrBuilderList() {
+        if (subServiceIdsBuilder_ != null) {
+          return subServiceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(services_);
+          return java.util.Collections.unmodifiableList(subServiceIds_);
         }
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
-        return getServicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Service.getDefaultInstance());
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.Service.Builder addServicesBuilder(
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
           int index) {
-        return getServicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Service.getDefaultInstance());
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.Service.Builder> 
-           getServicesBuilderList() {
-        return getServicesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSubServiceIdsBuilderList() {
+        return getSubServiceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
-          getServicesFieldBuilder() {
-        if (servicesBuilder_ == null) {
-          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
-                  services_,
-                  ((bitField0_ & 0x00000001) != 0),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSubServiceIdsFieldBuilder() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  subServiceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
                   isClean());
-          services_ = null;
+          subServiceIds_ = null;
         }
-        return servicesBuilder_;
+        return subServiceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings settings_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return Whether the settings field is set.
+       */
+      public boolean hasSettings() {
+        return settingsBuilder_ != null || settings_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return The settings.
+       */
+      public context.ContextOuterClass.ConnectionSettings getSettings() {
+        if (settingsBuilder_ == null) {
+          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        } else {
+          return settingsBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          settings_ = value;
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(
+          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
+        if (settingsBuilder_ == null) {
+          settings_ = builderForValue.build();
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (settings_ != null) {
+            settings_ =
+              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+          } else {
+            settings_ = value;
+          }
+          onChanged();
+        } else {
+          settingsBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder clearSettings() {
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+          onChanged();
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
+        
+        onChanged();
+        return getSettingsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+        if (settingsBuilder_ != null) {
+          return settingsBuilder_.getMessageOrBuilder();
+        } else {
+          return settings_ == null ?
+              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
+          getSettingsFieldBuilder() {
+        if (settingsBuilder_ == null) {
+          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
+                  getSettings(),
+                  getParentForChildren(),
+                  isClean());
+          settings_ = null;
+        }
+        return settingsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -26924,100 +43841,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceList)
+      // @@protoc_insertion_point(builder_scope:context.Connection)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceList)
-    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
     }
 
-    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceList>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
       @java.lang.Override
-      public ServiceList parsePartialFrom(
+      public Connection parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceList(input, extensionRegistry);
+        return new Connection(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceList> parser() {
+    public static com.google.protobuf.Parser<Connection> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceList> getParserForType() {
+    public com.google.protobuf.Parser<Connection> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    boolean hasServiceId();
+    int getConnectionIdsCount();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.ServiceId getServiceId();
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.ServiceEvent}
+   * Protobuf type {@code context.ConnectionIdList}
    */
-  public static final class ServiceEvent extends
+  public static final class ConnectionIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
-      ServiceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceEvent.newBuilder() to construct.
-    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceEvent() {
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceEvent();
+      return new ConnectionIdList();
     }
 
     @java.lang.Override
@@ -27025,7 +43937,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceEvent(
+    private ConnectionIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -27033,6 +43945,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -27044,29 +43957,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -27084,73 +43980,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
     }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -27167,11 +44054,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -27182,13 +44066,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (serviceId_ != null) {
+      for (int i = 0; i < connectionIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
+          .computeMessageSize(1, connectionIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -27200,21 +44080,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -27226,82 +44098,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -27314,7 +44182,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -27330,26 +44198,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceEvent}
+     * Protobuf type {@code context.ConnectionIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
-        context.ContextOuterClass.ServiceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -27362,22 +44230,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          connectionIdsBuilder_.clear();
         }
         return this;
       }
@@ -27385,17 +44248,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent build() {
-        context.ContextOuterClass.ServiceEvent result = buildPartial();
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -27403,17 +44266,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent buildPartial() {
-        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
         } else {
-          result.serviceId_ = serviceIdBuilder_.build();
+          result.connectionIds_ = connectionIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -27453,21 +44316,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceEvent) {
-          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
-        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -27484,11 +44367,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceEvent parsedMessage = null;
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -27497,243 +44380,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
+        } else {
+          return connectionIdsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return connectionIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
+        } else {
+          return connectionIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          connectionIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          connectionIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          connectionIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          connectionIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+        return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
+          onChanged();
         } else {
-          return serviceIdBuilder_.getMessage();
+          connectionIdsBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          connectionIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(connectionIds_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          serviceId_ = null;
+          connectionIds_ = null;
         }
-        return serviceIdBuilder_;
+        return connectionIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -27748,104 +44634,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
-    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
     }
 
-    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
       @java.lang.Override
-      public ServiceEvent parsePartialFrom(
+      public ConnectionIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceEvent(input, extensionRegistry);
+        return new ConnectionIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceEvent> parser() {
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceId)
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    boolean hasContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ContextId getContextId();
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
-
+    context.ContextOuterClass.Connection getConnections(int index);
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return Whether the sliceUuid field is set.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    boolean hasSliceUuid();
+    int getConnectionsCount();
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return The sliceUuid.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.Uuid getSliceUuid();
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder();
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Slice ---------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.SliceId}
+   * Protobuf type {@code context.ConnectionList}
    */
-  public static final class SliceId extends
+  public static final class ConnectionList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceId)
-      SliceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceId.newBuilder() to construct.
-    private SliceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceId() {
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceId();
+      return new ConnectionList();
     }
 
     @java.lang.Override
@@ -27853,7 +44730,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceId(
+    private ConnectionList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -27861,6 +44738,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -27872,29 +44750,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (sliceUuid_ != null) {
-                subBuilder = sliceUuid_.toBuilder();
-              }
-              sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceUuid_);
-                sliceUuid_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -27912,73 +44773,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connections_ = java.util.Collections.unmodifiableList(connections_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
-    }
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
     }
-
-    public static final int SLICE_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid sliceUuid_;
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return Whether the sliceUuid field is set.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public boolean hasSliceUuid() {
-      return sliceUuid_ != null;
+    public int getConnectionsCount() {
+      return connections_.size();
     }
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return The sliceUuid.
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getSliceUuid() {
-      return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
     }
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-      return getSliceUuid();
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index) {
+      return connections_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -27995,11 +44847,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
-      }
-      if (sliceUuid_ != null) {
-        output.writeMessage(2, getSliceUuid());
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -28010,13 +44859,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
-      }
-      if (sliceUuid_ != null) {
+      for (int i = 0; i < connections_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceUuid());
+          .computeMessageSize(1, connections_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -28028,21 +44873,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceId)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceId other = (context.ContextOuterClass.SliceId) obj;
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (hasSliceUuid() != other.hasSliceUuid()) return false;
-      if (hasSliceUuid()) {
-        if (!getSliceUuid()
-            .equals(other.getSliceUuid())) return false;
-      }
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -28054,82 +44891,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
-      }
-      if (hasSliceUuid()) {
-        hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceUuid().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceId parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -28142,7 +44975,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -28158,30 +44991,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Slice ---------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.SliceId}
+     * Protobuf type {@code context.ConnectionList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceId)
-        context.ContextOuterClass.SliceIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceId.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -28194,22 +45023,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
-        } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
-        }
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = null;
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceUuid_ = null;
-          sliceUuidBuilder_ = null;
+          connectionsBuilder_.clear();
         }
         return this;
       }
@@ -28217,17 +45041,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceId.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceId build() {
-        context.ContextOuterClass.SliceId result = buildPartial();
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -28235,17 +45059,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceId buildPartial() {
-        context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
-        } else {
-          result.contextId_ = contextIdBuilder_.build();
-        }
-        if (sliceUuidBuilder_ == null) {
-          result.sliceUuid_ = sliceUuid_;
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connections_ = java.util.Collections.unmodifiableList(connections_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connections_ = connections_;
         } else {
-          result.sliceUuid_ = sliceUuidBuilder_.build();
+          result.connections_ = connectionsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -28285,21 +45109,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceId) {
-          return mergeFrom((context.ContextOuterClass.SliceId)other);
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceId other) {
-        if (other == context.ContextOuterClass.SliceId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (other.hasSliceUuid()) {
-          mergeSliceUuid(other.getSliceUuid());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionsFieldBuilder() : null;
+            } else {
+              connectionsBuilder_.addAllMessages(other.connections_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -28316,11 +45160,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceId parsedMessage = null;
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -28329,243 +45173,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
-      private context.ContextOuterClass.ContextId contextId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
+        } else {
+          return connectionsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
         } else {
-          return contextIdBuilder_.getMessage();
+          return connectionsBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
+        } else {
+          return connectionsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          connectionsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
-          } else {
-            contextId_ = value;
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureConnectionsIsMutable();
+          connections_.add(value);
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          connectionsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          connectionsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
-        
-        onChanged();
-        return getContextIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
+          onChanged();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          connectionsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
-                  getParentForChildren(),
-                  isClean());
-          contextId_ = null;
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(index, builderForValue.build());
         }
-        return contextIdBuilder_;
-      }
-
-      private context.ContextOuterClass.Uuid sliceUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
-      /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
-       * @return Whether the sliceUuid field is set.
-       */
-      public boolean hasSliceUuid() {
-        return sliceUuidBuilder_ != null || sliceUuid_ != null;
+        return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
-       * @return The sliceUuid.
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getSliceUuid() {
-        if (sliceUuidBuilder_ == null) {
-          return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connections_);
+          onChanged();
         } else {
-          return sliceUuidBuilder_.getMessage();
+          connectionsBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setSliceUuid(context.ContextOuterClass.Uuid value) {
-        if (sliceUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceUuid_ = value;
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceUuidBuilder_.setMessage(value);
+          connectionsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setSliceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = builderForValue.build();
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
           onChanged();
         } else {
-          sliceUuidBuilder_.setMessage(builderForValue.build());
+          connectionsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
-        if (sliceUuidBuilder_ == null) {
-          if (sliceUuid_ != null) {
-            sliceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
-          } else {
-            sliceUuid_ = value;
-          }
-          onChanged();
-        } else {
-          sliceUuidBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
+          int index) {
+        return getConnectionsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+          int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearSliceUuid() {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          sliceUuid_ = null;
-          sliceUuidBuilder_ = null;
+          return java.util.Collections.unmodifiableList(connections_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
-        
-        onChanged();
-        return getSliceUuidFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-        if (sliceUuidBuilder_ != null) {
-          return sliceUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
-        }
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
+          int index) {
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getSliceUuidFieldBuilder() {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getSliceUuid(),
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceUuid_ = null;
+          connections_ = null;
         }
-        return sliceUuidBuilder_;
+        return connectionsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -28580,200 +45427,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceId)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceId)
-    private static final context.ContextOuterClass.SliceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
     }
 
-    public static context.ContextOuterClass.SliceId getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceId>
-        PARSER = new com.google.protobuf.AbstractParser<SliceId>() {
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
       @java.lang.Override
-      public SliceId parsePartialFrom(
+      public ConnectionList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceId(input, extensionRegistry);
+        return new ConnectionList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceId> parser() {
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceId> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Slice)
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return Whether the sliceId field is set.
-     */
-    boolean hasSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
-
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getSliceEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointId getSliceEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    int getSliceEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getSliceEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.Constraint> 
-        getSliceConstraintsList();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    context.ContextOuterClass.Constraint getSliceConstraints(int index);
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    int getSliceConstraintsCount();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getSliceConstraintsOrBuilderList();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSliceServiceIdsList();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceId getSliceServiceIds(int index);
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    int getSliceServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSliceServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceSubsliceIdsList();
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    context.ContextOuterClass.SliceId getSliceSubsliceIds(int index);
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    int getSliceSubsliceIdsCount();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceSubsliceIdsOrBuilderList();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return Whether the sliceStatus field is set.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
-    boolean hasSliceStatus();
+    boolean hasConnectionId();
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return The sliceStatus.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.SliceStatus getSliceStatus();
+    context.ContextOuterClass.ConnectionId getConnectionId();
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
      */
-    context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Slice}
+   * Protobuf type {@code context.ConnectionEvent}
    */
-  public static final class Slice extends
+  public static final class ConnectionEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Slice)
-      SliceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Slice.newBuilder() to construct.
-    private Slice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Slice() {
-      sliceEndpointIds_ = java.util.Collections.emptyList();
-      sliceConstraints_ = java.util.Collections.emptyList();
-      sliceServiceIds_ = java.util.Collections.emptyList();
-      sliceSubsliceIds_ = java.util.Collections.emptyList();
+    private ConnectionEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Slice();
+      return new ConnectionEvent();
     }
 
     @java.lang.Override
@@ -28781,7 +45528,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Slice(
+    private ConnectionEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -28789,7 +45536,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -28801,63 +45547,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              sliceEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              sliceConstraints_.add(
-                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000004;
-              }
-              sliceServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
-                sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                mutable_bitField0_ |= 0x00000008;
-              }
-              sliceSubsliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
-              if (sliceStatus_ != null) {
-                subBuilder = sliceStatus_.toBuilder();
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
               }
-              sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceStatus_);
-                sliceStatus_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -28877,245 +45587,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-        }
-        if (((mutable_bitField0_ & 0x00000004) != 0)) {
-          sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000008) != 0)) {
-          sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Slice_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
-    }
-
-    public static final int SLICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.SliceId sliceId_;
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return Whether the sliceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
-    }
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return The sliceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-    }
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
-    }
-
-    public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
-      return sliceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getSliceEndpointIdsOrBuilderList() {
-      return sliceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public int getSliceEndpointIdsCount() {
-      return sliceEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
-      return sliceEndpointIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-        int index) {
-      return sliceEndpointIds_.get(index);
-    }
-
-    public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
-      return sliceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getSliceConstraintsOrBuilderList() {
-      return sliceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public int getSliceConstraintsCount() {
-      return sliceConstraints_.size();
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
-      return sliceConstraints_.get(index);
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-        int index) {
-      return sliceConstraints_.get(index);
-    }
-
-    public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
-      return sliceServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSliceServiceIdsOrBuilderList() {
-      return sliceServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public int getSliceServiceIdsCount() {
-      return sliceServiceIds_.size();
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
-      return sliceServiceIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-        int index) {
-      return sliceServiceIds_.get(index);
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
     }
 
-    public static final int SLICE_SUBSLICE_IDS_FIELD_NUMBER = 5;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
-      return sliceSubsliceIds_;
-    }
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceSubsliceIdsOrBuilderList() {
-      return sliceSubsliceIds_;
-    }
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public int getSliceSubsliceIdsCount() {
-      return sliceSubsliceIds_.size();
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
-      return sliceSubsliceIds_.get(index);
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
-        int index) {
-      return sliceSubsliceIds_.get(index);
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
 
-    public static final int SLICE_STATUS_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.SliceStatus sliceStatus_;
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return Whether the sliceStatus field is set.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public boolean hasSliceStatus() {
-      return sliceStatus_ != null;
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return The sliceStatus.
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceStatus getSliceStatus() {
-      return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
     }
     /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-      return getSliceStatus();
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -29132,56 +45670,28 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (sliceId_ != null) {
-        output.writeMessage(1, getSliceId());
-      }
-      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
-        output.writeMessage(2, sliceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < sliceConstraints_.size(); i++) {
-        output.writeMessage(3, sliceConstraints_.get(i));
-      }
-      for (int i = 0; i < sliceServiceIds_.size(); i++) {
-        output.writeMessage(4, sliceServiceIds_.get(i));
-      }
-      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
-        output.writeMessage(5, sliceSubsliceIds_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
-      if (sliceStatus_ != null) {
-        output.writeMessage(6, getSliceStatus());
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
       }
       unknownFields.writeTo(output);
     }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (sliceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSliceId());
-      }
-      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, sliceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < sliceConstraints_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, sliceConstraints_.get(i));
-      }
-      for (int i = 0; i < sliceServiceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, sliceServiceIds_.get(i));
-      }
-      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, sliceSubsliceIds_.get(i));
+          .computeMessageSize(1, getEvent());
       }
-      if (sliceStatus_ != null) {
+      if (connectionId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getSliceStatus());
+          .computeMessageSize(2, getConnectionId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -29193,28 +45703,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Slice)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Slice other = (context.ContextOuterClass.Slice) obj;
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
 
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
-      if (!getSliceEndpointIdsList()
-          .equals(other.getSliceEndpointIdsList())) return false;
-      if (!getSliceConstraintsList()
-          .equals(other.getSliceConstraintsList())) return false;
-      if (!getSliceServiceIdsList()
-          .equals(other.getSliceServiceIdsList())) return false;
-      if (!getSliceSubsliceIdsList()
-          .equals(other.getSliceSubsliceIdsList())) return false;
-      if (hasSliceStatus() != other.hasSliceStatus()) return false;
-      if (hasSliceStatus()) {
-        if (!getSliceStatus()
-            .equals(other.getSliceStatus())) return false;
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -29227,98 +45729,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
-      }
-      if (getSliceEndpointIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceEndpointIdsList().hashCode();
-      }
-      if (getSliceConstraintsCount() > 0) {
-        hash = (37 * hash) + SLICE_CONSTRAINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceConstraintsList().hashCode();
-      }
-      if (getSliceServiceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceServiceIdsList().hashCode();
-      }
-      if (getSliceSubsliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_SUBSLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceSubsliceIdsList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
-      if (hasSliceStatus()) {
-        hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceStatus().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Slice parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -29331,7 +45817,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Slice prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -29347,26 +45833,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Slice}
+     * Protobuf type {@code context.ConnectionEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Slice)
-        context.ContextOuterClass.SliceOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
+        context.ContextOuterClass.ConnectionEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Slice.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -29379,50 +45865,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceEndpointIdsFieldBuilder();
-          getSliceConstraintsFieldBuilder();
-          getSliceServiceIdsFieldBuilder();
-          getSliceSubsliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          sliceEndpointIdsBuilder_.clear();
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          sliceConstraintsBuilder_.clear();
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-        } else {
-          sliceServiceIdsBuilder_.clear();
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          sliceSubsliceIdsBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
         }
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = null;
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
         } else {
-          sliceStatus_ = null;
-          sliceStatusBuilder_ = null;
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
         return this;
       }
@@ -29430,17 +45888,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Slice getDefaultInstanceForType() {
-        return context.ContextOuterClass.Slice.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Slice build() {
-        context.ContextOuterClass.Slice result = buildPartial();
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -29448,54 +45906,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Slice buildPartial() {
-        context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
-        int from_bitField0_ = bitField0_;
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
-        } else {
-          result.sliceId_ = sliceIdBuilder_.build();
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sliceEndpointIds_ = sliceEndpointIds_;
-        } else {
-          result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.sliceConstraints_ = sliceConstraints_;
-        } else {
-          result.sliceConstraints_ = sliceConstraintsBuilder_.build();
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
-            sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.sliceServiceIds_ = sliceServiceIds_;
-        } else {
-          result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) != 0)) {
-            sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-            bitField0_ = (bitField0_ & ~0x00000008);
-          }
-          result.sliceSubsliceIds_ = sliceSubsliceIds_;
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
+          result.event_ = eventBuilder_.build();
         }
-        if (sliceStatusBuilder_ == null) {
-          result.sliceStatus_ = sliceStatus_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
         } else {
-          result.sliceStatus_ = sliceStatusBuilder_.build();
+          result.connectionId_ = connectionIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -29535,125 +45956,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Slice) {
-          return mergeFrom((context.ContextOuterClass.Slice)other);
+        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Slice other) {
-        if (other == context.ContextOuterClass.Slice.getDefaultInstance()) return this;
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (!other.sliceEndpointIds_.isEmpty()) {
-            if (sliceEndpointIds_.isEmpty()) {
-              sliceEndpointIds_ = other.sliceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSliceEndpointIdsIsMutable();
-              sliceEndpointIds_.addAll(other.sliceEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceEndpointIds_.isEmpty()) {
-            if (sliceEndpointIdsBuilder_.isEmpty()) {
-              sliceEndpointIdsBuilder_.dispose();
-              sliceEndpointIdsBuilder_ = null;
-              sliceEndpointIds_ = other.sliceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sliceEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceEndpointIdsFieldBuilder() : null;
-            } else {
-              sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
-            }
-          }
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          if (!other.sliceConstraints_.isEmpty()) {
-            if (sliceConstraints_.isEmpty()) {
-              sliceConstraints_ = other.sliceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSliceConstraintsIsMutable();
-              sliceConstraints_.addAll(other.sliceConstraints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceConstraints_.isEmpty()) {
-            if (sliceConstraintsBuilder_.isEmpty()) {
-              sliceConstraintsBuilder_.dispose();
-              sliceConstraintsBuilder_ = null;
-              sliceConstraints_ = other.sliceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              sliceConstraintsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceConstraintsFieldBuilder() : null;
-            } else {
-              sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
-            }
-          }
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          if (!other.sliceServiceIds_.isEmpty()) {
-            if (sliceServiceIds_.isEmpty()) {
-              sliceServiceIds_ = other.sliceServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureSliceServiceIdsIsMutable();
-              sliceServiceIds_.addAll(other.sliceServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceServiceIds_.isEmpty()) {
-            if (sliceServiceIdsBuilder_.isEmpty()) {
-              sliceServiceIdsBuilder_.dispose();
-              sliceServiceIdsBuilder_ = null;
-              sliceServiceIds_ = other.sliceServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              sliceServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceServiceIdsFieldBuilder() : null;
-            } else {
-              sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
-            }
-          }
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (!other.sliceSubsliceIds_.isEmpty()) {
-            if (sliceSubsliceIds_.isEmpty()) {
-              sliceSubsliceIds_ = other.sliceSubsliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-            } else {
-              ensureSliceSubsliceIdsIsMutable();
-              sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceSubsliceIds_.isEmpty()) {
-            if (sliceSubsliceIdsBuilder_.isEmpty()) {
-              sliceSubsliceIdsBuilder_.dispose();
-              sliceSubsliceIdsBuilder_ = null;
-              sliceSubsliceIds_ = other.sliceSubsliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-              sliceSubsliceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceSubsliceIdsFieldBuilder() : null;
-            } else {
-              sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
+        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
-        if (other.hasSliceStatus()) {
-          mergeSliceStatus(other.getSliceStatus());
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -29670,11 +45987,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Slice parsedMessage = null;
+        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Slice) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -29683,1204 +46000,1278 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.SliceId sliceId_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       * @return Whether the sliceId field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       * @return The sliceId.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return sliceIdBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceId_ = value;
+          event_ = value;
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> sliceEndpointIdsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        } else {
-          return sliceEndpointIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public int getSliceEndpointIdsCount() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.size();
-        } else {
-          return sliceEndpointIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.get(index);
-        } else {
-          return sliceEndpointIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder setSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+            event_ = value;
           }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.set(index, value);
           onChanged();
         } else {
-          sliceEndpointIdsBuilder_.setMessage(index, value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.set(index, builderForValue.build());
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          sliceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addSliceEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(value);
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          sliceEndpointIdsBuilder_.addMessage(value);
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(index, value);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
         }
-        return this;
+        return eventBuilder_;
       }
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public Builder addSliceEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(builderForValue.build());
-          onChanged();
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          sliceEndpointIdsBuilder_.addMessage(builderForValue.build());
+          return connectionIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder addSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(index, builderForValue.build());
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
           onChanged();
         } else {
-          sliceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          connectionIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder addAllSliceEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceEndpointIds_);
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          sliceEndpointIdsBuilder_.addAllMessages(values);
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearSliceEndpointIds() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
           onChanged();
         } else {
-          sliceEndpointIdsBuilder_.clear();
+          connectionIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder removeSliceEndpointIds(int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.remove(index);
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
           onChanged();
         } else {
-          sliceEndpointIdsBuilder_.remove(index);
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getSliceEndpointIdsBuilder(
-          int index) {
-        return getSliceEndpointIdsFieldBuilder().getBuilder(index);
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-          int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.get(index);  } else {
-          return sliceEndpointIdsBuilder_.getMessageOrBuilder(index);
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
       }
       /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getSliceEndpointIdsOrBuilderList() {
-        if (sliceEndpointIdsBuilder_ != null) {
-          return sliceEndpointIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
         }
+        return connectionIdBuilder_;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder() {
-        return getSliceEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder(
-          int index) {
-        return getSliceEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getSliceEndpointIdsBuilderList() {
-        return getSliceEndpointIdsFieldBuilder().getBuilderList();
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
+    }
+
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
+      @java.lang.Override
+      public ConnectionEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionEvent(input, extensionRegistry);
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getSliceEndpointIdsFieldBuilder() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  sliceEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceEndpointIds_ = null;
+    };
+
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    boolean hasEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    context.ContextOuterClass.Uuid getEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
+   */
+  public static final class EndPointId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EndPointId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EndPointId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EndPointId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
+              }
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
         }
-        return sliceEndpointIdsBuilder_;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
+    }
 
-      private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceConstraintsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
-          bitField0_ |= 0x00000002;
-         }
-      }
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> sliceConstraintsBuilder_;
+      memoizedIsInitialized = 1;
+      return true;
+    }
 
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
-        if (sliceConstraintsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceConstraints_);
-        } else {
-          return sliceConstraintsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public int getSliceConstraintsCount() {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.size();
-        } else {
-          return sliceConstraintsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.get(index);
-        } else {
-          return sliceConstraintsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder setSliceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.set(index, value);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder setSliceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(value);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(value);
-        }
-        return this;
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(index, value);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(index, value);
-        }
-        return this;
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(
-          context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTopologyId());
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addSliceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder addAllSliceConstraints(
-          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceConstraints_);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.addAllMessages(values);
-        }
-        return this;
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder clearSliceConstraints() {
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.clear();
-        }
-        return this;
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public Builder removeSliceConstraints(int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.remove(index);
-          onChanged();
-        } else {
-          sliceConstraintsBuilder_.remove(index);
-        }
-        return this;
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder getSliceConstraintsBuilder(
-          int index) {
-        return getSliceConstraintsFieldBuilder().getBuilder(index);
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-          int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.get(index);  } else {
-          return sliceConstraintsBuilder_.getMessageOrBuilder(index);
-        }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-           getSliceConstraintsOrBuilderList() {
-        if (sliceConstraintsBuilder_ != null) {
-          return sliceConstraintsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(sliceConstraints_);
-        }
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder() {
-        return getSliceConstraintsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Constraint.getDefaultInstance());
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder(
-          int index) {
-        return getSliceConstraintsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
       }
-      /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
-           getSliceConstraintsBuilderList() {
-        return getSliceConstraintsFieldBuilder().getBuilderList();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
-          getSliceConstraintsFieldBuilder() {
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
-                  sliceConstraints_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceConstraints_ = null;
-        }
-        return sliceConstraintsBuilder_;
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
       }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
 
-      private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
-          sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
-          bitField0_ |= 0x00000004;
-         }
-      }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> sliceServiceIdsBuilder_;
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
 
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
-        if (sliceServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceServiceIds_);
-        } else {
-          return sliceServiceIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public int getSliceServiceIdsCount() {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.size();
-        } else {
-          return sliceServiceIdsBuilder_.getCount();
-        }
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.get(index);
-        } else {
-          return sliceServiceIdsBuilder_.getMessage(index);
-        }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder setSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
+
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder setSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(value);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(index, value);
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
         } else {
-          sliceServiceIdsBuilder_.addMessage(index, value);
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(builderForValue.build());
-          onChanged();
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
         } else {
-          sliceServiceIdsBuilder_.addMessage(builderForValue.build());
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(index, builderForValue.build());
-          onChanged();
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
         } else {
-          sliceServiceIdsBuilder_.addMessage(index, builderForValue.build());
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
         return this;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addAllSliceServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceServiceIds_);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addAllMessages(values);
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder clearSliceServiceIds() {
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-          onChanged();
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
         } else {
-          sliceServiceIdsBuilder_.clear();
+          result.topologyId_ = topologyIdBuilder_.build();
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder removeSliceServiceIds(int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.remove(index);
-          onChanged();
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
         } else {
-          sliceServiceIdsBuilder_.remove(index);
+          result.deviceId_ = deviceIdBuilder_.build();
         }
-        return this;
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
+        }
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSliceServiceIdsBuilder(
-          int index) {
-        return getSliceServiceIdsFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-          int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.get(index);  } else {
-          return sliceServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSliceServiceIdsOrBuilderList() {
-        if (sliceServiceIdsBuilder_ != null) {
-          return sliceServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(sliceServiceIds_);
-        }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder() {
-        return getSliceServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder(
-          int index) {
-        return getSliceServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSliceServiceIdsBuilderList() {
-        return getSliceServiceIdsFieldBuilder().getBuilderList();
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSliceServiceIdsFieldBuilder() {
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  sliceServiceIds_,
-                  ((bitField0_ & 0x00000004) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceServiceIds_ = null;
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
         }
-        return sliceServiceIdsBuilder_;
       }
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceSubsliceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000008) != 0)) {
-          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
-          bitField0_ |= 0x00000008;
-         }
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
 
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-        } else {
-          return sliceSubsliceIdsBuilder_.getMessageList();
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPointId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
+        return this;
       }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
        */
-      public int getSliceSubsliceIdsCount() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.size();
-        } else {
-          return sliceSubsliceIdsBuilder_.getCount();
-        }
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
        */
-      public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.get(index);
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         } else {
-          return sliceSubsliceIdsBuilder_.getMessage(index);
+          return topologyIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public Builder setSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.set(index, value);
+          topologyId_ = value;
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.setMessage(index, value);
+          topologyIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public Builder setSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.set(index, builderForValue.build());
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
+          topologyIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public Builder addSliceSubsliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
           }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(value);
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(value);
+          topologyIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(index, value);
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(index, value);
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(builderForValue.build());
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.TopologyId topology_id = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceSubsliceIdsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
         }
-        return this;
+        return topologyIdBuilder_;
       }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
        */
-      public Builder addAllSliceSubsliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceSubsliceIds_);
-          onChanged();
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          sliceSubsliceIdsBuilder_.addAllMessages(values);
+          return deviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder clearSliceSubsliceIds() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.clear();
+          deviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder removeSliceSubsliceIds(int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.remove(index);
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.remove(index);
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceSubsliceIdsBuilder(
-          int index) {
-        return getSliceSubsliceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
-          int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.get(index);  } else {
-          return sliceSubsliceIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceSubsliceIdsOrBuilderList() {
-        if (sliceSubsliceIdsBuilder_ != null) {
-          return sliceSubsliceIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder() {
-        return getSliceSubsliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder(
-          int index) {
-        return getSliceSubsliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceSubsliceIdsBuilderList() {
-        return getSliceSubsliceIdsFieldBuilder().getBuilderList();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceSubsliceIdsFieldBuilder() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceSubsliceIds_,
-                  ((bitField0_ & 0x00000008) != 0),
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          sliceSubsliceIds_ = null;
+          deviceId_ = null;
         }
-        return sliceSubsliceIdsBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.SliceStatus sliceStatus_;
+      private context.ContextOuterClass.Uuid endpointUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> sliceStatusBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       * @return Whether the sliceStatus field is set.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
        */
-      public boolean hasSliceStatus() {
-        return sliceStatusBuilder_ != null || sliceStatus_ != null;
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       * @return The sliceStatus.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
        */
-      public context.ContextOuterClass.SliceStatus getSliceStatus() {
-        if (sliceStatusBuilder_ == null) {
-          return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          return sliceStatusBuilder_.getMessage();
+          return endpointUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
-        if (sliceStatusBuilder_ == null) {
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceStatus_ = value;
+          endpointUuid_ = value;
           onChanged();
         } else {
-          sliceStatusBuilder_.setMessage(value);
+          endpointUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setSliceStatus(
-          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = builderForValue.build();
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
           onChanged();
         } else {
-          sliceStatusBuilder_.setMessage(builderForValue.build());
+          endpointUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
-        if (sliceStatusBuilder_ == null) {
-          if (sliceStatus_ != null) {
-            sliceStatus_ =
-              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
           } else {
-            sliceStatus_ = value;
+            endpointUuid_ = value;
           }
           onChanged();
         } else {
-          sliceStatusBuilder_.mergeFrom(value);
+          endpointUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearSliceStatus() {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = null;
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
           onChanged();
         } else {
-          sliceStatus_ = null;
-          sliceStatusBuilder_ = null;
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
         
         onChanged();
-        return getSliceStatusFieldBuilder().getBuilder();
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-        if (sliceStatusBuilder_ != null) {
-          return sliceStatusBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
         } else {
-          return sliceStatus_ == null ?
-              context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> 
-          getSliceStatusFieldBuilder() {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder>(
-                  getSliceStatus(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
                   getParentForChildren(),
                   isClean());
-          sliceStatus_ = null;
+          endpointUuid_ = null;
         }
-        return sliceStatusBuilder_;
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -30895,82 +47286,143 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Slice)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Slice)
-    private static final context.ContextOuterClass.Slice DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Slice();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.Slice getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Slice>
-        PARSER = new com.google.protobuf.AbstractParser<Slice>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public Slice parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Slice(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Slice> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Slice> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Slice getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceStatusOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceStatus)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The enum numeric value on the wire for sliceStatus.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    int getSliceStatusValue();
+    boolean hasEndpointId();
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The sliceStatus.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.SliceStatusEnum getSliceStatus();
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
+    java.lang.String getEndpointType();
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
+     */
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
+     */
+    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    int getKpiSampleTypesCount();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     */
+    java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     */
+    int getKpiSampleTypesValue(int index);
+
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    boolean hasEndpointLocation();
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
+     */
+    context.ContextOuterClass.Location getEndpointLocation();
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     */
+    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceStatus}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class SliceStatus extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceStatus)
-      SliceStatusOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceStatus.newBuilder() to construct.
-    private SliceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceStatus() {
-      sliceStatus_ = 0;
+    private EndPoint() {
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceStatus();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -30978,7 +47430,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceStatus(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -30986,6 +47438,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -30996,10 +47449,59 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
+            case 10: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endpointType_ = s;
+              break;
+            }
+            case 24: {
               int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiSampleTypes_.add(rawValue);
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                kpiSampleTypes_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (endpointLocation_ != null) {
+                subBuilder = endpointLocation_.toBuilder();
+              }
+              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointLocation_);
+                endpointLocation_ = subBuilder.buildPartial();
+              }
 
-              sliceStatus_ = rawValue;
               break;
             }
             default: {
@@ -31017,40 +47519,172 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
     }
 
-    public static final int SLICE_STATUS_FIELD_NUMBER = 1;
-    private int sliceStatus_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The enum numeric value on the wire for sliceStatus.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    @java.lang.Override public int getSliceStatusValue() {
-      return sliceStatus_;
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The sliceStatus.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    @java.lang.Override public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
-      return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
+    @java.lang.Override
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> kpiSampleTypes_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
+              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
+     */
+    @java.lang.Override
+    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
+    }
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    @java.lang.Override
+    public int getKpiSampleTypesCount() {
+      return kpiSampleTypes_.size();
+    }
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    @java.lang.Override
+    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
+    }
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList() {
+      return kpiSampleTypes_;
+    }
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     */
+    @java.lang.Override
+    public int getKpiSampleTypesValue(int index) {
+      return kpiSampleTypes_.get(index);
+    }
+    private int kpiSampleTypesMemoizedSerializedSize;
+
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.Location endpointLocation_;
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointLocation() {
+      return endpointLocation_ != null;
+    }
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Location getEndpointLocation() {
+      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+    }
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+      return getEndpointLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -31067,8 +47701,22 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(1, sliceStatus_);
+      getSerializedSize();
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
+      }
+      if (getKpiSampleTypesList().size() > 0) {
+        output.writeUInt32NoTag(26);
+        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      }
+      if (endpointLocation_ != null) {
+        output.writeMessage(4, getEndpointLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -31079,9 +47727,28 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, sliceStatus_);
+          .computeMessageSize(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
+        }
+        size += dataSize;
+        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      }
+      if (endpointLocation_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getEndpointLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -31093,12 +47760,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceStatus)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (sliceStatus_ != other.sliceStatus_) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
+      if (hasEndpointLocation()) {
+        if (!getEndpointLocation()
+            .equals(other.getEndpointLocation())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -31108,78 +47787,90 @@ public final class ContextOuterClass {
       if (memoizedHashCode != 0) {
         return memoizedHashCode;
       }
-      int hash = 41;
-      hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + sliceStatus_;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      if (getKpiSampleTypesCount() > 0) {
+        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
+        hash = (53 * hash) + kpiSampleTypes_.hashCode();
+      }
+      if (hasEndpointLocation()) {
+        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointLocation().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -31192,7 +47883,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceStatus prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -31208,26 +47899,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceStatus}
+     * Protobuf type {@code context.EndPoint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceStatus)
-        context.ContextOuterClass.SliceStatusOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceStatus.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -31245,25 +47936,39 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        sliceStatus_ = 0;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        endpointType_ = "";
 
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
+        } else {
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceStatus.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatus build() {
-        context.ContextOuterClass.SliceStatus result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -31271,9 +47976,25 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceStatus buildPartial() {
-        context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
-        result.sliceStatus_ = sliceStatus_;
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+        int from_bitField0_ = bitField0_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        result.endpointType_ = endpointType_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.kpiSampleTypes_ = kpiSampleTypes_;
+        if (endpointLocationBuilder_ == null) {
+          result.endpointLocation_ = endpointLocation_;
+        } else {
+          result.endpointLocation_ = endpointLocationBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -31312,18 +48033,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceStatus) {
-          return mergeFrom((context.ContextOuterClass.SliceStatus)other);
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceStatus other) {
-        if (other == context.ContextOuterClass.SliceStatus.getDefaultInstance()) return this;
-        if (other.sliceStatus_ != 0) {
-          setSliceStatusValue(other.getSliceStatusValue());
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
+        }
+        if (!other.kpiSampleTypes_.isEmpty()) {
+          if (kpiSampleTypes_.isEmpty()) {
+            kpiSampleTypes_ = other.kpiSampleTypes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureKpiSampleTypesIsMutable();
+            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+          }
+          onChanged();
+        }
+        if (other.hasEndpointLocation()) {
+          mergeEndpointLocation(other.getEndpointLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -31340,11 +48078,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceStatus parsedMessage = null;
+        context.ContextOuterClass.EndPoint parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -31353,59 +48091,460 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private int sliceStatus_ = 0;
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return The enum numeric value on the wire for sliceStatus.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      @java.lang.Override public int getSliceStatusValue() {
-        return sliceStatus_;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @param value The enum numeric value on the wire for sliceStatus to set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private java.lang.Object endpointType_ = "";
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The endpointType.
+       */
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The bytes for endpointType.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
        * @return This builder for chaining.
        */
-      public Builder setSliceStatusValue(int value) {
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndpointType() {
         
-        sliceStatus_ = value;
+        endpointType_ = getDefaultInstance().getEndpointType();
         onChanged();
         return this;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return The sliceStatus.
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
-        return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiSampleTypesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
+          bitField0_ |= 0x00000001;
+        }
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @param value The sliceStatus to set.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the kpiSampleTypes.
+       */
+      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return The count of kpiSampleTypes.
+       */
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the element to return.
+       * @return The kpiSampleTypes at the given index.
+       */
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index to set the value at.
+       * @param value The kpiSampleTypes to set.
        * @return This builder for chaining.
        */
-      public Builder setSliceStatus(context.ContextOuterClass.SliceStatusEnum value) {
+      public Builder setKpiSampleTypes(
+          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
         if (value == null) {
           throw new NullPointerException();
         }
-        
-        sliceStatus_ = value.getNumber();
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The kpiSampleTypes to add.
+       * @return This builder for chaining.
+       */
+      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The kpiSampleTypes to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllKpiSampleTypes(
+          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
+          kpiSampleTypes_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+       */
+      public java.util.List<java.lang.Integer>
+      getKpiSampleTypesValueList() {
+        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       */
+      public int getKpiSampleTypesValue(int index) {
+        return kpiSampleTypes_.get(index);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypesValue(
+          int index, int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
+       */
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(value);
+        }
         onChanged();
         return this;
       }
+
+      private context.ContextOuterClass.Location endpointLocation_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return Whether the endpointLocation field is set.
+       */
+      public boolean hasEndpointLocation() {
+        return endpointLocationBuilder_ != null || endpointLocation_ != null;
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return The endpointLocation.
+       */
+      public context.ContextOuterClass.Location getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+        } else {
+          return endpointLocationBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       */
+      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointLocation_ = value;
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       */
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       */
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (endpointLocation_ != null) {
+            endpointLocation_ =
+              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
+          } else {
+            endpointLocation_ = value;
+          }
+          onChanged();
+        } else {
+          endpointLocationBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       */
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
+          onChanged();
+        } else {
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       */
+      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+        
+        onChanged();
+        return getEndpointLocationFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Location endpoint_location = 4;</code>
+       */
+      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+        if (endpointLocationBuilder_ != null) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointLocation_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+        }
+      }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder clearSliceStatus() {
-        
-        sliceStatus_ = 0;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getEndpointLocation(),
+                  getParentForChildren(),
+                  isClean());
+          endpointLocation_ = null;
+        }
+        return endpointLocationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -31420,95 +48559,96 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceStatus)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceStatus)
-    private static final context.ContextOuterClass.SliceStatus DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceStatus();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.SliceStatus getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceStatus>
-        PARSER = new com.google.protobuf.AbstractParser<SliceStatus>() {
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public SliceStatus parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceStatus(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceStatus> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceStatus> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+  public interface ConfigRule_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceIdsList();
-    /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
-    context.ContextOuterClass.SliceId getSliceIds(int index);
+    java.lang.String getResourceKey();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
-    int getSliceIdsCount();
+    com.google.protobuf.ByteString
+        getResourceKeyBytes();
+
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList();
+    java.lang.String getResourceValue();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
   }
   /**
-   * Protobuf type {@code context.SliceIdList}
+   * Protobuf type {@code context.ConfigRule_Custom}
    */
-  public static final class SliceIdList extends
+  public static final class ConfigRule_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceIdList)
-      SliceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
+      ConfigRule_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceIdList.newBuilder() to construct.
-    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_Custom.newBuilder() to construct.
+    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceIdList() {
-      sliceIds_ = java.util.Collections.emptyList();
+    private ConfigRule_Custom() {
+      resourceKey_ = "";
+      resourceValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceIdList();
+      return new ConfigRule_Custom();
     }
 
     @java.lang.Override
@@ -31516,7 +48656,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceIdList(
+    private ConfigRule_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -31524,7 +48664,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -31536,12 +48675,15 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              sliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceValue_ = s;
               break;
             }
             default: {
@@ -31559,64 +48701,97 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
     }
 
-    public static final int SLICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
-    /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-      return sliceIds_;
-    }
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
+    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList() {
-      return sliceIds_;
+    public java.lang.String getResourceKey() {
+      java.lang.Object ref = resourceKey_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceKey_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     @java.lang.Override
-    public int getSliceIdsCount() {
-      return sliceIds_.size();
+    public com.google.protobuf.ByteString
+        getResourceKeyBytes() {
+      java.lang.Object ref = resourceKey_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceKey_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceIds(int index) {
-      return sliceIds_.get(index);
+    public java.lang.String getResourceValue() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceValue_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-        int index) {
-      return sliceIds_.get(index);
+    public com.google.protobuf.ByteString
+        getResourceValueBytes() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -31633,8 +48808,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < sliceIds_.size(); i++) {
-        output.writeMessage(1, sliceIds_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -31645,9 +48823,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < sliceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sliceIds_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -31659,13 +48839,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
 
-      if (!getSliceIdsList()
-          .equals(other.getSliceIdsList())) return false;
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -31677,78 +48859,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceIdsList().hashCode();
-      }
+      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceKey().hashCode();
+      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -31761,7 +48943,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -31777,26 +48959,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceIdList}
+     * Protobuf type {@code context.ConfigRule_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
-        context.ContextOuterClass.SliceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
+        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -31809,35 +48991,32 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          sliceIdsBuilder_.clear();
-        }
+        resourceKey_ = "";
+
+        resourceValue_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList build() {
-        context.ContextOuterClass.SliceIdList result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_Custom build() {
+        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -31845,18 +49024,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList buildPartial() {
-        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (sliceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sliceIds_ = sliceIds_;
-        } else {
-          result.sliceIds_ = sliceIdsBuilder_.build();
-        }
+      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
+        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
         onBuilt();
         return result;
       }
@@ -31895,41 +49066,23 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceIdList) {
-          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
-        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
-        if (sliceIdsBuilder_ == null) {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIds_.isEmpty()) {
-              sliceIds_ = other.sliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSliceIdsIsMutable();
-              sliceIds_.addAll(other.sliceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIdsBuilder_.isEmpty()) {
-              sliceIdsBuilder_.dispose();
-              sliceIdsBuilder_ = null;
-              sliceIds_ = other.sliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sliceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceIdsFieldBuilder() : null;
-            } else {
-              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
+        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
+          onChanged();
+        }
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -31946,11 +49099,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceIdList parsedMessage = null;
+        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -31959,246 +49112,157 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
-
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-        if (sliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceIds_);
-        } else {
-          return sliceIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public int getSliceIdsCount() {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.size();
-        } else {
-          return sliceIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId getSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);
-        } else {
-          return sliceIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
+      private java.lang.Object resourceKey_ = "";
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @return The resourceKey.
        */
-      public Builder addSliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(builderForValue.build());
-          onChanged();
+      public java.lang.String getResourceKey() {
+        java.lang.Object ref = resourceKey_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceKey_ = s;
+          return s;
         } else {
-          sliceIdsBuilder_.addMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @return The bytes for resourceKey.
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, builderForValue.build());
-          onChanged();
+      public com.google.protobuf.ByteString
+          getResourceKeyBytes() {
+        java.lang.Object ref = resourceKey_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceKey_ = b;
+          return b;
         } else {
-          sliceIdsBuilder_.addMessage(index, builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @param value The resourceKey to set.
+       * @return This builder for chaining.
        */
-      public Builder addAllSliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceIds_);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addAllMessages(values);
-        }
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearSliceIds() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.clear();
-        }
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @param value The bytes for resourceKey to set.
+       * @return This builder for chaining.
        */
-      public Builder removeSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.remove(index);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.remove(index);
-        }
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
-          int index) {
-        return getSliceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The resourceValue.
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-          int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);  } else {
-          return sliceIdsBuilder_.getMessageOrBuilder(index);
+      public java.lang.String getResourceValue() {
+        java.lang.Object ref = resourceValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The bytes for resourceValue.
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceIdsOrBuilderList() {
-        if (sliceIdsBuilder_ != null) {
-          return sliceIdsBuilder_.getMessageOrBuilderList();
+      public com.google.protobuf.ByteString
+          getResourceValueBytes() {
+        java.lang.Object ref = resourceValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceValue_ = b;
+          return b;
         } else {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
-        return getSliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
-          int index) {
-        return getSliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceIdsBuilderList() {
-        return getSliceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdsFieldBuilder() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceIds_ = null;
-        }
-        return sliceIdsBuilder_;
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -32213,95 +49277,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceIdList)
-    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
+    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
     }
 
-    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
+    private static final com.google.protobuf.Parser<ConfigRule_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
       @java.lang.Override
-      public SliceIdList parsePartialFrom(
+      public ConfigRule_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceIdList(input, extensionRegistry);
+        return new ConfigRule_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceIdList> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceList)
+  public interface ConfigRule_ACLOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.util.List<context.ContextOuterClass.Slice> 
-        getSlicesList();
+    boolean hasEndpointId();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.Slice getSlices(int index);
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    int getSlicesCount();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList();
+    boolean hasRuleSet();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
-    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-        int index);
+    acl.Acl.AclRuleSet getRuleSet();
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceList}
+   * Protobuf type {@code context.ConfigRule_ACL}
    */
-  public static final class SliceList extends
+  public static final class ConfigRule_ACL extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceList)
-      SliceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
+      ConfigRule_ACLOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceList.newBuilder() to construct.
-    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_ACL.newBuilder() to construct.
+    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceList() {
-      slices_ = java.util.Collections.emptyList();
+    private ConfigRule_ACL() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceList();
+      return new ConfigRule_ACL();
     }
 
     @java.lang.Override
@@ -32309,7 +49378,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceList(
+    private ConfigRule_ACL(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -32317,7 +49386,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -32329,12 +49397,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              slices_.add(
-                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              acl.Acl.AclRuleSet.Builder subBuilder = null;
+              if (ruleSet_ != null) {
+                subBuilder = ruleSet_.toBuilder();
+              }
+              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ruleSet_);
+                ruleSet_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -32352,64 +49437,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          slices_ = java.util.Collections.unmodifiableList(slices_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
     }
 
-    public static final int SLICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Slice> slices_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-      return slices_;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList() {
-      return slices_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public int getSlicesCount() {
-      return slices_.size();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
+
+    public static final int RULE_SET_FIELD_NUMBER = 2;
+    private acl.Acl.AclRuleSet ruleSet_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Slice getSlices(int index) {
-      return slices_.get(index);
+    public boolean hasRuleSet() {
+      return ruleSet_ != null;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-        int index) {
-      return slices_.get(index);
+    public acl.Acl.AclRuleSet getRuleSet() {
+      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    }
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+      return getRuleSet();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -32426,8 +49520,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < slices_.size(); i++) {
-        output.writeMessage(1, slices_.get(i));
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (ruleSet_ != null) {
+        output.writeMessage(2, getRuleSet());
       }
       unknownFields.writeTo(output);
     }
@@ -32438,9 +49535,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < slices_.size(); i++) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, slices_.get(i));
+          .computeMessageSize(1, getEndpointId());
+      }
+      if (ruleSet_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getRuleSet());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -32452,13 +49553,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
+      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
 
-      if (!getSlicesList()
-          .equals(other.getSlicesList())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasRuleSet() != other.hasRuleSet()) return false;
+      if (hasRuleSet()) {
+        if (!getRuleSet()
+            .equals(other.getRuleSet())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -32470,78 +49579,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSlicesCount() > 0) {
-        hash = (37 * hash) + SLICES_FIELD_NUMBER;
-        hash = (53 * hash) + getSlicesList().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasRuleSet()) {
+        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
+        hash = (53 * hash) + getRuleSet().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -32554,7 +49667,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -32570,26 +49683,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceList}
+     * Protobuf type {@code context.ConfigRule_ACL}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceList)
-        context.ContextOuterClass.SliceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
+        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceList.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -32602,17 +49715,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          slicesBuilder_.clear();
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+        } else {
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
         return this;
       }
@@ -32620,17 +49738,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceList.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList build() {
-        context.ContextOuterClass.SliceList result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_ACL build() {
+        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -32638,17 +49756,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList buildPartial() {
-        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
-        int from_bitField0_ = bitField0_;
-        if (slicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            slices_ = java.util.Collections.unmodifiableList(slices_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.slices_ = slices_;
+      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
+        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.slices_ = slicesBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (ruleSetBuilder_ == null) {
+          result.ruleSet_ = ruleSet_;
+        } else {
+          result.ruleSet_ = ruleSetBuilder_.build();
         }
         onBuilt();
         return result;
@@ -32688,41 +49806,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceList) {
-          return mergeFrom((context.ContextOuterClass.SliceList)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
-        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
-        if (slicesBuilder_ == null) {
-          if (!other.slices_.isEmpty()) {
-            if (slices_.isEmpty()) {
-              slices_ = other.slices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSlicesIsMutable();
-              slices_.addAll(other.slices_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.slices_.isEmpty()) {
-            if (slicesBuilder_.isEmpty()) {
-              slicesBuilder_.dispose();
-              slicesBuilder_ = null;
-              slices_ = other.slices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              slicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSlicesFieldBuilder() : null;
-            } else {
-              slicesBuilder_.addAllMessages(other.slices_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
+        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasRuleSet()) {
+          mergeRuleSet(other.getRuleSet());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -32739,11 +49837,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceList parsedMessage = null;
+        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -32752,246 +49850,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Slice> slices_ =
-        java.util.Collections.emptyList();
-      private void ensureSlicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-        if (slicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(slices_);
-        } else {
-          return slicesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public int getSlicesCount() {
-        if (slicesBuilder_ == null) {
-          return slices_.size();
-        } else {
-          return slicesBuilder_.getCount();
-        }
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.Slice getSlices(int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return slicesBuilder_.getMessage(index);
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.set(index, value);
+          endpointId_ = value;
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, value);
+          endpointIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.set(index, builderForValue.build());
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addSlices(context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
           }
-          ensureSlicesIsMutable();
-          slices_.add(value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSlicesIsMutable();
-          slices_.add(index, value);
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, value);
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addSlices(
-          context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          slicesBuilder_.addMessage(builderForValue.build());
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          slicesBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
         }
-        return this;
+        return endpointIdBuilder_;
       }
+
+      private acl.Acl.AclRuleSet ruleSet_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return Whether the ruleSet field is set.
        */
-      public Builder addAllSlices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, slices_);
-          onChanged();
+      public boolean hasRuleSet() {
+        return ruleSetBuilder_ != null || ruleSet_ != null;
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return The ruleSet.
+       */
+      public acl.Acl.AclRuleSet getRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
         } else {
-          slicesBuilder_.addAllMessages(values);
+          return ruleSetBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder clearSlices() {
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ruleSet_ = value;
           onChanged();
         } else {
-          slicesBuilder_.clear();
+          ruleSetBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder removeSlices(int index) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.remove(index);
+      public Builder setRuleSet(
+          acl.Acl.AclRuleSet.Builder builderForValue) {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = builderForValue.build();
           onChanged();
         } else {
-          slicesBuilder_.remove(index);
+          ruleSetBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
-          int index) {
-        return getSlicesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-          int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);  } else {
-          return slicesBuilder_.getMessageOrBuilder(index);
+      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (ruleSet_ != null) {
+            ruleSet_ =
+              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+          } else {
+            ruleSet_ = value;
+          }
+          onChanged();
+        } else {
+          ruleSetBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-           getSlicesOrBuilderList() {
-        if (slicesBuilder_ != null) {
-          return slicesBuilder_.getMessageOrBuilderList();
+      public Builder clearRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(slices_);
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
-        return getSlicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Slice.getDefaultInstance());
+      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
+        
+        onChanged();
+        return getRuleSetFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
-          int index) {
-        return getSlicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Slice.getDefaultInstance());
+      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+        if (ruleSetBuilder_ != null) {
+          return ruleSetBuilder_.getMessageOrBuilder();
+        } else {
+          return ruleSet_ == null ?
+              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice.Builder> 
-           getSlicesBuilderList() {
-        return getSlicesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
-          getSlicesFieldBuilder() {
-        if (slicesBuilder_ == null) {
-          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
-                  slices_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
+          getRuleSetFieldBuilder() {
+        if (ruleSetBuilder_ == null) {
+          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
+                  getRuleSet(),
                   getParentForChildren(),
                   isClean());
-          slices_ = null;
+          ruleSet_ = null;
         }
-        return slicesBuilder_;
+        return ruleSetBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -33006,100 +50101,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceList)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceList)
-    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
+    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
     }
 
-    public static context.ContextOuterClass.SliceList getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
+    private static final com.google.protobuf.Parser<ConfigRule_ACL>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
       @java.lang.Override
-      public SliceList parsePartialFrom(
+      public ConfigRule_ACL parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceList(input, extensionRegistry);
+        return new ConfigRule_ACL(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceList> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceList> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    boolean hasEvent();
+    int getActionValue();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    boolean hasCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
+     */
+    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     */
+    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
 
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
-    boolean hasSliceId();
+    boolean hasAcl();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
-    context.ContextOuterClass.SliceId getSliceId();
+    context.ContextOuterClass.ConfigRule_ACL getAcl();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
+
+    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
   }
   /**
-   * Protobuf type {@code context.SliceEvent}
+   * Protobuf type {@code context.ConfigRule}
    */
-  public static final class SliceEvent extends
+  public static final class ConfigRule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceEvent)
-      SliceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceEvent.newBuilder() to construct.
-    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceEvent() {
+    private ConfigRule() {
+      action_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceEvent();
+      return new ConfigRule();
     }
 
     @java.lang.Override
@@ -33107,7 +50216,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceEvent(
+    private ConfigRule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33125,30 +50234,38 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+            case 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
+              if (configRuleCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 2;
               break;
             }
-            case 18: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
+            case 26: {
+              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
+              if (configRuleCase_ == 3) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
               }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 3;
               break;
             }
             default: {
@@ -33172,67 +50289,137 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    private int configRuleCase_ = 0;
+    private java.lang.Object configRule_;
+    public enum ConfigRuleCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      CUSTOM(2),
+      ACL(3),
+      CONFIGRULE_NOT_SET(0);
+      private final int value;
+      private ConfigRuleCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ConfigRuleCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ConfigRuleCase forNumber(int value) {
+        switch (value) {
+          case 2: return CUSTOM;
+          case 3: return ACL;
+          case 0: return CONFIGRULE_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ConfigRuleCase
+    getConfigRuleCase() {
+      return ConfigRuleCase.forNumber(
+          configRuleCase_);
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int CUSTOM_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasCustom() {
+      return configRuleCase_ == 2;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.SliceId sliceId_;
+    public static final int ACL_FIELD_NUMBER = 3;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public boolean hasAcl() {
+      return configRuleCase_ == 3;
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33249,11 +50436,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
       }
-      if (sliceId_ != null) {
-        output.writeMessage(2, getSliceId());
+      if (configRuleCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       unknownFields.writeTo(output);
     }
@@ -33264,13 +50454,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeEnumSize(1, action_);
       }
-      if (sliceId_ != null) {
+      if (configRuleCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceId());
+          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33282,20 +50476,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
+      if (action_ != other.action_) return false;
+      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
+      switch (configRuleCase_) {
+        case 2:
+          if (!getCustom()
+              .equals(other.getCustom())) return false;
+          break;
+        case 3:
+          if (!getAcl()
+              .equals(other.getAcl())) return false;
+          break;
+        case 0:
+        default:
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -33308,82 +50506,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      switch (configRuleCase_) {
+        case 2:
+          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+          hash = (53 * hash) + getCustom().hashCode();
+          break;
+        case 3:
+          hash = (37 * hash) + ACL_FIELD_NUMBER;
+          hash = (53 * hash) + getAcl().hashCode();
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33396,7 +50600,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33412,26 +50616,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceEvent}
+     * Protobuf type {@code context.ConfigRule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
-        context.ContextOuterClass.SliceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33449,35 +50653,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
+        action_ = 0;
+
+        configRuleCase_ = 0;
+        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent build() {
-        context.ContextOuterClass.SliceEvent result = buildPartial();
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -33485,18 +50681,24 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent buildPartial() {
-        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        if (configRuleCase_ == 2) {
+          if (customBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = customBuilder_.build();
+          }
         }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
-        } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+        if (configRuleCase_ == 3) {
+          if (aclBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = aclBuilder_.build();
+          }
         }
+        result.configRuleCase_ = configRuleCase_;
         onBuilt();
         return result;
       }
@@ -33535,21 +50737,31 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceEvent) {
-          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
-        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
         }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
+        switch (other.getConfigRuleCase()) {
+          case CUSTOM: {
+            mergeCustom(other.getCustom());
+            break;
+          }
+          case ACL: {
+            mergeAcl(other.getAcl());
+            break;
+          }
+          case CONFIGRULE_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -33566,11 +50778,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceEvent parsedMessage = null;
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -33579,243 +50791,356 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int configRuleCase_ = 0;
+      private java.lang.Object configRule_;
+      public ConfigRuleCase
+          getConfigRuleCase() {
+        return ConfigRuleCase.forNumber(
+            configRuleCase_);
+      }
+
+      public Builder clearConfigRule() {
+        configRuleCase_ = 0;
+        configRule_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      private int action_ = 0;
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The enum numeric value on the wire for action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setActionValue(int value) {
+        
+        action_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
 
-      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return Whether the custom field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      @java.lang.Override
+      public boolean hasCustom() {
+        return configRuleCase_ == 2;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return The custom.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         } else {
-          return eventBuilder_.getMessage();
+          if (configRuleCase_ == 2) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setCustom(
+          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          customBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 2) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
-          onChanged();
+      public Builder clearCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          customBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
+          getCustomFieldBuilder() {
+        if (customBuilder_ == null) {
+          if (!(configRuleCase_ == 2)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          }
+          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          configRule_ = null;
         }
-        return eventBuilder_;
+        configRuleCase_ = 2;
+        onChanged();;
+        return customBuilder_;
       }
 
-      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return Whether the sliceId field is set.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return Whether the acl field is set.
        */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+      @java.lang.Override
+      public boolean hasAcl() {
+        return configRuleCase_ == 3;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return The sliceId.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return The acl.
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         } else {
-          return sliceIdBuilder_.getMessage();
+          if (configRuleCase_ == 3) {
+            return aclBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
+      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceId_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder setAcl(
+          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
+        if (aclBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          aclBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            sliceId_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          sliceIdBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 3) {
+            aclBuilder_.mergeFrom(value);
+          }
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
+      public Builder clearAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          aclBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
+        return getAclFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
+          return aclBuilder_.getMessageOrBuilder();
         } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
+          getAclFieldBuilder() {
+        if (aclBuilder_ == null) {
+          if (!(configRuleCase_ == 3)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+          }
+          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
                   getParentForChildren(),
                   isClean());
-          sliceId_ = null;
+          configRule_ = null;
         }
-        return sliceIdBuilder_;
+        configRuleCase_ = 3;
+        onChanged();;
+        return aclBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -33830,89 +51155,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceEvent)
-    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
     }
 
-    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
       @java.lang.Override
-      public SliceEvent parsePartialFrom(
+      public ConfigRule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceEvent(input, extensionRegistry);
+        return new ConfigRule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceEvent> parser() {
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface Constraint_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
-    boolean hasConnectionUuid();
+    java.lang.String getConstraintType();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
+
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    java.lang.String getConstraintValue();
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
+     */
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
   }
   /**
    * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
    * </pre>
    *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.Constraint_Custom}
    */
-  public static final class ConnectionId extends
+  public static final class Constraint_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
+      Constraint_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Custom.newBuilder() to construct.
+    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private Constraint_Custom() {
+      constraintType_ = "";
+      constraintValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new Constraint_Custom();
     }
 
     @java.lang.Override
@@ -33920,7 +51256,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private Constraint_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33939,16 +51275,15 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.toBuilder();
-              }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintType_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              constraintValue_ = s;
               break;
             }
             default: {
@@ -33972,41 +51307,91 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
     }
 
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getConstraintValueBytes() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34023,8 +51408,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionUuid_ != null) {
-        output.writeMessage(1, getConnectionUuid());
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -34035,9 +51423,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionUuid_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34049,16 +51439,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) return false;
-      }
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34070,78 +51459,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionUuid()) {
-        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionUuid().hashCode();
-      }
+      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintType().hashCode();
+      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -34154,7 +51543,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -34171,29 +51560,29 @@ public final class ContextOuterClass {
     }
     /**
      * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
      * </pre>
      *
-     * Protobuf type {@code context.ConnectionId}
+     * Protobuf type {@code context.Constraint_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
-        context.ContextOuterClass.ConnectionIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
+        context.ContextOuterClass.Constraint_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -34211,29 +51600,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
-        } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
-        }
+        constraintType_ = "";
+
+        constraintValue_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
+      public context.ContextOuterClass.Constraint_Custom build() {
+        context.ContextOuterClass.Constraint_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34241,13 +51628,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId buildPartial() {
-        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
-        if (connectionUuidBuilder_ == null) {
-          result.connectionUuid_ = connectionUuid_;
-        } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
-        }
+      public context.ContextOuterClass.Constraint_Custom buildPartial() {
+        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
         onBuilt();
         return result;
       }
@@ -34286,18 +51670,23 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionId) {
-          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
-        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
-        if (other.hasConnectionUuid()) {
-          mergeConnectionUuid(other.getConnectionUuid());
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
+        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
+          onChanged();
+        }
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -34314,11 +51703,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34328,123 +51717,156 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid connectionUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+      private java.lang.Object constraintType_ = "";
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
         } else {
-          return connectionUuidBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionUuid_ = value;
-          onChanged();
-        } else {
-          connectionUuidBuilder_.setMessage(value);
-        }
-
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setConnectionUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
-          onChanged();
-        } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (connectionUuid_ != null) {
-            connectionUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
-          } else {
-            connectionUuid_ = value;
-          }
-          onChanged();
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object constraintValue_ = "";
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
+       */
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
-          onChanged();
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
-        
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
         onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
-        }
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getConnectionUuidFieldBuilder() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getConnectionUuid(),
-                  getParentForChildren(),
-                  isClean());
-          connectionUuid_ = null;
-        }
-        return connectionUuidBuilder_;
+      public Builder setConstraintValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34459,150 +51881,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
+    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionId>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+    private static final com.google.protobuf.Parser<Constraint_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public Constraint_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new Constraint_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
       return PARSER;
     }
 
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
-     */
-    boolean hasConnectionId();
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
-     */
-    context.ContextOuterClass.ConnectionId getConnectionId();
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
-
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
 
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getPathHopsEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    int getPathHopsEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index);
+  }
+
+  public interface Constraint_ScheduleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSubServiceIdsList();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    int getSubServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList();
+    float getStartTimestamp();
+
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index);
+    float getDurationDays();
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * Protobuf type {@code context.Constraint_Schedule}
    */
-  public static final class Connection extends
+  public static final class Constraint_Schedule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
+      Constraint_ScheduleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Schedule.newBuilder() to construct.
+    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      pathHopsEndpointIds_ = java.util.Collections.emptyList();
-      subServiceIds_ = java.util.Collections.emptyList();
+    private Constraint_Schedule() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new Constraint_Schedule();
     }
 
     @java.lang.Override
@@ -34610,7 +51964,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private Constraint_Schedule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34618,7 +51972,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -34629,48 +51982,14 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
-              }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
-              }
+            case 13: {
 
+              startTimestamp_ = input.readFloat();
               break;
             }
-            case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
-              }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
-              }
+            case 21: {
 
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              pathHopsEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              subServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              durationDays_ = input.readFloat();
               break;
             }
             default: {
@@ -34688,159 +52007,43 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
-    }
-
-    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionId connectionId_;
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
-     */
-    @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
-    }
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-    }
-    /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
     }
 
-    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-      return pathHopsEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList() {
-      return pathHopsEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public int getPathHopsEndpointIdsCount() {
-      return pathHopsEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-      return pathHopsEndpointIds_.get(index);
-    }
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
+    private float startTimestamp_;
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index) {
-      return pathHopsEndpointIds_.get(index);
+    public float getStartTimestamp() {
+      return startTimestamp_;
     }
 
-    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-      return subServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList() {
-      return subServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public int getSubServiceIdsCount() {
-      return subServiceIds_.size();
-    }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-      return subServiceIds_.get(index);
-    }
+    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
+    private float durationDays_;
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index) {
-      return subServiceIds_.get(index);
+    public float getDurationDays() {
+      return durationDays_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34857,17 +52060,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionId_ != null) {
-        output.writeMessage(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
-      }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
-        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      if (startTimestamp_ != 0F) {
+        output.writeFloat(1, startTimestamp_);
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        output.writeMessage(4, subServiceIds_.get(i));
+      if (durationDays_ != 0F) {
+        output.writeFloat(2, durationDays_);
       }
       unknownFields.writeTo(output);
     }
@@ -34878,21 +52075,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
-      }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+      if (startTimestamp_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+          .computeFloatSize(1, startTimestamp_);
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
+      if (durationDays_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, subServiceIds_.get(i));
+          .computeFloatSize(2, durationDays_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34904,25 +52093,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
 
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
-      }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (!getPathHopsEndpointIdsList()
-          .equals(other.getPathHopsEndpointIdsList())) return false;
-      if (!getSubServiceIdsList()
-          .equals(other.getSubServiceIdsList())) return false;
+      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+          != java.lang.Float.floatToIntBits(
+              other.getStartTimestamp())) return false;
+      if (java.lang.Float.floatToIntBits(getDurationDays())
+          != java.lang.Float.floatToIntBits(
+              other.getDurationDays())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34934,90 +52115,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      if (getPathHopsEndpointIdsCount() > 0) {
-        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
-      }
-      if (getSubServiceIdsCount() > 0) {
-        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSubServiceIdsList().hashCode();
-      }
+      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getStartTimestamp());
+      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getDurationDays());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35030,7 +52201,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -35046,26 +52217,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Connection}
+     * Protobuf type {@code context.Constraint_Schedule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Connection)
-        context.ContextOuterClass.ConnectionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
+        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -35078,54 +52249,32 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPathHopsEndpointIdsFieldBuilder();
-          getSubServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          pathHopsEndpointIdsBuilder_.clear();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          subServiceIdsBuilder_.clear();
-        }
+        startTimestamp_ = 0F;
+
+        durationDays_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
-        return context.ContextOuterClass.Connection.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection build() {
-        context.ContextOuterClass.Connection result = buildPartial();
+      public context.ContextOuterClass.Constraint_Schedule build() {
+        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -35133,37 +52282,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection buildPartial() {
-        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
-        } else {
-          result.connectionId_ = connectionIdBuilder_.build();
-        }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
-        } else {
-          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.subServiceIds_ = subServiceIds_;
-        } else {
-          result.subServiceIds_ = subServiceIdsBuilder_.build();
-        }
+      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
+        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
+        result.startTimestamp_ = startTimestamp_;
+        result.durationDays_ = durationDays_;
         onBuilt();
         return result;
       }
@@ -35202,821 +52324,674 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Connection) {
-          return mergeFrom((context.ContextOuterClass.Connection)other);
+        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
         } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
-        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
-        }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIds_.isEmpty()) {
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensurePathHopsEndpointIdsIsMutable();
-              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
-              pathHopsEndpointIdsBuilder_.dispose();
-              pathHopsEndpointIdsBuilder_ = null;
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              pathHopsEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPathHopsEndpointIdsFieldBuilder() : null;
-            } else {
-              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
-            }
-          }
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIds_.isEmpty()) {
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSubServiceIdsIsMutable();
-              subServiceIds_.addAll(other.subServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIdsBuilder_.isEmpty()) {
-              subServiceIdsBuilder_.dispose();
-              subServiceIdsBuilder_ = null;
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              subServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubServiceIdsFieldBuilder() : null;
-            } else {
-              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Connection parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private context.ContextOuterClass.ConnectionId connectionId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return Whether the connectionId field is set.
-       */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return The connectionId.
-       */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        } else {
-          return connectionIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionId_ = value;
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(value);
+          super.mergeFrom(other);
+          return this;
         }
+      }
 
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
+        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
+        if (other.getStartTimestamp() != 0F) {
+          setStartTimestamp(other.getStartTimestamp());
+        }
+        if (other.getDurationDays() != 0F) {
+          setDurationDays(other.getDurationDays());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
-          } else {
-            connectionId_ = value;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          onChanged();
-        } else {
-          connectionIdBuilder_.mergeFrom(value);
         }
-
         return this;
       }
+
+      private float startTimestamp_ ;
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>float start_timestamp = 1;</code>
+       * @return The startTimestamp.
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-          onChanged();
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public float getStartTimestamp() {
+        return startTimestamp_;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>float start_timestamp = 1;</code>
+       * @param value The startTimestamp to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public Builder setStartTimestamp(float value) {
         
+        startTimestamp_ = value;
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        }
+        return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>float start_timestamp = 1;</code>
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
-                  getParentForChildren(),
-                  isClean());
-          connectionId_ = null;
-        }
-        return connectionIdBuilder_;
+      public Builder clearStartTimestamp() {
+        
+        startTimestamp_ = 0F;
+        onChanged();
+        return this;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
-       */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
-      }
+      private float durationDays_ ;
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>float duration_days = 2;</code>
+       * @return The durationDays.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        } else {
-          return serviceIdBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public float getDurationDays() {
+        return durationDays_;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>float duration_days = 2;</code>
+       * @param value The durationDays to set.
+       * @return This builder for chaining.
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceId_ = value;
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(value);
-        }
-
+      public Builder setDurationDays(float value) {
+        
+        durationDays_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>float duration_days = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearDurationDays() {
+        
+        durationDays_ = 0F;
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
-          } else {
-            serviceId_ = value;
-          }
-          onChanged();
-        } else {
-          serviceIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-          onChanged();
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
 
-        return this;
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+
+
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
+    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
+    }
+
+    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint_Schedule>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
+      @java.lang.Override
+      public Constraint_Schedule parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint_Schedule(input, extensionRegistry);
       }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
-        }
+    };
+
+    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface GPS_PositionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
+     */
+    float getLatitude();
+
+    /**
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
+     */
+    float getLongitude();
+  }
+  /**
+   * Protobuf type {@code context.GPS_Position}
+   */
+  public static final class GPS_Position extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.GPS_Position)
+      GPS_PositionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use GPS_Position.newBuilder() to construct.
+    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private GPS_Position() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new GPS_Position();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private GPS_Position(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
       }
-      /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
-                  getParentForChildren(),
-                  isClean());
-          serviceId_ = null;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+
+              latitude_ = input.readFloat();
+              break;
+            }
+            case 21: {
+
+              longitude_ = input.readFloat();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
         }
-        return serviceIdBuilder_;
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+    }
 
-      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensurePathHopsEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+    }
+
+    public static final int LATITUDE_FIELD_NUMBER = 1;
+    private float latitude_;
+    /**
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
+     */
+    @java.lang.Override
+    public float getLatitude() {
+      return latitude_;
+    }
+
+    public static final int LONGITUDE_FIELD_NUMBER = 2;
+    private float longitude_;
+    /**
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
+     */
+    @java.lang.Override
+    public float getLongitude() {
+      return longitude_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (latitude_ != 0F) {
+        output.writeFloat(1, latitude_);
+      }
+      if (longitude_ != 0F) {
+        output.writeFloat(2, longitude_);
       }
+      unknownFields.writeTo(output);
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        } else {
-          return pathHopsEndpointIdsBuilder_.getMessageList();
-        }
+      size = 0;
+      if (latitude_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, latitude_);
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public int getPathHopsEndpointIdsCount() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.size();
-        } else {
-          return pathHopsEndpointIdsBuilder_.getCount();
-        }
+      if (longitude_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, longitude_);
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);
-        } else {
-          return pathHopsEndpointIdsBuilder_.getMessage(index);
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, value);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, value);
-        }
-        return this;
+      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
+
+      if (java.lang.Float.floatToIntBits(getLatitude())
+          != java.lang.Float.floatToIntBits(
+              other.getLatitude())) return false;
+      if (java.lang.Float.floatToIntBits(getLongitude())
+          != java.lang.Float.floatToIntBits(
+              other.getLongitude())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(value);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(value);
-        }
-        return this;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getLatitude());
+      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getLongitude());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.GPS_Position parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.GPS_Position}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
+        context.ContextOuterClass.GPS_PositionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, value);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder addPathHopsEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+
+      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder addAllPathHopsEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, pathHopsEndpointIds_);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder clearPathHopsEndpointIds() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.clear();
-        }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        latitude_ = 0F;
+
+        longitude_ = 0F;
+
         return this;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public Builder removePathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.remove(index);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.remove(index);
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-          int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);  } else {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position build() {
+        context.ContextOuterClass.GPS_Position result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathHopsEndpointIdsOrBuilderList() {
-        if (pathHopsEndpointIdsBuilder_ != null) {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        }
+
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position buildPartial() {
+        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
+        result.latitude_ = latitude_;
+        result.longitude_ = longitude_;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getPathHopsEndpointIdsBuilderList() {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getPathHopsEndpointIdsFieldBuilder() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  pathHopsEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          pathHopsEndpointIds_ = null;
-        }
-        return pathHopsEndpointIdsBuilder_;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-
-      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSubServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
-          bitField0_ |= 0x00000002;
-         }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
-
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-        if (subServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        } else {
-          return subServiceIdsBuilder_.getMessageList();
-        }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public int getSubServiceIdsCount() {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.size();
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.GPS_Position) {
+          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
         } else {
-          return subServiceIdsBuilder_.getCount();
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);
-        } else {
-          return subServiceIdsBuilder_.getMessage(index);
+
+      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
+        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
+        if (other.getLatitude() != 0F) {
+          setLatitude(other.getLatitude());
         }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.setMessage(index, value);
+        if (other.getLongitude() != 0F) {
+          setLongitude(other.getLongitude());
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.GPS_Position parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(value);
         }
         return this;
       }
+
+      private float latitude_ ;
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float latitude = 1;</code>
+       * @return The latitude.
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public float getLatitude() {
+        return latitude_;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float latitude = 1;</code>
+       * @param value The latitude to set.
+       * @return This builder for chaining.
        */
-      public Builder addSubServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(builderForValue.build());
-        }
+      public Builder setLatitude(float value) {
+        
+        latitude_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float latitude = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder clearLatitude() {
+        
+        latitude_ = 0F;
+        onChanged();
         return this;
       }
+
+      private float longitude_ ;
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float longitude = 2;</code>
+       * @return The longitude.
        */
-      public Builder addAllSubServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subServiceIds_);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
+      @java.lang.Override
+      public float getLongitude() {
+        return longitude_;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float longitude = 2;</code>
+       * @param value The longitude to set.
+       * @return This builder for chaining.
        */
-      public Builder clearSubServiceIds() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.clear();
-        }
+      public Builder setLongitude(float value) {
+        
+        longitude_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float longitude = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder removeSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.remove(index);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.remove(index);
-        }
+      public Builder clearLongitude() {
+        
+        longitude_ = 0F;
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-          int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);  } else {
-          return subServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSubServiceIdsOrBuilderList() {
-        if (subServiceIdsBuilder_ != null) {
-          return subServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSubServiceIdsBuilderList() {
-        return getSubServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSubServiceIdsFieldBuilder() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  subServiceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          subServiceIds_ = null;
-        }
-        return subServiceIdsBuilder_;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -36030,95 +53005,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.GPS_Position)
+    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Connection>
-        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+    private static final com.google.protobuf.Parser<GPS_Position>
+        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public GPS_Position parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new GPS_Position(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<GPS_Position> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface LocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Location)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    java.util.List<context.ContextOuterClass.ConnectionId> 
-        getConnectionIdsList();
+    boolean hasRegion();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The region.
      */
-    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    java.lang.String getRegion();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
      */
-    int getConnectionIdsCount();
+    com.google.protobuf.ByteString
+        getRegionBytes();
+
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    boolean hasGpsPosition();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.GPS_Position getGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     */
+    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
+
+    public context.ContextOuterClass.Location.LocationCase getLocationCase();
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * Protobuf type {@code context.Location}
    */
-  public static final class ConnectionIdList extends
+  public static final class Location extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Location)
+      LocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Location.newBuilder() to construct.
+    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private Location() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new Location();
     }
 
     @java.lang.Override
@@ -36126,7 +53110,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private Location(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36134,7 +53118,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -36145,13 +53128,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
-                mutable_bitField0_ |= 0x00000001;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+              locationCase_ = 1;
+              location_ = s;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
+              if (locationCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
               }
-              connectionIds_.add(
-                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              location_ =
+                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                location_ = subBuilder.buildPartial();
+              }
+              locationCase_ = 2;
               break;
             }
             default: {
@@ -36169,64 +53163,145 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Location_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
     }
 
-    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    private int locationCase_ = 0;
+    private java.lang.Object location_;
+    public enum LocationCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      REGION(1),
+      GPS_POSITION(2),
+      LOCATION_NOT_SET(0);
+      private final int value;
+      private LocationCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static LocationCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static LocationCase forNumber(int value) {
+        switch (value) {
+          case 1: return REGION;
+          case 2: return GPS_POSITION;
+          case 0: return LOCATION_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public LocationCase
+    getLocationCase() {
+      return LocationCase.forNumber(
+          locationCase_);
+    }
+
+    public static final int REGION_FIELD_NUMBER = 1;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-      return connectionIds_;
+    public boolean hasRegion() {
+      return locationCase_ == 1;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The region.
      */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList() {
-      return connectionIds_;
+    public java.lang.String getRegion() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (locationCase_ == 1) {
+          location_ = s;
+        }
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    public com.google.protobuf.ByteString
+        getRegionBytes() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (locationCase_ == 1) {
+          location_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int GPS_POSITION_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
      */
     @java.lang.Override
-    public int getConnectionIdsCount() {
-      return connectionIds_.size();
+    public boolean hasGpsPosition() {
+      return locationCase_ == 2;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public context.ContextOuterClass.GPS_Position getGpsPosition() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index) {
-      return connectionIds_.get(index);
+    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -36243,8 +53318,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      if (locationCase_ == 1) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
+      }
+      if (locationCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       unknownFields.writeTo(output);
     }
@@ -36255,9 +53333,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      if (locationCase_ == 1) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
+      }
+      if (locationCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -36269,13 +53350,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.Location)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
-
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
+
+      if (!getLocationCase().equals(other.getLocationCase())) return false;
+      switch (locationCase_) {
+        case 1:
+          if (!getRegion()
+              .equals(other.getRegion())) return false;
+          break;
+        case 2:
+          if (!getGpsPosition()
+              .equals(other.getGpsPosition())) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -36287,78 +53379,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionIdsCount() > 0) {
-        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      switch (locationCase_) {
+        case 1:
+          hash = (37 * hash) + REGION_FIELD_NUMBER;
+          hash = (53 * hash) + getRegion().hashCode();
+          break;
+        case 2:
+          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
+          hash = (53 * hash) + getGpsPosition().hashCode();
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Location parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.Location parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36371,7 +53471,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36387,26 +53487,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * Protobuf type {@code context.Location}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Location)
+        context.ContextOuterClass.LocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.Location.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36419,35 +53519,30 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          connectionIdsBuilder_.clear();
-        }
+        locationCase_ = 0;
+        location_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.Location getDefaultInstanceForType() {
+        return context.ContextOuterClass.Location.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.Location build() {
+        context.ContextOuterClass.Location result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36455,18 +53550,19 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList buildPartial() {
-        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+      public context.ContextOuterClass.Location buildPartial() {
+        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
+        if (locationCase_ == 1) {
+          result.location_ = location_;
+        }
+        if (locationCase_ == 2) {
+          if (gpsPositionBuilder_ == null) {
+            result.location_ = location_;
+          } else {
+            result.location_ = gpsPositionBuilder_.build();
           }
-          result.connectionIds_ = connectionIds_;
-        } else {
-          result.connectionIds_ = connectionIdsBuilder_.build();
         }
+        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -36505,40 +53601,29 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        if (other instanceof context.ContextOuterClass.Location) {
+          return mergeFrom((context.ContextOuterClass.Location)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
-        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
-        if (connectionIdsBuilder_ == null) {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIds_.isEmpty()) {
-              connectionIds_ = other.connectionIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionIdsIsMutable();
-              connectionIds_.addAll(other.connectionIds_);
-            }
+      public Builder mergeFrom(context.ContextOuterClass.Location other) {
+        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
+        switch (other.getLocationCase()) {
+          case REGION: {
+            locationCase_ = 1;
+            location_ = other.location_;
             onChanged();
+            break;
           }
-        } else {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIdsBuilder_.isEmpty()) {
-              connectionIdsBuilder_.dispose();
-              connectionIdsBuilder_ = null;
-              connectionIds_ = other.connectionIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionIdsFieldBuilder() : null;
-            } else {
-              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
-            }
+          case GPS_POSITION: {
+            mergeGpsPosition(other.getGpsPosition());
+            break;
+          }
+          case LOCATION_NOT_SET: {
+            break;
           }
         }
         this.mergeUnknownFields(other.unknownFields);
@@ -36556,11 +53641,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        context.ContextOuterClass.Location parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36569,246 +53654,258 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
+      private int locationCase_ = 0;
+      private java.lang.Object location_;
+      public LocationCase
+          getLocationCase() {
+        return LocationCase.forNumber(
+            locationCase_);
+      }
 
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
-          bitField0_ |= 0x00000001;
-         }
+      public Builder clearLocation() {
+        locationCase_ = 0;
+        location_ = null;
+        onChanged();
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string region = 1;</code>
+       * @return Whether the region field is set.
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
-        } else {
-          return connectionIdsBuilder_.getMessageList();
-        }
+      @java.lang.Override
+      public boolean hasRegion() {
+        return locationCase_ == 1;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string region = 1;</code>
+       * @return The region.
        */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
+      @java.lang.Override
+      public java.lang.String getRegion() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (locationCase_ == 1) {
+            location_ = s;
+          }
+          return s;
         } else {
-          return connectionIdsBuilder_.getCount();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string region = 1;</code>
+       * @return The bytes for region.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getRegionBytes() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (locationCase_ == 1) {
+            location_ = b;
+          }
+          return b;
         } else {
-          return connectionIdsBuilder_.getMessage(index);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string region = 1;</code>
+       * @param value The region to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.setMessage(index, value);
-        }
+      public Builder setRegion(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  locationCase_ = 1;
+        location_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string region = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
+      public Builder clearRegion() {
+        if (locationCase_ == 1) {
+          locationCase_ = 0;
+          location_ = null;
           onChanged();
-        } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>string region = 1;</code>
+       * @param value The bytes for region to set.
+       * @return This builder for chaining.
        */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(value);
-        }
+      public Builder setRegionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        locationCase_ = 1;
+        location_ = value;
+        onChanged();
         return this;
       }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return Whether the gpsPosition field is set.
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public boolean hasGpsPosition() {
+        return locationCase_ == 2;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return The gpsPosition.
        */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
-          onChanged();
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position getGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
+          if (locationCase_ == 2) {
+            return gpsPositionBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
+      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          location_ = value;
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+          gpsPositionBuilder_.setMessage(value);
         }
+        locationCase_ = 2;
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder addAllConnectionIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connectionIds_);
+      public Builder setGpsPosition(
+          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
+        if (gpsPositionBuilder_ == null) {
+          location_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdsBuilder_.addAllMessages(values);
+          gpsPositionBuilder_.setMessage(builderForValue.build());
         }
+        locationCase_ = 2;
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2 &&
+              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
+            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            location_ = value;
+          }
           onChanged();
         } else {
-          connectionIdsBuilder_.clear();
+          if (locationCase_ == 2) {
+            gpsPositionBuilder_.mergeFrom(value);
+          }
+          gpsPositionBuilder_.setMessage(value);
         }
+        locationCase_ = 2;
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
-          onChanged();
+      public Builder clearGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+            onChanged();
+          }
         } else {
-          connectionIdsBuilder_.remove(index);
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+          }
+          gpsPositionBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-          int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
+        return getGpsPositionFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
+          return gpsPositionBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
-           getConnectionIdsBuilderList() {
-        return getConnectionIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdsFieldBuilder() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  connectionIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
+          getGpsPositionFieldBuilder() {
+        if (gpsPositionBuilder_ == null) {
+          if (!(locationCase_ == 2)) {
+            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          }
+          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
+                  (context.ContextOuterClass.GPS_Position) location_,
                   getParentForChildren(),
                   isClean());
-          connectionIds_ = null;
+          location_ = null;
         }
-        return connectionIdsBuilder_;
+        locationCase_ = 2;
+        onChanged();;
+        return gpsPositionBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -36823,95 +53920,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.Location)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Location)
+    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.Location getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+    private static final com.google.protobuf.Parser<Location>
+        PARSER = new com.google.protobuf.AbstractParser<Location>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public Location parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new Location(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<Location> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<Location> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Location getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface Constraint_EndPointLocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
+    boolean hasEndpointId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    int getConnectionsCount();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    boolean hasLocation();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    context.ContextOuterClass.Location getLocation();
+    /**
+     * <code>.context.Location location = 2;</code>
+     */
+    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionList}
+   * Protobuf type {@code context.Constraint_EndPointLocation}
    */
-  public static final class ConnectionList extends
+  public static final class Constraint_EndPointLocation extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
+      Constraint_EndPointLocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointLocation.newBuilder() to construct.
+    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private Constraint_EndPointLocation() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new Constraint_EndPointLocation();
     }
 
     @java.lang.Override
@@ -36919,7 +54021,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private Constraint_EndPointLocation(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36927,7 +54029,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -36939,12 +54040,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (location_ != null) {
+                subBuilder = location_.toBuilder();
+              }
+              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(location_);
+                location_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -36962,64 +54080,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connections_ = java.util.Collections.unmodifiableList(connections_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionsCount() {
-      return connections_.size();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
+
+    public static final int LOCATION_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Location location_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public boolean hasLocation() {
+      return location_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.Location getLocation() {
+      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
+    }
+    /**
+     * <code>.context.Location location = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+      return getLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -37036,8 +54163,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connections_.size(); i++) {
-        output.writeMessage(1, connections_.get(i));
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (location_ != null) {
+        output.writeMessage(2, getLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -37048,9 +54178,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+          .computeMessageSize(1, getEndpointId());
+      }
+      if (location_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37062,13 +54196,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
-        return super.equals(obj);
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
+
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasLocation() != other.hasLocation()) return false;
+      if (hasLocation()) {
+        if (!getLocation()
+            .equals(other.getLocation())) return false;
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
-
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37080,78 +54222,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionsCount() > 0) {
-        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionsList().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasLocation()) {
+        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -37164,7 +54310,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -37180,26 +54326,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * Protobuf type {@code context.Constraint_EndPointLocation}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
-        context.ContextOuterClass.ConnectionListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
+        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37212,17 +54358,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          connectionsBuilder_.clear();
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (locationBuilder_ == null) {
+          location_ = null;
+        } else {
+          location_ = null;
+          locationBuilder_ = null;
         }
         return this;
       }
@@ -37230,17 +54381,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointLocation build() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37248,17 +54399,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList buildPartial() {
-        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connections_ = java.util.Collections.unmodifiableList(connections_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connections_ = connections_;
+      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.connections_ = connectionsBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (locationBuilder_ == null) {
+          result.location_ = location_;
+        } else {
+          result.location_ = locationBuilder_.build();
         }
         onBuilt();
         return result;
@@ -37298,41 +54449,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
-        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
-        if (connectionsBuilder_ == null) {
-          if (!other.connections_.isEmpty()) {
-            if (connections_.isEmpty()) {
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionsIsMutable();
-              connections_.addAll(other.connections_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connections_.isEmpty()) {
-            if (connectionsBuilder_.isEmpty()) {
-              connectionsBuilder_.dispose();
-              connectionsBuilder_ = null;
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionsFieldBuilder() : null;
-            } else {
-              connectionsBuilder_.addAllMessages(other.connections_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasLocation()) {
+          mergeLocation(other.getLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -37349,11 +54480,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37362,246 +54493,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Connection> connections_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
-          bitField0_ |= 0x00000001;
-         }
-      }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
-
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
-      }
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
-        } else {
-          return connectionsBuilder_.getCount();
-        }
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return connectionsBuilder_.getMessage(index);
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
+          endpointId_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, value);
+          endpointIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
           }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(index, value);
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          connectionsBuilder_.addMessage(builderForValue.build());
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
         }
-        return this;
+        return endpointIdBuilder_;
       }
+
+      private context.ContextOuterClass.Location location_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
+       * @return Whether the location field is set.
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
-          onChanged();
+      public boolean hasLocation() {
+        return locationBuilder_ != null || location_ != null;
+      }
+      /**
+       * <code>.context.Location location = 2;</code>
+       * @return The location.
+       */
+      public context.ContextOuterClass.Location getLocation() {
+        if (locationBuilder_ == null) {
+          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
         } else {
-          connectionsBuilder_.addAllMessages(values);
+          return locationBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          location_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.clear();
+          locationBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
+      public Builder setLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
+          location_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.remove(index);
+          locationBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
+          if (location_ != null) {
+            location_ =
+              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
+          } else {
+            location_ = value;
+          }
+          onChanged();
+        } else {
+          locationBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      public Builder clearLocation() {
+        if (locationBuilder_ == null) {
+          location_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          location_ = null;
+          locationBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+        
+        onChanged();
+        return getLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+        if (locationBuilder_ != null) {
+          return locationBuilder_.getMessageOrBuilder();
+        } else {
+          return location_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : location_;
+        }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.Connection.Builder> 
-           getConnectionsBuilderList() {
-        return getConnectionsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
-          getConnectionsFieldBuilder() {
-        if (connectionsBuilder_ == null) {
-          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
-                  connections_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getLocationFieldBuilder() {
+        if (locationBuilder_ == null) {
+          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getLocation(),
                   getParentForChildren(),
                   isClean());
-          connections_ = null;
+          location_ = null;
         }
-        return connectionsBuilder_;
+        return locationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -37616,100 +54744,91 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
+    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public Constraint_EndPointLocation parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new Constraint_EndPointLocation(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+  public interface Constraint_EndPointPriorityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointPriority)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasEvent();
+    boolean hasEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
-     */
-    boolean hasConnectionId();
-    /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
-     */
-    context.ContextOuterClass.ConnectionId getConnectionId();
-    /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    int getPriority();
   }
   /**
-   * Protobuf type {@code context.ConnectionEvent}
+   * Protobuf type {@code context.Constraint_EndPointPriority}
    */
-  public static final class ConnectionEvent extends
+  public static final class Constraint_EndPointPriority extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
-      ConnectionEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointPriority)
+      Constraint_EndPointPriorityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionEvent.newBuilder() to construct.
-    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointPriority.newBuilder() to construct.
+    private Constraint_EndPointPriority(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionEvent() {
+    private Constraint_EndPointPriority() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionEvent();
+      return new Constraint_EndPointPriority();
     }
 
     @java.lang.Override
@@ -37717,7 +54836,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionEvent(
+    private Constraint_EndPointPriority(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37736,29 +54855,21 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 18: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
-              }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              priority_ = input.readUInt32();
               break;
             }
             default: {
@@ -37782,67 +54893,52 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+              context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionId connectionId_;
-    /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
-     */
-    @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
-    }
-    /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-    }
+    public static final int PRIORITY_FIELD_NUMBER = 2;
+    private int priority_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public int getPriority() {
+      return priority_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -37859,11 +54955,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (connectionId_ != null) {
-        output.writeMessage(2, getConnectionId());
+      if (priority_ != 0) {
+        output.writeUInt32(2, priority_);
       }
       unknownFields.writeTo(output);
     }
@@ -37874,13 +54970,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (connectionId_ != null) {
+      if (priority_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getConnectionId());
+          .computeUInt32Size(2, priority_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37892,21 +54988,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointPriority)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
+      context.ContextOuterClass.Constraint_EndPointPriority other = (context.ContextOuterClass.Constraint_EndPointPriority) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
+      if (getPriority()
+          != other.getPriority()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37918,82 +55011,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
+      hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPriority();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38006,7 +55097,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointPriority prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38022,26 +55113,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionEvent}
+     * Protobuf type {@code context.Constraint_EndPointPriority}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
-        context.ContextOuterClass.ConnectionEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointPriority)
+        context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointPriority.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38059,35 +55150,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+        priority_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent build() {
-        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointPriority build() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -38095,18 +55182,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent buildPartial() {
-        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+      public context.ContextOuterClass.Constraint_EndPointPriority buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = new context.ContextOuterClass.Constraint_EndPointPriority(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
+        result.priority_ = priority_;
         onBuilt();
         return result;
       }
@@ -38145,21 +55228,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
-          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointPriority) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
-        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointPriority other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
+        if (other.getPriority() != 0) {
+          setPriority(other.getPriority());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -38176,11 +55259,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointPriority parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointPriority) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -38190,242 +55273,154 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return eventBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
-        }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.ConnectionId connectionId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
-      /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return Whether the connectionId field is set.
-       */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return The connectionId.
-       */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        } else {
-          return connectionIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          connectionId_ = value;
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(value);
+          endpointId_ = null;
         }
-
-        return this;
+        return endpointIdBuilder_;
       }
-      /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
-          onChanged();
-        } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
+      private int priority_ ;
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @return The priority.
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
-          } else {
-            connectionId_ = value;
-          }
-          onChanged();
-        } else {
-          connectionIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public int getPriority() {
+        return priority_;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @param value The priority to set.
+       * @return This builder for chaining.
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-          onChanged();
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-
+      public Builder setPriority(int value) {
+        
+        priority_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public Builder clearPriority() {
         
+        priority_ = 0;
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
-        } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
-                  getParentForChildren(),
-                  isClean());
-          connectionId_ = null;
-        }
-        return connectionIdBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -38440,119 +55435,76 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointPriority)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointPriority)
+    private static final context.ContextOuterClass.Constraint_EndPointPriority DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointPriority();
     }
 
-    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointPriority>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointPriority>() {
       @java.lang.Override
-      public ConnectionEvent parsePartialFrom(
+      public Constraint_EndPointPriority parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionEvent(input, extensionRegistry);
+        return new Constraint_EndPointPriority(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointPriority> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointPriority> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface Constraint_SLA_LatencyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Latency)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    boolean hasTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    context.ContextOuterClass.TopologyId getTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
-
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
-    /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
-     */
-    boolean hasEndpointUuid();
-    /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
-     */
-    context.ContextOuterClass.Uuid getEndpointUuid();
-    /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>float e2e_latency_ms = 1;</code>
+     * @return The e2eLatencyMs.
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    float getE2ELatencyMs();
   }
   /**
-   * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.Constraint_SLA_Latency}
    */
-  public static final class EndPointId extends
+  public static final class Constraint_SLA_Latency extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Latency)
+      Constraint_SLA_LatencyOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Latency.newBuilder() to construct.
+    private Constraint_SLA_Latency(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private Constraint_SLA_Latency() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new Constraint_SLA_Latency();
     }
 
     @java.lang.Override
@@ -38560,7 +55512,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private Constraint_SLA_Latency(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -38578,43 +55530,9 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (endpointUuid_ != null) {
-                subBuilder = endpointUuid_.toBuilder();
-              }
-              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointUuid_);
-                endpointUuid_ = subBuilder.buildPartial();
-              }
+            case 13: {
 
+              e2ELatencyMs_ = input.readFloat();
               break;
             }
             default: {
@@ -38638,93 +55556,26 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
-    }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
-    }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+              context.ContextOuterClass.Constraint_SLA_Latency.class, context.ContextOuterClass.Constraint_SLA_Latency.Builder.class);
     }
 
-    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.Uuid endpointUuid_;
-    /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointUuid() {
-      return endpointUuid_ != null;
-    }
+    public static final int E2E_LATENCY_MS_FIELD_NUMBER = 1;
+    private float e2ELatencyMs_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Uuid getEndpointUuid() {
-      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-    }
-    /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>float e2e_latency_ms = 1;</code>
+     * @return The e2eLatencyMs.
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public float getE2ELatencyMs() {
+      return e2ELatencyMs_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38741,14 +55592,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      if (e2ELatencyMs_ != 0F) {
+        output.writeFloat(1, e2ELatencyMs_);
       }
       unknownFields.writeTo(output);
     }
@@ -38759,17 +55604,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
+      if (e2ELatencyMs_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeFloatSize(1, e2ELatencyMs_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38781,26 +55618,14 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Latency)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.Constraint_SLA_Latency other = (context.ContextOuterClass.Constraint_SLA_Latency) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
-      }
+      if (java.lang.Float.floatToIntBits(getE2ELatencyMs())
+          != java.lang.Float.floatToIntBits(
+              other.getE2ELatencyMs())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38812,86 +55637,77 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
-      }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      if (hasEndpointUuid()) {
-        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointUuid().hashCode();
-      }
+      hash = (37 * hash) + E2E_LATENCY_MS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getE2ELatencyMs());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38904,7 +55720,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Latency prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38920,30 +55736,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.Constraint_SLA_Latency}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPointId)
-        context.ContextOuterClass.EndPointIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Latency)
+        context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Latency.class, context.ContextOuterClass.Constraint_SLA_Latency.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Latency.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38961,41 +55773,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
-        } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
-        }
+        e2ELatencyMs_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Latency getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Latency build() {
+        context.ContextOuterClass.Constraint_SLA_Latency result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -39003,23 +55799,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId buildPartial() {
-        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
-        } else {
-          result.topologyId_ = topologyIdBuilder_.build();
-        }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
-        } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
-        }
+      public context.ContextOuterClass.Constraint_SLA_Latency buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Latency result = new context.ContextOuterClass.Constraint_SLA_Latency(this);
+        result.e2ELatencyMs_ = e2ELatencyMs_;
         onBuilt();
         return result;
       }
@@ -39058,24 +55840,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPointId) {
-          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Latency) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
-        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
-        }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (other.hasEndpointUuid()) {
-          mergeEndpointUuid(other.getEndpointUuid());
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Latency other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) return this;
+        if (other.getE2ELatencyMs() != 0F) {
+          setE2ELatencyMs(other.getE2ELatencyMs());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -39092,11 +55868,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPointId parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Latency parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Latency) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -39106,361 +55882,525 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.TopologyId topologyId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      private float e2ELatencyMs_ ;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>float e2e_latency_ms = 1;</code>
+       * @return The e2eLatencyMs.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      @java.lang.Override
+      public float getE2ELatencyMs() {
+        return e2ELatencyMs_;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>float e2e_latency_ms = 1;</code>
+       * @param value The e2eLatencyMs to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        } else {
-          return topologyIdBuilder_.getMessage();
-        }
+      public Builder setE2ELatencyMs(float value) {
+        
+        e2ELatencyMs_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>float e2e_latency_ms = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          topologyId_ = value;
-          onChanged();
-        } else {
-          topologyIdBuilder_.setMessage(value);
-        }
-
+      public Builder clearE2ELatencyMs() {
+        
+        e2ELatencyMs_ = 0F;
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
-          onChanged();
-        } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
-        }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
 
-        return this;
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
-          } else {
-            topologyId_ = value;
-          }
-          onChanged();
-        } else {
-          topologyIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
+
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Latency)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Latency)
+    private static final context.ContextOuterClass.Constraint_SLA_Latency DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Latency();
+    }
+
+    public static context.ContextOuterClass.Constraint_SLA_Latency getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint_SLA_Latency>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Latency>() {
+      @java.lang.Override
+      public Constraint_SLA_Latency parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint_SLA_Latency(input, extensionRegistry);
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
+    };
+
+    public static com.google.protobuf.Parser<Constraint_SLA_Latency> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint_SLA_Latency> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Latency getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface Constraint_SLA_CapacityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Capacity)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>float capacity_gbps = 1;</code>
+     * @return The capacityGbps.
+     */
+    float getCapacityGbps();
+  }
+  /**
+   * Protobuf type {@code context.Constraint_SLA_Capacity}
+   */
+  public static final class Constraint_SLA_Capacity extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Capacity)
+      Constraint_SLA_CapacityOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_SLA_Capacity.newBuilder() to construct.
+    private Constraint_SLA_Capacity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Constraint_SLA_Capacity() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Constraint_SLA_Capacity();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Constraint_SLA_Capacity(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 13: {
+
+              capacityGbps_ = input.readFloat();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
         }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+    }
 
-        return this;
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
+    }
+
+    public static final int CAPACITY_GBPS_FIELD_NUMBER = 1;
+    private float capacityGbps_;
+    /**
+     * <code>float capacity_gbps = 1;</code>
+     * @return The capacityGbps.
+     */
+    @java.lang.Override
+    public float getCapacityGbps() {
+      return capacityGbps_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (capacityGbps_ != 0F) {
+        output.writeFloat(1, capacityGbps_);
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
-        
-        onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (capacityGbps_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, capacityGbps_);
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
-                  getParentForChildren(),
-                  isClean());
-          topologyId_ = null;
-        }
-        return topologyIdBuilder_;
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Capacity)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.Constraint_SLA_Capacity other = (context.ContextOuterClass.Constraint_SLA_Capacity) obj;
 
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      if (java.lang.Float.floatToIntBits(getCapacityGbps())
+          != java.lang.Float.floatToIntBits(
+              other.getCapacityGbps())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + CAPACITY_GBPS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getCapacityGbps());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Capacity prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Constraint_SLA_Capacity}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Capacity)
+        context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
-        }
 
-        return this;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      // Construct using context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        capacityGbps_ = 0F;
 
         return this;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity build() {
+        context.ContextOuterClass.Constraint_SLA_Capacity result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return deviceIdBuilder_;
+        return result;
       }
 
-      private context.ContextOuterClass.Uuid endpointUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
-       */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Capacity result = new context.ContextOuterClass.Constraint_SLA_Capacity(this);
+        result.capacityGbps_ = capacityGbps_;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
-       */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        } else {
-          return endpointUuidBuilder_.getMessage();
-        }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointUuid_ = value;
-          onChanged();
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Capacity) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity)other);
         } else {
-          endpointUuidBuilder_.setMessage(value);
+          super.mergeFrom(other);
+          return this;
         }
+      }
 
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Capacity other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) return this;
+        if (other.getCapacityGbps() != 0F) {
+          setCapacityGbps(other.getCapacityGbps());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
-          } else {
-            endpointUuid_ = value;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_SLA_Capacity parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Capacity) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          onChanged();
-        } else {
-          endpointUuidBuilder_.mergeFrom(value);
         }
-
         return this;
       }
+
+      private float capacityGbps_ ;
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>float capacity_gbps = 1;</code>
+       * @return The capacityGbps.
        */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
-          onChanged();
-        } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public float getCapacityGbps() {
+        return capacityGbps_;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>float capacity_gbps = 1;</code>
+       * @param value The capacityGbps to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+      public Builder setCapacityGbps(float value) {
         
+        capacityGbps_ = value;
         onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        }
+        return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>float capacity_gbps = 1;</code>
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getEndpointUuidFieldBuilder() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getEndpointUuid(),
-                  getParentForChildren(),
-                  isClean());
-          endpointUuid_ = null;
-        }
-        return endpointUuidBuilder_;
+      public Builder clearCapacityGbps() {
+        
+        capacityGbps_ = 0F;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -39475,128 +56415,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Capacity)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Capacity)
+    private static final context.ContextOuterClass.Constraint_SLA_Capacity DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Capacity();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPointId>
-        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+    private static final com.google.protobuf.Parser<Constraint_SLA_Capacity>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Capacity>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public Constraint_SLA_Capacity parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new Constraint_SLA_Capacity(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Capacity> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Capacity> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface Constraint_SLA_AvailabilityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Availability)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
-
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
-     */
-    java.lang.String getEndpointType();
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>uint32 num_disjoint_paths = 1;</code>
+     * @return The numDisjointPaths.
      */
-    com.google.protobuf.ByteString
-        getEndpointTypeBytes();
+    int getNumDisjointPaths();
 
     /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    int getKpiSampleTypesCount();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     * <code>bool all_active = 2;</code>
+     * @return The allActive.
      */
-    int getKpiSampleTypesValue(int index);
+    boolean getAllActive();
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.Constraint_SLA_Availability}
    */
-  public static final class EndPoint extends
+  public static final class Constraint_SLA_Availability extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Availability)
+      Constraint_SLA_AvailabilityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Availability.newBuilder() to construct.
+    private Constraint_SLA_Availability(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
-      kpiSampleTypes_ = java.util.Collections.emptyList();
+    private Constraint_SLA_Availability() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new Constraint_SLA_Availability();
     }
 
     @java.lang.Override
@@ -39604,7 +56498,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private Constraint_SLA_Availability(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39612,7 +56506,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -39623,46 +56516,14 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
-              }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
-              }
+            case 8: {
 
+              numDisjointPaths_ = input.readUInt32();
               break;
             }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 16: {
 
-              endpointType_ = s;
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiSampleTypes_.add(rawValue);
-              break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                kpiSampleTypes_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
+              allActive_ = input.readBool();
               break;
             }
             default: {
@@ -39680,147 +56541,44 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
-    }
-
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+              context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
     }
 
-    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object endpointType_;
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
-     */
-    @java.lang.Override
-    public java.lang.String getEndpointType() {
-      java.lang.Object ref = endpointType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        endpointType_ = s;
-        return s;
-      }
-    }
+    public static final int NUM_DISJOINT_PATHS_FIELD_NUMBER = 1;
+    private int numDisjointPaths_;
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>uint32 num_disjoint_paths = 1;</code>
+     * @return The numDisjointPaths.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getEndpointTypeBytes() {
-      java.lang.Object ref = endpointType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        endpointType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getNumDisjointPaths() {
+      return numDisjointPaths_;
     }
 
-    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
-    private java.util.List<java.lang.Integer> kpiSampleTypes_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
-              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
-                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesCount() {
-      return kpiSampleTypes_.size();
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList() {
-      return kpiSampleTypes_;
-    }
+    public static final int ALL_ACTIVE_FIELD_NUMBER = 2;
+    private boolean allActive_;
     /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     * <code>bool all_active = 2;</code>
+     * @return The allActive.
      */
     @java.lang.Override
-    public int getKpiSampleTypesValue(int index) {
-      return kpiSampleTypes_.get(index);
+    public boolean getAllActive() {
+      return allActive_;
     }
-    private int kpiSampleTypesMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -39836,19 +56594,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
-      }
-      if (getKpiSampleTypesList().size() > 0) {
-        output.writeUInt32NoTag(26);
-        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
+      if (numDisjointPaths_ != 0) {
+        output.writeUInt32(1, numDisjointPaths_);
       }
-      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      if (allActive_ != false) {
+        output.writeBool(2, allActive_);
       }
       unknownFields.writeTo(output);
     }
@@ -39859,24 +56609,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
+      if (numDisjointPaths_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
+          .computeUInt32Size(1, numDisjointPaths_);
       }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
-        }
-        size += dataSize;
-        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      if (allActive_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, allActive_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -39888,19 +56627,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Availability)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
+      context.ContextOuterClass.Constraint_SLA_Availability other = (context.ContextOuterClass.Constraint_SLA_Availability) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
-      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (getNumDisjointPaths()
+          != other.getNumDisjointPaths()) return false;
+      if (getAllActive()
+          != other.getAllActive()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -39912,84 +56647,79 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndpointType().hashCode();
-      if (getKpiSampleTypesCount() > 0) {
-        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
-        hash = (53 * hash) + kpiSampleTypes_.hashCode();
-      }
+      hash = (37 * hash) + NUM_DISJOINT_PATHS_FIELD_NUMBER;
+      hash = (53 * hash) + getNumDisjointPaths();
+      hash = (37 * hash) + ALL_ACTIVE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getAllActive());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40002,7 +56732,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Availability prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40018,26 +56748,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.Constraint_SLA_Availability}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPoint)
-        context.ContextOuterClass.EndPointOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Availability)
+        context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Availability.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -40055,33 +56785,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        endpointType_ = "";
+        numDisjointPaths_ = 0;
+
+        allActive_ = false;
 
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Availability build() {
+        context.ContextOuterClass.Constraint_SLA_Availability result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -40089,20 +56813,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint buildPartial() {
-        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
-        int from_bitField0_ = bitField0_;
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        result.endpointType_ = endpointType_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.kpiSampleTypes_ = kpiSampleTypes_;
+      public context.ContextOuterClass.Constraint_SLA_Availability buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Availability result = new context.ContextOuterClass.Constraint_SLA_Availability(this);
+        result.numDisjointPaths_ = numDisjointPaths_;
+        result.allActive_ = allActive_;
         onBuilt();
         return result;
       }
@@ -40141,32 +56855,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Availability) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
-        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
-        }
-        if (!other.getEndpointType().isEmpty()) {
-          endpointType_ = other.endpointType_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Availability other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) return this;
+        if (other.getNumDisjointPaths() != 0) {
+          setNumDisjointPaths(other.getNumDisjointPaths());
         }
-        if (!other.kpiSampleTypes_.isEmpty()) {
-          if (kpiSampleTypes_.isEmpty()) {
-            kpiSampleTypes_ = other.kpiSampleTypes_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureKpiSampleTypesIsMutable();
-            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
-          }
-          onChanged();
+        if (other.getAllActive() != false) {
+          setAllActive(other.getAllActive());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -40183,11 +56886,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Availability parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Availability) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -40196,339 +56899,65 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
-       */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        } else {
-          return endpointIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
-        } else {
-          endpointIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
-        }
-        return endpointIdBuilder_;
-      }
 
-      private java.lang.Object endpointType_ = "";
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The endpointType.
-       */
-      public java.lang.String getEndpointType() {
-        java.lang.Object ref = endpointType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          endpointType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The bytes for endpointType.
-       */
-      public com.google.protobuf.ByteString
-          getEndpointTypeBytes() {
-        java.lang.Object ref = endpointType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          endpointType_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
+      private int numDisjointPaths_ ;
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
+       * <code>uint32 num_disjoint_paths = 1;</code>
+       * @return The numDisjointPaths.
        */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public int getNumDisjointPaths() {
+        return numDisjointPaths_;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
+       * <code>uint32 num_disjoint_paths = 1;</code>
+       * @param value The numDisjointPaths to set.
        * @return This builder for chaining.
        */
-      public Builder clearEndpointType() {
+      public Builder setNumDisjointPaths(int value) {
         
-        endpointType_ = getDefaultInstance().getEndpointType();
+        numDisjointPaths_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
+       * <code>uint32 num_disjoint_paths = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearNumDisjointPaths() {
         
-        endpointType_ = value;
+        numDisjointPaths_ = 0;
         onChanged();
         return this;
       }
 
-      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiSampleTypesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the kpiSampleTypes.
-       */
-      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return The count of kpiSampleTypes.
-       */
-      public int getKpiSampleTypesCount() {
-        return kpiSampleTypes_.size();
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the element to return.
-       * @return The kpiSampleTypes at the given index.
-       */
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index to set the value at.
-       * @param value The kpiSampleTypes to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypes(
-          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllKpiSampleTypes(
-          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
-          kpiSampleTypes_.add(value.getNumber());
-        }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleTypes() {
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-       */
-      public java.util.List<java.lang.Integer>
-      getKpiSampleTypesValueList() {
-        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       */
-      public int getKpiSampleTypesValue(int index) {
-        return kpiSampleTypes_.get(index);
-      }
+      private boolean allActive_ ;
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       * @return This builder for chaining.
+       * <code>bool all_active = 2;</code>
+       * @return The allActive.
        */
-      public Builder setKpiSampleTypesValue(
-          int index, int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value);
-        onChanged();
-        return this;
+      @java.lang.Override
+      public boolean getAllActive() {
+        return allActive_;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * <code>bool all_active = 2;</code>
+       * @param value The allActive to set.
        * @return This builder for chaining.
        */
-      public Builder addKpiSampleTypesValue(int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value);
+      public Builder setAllActive(boolean value) {
+        
+        allActive_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * <code>bool all_active = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder addAllKpiSampleTypesValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (int value : values) {
-          kpiSampleTypes_.add(value);
-        }
+      public Builder clearAllActive() {
+        
+        allActive_ = false;
         onChanged();
         return this;
       }
@@ -40545,108 +56974,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Availability)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Availability)
+    private static final context.ContextOuterClass.Constraint_SLA_Availability DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Availability();
     }
 
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPoint>
-        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+    private static final com.google.protobuf.Parser<Constraint_SLA_Availability>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Availability>() {
       @java.lang.Override
-      public EndPoint parsePartialFrom(
+      public Constraint_SLA_Availability parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+        return new Constraint_SLA_Availability(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPoint> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Availability> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Availability> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRuleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+  public interface Constraint_SLA_Isolation_levelOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Isolation_level)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    int getActionValue();
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
      */
-    context.ContextOuterClass.ConfigActionEnum getAction();
-
+    java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList();
     /**
-     * <code>string resource_key = 2;</code>
-     * @return The resourceKey.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
      */
-    java.lang.String getResourceKey();
+    int getIsolationLevelCount();
     /**
-     * <code>string resource_key = 2;</code>
-     * @return The bytes for resourceKey.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
      */
-    com.google.protobuf.ByteString
-        getResourceKeyBytes();
-
+    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index);
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The resourceValue.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    java.lang.String getResourceValue();
+    java.util.List<java.lang.Integer>
+    getIsolationLevelValueList();
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The bytes for resourceValue.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    com.google.protobuf.ByteString
-        getResourceValueBytes();
+    int getIsolationLevelValue(int index);
   }
   /**
-   * Protobuf type {@code context.ConfigRule}
+   * Protobuf type {@code context.Constraint_SLA_Isolation_level}
    */
-  public static final class ConfigRule extends
+  public static final class Constraint_SLA_Isolation_level extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule)
-      ConfigRuleOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Isolation_level)
+      Constraint_SLA_Isolation_levelOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule.newBuilder() to construct.
-    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Isolation_level.newBuilder() to construct.
+    private Constraint_SLA_Isolation_level(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule() {
-      action_ = 0;
-      resourceKey_ = "";
-      resourceValue_ = "";
+    private Constraint_SLA_Isolation_level() {
+      isolationLevel_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule();
+      return new Constraint_SLA_Isolation_level();
     }
 
     @java.lang.Override
@@ -40654,7 +57075,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule(
+    private Constraint_SLA_Isolation_level(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -40662,6 +57083,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -40674,20 +57096,25 @@ public final class ContextOuterClass {
               break;
             case 8: {
               int rawValue = input.readEnum();
-
-              action_ = rawValue;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              resourceKey_ = s;
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              isolationLevel_.add(rawValue);
               break;
             }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              resourceValue_ = s;
+            case 10: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                isolationLevel_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
               break;
             }
             default: {
@@ -40705,117 +57132,83 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+              context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
     }
 
-    public static final int ACTION_FIELD_NUMBER = 1;
-    private int action_;
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    @java.lang.Override public int getActionValue() {
-      return action_;
-    }
+    public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
+    private java.util.List<java.lang.Integer> isolationLevel_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
+              public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+              }
+            };
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
      */
-    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
     }
-
-    public static final int RESOURCE_KEY_FIELD_NUMBER = 2;
-    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>string resource_key = 2;</code>
-     * @return The resourceKey.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
      */
     @java.lang.Override
-    public java.lang.String getResourceKey() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceKey_ = s;
-        return s;
-      }
+    public int getIsolationLevelCount() {
+      return isolationLevel_.size();
     }
     /**
-     * <code>string resource_key = 2;</code>
-     * @return The bytes for resourceKey.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceKeyBytes() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceKey_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+      return isolationLevel_converter_.convert(isolationLevel_.get(index));
     }
-
-    public static final int RESOURCE_VALUE_FIELD_NUMBER = 3;
-    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The resourceValue.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
     @java.lang.Override
-    public java.lang.String getResourceValue() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceValue_ = s;
-        return s;
-      }
+    public java.util.List<java.lang.Integer>
+    getIsolationLevelValueList() {
+      return isolationLevel_;
     }
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The bytes for resourceValue.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceValueBytes() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public int getIsolationLevelValue(int index) {
+      return isolationLevel_.get(index);
     }
+    private int isolationLevelMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -40831,14 +57224,13 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        output.writeEnum(1, action_);
-      }
-      if (!getResourceKeyBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceKey_);
+      getSerializedSize();
+      if (getIsolationLevelList().size() > 0) {
+        output.writeUInt32NoTag(10);
+        output.writeUInt32NoTag(isolationLevelMemoizedSerializedSize);
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, resourceValue_);
+      for (int i = 0; i < isolationLevel_.size(); i++) {
+        output.writeEnumNoTag(isolationLevel_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -40849,15 +57241,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, action_);
-      }
-      if (!getResourceKeyBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceKey_);
-      }
-      if (!getResourceValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, resourceValue_);
+      {
+        int dataSize = 0;
+        for (int i = 0; i < isolationLevel_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(isolationLevel_.get(i));
+        }
+        size += dataSize;
+        if (!getIsolationLevelList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }isolationLevelMemoizedSerializedSize = dataSize;
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -40869,16 +57263,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
+      context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
 
-      if (action_ != other.action_) return false;
-      if (!getResourceKey()
-          .equals(other.getResourceKey())) return false;
-      if (!getResourceValue()
-          .equals(other.getResourceValue())) return false;
+      if (!isolationLevel_.equals(other.isolationLevel_)) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -40890,80 +57280,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ACTION_FIELD_NUMBER;
-      hash = (53 * hash) + action_;
-      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceKey().hashCode();
-      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceValue().hashCode();
+      if (getIsolationLevelCount() > 0) {
+        hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
+        hash = (53 * hash) + isolationLevel_.hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40976,7 +57364,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_SLA_Isolation_level prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40992,26 +57380,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule}
+     * Protobuf type {@code context.Constraint_SLA_Isolation_level}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
-        context.ContextOuterClass.ConfigRuleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Isolation_level)
+        context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -41029,29 +57417,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        action_ = 0;
-
-        resourceKey_ = "";
-
-        resourceValue_ = "";
-
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule build() {
-        context.ContextOuterClass.ConfigRule result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level build() {
+        context.ContextOuterClass.Constraint_SLA_Isolation_level result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -41059,11 +57443,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule buildPartial() {
-        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-        result.action_ = action_;
-        result.resourceKey_ = resourceKey_;
-        result.resourceValue_ = resourceValue_;
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.isolationLevel_ = isolationLevel_;
         onBuilt();
         return result;
       }
@@ -41102,25 +57489,24 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
-        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
-        if (other.action_ != 0) {
-          setActionValue(other.getActionValue());
-        }
-        if (!other.getResourceKey().isEmpty()) {
-          resourceKey_ = other.resourceKey_;
-          onChanged();
-        }
-        if (!other.getResourceValue().isEmpty()) {
-          resourceValue_ = other.resourceValue_;
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Isolation_level other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) return this;
+        if (!other.isolationLevel_.isEmpty()) {
+          if (isolationLevel_.isEmpty()) {
+            isolationLevel_ = other.isolationLevel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureIsolationLevelIsMutable();
+            isolationLevel_.addAll(other.isolationLevel_);
+          }
           onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
@@ -41138,11 +57524,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Isolation_level parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Isolation_level) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -41151,209 +57537,144 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private int action_ = 0;
+      private java.util.List<java.lang.Integer> isolationLevel_ =
+        java.util.Collections.emptyList();
+      private void ensureIsolationLevelIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = new java.util.ArrayList<java.lang.Integer>(isolationLevel_);
+          bitField0_ |= 0x00000001;
+        }
+      }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The enum numeric value on the wire for action.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the isolationLevel.
        */
-      @java.lang.Override public int getActionValue() {
-        return action_;
+      public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The enum numeric value on the wire for action to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The count of isolationLevel.
        */
-      public Builder setActionValue(int value) {
-        
-        action_ = value;
-        onChanged();
-        return this;
+      public int getIsolationLevelCount() {
+        return isolationLevel_.size();
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The action.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the element to return.
+       * @return The isolationLevel at the given index.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigActionEnum getAction() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+        return isolationLevel_converter_.convert(isolationLevel_.get(index));
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The action to set.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index to set the value at.
+       * @param value The isolationLevel to set.
        * @return This builder for chaining.
        */
-      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+      public Builder setIsolationLevel(
+          int index, context.ContextOuterClass.IsolationLevelEnum value) {
         if (value == null) {
           throw new NullPointerException();
         }
-        
-        action_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearAction() {
-        
-        action_ = 0;
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value.getNumber());
         onChanged();
         return this;
       }
-
-      private java.lang.Object resourceKey_ = "";
-      /**
-       * <code>string resource_key = 2;</code>
-       * @return The resourceKey.
-       */
-      public java.lang.String getResourceKey() {
-        java.lang.Object ref = resourceKey_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceKey_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string resource_key = 2;</code>
-       * @return The bytes for resourceKey.
-       */
-      public com.google.protobuf.ByteString
-          getResourceKeyBytes() {
-        java.lang.Object ref = resourceKey_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceKey_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
       /**
-       * <code>string resource_key = 2;</code>
-       * @param value The resourceKey to set.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The isolationLevel to add.
        * @return This builder for chaining.
        */
-      public Builder setResourceKey(
-          java.lang.String value) {
+      public Builder addIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
         if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceKey_ = value;
+          throw new NullPointerException();
+        }
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value.getNumber());
         onChanged();
         return this;
       }
       /**
-       * <code>string resource_key = 2;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The isolationLevel to add.
        * @return This builder for chaining.
        */
-      public Builder clearResourceKey() {
-        
-        resourceKey_ = getDefaultInstance().getResourceKey();
+      public Builder addAllIsolationLevel(
+          java.lang.Iterable<? extends context.ContextOuterClass.IsolationLevelEnum> values) {
+        ensureIsolationLevelIsMutable();
+        for (context.ContextOuterClass.IsolationLevelEnum value : values) {
+          isolationLevel_.add(value.getNumber());
+        }
         onChanged();
         return this;
       }
       /**
-       * <code>string resource_key = 2;</code>
-       * @param value The bytes for resourceKey to set.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setResourceKeyBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceKey_ = value;
+      public Builder clearIsolationLevel() {
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         onChanged();
         return this;
       }
-
-      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>string resource_value = 3;</code>
-       * @return The resourceValue.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the enum numeric values on the wire for isolationLevel.
        */
-      public java.lang.String getResourceValue() {
-        java.lang.Object ref = resourceValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceValue_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
+      public java.util.List<java.lang.Integer>
+      getIsolationLevelValueList() {
+        return java.util.Collections.unmodifiableList(isolationLevel_);
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @return The bytes for resourceValue.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
        */
-      public com.google.protobuf.ByteString
-          getResourceValueBytes() {
-        java.lang.Object ref = resourceValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceValue_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      public int getIsolationLevelValue(int index) {
+        return isolationLevel_.get(index);
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @param value The resourceValue to set.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
        * @return This builder for chaining.
        */
-      public Builder setResourceValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceValue_ = value;
+      public Builder setIsolationLevelValue(
+          int index, int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value);
         onChanged();
         return this;
       }
       /**
-       * <code>string resource_value = 3;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The enum numeric value on the wire for isolationLevel to add.
        * @return This builder for chaining.
        */
-      public Builder clearResourceValue() {
-        
-        resourceValue_ = getDefaultInstance().getResourceValue();
+      public Builder addIsolationLevelValue(int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value);
         onChanged();
         return this;
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @param value The bytes for resourceValue to set.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The enum numeric values on the wire for isolationLevel to add.
        * @return This builder for chaining.
        */
-      public Builder setResourceValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceValue_ = value;
+      public Builder addAllIsolationLevelValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureIsolationLevelIsMutable();
+        for (int value : values) {
+          isolationLevel_.add(value);
+        }
         onChanged();
         return this;
       }
@@ -41370,41 +57691,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Isolation_level)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule)
-    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Isolation_level)
+    private static final context.ContextOuterClass.Constraint_SLA_Isolation_level DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Isolation_level();
     }
 
-    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+    private static final com.google.protobuf.Parser<Constraint_SLA_Isolation_level>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Isolation_level>() {
       @java.lang.Override
-      public ConfigRule parsePartialFrom(
+      public Constraint_SLA_Isolation_level parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule(input, extensionRegistry);
+        return new Constraint_SLA_Isolation_level(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Isolation_level> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Isolation_level> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -41415,34 +57736,128 @@ public final class ContextOuterClass {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return Whether the custom field is set.
      */
-    java.lang.String getConstraintType();
+    boolean hasCustom();
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return The custom.
      */
-    com.google.protobuf.ByteString
-        getConstraintTypeBytes();
+    context.ContextOuterClass.Constraint_Custom getCustom();
+    /**
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     */
+    context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder();
 
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return Whether the schedule field is set.
      */
-    java.lang.String getConstraintValue();
+    boolean hasSchedule();
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return The schedule.
      */
-    com.google.protobuf.ByteString
-        getConstraintValueBytes();
+    context.ContextOuterClass.Constraint_Schedule getSchedule();
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     */
+    context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder();
+
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    boolean hasEndpointLocation();
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return The endpointLocation.
+     */
+    context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation();
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     */
+    context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
+
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    boolean hasEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+     * @return Whether the slaCapacity field is set.
+     */
+    boolean hasSlaCapacity();
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+     * @return The slaCapacity.
+     */
+    context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+     * @return Whether the slaLatency field is set.
+     */
+    boolean hasSlaLatency();
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+     * @return The slaLatency.
+     */
+    context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+     * @return Whether the slaAvailability field is set.
+     */
+    boolean hasSlaAvailability();
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+     * @return The slaAvailability.
+     */
+    context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+     * @return Whether the slaIsolation field is set.
+     */
+    boolean hasSlaIsolation();
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+     * @return The slaIsolation.
+     */
+    context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
+
+    public context.ContextOuterClass.Constraint.ConstraintCase getConstraintCase();
   }
   /**
-   * <pre>
-   * ----- Constraint ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
    * Protobuf type {@code context.Constraint}
    */
   public static final class Constraint extends
@@ -41455,8 +57870,6 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Constraint() {
-      constraintType_ = "";
-      constraintValue_ = "";
     }
 
     @java.lang.Override
@@ -41490,15 +57903,115 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              constraintType_ = s;
+              context.ContextOuterClass.Constraint_Custom.Builder subBuilder = null;
+              if (constraintCase_ == 1) {
+                subBuilder = ((context.ContextOuterClass.Constraint_Custom) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_Custom.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Custom) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 1;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              constraintValue_ = s;
+              context.ContextOuterClass.Constraint_Schedule.Builder subBuilder = null;
+              if (constraintCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.Constraint_Schedule) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_Schedule.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Schedule) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 2;
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Constraint_EndPointLocation.Builder subBuilder = null;
+              if (constraintCase_ == 3) {
+                subBuilder = ((context.ContextOuterClass.Constraint_EndPointLocation) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_EndPointLocation.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 3;
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Constraint_EndPointPriority.Builder subBuilder = null;
+              if (constraintCase_ == 4) {
+                subBuilder = ((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_EndPointPriority.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 4;
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              if (constraintCase_ == 5) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Capacity.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 5;
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.Constraint_SLA_Latency.Builder subBuilder = null;
+              if (constraintCase_ == 6) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Latency.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 6;
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.Constraint_SLA_Availability.Builder subBuilder = null;
+              if (constraintCase_ == 7) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Availability.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 7;
+              break;
+            }
+            case 66: {
+              context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder subBuilder = null;
+              if (constraintCase_ == 8) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Isolation_level.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 8;
               break;
             }
             default: {
@@ -41533,80 +58046,305 @@ public final class ContextOuterClass {
               context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
     }
 
-    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object constraintType_;
+    private int constraintCase_ = 0;
+    private java.lang.Object constraint_;
+    public enum ConstraintCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      CUSTOM(1),
+      SCHEDULE(2),
+      ENDPOINT_LOCATION(3),
+      ENDPOINT_PRIORITY(4),
+      SLA_CAPACITY(5),
+      SLA_LATENCY(6),
+      SLA_AVAILABILITY(7),
+      SLA_ISOLATION(8),
+      CONSTRAINT_NOT_SET(0);
+      private final int value;
+      private ConstraintCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ConstraintCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ConstraintCase forNumber(int value) {
+        switch (value) {
+          case 1: return CUSTOM;
+          case 2: return SCHEDULE;
+          case 3: return ENDPOINT_LOCATION;
+          case 4: return ENDPOINT_PRIORITY;
+          case 5: return SLA_CAPACITY;
+          case 6: return SLA_LATENCY;
+          case 7: return SLA_AVAILABILITY;
+          case 8: return SLA_ISOLATION;
+          case 0: return CONSTRAINT_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ConstraintCase
+    getConstraintCase() {
+      return ConstraintCase.forNumber(
+          constraintCase_);
+    }
+
+    public static final int CUSTOM_FIELD_NUMBER = 1;
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return Whether the custom field is set.
      */
     @java.lang.Override
-    public java.lang.String getConstraintType() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintType_ = s;
-        return s;
+    public boolean hasCustom() {
+      return constraintCase_ == 1;
+    }
+    /**
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return The custom.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Custom getCustom() {
+      if (constraintCase_ == 1) {
+         return (context.ContextOuterClass.Constraint_Custom) constraint_;
       }
+      return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
     }
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>.context.Constraint_Custom custom = 1;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintTypeBytes() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+    public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
+      if (constraintCase_ == 1) {
+         return (context.ContextOuterClass.Constraint_Custom) constraint_;
       }
+      return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
     }
 
-    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object constraintValue_;
+    public static final int SCHEDULE_FIELD_NUMBER = 2;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return Whether the schedule field is set.
      */
     @java.lang.Override
-    public java.lang.String getConstraintValue() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintValue_ = s;
-        return s;
+    public boolean hasSchedule() {
+      return constraintCase_ == 2;
+    }
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return The schedule.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Schedule getSchedule() {
+      if (constraintCase_ == 2) {
+         return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
+      if (constraintCase_ == 2) {
+         return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+    }
+
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 3;
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointLocation() {
+      return constraintCase_ == 3;
+    }
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return The endpointLocation.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
+      if (constraintCase_ == 3) {
+         return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
+      if (constraintCase_ == 3) {
+         return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+    }
+
+    public static final int ENDPOINT_PRIORITY_FIELD_NUMBER = 4;
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointPriority() {
+      return constraintCase_ == 4;
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+
+    public static final int SLA_CAPACITY_FIELD_NUMBER = 5;
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+     * @return Whether the slaCapacity field is set.
+     */
+    @java.lang.Override
+    public boolean hasSlaCapacity() {
+      return constraintCase_ == 5;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+     * @return The slaCapacity.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
+      if (constraintCase_ == 5) {
+         return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
+      if (constraintCase_ == 5) {
+         return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+    }
+
+    public static final int SLA_LATENCY_FIELD_NUMBER = 6;
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+     * @return Whether the slaLatency field is set.
+     */
+    @java.lang.Override
+    public boolean hasSlaLatency() {
+      return constraintCase_ == 6;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+     * @return The slaLatency.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
+      if (constraintCase_ == 6) {
+         return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
+      if (constraintCase_ == 6) {
+         return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+    }
+
+    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 7;
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+     * @return Whether the slaAvailability field is set.
+     */
+    @java.lang.Override
+    public boolean hasSlaAvailability() {
+      return constraintCase_ == 7;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+     * @return The slaAvailability.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
+      if (constraintCase_ == 7) {
+         return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
+      if (constraintCase_ == 7) {
+         return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+    }
+
+    public static final int SLA_ISOLATION_FIELD_NUMBER = 8;
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+     * @return Whether the slaIsolation field is set.
+     */
+    @java.lang.Override
+    public boolean hasSlaIsolation() {
+      return constraintCase_ == 8;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+     * @return The slaIsolation.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
+      if (constraintCase_ == 8) {
+         return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
+      return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintValueBytes() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+    public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
+      if (constraintCase_ == 8) {
+         return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
+      return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -41623,11 +58361,29 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getConstraintTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      if (constraintCase_ == 1) {
+        output.writeMessage(1, (context.ContextOuterClass.Constraint_Custom) constraint_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      if (constraintCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.Constraint_Schedule) constraint_);
+      }
+      if (constraintCase_ == 3) {
+        output.writeMessage(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+      }
+      if (constraintCase_ == 4) {
+        output.writeMessage(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+      }
+      if (constraintCase_ == 5) {
+        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+      }
+      if (constraintCase_ == 6) {
+        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+      }
+      if (constraintCase_ == 7) {
+        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       unknownFields.writeTo(output);
     }
@@ -41638,11 +58394,37 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getConstraintTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      if (constraintCase_ == 1) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, (context.ContextOuterClass.Constraint_Custom) constraint_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      if (constraintCase_ == 2) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, (context.ContextOuterClass.Constraint_Schedule) constraint_);
+      }
+      if (constraintCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+      }
+      if (constraintCase_ == 4) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+      }
+      if (constraintCase_ == 5) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+      }
+      if (constraintCase_ == 6) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+      }
+      if (constraintCase_ == 7) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -41659,10 +58441,43 @@ public final class ContextOuterClass {
       }
       context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
 
-      if (!getConstraintType()
-          .equals(other.getConstraintType())) return false;
-      if (!getConstraintValue()
-          .equals(other.getConstraintValue())) return false;
+      if (!getConstraintCase().equals(other.getConstraintCase())) return false;
+      switch (constraintCase_) {
+        case 1:
+          if (!getCustom()
+              .equals(other.getCustom())) return false;
+          break;
+        case 2:
+          if (!getSchedule()
+              .equals(other.getSchedule())) return false;
+          break;
+        case 3:
+          if (!getEndpointLocation()
+              .equals(other.getEndpointLocation())) return false;
+          break;
+        case 4:
+          if (!getEndpointPriority()
+              .equals(other.getEndpointPriority())) return false;
+          break;
+        case 5:
+          if (!getSlaCapacity()
+              .equals(other.getSlaCapacity())) return false;
+          break;
+        case 6:
+          if (!getSlaLatency()
+              .equals(other.getSlaLatency())) return false;
+          break;
+        case 7:
+          if (!getSlaAvailability()
+              .equals(other.getSlaAvailability())) return false;
+          break;
+        case 8:
+          if (!getSlaIsolation()
+              .equals(other.getSlaIsolation())) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -41674,10 +58489,42 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintType().hashCode();
-      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintValue().hashCode();
+      switch (constraintCase_) {
+        case 1:
+          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+          hash = (53 * hash) + getCustom().hashCode();
+          break;
+        case 2:
+          hash = (37 * hash) + SCHEDULE_FIELD_NUMBER;
+          hash = (53 * hash) + getSchedule().hashCode();
+          break;
+        case 3:
+          hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+          hash = (53 * hash) + getEndpointLocation().hashCode();
+          break;
+        case 4:
+          hash = (37 * hash) + ENDPOINT_PRIORITY_FIELD_NUMBER;
+          hash = (53 * hash) + getEndpointPriority().hashCode();
+          break;
+        case 5:
+          hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaCapacity().hashCode();
+          break;
+        case 6:
+          hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaLatency().hashCode();
+          break;
+        case 7:
+          hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaAvailability().hashCode();
+          break;
+        case 8:
+          hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaIsolation().hashCode();
+          break;
+        case 0:
+        default:
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -41774,10 +58621,6 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Constraint ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
      * Protobuf type {@code context.Constraint}
      */
     public static final class Builder extends
@@ -41815,274 +58658,1347 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        constraintType_ = "";
+        constraintCase_ = 0;
+        constraint_ = null;
+        return this;
+      }
 
-        constraintValue_ = "";
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint build() {
+        context.ContextOuterClass.Constraint result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint buildPartial() {
+        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
+        if (constraintCase_ == 1) {
+          if (customBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = customBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 2) {
+          if (scheduleBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = scheduleBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 3) {
+          if (endpointLocationBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = endpointLocationBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 4) {
+          if (endpointPriorityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = endpointPriorityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 5) {
+          if (slaCapacityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaCapacityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 6) {
+          if (slaLatencyBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaLatencyBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 7) {
+          if (slaAvailabilityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaAvailabilityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 8) {
+          if (slaIsolationBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaIsolationBuilder_.build();
+          }
+        }
+        result.constraintCase_ = constraintCase_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint) {
+          return mergeFrom((context.ContextOuterClass.Constraint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
+        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
+        switch (other.getConstraintCase()) {
+          case CUSTOM: {
+            mergeCustom(other.getCustom());
+            break;
+          }
+          case SCHEDULE: {
+            mergeSchedule(other.getSchedule());
+            break;
+          }
+          case ENDPOINT_LOCATION: {
+            mergeEndpointLocation(other.getEndpointLocation());
+            break;
+          }
+          case ENDPOINT_PRIORITY: {
+            mergeEndpointPriority(other.getEndpointPriority());
+            break;
+          }
+          case SLA_CAPACITY: {
+            mergeSlaCapacity(other.getSlaCapacity());
+            break;
+          }
+          case SLA_LATENCY: {
+            mergeSlaLatency(other.getSlaLatency());
+            break;
+          }
+          case SLA_AVAILABILITY: {
+            mergeSlaAvailability(other.getSlaAvailability());
+            break;
+          }
+          case SLA_ISOLATION: {
+            mergeSlaIsolation(other.getSlaIsolation());
+            break;
+          }
+          case CONSTRAINT_NOT_SET: {
+            break;
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int constraintCase_ = 0;
+      private java.lang.Object constraint_;
+      public ConstraintCase
+          getConstraintCase() {
+        return ConstraintCase.forNumber(
+            constraintCase_);
+      }
+
+      public Builder clearConstraint() {
+        constraintCase_ = 0;
+        constraint_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> customBuilder_;
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       * @return Whether the custom field is set.
+       */
+      @java.lang.Override
+      public boolean hasCustom() {
+        return constraintCase_ == 1;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       * @return The custom.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Custom getCustom() {
+        if (customBuilder_ == null) {
+          if (constraintCase_ == 1) {
+            return (context.ContextOuterClass.Constraint_Custom) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 1) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder setCustom(context.ContextOuterClass.Constraint_Custom value) {
+        if (customBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          customBuilder_.setMessage(value);
+        }
+        constraintCase_ = 1;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder setCustom(
+          context.ContextOuterClass.Constraint_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          customBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 1;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder mergeCustom(context.ContextOuterClass.Constraint_Custom value) {
+        if (customBuilder_ == null) {
+          if (constraintCase_ == 1 &&
+              constraint_ != context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_Custom.newBuilder((context.ContextOuterClass.Constraint_Custom) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 1) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
+        }
+        constraintCase_ = 1;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder clearCustom() {
+        if (customBuilder_ == null) {
+          if (constraintCase_ == 1) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 1) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          customBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public context.ContextOuterClass.Constraint_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
+        if ((constraintCase_ == 1) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 1) {
+            return (context.ContextOuterClass.Constraint_Custom) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> 
+          getCustomFieldBuilder() {
+        if (customBuilder_ == null) {
+          if (!(constraintCase_ == 1)) {
+            constraint_ = context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+          }
+          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder>(
+                  (context.ContextOuterClass.Constraint_Custom) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 1;
+        onChanged();;
+        return customBuilder_;
+      }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> scheduleBuilder_;
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       * @return Whether the schedule field is set.
+       */
+      @java.lang.Override
+      public boolean hasSchedule() {
+        return constraintCase_ == 2;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       * @return The schedule.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Schedule getSchedule() {
+        if (scheduleBuilder_ == null) {
+          if (constraintCase_ == 2) {
+            return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 2) {
+            return scheduleBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder setSchedule(context.ContextOuterClass.Constraint_Schedule value) {
+        if (scheduleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          scheduleBuilder_.setMessage(value);
+        }
+        constraintCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder setSchedule(
+          context.ContextOuterClass.Constraint_Schedule.Builder builderForValue) {
+        if (scheduleBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          scheduleBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder mergeSchedule(context.ContextOuterClass.Constraint_Schedule value) {
+        if (scheduleBuilder_ == null) {
+          if (constraintCase_ == 2 &&
+              constraint_ != context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_Schedule.newBuilder((context.ContextOuterClass.Constraint_Schedule) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 2) {
+            scheduleBuilder_.mergeFrom(value);
+          }
+          scheduleBuilder_.setMessage(value);
+        }
+        constraintCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder clearSchedule() {
+        if (scheduleBuilder_ == null) {
+          if (constraintCase_ == 2) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 2) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          scheduleBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public context.ContextOuterClass.Constraint_Schedule.Builder getScheduleBuilder() {
+        return getScheduleFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
+        if ((constraintCase_ == 2) && (scheduleBuilder_ != null)) {
+          return scheduleBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 2) {
+            return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> 
+          getScheduleFieldBuilder() {
+        if (scheduleBuilder_ == null) {
+          if (!(constraintCase_ == 2)) {
+            constraint_ = context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+          }
+          scheduleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder>(
+                  (context.ContextOuterClass.Constraint_Schedule) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 2;
+        onChanged();;
+        return scheduleBuilder_;
+      }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> endpointLocationBuilder_;
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       * @return Whether the endpointLocation field is set.
+       */
+      @java.lang.Override
+      public boolean hasEndpointLocation() {
+        return constraintCase_ == 3;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       * @return The endpointLocation.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          if (constraintCase_ == 3) {
+            return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 3) {
+            return endpointLocationBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder setEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
+        if (endpointLocationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(value);
+        }
+        constraintCase_ = 3;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Constraint_EndPointLocation.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 3;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
+        if (endpointLocationBuilder_ == null) {
+          if (constraintCase_ == 3 &&
+              constraint_ != context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.newBuilder((context.ContextOuterClass.Constraint_EndPointLocation) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 3) {
+            endpointLocationBuilder_.mergeFrom(value);
+          }
+          endpointLocationBuilder_.setMessage(value);
+        }
+        constraintCase_ = 3;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          if (constraintCase_ == 3) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 3) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          endpointLocationBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint_EndPointLocation.Builder getEndpointLocationBuilder() {
+        return getEndpointLocationFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
+        if ((constraintCase_ == 3) && (endpointLocationBuilder_ != null)) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 3) {
+            return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          if (!(constraintCase_ == 3)) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+          }
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder>(
+                  (context.ContextOuterClass.Constraint_EndPointLocation) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 3;
+        onChanged();;
+        return endpointLocationBuilder_;
+      }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> endpointPriorityBuilder_;
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return Whether the endpointPriority field is set.
+       */
+      @java.lang.Override
+      public boolean hasEndpointPriority() {
+        return constraintCase_ == 4;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return The endpointPriority.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 4) {
+            return endpointPriorityBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(
+          context.ContextOuterClass.Constraint_EndPointPriority.Builder builderForValue) {
+        if (endpointPriorityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder mergeEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4 &&
+              constraint_ != context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.newBuilder((context.ContextOuterClass.Constraint_EndPointPriority) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 4) {
+            endpointPriorityBuilder_.mergeFrom(value);
+          }
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder clearEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          endpointPriorityBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint_EndPointPriority.Builder getEndpointPriorityBuilder() {
+        return getEndpointPriorityFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+        if ((constraintCase_ == 4) && (endpointPriorityBuilder_ != null)) {
+          return endpointPriorityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> 
+          getEndpointPriorityFieldBuilder() {
+        if (endpointPriorityBuilder_ == null) {
+          if (!(constraintCase_ == 4)) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+          }
+          endpointPriorityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_EndPointPriority) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 4;
+        onChanged();;
+        return endpointPriorityBuilder_;
+      }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> slaCapacityBuilder_;
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       * @return Whether the slaCapacity field is set.
+       */
+      @java.lang.Override
+      public boolean hasSlaCapacity() {
+        return constraintCase_ == 5;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       * @return The slaCapacity.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
+        if (slaCapacityBuilder_ == null) {
+          if (constraintCase_ == 5) {
+            return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 5) {
+            return slaCapacityBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
+      public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
+        if (slaCapacityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          slaCapacityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 5;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
+      public Builder setSlaCapacity(
+          context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
+        if (slaCapacityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          slaCapacityBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 5;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
+      public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
+        if (slaCapacityBuilder_ == null) {
+          if (constraintCase_ == 5 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 5) {
+            slaCapacityBuilder_.mergeFrom(value);
+          }
+          slaCapacityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 5;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
+      public Builder clearSlaCapacity() {
+        if (slaCapacityBuilder_ == null) {
+          if (constraintCase_ == 5) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 5) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaCapacityBuilder_.clear();
+        }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
+        return getSlaCapacityFieldBuilder().getBuilder();
       }
-
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
       @java.lang.Override
-      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
+        if ((constraintCase_ == 5) && (slaCapacityBuilder_ != null)) {
+          return slaCapacityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 5) {
+            return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        }
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Constraint build() {
-        context.ContextOuterClass.Constraint result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> 
+          getSlaCapacityFieldBuilder() {
+        if (slaCapacityBuilder_ == null) {
+          if (!(constraintCase_ == 5)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+          }
+          slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
         }
-        return result;
+        constraintCase_ = 5;
+        onChanged();;
+        return slaCapacityBuilder_;
       }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> slaLatencyBuilder_;
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       * @return Whether the slaLatency field is set.
+       */
       @java.lang.Override
-      public context.ContextOuterClass.Constraint buildPartial() {
-        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
-        result.constraintType_ = constraintType_;
-        result.constraintValue_ = constraintValue_;
-        onBuilt();
-        return result;
+      public boolean hasSlaLatency() {
+        return constraintCase_ == 6;
       }
-
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       * @return The slaLatency.
+       */
       @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
+        if (slaLatencyBuilder_ == null) {
+          if (constraintCase_ == 6) {
+            return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 6) {
+            return slaLatencyBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        }
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
+      public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
+        if (slaLatencyBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          slaLatencyBuilder_.setMessage(value);
+        }
+        constraintCase_ = 6;
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
+      public Builder setSlaLatency(
+          context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
+        if (slaLatencyBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          slaLatencyBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 6;
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
+      public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
+        if (slaLatencyBuilder_ == null) {
+          if (constraintCase_ == 6 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 6) {
+            slaLatencyBuilder_.mergeFrom(value);
+          }
+          slaLatencyBuilder_.setMessage(value);
+        }
+        constraintCase_ = 6;
+        return this;
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
+      public Builder clearSlaLatency() {
+        if (slaLatencyBuilder_ == null) {
+          if (constraintCase_ == 6) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 6) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaLatencyBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
+      public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
+        return getSlaLatencyFieldBuilder().getBuilder();
       }
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
       @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint) {
-          return mergeFrom((context.ContextOuterClass.Constraint)other);
+      public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
+        if ((constraintCase_ == 6) && (slaLatencyBuilder_ != null)) {
+          return slaLatencyBuilder_.getMessageOrBuilder();
         } else {
-          super.mergeFrom(other);
-          return this;
+          if (constraintCase_ == 6) {
+            return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
-        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
-        if (!other.getConstraintType().isEmpty()) {
-          constraintType_ = other.constraintType_;
-          onChanged();
-        }
-        if (!other.getConstraintValue().isEmpty()) {
-          constraintValue_ = other.constraintValue_;
-          onChanged();
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> 
+          getSlaLatencyFieldBuilder() {
+        if (slaLatencyBuilder_ == null) {
+          if (!(constraintCase_ == 6)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+          }
+          slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Latency) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        constraintCase_ = 6;
+        onChanged();;
+        return slaLatencyBuilder_;
       }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> slaAvailabilityBuilder_;
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+       * @return Whether the slaAvailability field is set.
+       */
       @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      public boolean hasSlaAvailability() {
+        return constraintCase_ == 7;
       }
-
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+       * @return The slaAvailability.
+       */
       @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Constraint parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
+        if (slaAvailabilityBuilder_ == null) {
+          if (constraintCase_ == 7) {
+            return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 7) {
+            return slaAvailabilityBuilder_.getMessage();
           }
+          return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
-        return this;
       }
-
-      private java.lang.Object constraintType_ = "";
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return The constraintType.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
-      public java.lang.String getConstraintType() {
-        java.lang.Object ref = constraintType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintType_ = s;
-          return s;
+      public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
+        if (slaAvailabilityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          slaAvailabilityBuilder_.setMessage(value);
         }
+        constraintCase_ = 7;
+        return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return The bytes for constraintType.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
-      public com.google.protobuf.ByteString
-          getConstraintTypeBytes() {
-        java.lang.Object ref = constraintType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintType_ = b;
-          return b;
+      public Builder setSlaAvailability(
+          context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
+        if (slaAvailabilityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          slaAvailabilityBuilder_.setMessage(builderForValue.build());
         }
+        constraintCase_ = 7;
+        return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The constraintType to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
-      public Builder setConstraintType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintType_ = value;
-        onChanged();
+      public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
+        if (slaAvailabilityBuilder_ == null) {
+          if (constraintCase_ == 7 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 7) {
+            slaAvailabilityBuilder_.mergeFrom(value);
+          }
+          slaAvailabilityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
-      public Builder clearConstraintType() {
-        
-        constraintType_ = getDefaultInstance().getConstraintType();
-        onChanged();
+      public Builder clearSlaAvailability() {
+        if (slaAvailabilityBuilder_ == null) {
+          if (constraintCase_ == 7) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 7) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaAvailabilityBuilder_.clear();
+        }
         return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The bytes for constraintType to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
-      public Builder setConstraintTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintType_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
+        return getSlaAvailabilityFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
+        if ((constraintCase_ == 7) && (slaAvailabilityBuilder_ != null)) {
+          return slaAvailabilityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 7) {
+            return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> 
+          getSlaAvailabilityFieldBuilder() {
+        if (slaAvailabilityBuilder_ == null) {
+          if (!(constraintCase_ == 7)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+          }
+          slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Availability) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 7;
+        onChanged();;
+        return slaAvailabilityBuilder_;
       }
 
-      private java.lang.Object constraintValue_ = "";
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> slaIsolationBuilder_;
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The constraintValue.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+       * @return Whether the slaIsolation field is set.
        */
-      public java.lang.String getConstraintValue() {
-        java.lang.Object ref = constraintValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintValue_ = s;
-          return s;
+      @java.lang.Override
+      public boolean hasSlaIsolation() {
+        return constraintCase_ == 8;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+       * @return The slaIsolation.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
+        if (slaIsolationBuilder_ == null) {
+          if (constraintCase_ == 8) {
+            return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         } else {
-          return (java.lang.String) ref;
+          if (constraintCase_ == 8) {
+            return slaIsolationBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The bytes for constraintValue.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
-      public com.google.protobuf.ByteString
-          getConstraintValueBytes() {
-        java.lang.Object ref = constraintValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintValue_ = b;
-          return b;
+      public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
+        if (slaIsolationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          slaIsolationBuilder_.setMessage(value);
         }
+        constraintCase_ = 8;
+        return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The constraintValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
-      public Builder setConstraintValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintValue_ = value;
-        onChanged();
+      public Builder setSlaIsolation(
+          context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
+        if (slaIsolationBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          slaIsolationBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
-      public Builder clearConstraintValue() {
-        
-        constraintValue_ = getDefaultInstance().getConstraintValue();
-        onChanged();
+      public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
+        if (slaIsolationBuilder_ == null) {
+          if (constraintCase_ == 8 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 8) {
+            slaIsolationBuilder_.mergeFrom(value);
+          }
+          slaIsolationBuilder_.setMessage(value);
+        }
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The bytes for constraintValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
-      public Builder setConstraintValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintValue_ = value;
-        onChanged();
+      public Builder clearSlaIsolation() {
+        if (slaIsolationBuilder_ == null) {
+          if (constraintCase_ == 8) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 8) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaIsolationBuilder_.clear();
+        }
         return this;
       }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+       */
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
+        return getSlaIsolationFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
+        if ((constraintCase_ == 8) && (slaIsolationBuilder_ != null)) {
+          return slaIsolationBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 8) {
+            return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> 
+          getSlaIsolationFieldBuilder() {
+        if (slaIsolationBuilder_ == null) {
+          if (!(constraintCase_ == 8)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+          }
+          slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 8;
+        onChanged();;
+        return slaIsolationBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -43687,6 +61603,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Uuid_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Timestamp_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Timestamp_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Event_descriptor;
   private static final 
@@ -43842,11 +61763,21 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Slice_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceOwner_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceOwner_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceStatus_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_SliceStatus_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceConfig_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceIdList_descriptor;
   private static final 
@@ -43867,6 +61798,31 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_ConnectionId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L0_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L0_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L2_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L2_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L3_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L3_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L4_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L4_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Connection_descriptor;
   private static final 
@@ -43897,11 +61853,71 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_EndPoint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConfigRule_Custom_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConfigRule_Custom_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConfigRule_ACL_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConfigRule_ACL_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_ConfigRule_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_ConfigRule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_Custom_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_Custom_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_Schedule_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_Schedule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_GPS_Position_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_GPS_Position_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Location_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Location_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_EndPointLocation_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_EndPointLocation_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_EndPointPriority_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_EndPointPriority_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Latency_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Latency_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Capacity_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Availability_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Availability_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Isolation_level_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Constraint_descriptor;
   private static final 
@@ -43926,203 +61942,274 @@ public final class ContextOuterClass {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\rcontext.proto\022\007context\032\026kpi_sample_typ" +
-      "es.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004uuid\030\001 \001(\t\"" +
-      "F\n\005Event\022\021\n\ttimestamp\030\001 \001(\001\022*\n\nevent_typ" +
-      "e\030\002 \001(\0162\026.context.EventTypeEnum\"0\n\tConte" +
-      "xtId\022#\n\014context_uuid\030\001 \001(\0132\r.context.Uui" +
-      "d\"\266\001\n\007Context\022&\n\ncontext_id\030\001 \001(\0132\022.cont" +
-      "ext.ContextId\022)\n\014topology_ids\030\002 \003(\0132\023.co" +
-      "ntext.TopologyId\022\'\n\013service_ids\030\003 \003(\0132\022." +
-      "context.ServiceId\022/\n\ncontroller\030\004 \001(\0132\033." +
-      "context.TeraFlowController\"8\n\rContextIdL" +
-      "ist\022\'\n\013context_ids\030\001 \003(\0132\022.context.Conte" +
-      "xtId\"1\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020." +
-      "context.Context\"U\n\014ContextEvent\022\035\n\005event" +
-      "\030\001 \001(\0132\016.context.Event\022&\n\ncontext_id\030\002 \001" +
-      "(\0132\022.context.ContextId\"Z\n\nTopologyId\022&\n\n" +
-      "context_id\030\001 \001(\0132\022.context.ContextId\022$\n\r" +
-      "topology_uuid\030\002 \001(\0132\r.context.Uuid\"~\n\010To" +
-      "pology\022(\n\013topology_id\030\001 \001(\0132\023.context.To" +
-      "pologyId\022%\n\ndevice_ids\030\002 \003(\0132\021.context.D" +
-      "eviceId\022!\n\010link_ids\030\003 \003(\0132\017.context.Link" +
-      "Id\";\n\016TopologyIdList\022)\n\014topology_ids\030\001 \003" +
-      "(\0132\023.context.TopologyId\"5\n\014TopologyList\022" +
-      "%\n\ntopologies\030\001 \003(\0132\021.context.Topology\"X" +
-      "\n\rTopologyEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
-      ".Event\022(\n\013topology_id\030\002 \001(\0132\023.context.To" +
-      "pologyId\".\n\010DeviceId\022\"\n\013device_uuid\030\001 \001(" +
-      "\0132\r.context.Uuid\"\232\002\n\006Device\022$\n\tdevice_id" +
-      "\030\001 \001(\0132\021.context.DeviceId\022\023\n\013device_type" +
-      "\030\002 \001(\t\022,\n\rdevice_config\030\003 \001(\0132\025.context." +
-      "DeviceConfig\022G\n\031device_operational_statu" +
-      "s\030\004 \001(\0162$.context.DeviceOperationalStatu" +
-      "sEnum\0221\n\016device_drivers\030\005 \003(\0162\031.context." +
-      "DeviceDriverEnum\022+\n\020device_endpoints\030\006 \003" +
-      "(\0132\021.context.EndPoint\"9\n\014DeviceConfig\022)\n" +
-      "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" +
-      "\"5\n\014DeviceIdList\022%\n\ndevice_ids\030\001 \003(\0132\021.c" +
-      "ontext.DeviceId\".\n\nDeviceList\022 \n\007devices" +
-      "\030\001 \003(\0132\017.context.Device\"R\n\013DeviceEvent\022\035" +
-      "\n\005event\030\001 \001(\0132\016.context.Event\022$\n\tdevice_" +
-      "id\030\002 \001(\0132\021.context.DeviceId\"*\n\006LinkId\022 \n" +
-      "\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"X\n\004Link\022" +
-      " \n\007link_id\030\001 \001(\0132\017.context.LinkId\022.\n\021lin" +
-      "k_endpoint_ids\030\002 \003(\0132\023.context.EndPointI" +
-      "d\"/\n\nLinkIdList\022!\n\010link_ids\030\001 \003(\0132\017.cont" +
-      "ext.LinkId\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r." +
-      "context.Link\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\013" +
-      "2\016.context.Event\022 \n\007link_id\030\002 \001(\0132\017.cont" +
-      "ext.LinkId\"X\n\tServiceId\022&\n\ncontext_id\030\001 " +
-      "\001(\0132\022.context.ContextId\022#\n\014service_uuid\030" +
-      "\002 \001(\0132\r.context.Uuid\"\246\002\n\007Service\022&\n\nserv" +
-      "ice_id\030\001 \001(\0132\022.context.ServiceId\022.\n\014serv" +
-      "ice_type\030\002 \001(\0162\030.context.ServiceTypeEnum" +
-      "\0221\n\024service_endpoint_ids\030\003 \003(\0132\023.context" +
-      ".EndPointId\0220\n\023service_constraints\030\004 \003(\013" +
-      "2\023.context.Constraint\022.\n\016service_status\030" +
-      "\005 \001(\0132\026.context.ServiceStatus\022.\n\016service" +
-      "_config\030\006 \001(\0132\026.context.ServiceConfig\"C\n" +
-      "\rServiceStatus\0222\n\016service_status\030\001 \001(\0162\032" +
-      ".context.ServiceStatusEnum\":\n\rServiceCon" +
-      "fig\022)\n\014config_rules\030\001 \003(\0132\023.context.Conf" +
-      "igRule\"8\n\rServiceIdList\022\'\n\013service_ids\030\001" +
-      " \003(\0132\022.context.ServiceId\"1\n\013ServiceList\022" +
-      "\"\n\010services\030\001 \003(\0132\020.context.Service\"U\n\014S" +
-      "erviceEvent\022\035\n\005event\030\001 \001(\0132\016.context.Eve" +
-      "nt\022&\n\nservice_id\030\002 \001(\0132\022.context.Service" +
-      "Id\"T\n\007SliceId\022&\n\ncontext_id\030\001 \001(\0132\022.cont" +
-      "ext.ContextId\022!\n\nslice_uuid\030\002 \001(\0132\r.cont" +
-      "ext.Uuid\"\225\002\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.c" +
-      "ontext.SliceId\022/\n\022slice_endpoint_ids\030\002 \003" +
-      "(\0132\023.context.EndPointId\022.\n\021slice_constra" +
-      "ints\030\003 \003(\0132\023.context.Constraint\022-\n\021slice" +
-      "_service_ids\030\004 \003(\0132\022.context.ServiceId\022," +
-      "\n\022slice_subslice_ids\030\005 \003(\0132\020.context.Sli" +
-      "ceId\022*\n\014slice_status\030\006 \001(\0132\024.context.Sli" +
-      "ceStatus\"=\n\013SliceStatus\022.\n\014slice_status\030" +
-      "\001 \001(\0162\030.context.SliceStatusEnum\"2\n\013Slice" +
-      "IdList\022#\n\tslice_ids\030\001 \003(\0132\020.context.Slic" +
-      "eId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.conte" +
-      "xt.Slice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016." +
-      "context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.contex" +
-      "t.SliceId\"6\n\014ConnectionId\022&\n\017connection_" +
-      "uuid\030\001 \001(\0132\r.context.Uuid\"\304\001\n\nConnection" +
-      "\022,\n\rconnection_id\030\001 \001(\0132\025.context.Connec" +
-      "tionId\022&\n\nservice_id\030\002 \001(\0132\022.context.Ser" +
-      "viceId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023" +
-      ".context.EndPointId\022+\n\017sub_service_ids\030\004" +
-      " \003(\0132\022.context.ServiceId\"A\n\020ConnectionId" +
-      "List\022-\n\016connection_ids\030\001 \003(\0132\025.context.C" +
-      "onnectionId\":\n\016ConnectionList\022(\n\013connect" +
-      "ions\030\001 \003(\0132\023.context.Connection\"^\n\017Conne" +
-      "ctionEvent\022\035\n\005event\030\001 \001(\0132\016.context.Even" +
-      "t\022,\n\rconnection_id\030\002 \001(\0132\025.context.Conne" +
-      "ctionId\"\202\001\n\nEndPointId\022(\n\013topology_id\030\001 " +
-      "\001(\0132\023.context.TopologyId\022$\n\tdevice_id\030\002 " +
-      "\001(\0132\021.context.DeviceId\022$\n\rendpoint_uuid\030" +
-      "\003 \001(\0132\r.context.Uuid\"\206\001\n\010EndPoint\022(\n\013end" +
-      "point_id\030\001 \001(\0132\023.context.EndPointId\022\025\n\re" +
-      "ndpoint_type\030\002 \001(\t\0229\n\020kpi_sample_types\030\003" +
-      " \003(\0162\037.kpi_sample_types.KpiSampleType\"e\n" +
-      "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" +
-      "nfigActionEnum\022\024\n\014resource_key\030\002 \001(\t\022\026\n\016" +
-      "resource_value\030\003 \001(\t\"?\n\nConstraint\022\027\n\017co" +
-      "nstraint_type\030\001 \001(\t\022\030\n\020constraint_value\030" +
-      "\002 \001(\t\"^\n\022TeraFlowController\022&\n\ncontext_i" +
-      "d\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_addres" +
-      "s\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationR" +
-      "esult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Cont" +
-      "extId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEventTyp" +
-      "eEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTT" +
-      "YPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EV" +
-      "ENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum\022\032\n" +
-      "\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVE" +
-      "R_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT" +
-      "_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRI" +
-      "VER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRI" +
-      "VER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationalSt" +
-      "atusEnum\022%\n!DEVICEOPERATIONALSTATUS_UNDE" +
-      "FINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DISAB" +
-      "LED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENABLED" +
-      "\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE_UN" +
-      "KNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICE" +
-      "TYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTI" +
-      "VITY_SERVICE\020\003*\210\001\n\021ServiceStatusEnum\022\033\n\027" +
-      "SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICESTAT" +
-      "US_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!" +
-      "\n\035SERVICESTATUS_PENDING_REMOVAL\020\003*\213\001\n\017Sl" +
-      "iceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000" +
-      "\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS" +
-      "_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICE" +
-      "STATUS_DEINIT\020\004*]\n\020ConfigActionEnum\022\032\n\026C" +
-      "ONFIGACTION_UNDEFINED\020\000\022\024\n\020CONFIGACTION_" +
-      "SET\020\001\022\027\n\023CONFIGACTION_DELETE\020\0022\357\022\n\016Conte" +
-      "xtService\022:\n\016ListContextIds\022\016.context.Em" +
-      "pty\032\026.context.ContextIdList\"\000\0226\n\014ListCon" +
-      "texts\022\016.context.Empty\032\024.context.ContextL" +
-      "ist\"\000\0224\n\nGetContext\022\022.context.ContextId\032" +
-      "\020.context.Context\"\000\0224\n\nSetContext\022\020.cont" +
-      "ext.Context\032\022.context.ContextId\"\000\0225\n\rRem" +
-      "oveContext\022\022.context.ContextId\032\016.context" +
-      ".Empty\"\000\022=\n\020GetContextEvents\022\016.context.E" +
-      "mpty\032\025.context.ContextEvent\"\0000\001\022@\n\017ListT" +
-      "opologyIds\022\022.context.ContextId\032\027.context" +
-      ".TopologyIdList\"\000\022=\n\016ListTopologies\022\022.co" +
-      "ntext.ContextId\032\025.context.TopologyList\"\000" +
-      "\0227\n\013GetTopology\022\023.context.TopologyId\032\021.c" +
-      "ontext.Topology\"\000\0227\n\013SetTopology\022\021.conte" +
-      "xt.Topology\032\023.context.TopologyId\"\000\0227\n\016Re" +
-      "moveTopology\022\023.context.TopologyId\032\016.cont" +
-      "ext.Empty\"\000\022?\n\021GetTopologyEvents\022\016.conte" +
-      "xt.Empty\032\026.context.TopologyEvent\"\0000\001\0228\n\r" +
-      "ListDeviceIds\022\016.context.Empty\032\025.context." +
-      "DeviceIdList\"\000\0224\n\013ListDevices\022\016.context." +
-      "Empty\032\023.context.DeviceList\"\000\0221\n\tGetDevic" +
-      "e\022\021.context.DeviceId\032\017.context.Device\"\000\022" +
-      "1\n\tSetDevice\022\017.context.Device\032\021.context." +
-      "DeviceId\"\000\0223\n\014RemoveDevice\022\021.context.Dev" +
-      "iceId\032\016.context.Empty\"\000\022;\n\017GetDeviceEven" +
-      "ts\022\016.context.Empty\032\024.context.DeviceEvent" +
-      "\"\0000\001\0224\n\013ListLinkIds\022\016.context.Empty\032\023.co" +
-      "ntext.LinkIdList\"\000\0220\n\tListLinks\022\016.contex" +
-      "t.Empty\032\021.context.LinkList\"\000\022+\n\007GetLink\022" +
-      "\017.context.LinkId\032\r.context.Link\"\000\022+\n\007Set" +
-      "Link\022\r.context.Link\032\017.context.LinkId\"\000\022/" +
-      "\n\nRemoveLink\022\017.context.LinkId\032\016.context." +
-      "Empty\"\000\0227\n\rGetLinkEvents\022\016.context.Empty" +
-      "\032\022.context.LinkEvent\"\0000\001\022>\n\016ListServiceI" +
-      "ds\022\022.context.ContextId\032\026.context.Service" +
-      "IdList\"\000\022:\n\014ListServices\022\022.context.Conte" +
-      "xtId\032\024.context.ServiceList\"\000\0224\n\nGetServi" +
-      "ce\022\022.context.ServiceId\032\020.context.Service" +
-      "\"\000\0224\n\nSetService\022\020.context.Service\032\022.con" +
-      "text.ServiceId\"\000\0225\n\rRemoveService\022\022.cont" +
-      "ext.ServiceId\032\016.context.Empty\"\000\022=\n\020GetSe" +
-      "rviceEvents\022\016.context.Empty\032\025.context.Se" +
-      "rviceEvent\"\0000\001\022:\n\014ListSliceIds\022\022.context" +
-      ".ContextId\032\024.context.SliceIdList\"\000\0226\n\nLi" +
-      "stSlices\022\022.context.ContextId\032\022.context.S" +
-      "liceList\"\000\022.\n\010GetSlice\022\020.context.SliceId" +
-      "\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016.context" +
-      ".Slice\032\020.context.SliceId\"\000\0221\n\013RemoveSlic" +
-      "e\022\020.context.SliceId\032\016.context.Empty\"\000\0229\n" +
-      "\016GetSliceEvents\022\016.context.Empty\032\023.contex" +
-      "t.SliceEvent\"\0000\001\022D\n\021ListConnectionIds\022\022." +
-      "context.ServiceId\032\031.context.ConnectionId" +
-      "List\"\000\022@\n\017ListConnections\022\022.context.Serv" +
-      "iceId\032\027.context.ConnectionList\"\000\022=\n\rGetC" +
-      "onnection\022\025.context.ConnectionId\032\023.conte" +
-      "xt.Connection\"\000\022=\n\rSetConnection\022\023.conte" +
-      "xt.Connection\032\025.context.ConnectionId\"\000\022;" +
-      "\n\020RemoveConnection\022\025.context.ConnectionI" +
-      "d\032\016.context.Empty\"\000\022C\n\023GetConnectionEven" +
-      "ts\022\016.context.Empty\032\030.context.ConnectionE" +
-      "vent\"\0000\001b\006proto3"
+      "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" +
+      "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" +
+      "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" +
+      "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" +
+      ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" +
+      ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" +
+      "uid\030\001 \001(\0132\r.context.Uuid\"\266\001\n\007Context\022&\n\n" +
+      "context_id\030\001 \001(\0132\022.context.ContextId\022)\n\014" +
+      "topology_ids\030\002 \003(\0132\023.context.TopologyId\022" +
+      "\'\n\013service_ids\030\003 \003(\0132\022.context.ServiceId" +
+      "\022/\n\ncontroller\030\004 \001(\0132\033.context.TeraFlowC" +
+      "ontroller\"8\n\rContextIdList\022\'\n\013context_id" +
+      "s\030\001 \003(\0132\022.context.ContextId\"1\n\013ContextLi" +
+      "st\022\"\n\010contexts\030\001 \003(\0132\020.context.Context\"U" +
+      "\n\014ContextEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
+      "Event\022&\n\ncontext_id\030\002 \001(\0132\022.context.Cont" +
+      "extId\"Z\n\nTopologyId\022&\n\ncontext_id\030\001 \001(\0132" +
+      "\022.context.ContextId\022$\n\rtopology_uuid\030\002 \001" +
+      "(\0132\r.context.Uuid\"~\n\010Topology\022(\n\013topolog" +
+      "y_id\030\001 \001(\0132\023.context.TopologyId\022%\n\ndevic" +
+      "e_ids\030\002 \003(\0132\021.context.DeviceId\022!\n\010link_i" +
+      "ds\030\003 \003(\0132\017.context.LinkId\";\n\016TopologyIdL" +
+      "ist\022)\n\014topology_ids\030\001 \003(\0132\023.context.Topo" +
+      "logyId\"5\n\014TopologyList\022%\n\ntopologies\030\001 \003" +
+      "(\0132\021.context.Topology\"X\n\rTopologyEvent\022\035" +
+      "\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013topolog" +
+      "y_id\030\002 \001(\0132\023.context.TopologyId\".\n\010Devic" +
+      "eId\022\"\n\013device_uuid\030\001 \001(\0132\r.context.Uuid\"" +
+      "\232\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.context." +
+      "DeviceId\022\023\n\013device_type\030\002 \001(\t\022,\n\rdevice_" +
+      "config\030\003 \001(\0132\025.context.DeviceConfig\022G\n\031d" +
+      "evice_operational_status\030\004 \001(\0162$.context" +
+      ".DeviceOperationalStatusEnum\0221\n\016device_d" +
+      "rivers\030\005 \003(\0162\031.context.DeviceDriverEnum\022" +
+      "+\n\020device_endpoints\030\006 \003(\0132\021.context.EndP" +
+      "oint\"9\n\014DeviceConfig\022)\n\014config_rules\030\001 \003" +
+      "(\0132\023.context.ConfigRule\"5\n\014DeviceIdList\022" +
+      "%\n\ndevice_ids\030\001 \003(\0132\021.context.DeviceId\"." +
+      "\n\nDeviceList\022 \n\007devices\030\001 \003(\0132\017.context." +
+      "Device\"R\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016.c" +
+      "ontext.Event\022$\n\tdevice_id\030\002 \001(\0132\021.contex" +
+      "t.DeviceId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132" +
+      "\r.context.Uuid\"X\n\004Link\022 \n\007link_id\030\001 \001(\0132" +
+      "\017.context.LinkId\022.\n\021link_endpoint_ids\030\002 " +
+      "\003(\0132\023.context.EndPointId\"/\n\nLinkIdList\022!" +
+      "\n\010link_ids\030\001 \003(\0132\017.context.LinkId\"(\n\010Lin" +
+      "kList\022\034\n\005links\030\001 \003(\0132\r.context.Link\"L\n\tL" +
+      "inkEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022" +
+      " \n\007link_id\030\002 \001(\0132\017.context.LinkId\"X\n\tSer" +
+      "viceId\022&\n\ncontext_id\030\001 \001(\0132\022.context.Con" +
+      "textId\022#\n\014service_uuid\030\002 \001(\0132\r.context.U" +
+      "uid\"\315\002\n\007Service\022&\n\nservice_id\030\001 \001(\0132\022.co" +
+      "ntext.ServiceId\022.\n\014service_type\030\002 \001(\0162\030." +
+      "context.ServiceTypeEnum\0221\n\024service_endpo" +
+      "int_ids\030\003 \003(\0132\023.context.EndPointId\0220\n\023se" +
+      "rvice_constraints\030\004 \003(\0132\023.context.Constr" +
+      "aint\022.\n\016service_status\030\005 \001(\0132\026.context.S" +
+      "erviceStatus\022.\n\016service_config\030\006 \001(\0132\026.c" +
+      "ontext.ServiceConfig\022%\n\ttimestamp\030\007 \001(\0132" +
+      "\022.context.Timestamp\"C\n\rServiceStatus\0222\n\016" +
+      "service_status\030\001 \001(\0162\032.context.ServiceSt" +
+      "atusEnum\":\n\rServiceConfig\022)\n\014config_rule" +
+      "s\030\001 \003(\0132\023.context.ConfigRule\"8\n\rServiceI" +
+      "dList\022\'\n\013service_ids\030\001 \003(\0132\022.context.Ser" +
+      "viceId\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132" +
+      "\020.context.Service\"U\n\014ServiceEvent\022\035\n\005eve" +
+      "nt\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002" +
+      " \001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nc" +
+      "ontext_id\030\001 \001(\0132\022.context.ContextId\022!\n\ns" +
+      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003\n\005Slice" +
+      "\022\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022/\n\022" +
+      "slice_endpoint_ids\030\002 \003(\0132\023.context.EndPo" +
+      "intId\022.\n\021slice_constraints\030\003 \003(\0132\023.conte" +
+      "xt.Constraint\022-\n\021slice_service_ids\030\004 \003(\013" +
+      "2\022.context.ServiceId\022,\n\022slice_subslice_i" +
+      "ds\030\005 \003(\0132\020.context.SliceId\022*\n\014slice_stat" +
+      "us\030\006 \001(\0132\024.context.SliceStatus\022*\n\014slice_" +
+      "config\030\007 \001(\0132\024.context.SliceConfig\022(\n\013sl" +
+      "ice_owner\030\010 \001(\0132\023.context.SliceOwner\022%\n\t" +
+      "timestamp\030\t \001(\0132\022.context.Timestamp\"E\n\nS" +
+      "liceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.context." +
+      "Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatu" +
+      "s\022.\n\014slice_status\030\001 \001(\0162\030.context.SliceS" +
+      "tatusEnum\"8\n\013SliceConfig\022)\n\014config_rules" +
+      "\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceIdLi" +
+      "st\022#\n\tslice_ids\030\001 \003(\0132\020.context.SliceId\"" +
+      "+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.context.S" +
+      "lice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016.cont" +
+      "ext.Event\022\"\n\010slice_id\030\002 \001(\0132\020.context.Sl" +
+      "iceId\"6\n\014ConnectionId\022&\n\017connection_uuid" +
+      "\030\001 \001(\0132\r.context.Uuid\"2\n\025ConnectionSetti" +
+      "ngs_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"\236\001\n\025Co" +
+      "nnectionSettings_L2\022\027\n\017src_mac_address\030\001" +
+      " \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\nether_t" +
+      "ype\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label" +
+      "\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r\"t\n\025Co" +
+      "nnectionSettings_L3\022\026\n\016src_ip_address\030\001 " +
+      "\001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(" +
+      "\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025Conn" +
+      "ectionSettings_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010d" +
+      "st_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030" +
+      "\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0\030\001 \001(\013" +
+      "2\036.context.ConnectionSettings_L0\022*\n\002l2\030\002" +
+      " \001(\0132\036.context.ConnectionSettings_L2\022*\n\002" +
+      "l3\030\003 \001(\0132\036.context.ConnectionSettings_L3" +
+      "\022*\n\002l4\030\004 \001(\0132\036.context.ConnectionSetting" +
+      "s_L4\"\363\001\n\nConnection\022,\n\rconnection_id\030\001 \001" +
+      "(\0132\025.context.ConnectionId\022&\n\nservice_id\030" +
+      "\002 \001(\0132\022.context.ServiceId\0223\n\026path_hops_e" +
+      "ndpoint_ids\030\003 \003(\0132\023.context.EndPointId\022+" +
+      "\n\017sub_service_ids\030\004 \003(\0132\022.context.Servic" +
+      "eId\022-\n\010settings\030\005 \001(\0132\033.context.Connecti" +
+      "onSettings\"A\n\020ConnectionIdList\022-\n\016connec" +
+      "tion_ids\030\001 \003(\0132\025.context.ConnectionId\":\n" +
+      "\016ConnectionList\022(\n\013connections\030\001 \003(\0132\023.c" +
+      "ontext.Connection\"^\n\017ConnectionEvent\022\035\n\005" +
+      "event\030\001 \001(\0132\016.context.Event\022,\n\rconnectio" +
+      "n_id\030\002 \001(\0132\025.context.ConnectionId\"\202\001\n\nEn" +
+      "dPointId\022(\n\013topology_id\030\001 \001(\0132\023.context." +
+      "TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.context." +
+      "DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.contex" +
+      "t.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_id\030\001 \001(\013" +
+      "2\023.context.EndPointId\022\025\n\rendpoint_type\030\002" +
+      " \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037.kpi_sam" +
+      "ple_types.KpiSampleType\022,\n\021endpoint_loca" +
+      "tion\030\004 \001(\0132\021.context.Location\"A\n\021ConfigR" +
+      "ule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016reso" +
+      "urce_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022(\n\013en" +
+      "dpoint_id\030\001 \001(\0132\023.context.EndPointId\022!\n\010" +
+      "rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n\nConf" +
+      "igRule\022)\n\006action\030\001 \001(\0162\031.context.ConfigA" +
+      "ctionEnum\022,\n\006custom\030\002 \001(\0132\032.context.Conf" +
+      "igRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.C" +
+      "onfigRule_ACLH\000B\r\n\013config_rule\"F\n\021Constr" +
+      "aint_Custom\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020" +
+      "constraint_value\030\002 \001(\t\"E\n\023Constraint_Sch" +
+      "edule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rdurati" +
+      "on_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010latitud" +
+      "e\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Location\022\020" +
+      "\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025" +
+      ".context.GPS_PositionH\000B\n\n\010location\"l\n\033C" +
+      "onstraint_EndPointLocation\022(\n\013endpoint_i" +
+      "d\030\001 \001(\0132\023.context.EndPointId\022#\n\010location" +
+      "\030\002 \001(\0132\021.context.Location\"Y\n\033Constraint_" +
+      "EndPointPriority\022(\n\013endpoint_id\030\001 \001(\0132\023." +
+      "context.EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026" +
+      "Constraint_SLA_Latency\022\026\n\016e2e_latency_ms" +
+      "\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025\n\rcap" +
+      "acity_gbps\030\001 \001(\002\"M\n\033Constraint_SLA_Avail" +
+      "ability\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\na" +
+      "ll_active\030\002 \001(\010\"V\n\036Constraint_SLA_Isolat" +
+      "ion_level\0224\n\017isolation_level\030\001 \003(\0162\033.con" +
+      "text.IsolationLevelEnum\"\366\003\n\nConstraint\022," +
+      "\n\006custom\030\001 \001(\0132\032.context.Constraint_Cust" +
+      "omH\000\0220\n\010schedule\030\002 \001(\0132\034.context.Constra" +
+      "int_ScheduleH\000\022A\n\021endpoint_location\030\003 \001(" +
+      "\0132$.context.Constraint_EndPointLocationH" +
+      "\000\022A\n\021endpoint_priority\030\004 \001(\0132$.context.C" +
+      "onstraint_EndPointPriorityH\000\0228\n\014sla_capa" +
+      "city\030\005 \001(\0132 .context.Constraint_SLA_Capa" +
+      "cityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.context.Co" +
+      "nstraint_SLA_LatencyH\000\022@\n\020sla_availabili" +
+      "ty\030\007 \001(\0132$.context.Constraint_SLA_Availa" +
+      "bilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'.contex" +
+      "t.Constraint_SLA_Isolation_levelH\000B\014\n\nco" +
+      "nstraint\"^\n\022TeraFlowController\022&\n\ncontex" +
+      "t_id\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_add" +
+      "ress\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authenticati" +
+      "onResult\022&\n\ncontext_id\030\001 \001(\0132\022.context.C" +
+      "ontextId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEvent" +
+      "TypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVE" +
+      "NTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n" +
+      "\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum" +
+      "\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDR" +
+      "IVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSP" +
+      "ORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICE" +
+      "DRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICE" +
+      "DRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationa" +
+      "lStatusEnum\022%\n!DEVICEOPERATIONALSTATUS_U" +
+      "NDEFINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DI" +
+      "SABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENAB" +
+      "LED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE" +
+      "_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERV" +
+      "ICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNE" +
+      "CTIVITY_SERVICE\020\003*\250\001\n\021ServiceStatusEnum\022" +
+      "\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICES" +
+      "TATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020" +
+      "\002\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\003\022\036\n\032" +
+      "SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017SliceSt" +
+      "atusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023S" +
+      "LICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT" +
+      "\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATU" +
+      "S_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005" +
+      "*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_UND" +
+      "EFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIG" +
+      "ACTION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020" +
+      "\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001" +
+      "\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLA" +
+      "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" +
+      "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" +
+      "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" +
+      "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\357\022" +
+      "\n\016ContextService\022:\n\016ListContextIds\022\016.con" +
+      "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" +
+      "ListContexts\022\016.context.Empty\032\024.context.C" +
+      "ontextList\"\000\0224\n\nGetContext\022\022.context.Con" +
+      "textId\032\020.context.Context\"\000\0224\n\nSetContext" +
+      "\022\020.context.Context\032\022.context.ContextId\"\000" +
+      "\0225\n\rRemoveContext\022\022.context.ContextId\032\016." +
+      "context.Empty\"\000\022=\n\020GetContextEvents\022\016.co" +
+      "ntext.Empty\032\025.context.ContextEvent\"\0000\001\022@" +
+      "\n\017ListTopologyIds\022\022.context.ContextId\032\027." +
+      "context.TopologyIdList\"\000\022=\n\016ListTopologi" +
+      "es\022\022.context.ContextId\032\025.context.Topolog" +
+      "yList\"\000\0227\n\013GetTopology\022\023.context.Topolog" +
+      "yId\032\021.context.Topology\"\000\0227\n\013SetTopology\022" +
+      "\021.context.Topology\032\023.context.TopologyId\"" +
+      "\000\0227\n\016RemoveTopology\022\023.context.TopologyId" +
+      "\032\016.context.Empty\"\000\022?\n\021GetTopologyEvents\022" +
+      "\016.context.Empty\032\026.context.TopologyEvent\"" +
+      "\0000\001\0228\n\rListDeviceIds\022\016.context.Empty\032\025.c" +
+      "ontext.DeviceIdList\"\000\0224\n\013ListDevices\022\016.c" +
+      "ontext.Empty\032\023.context.DeviceList\"\000\0221\n\tG" +
+      "etDevice\022\021.context.DeviceId\032\017.context.De" +
+      "vice\"\000\0221\n\tSetDevice\022\017.context.Device\032\021.c" +
+      "ontext.DeviceId\"\000\0223\n\014RemoveDevice\022\021.cont" +
+      "ext.DeviceId\032\016.context.Empty\"\000\022;\n\017GetDev" +
+      "iceEvents\022\016.context.Empty\032\024.context.Devi" +
+      "ceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.context.Emp" +
+      "ty\032\023.context.LinkIdList\"\000\0220\n\tListLinks\022\016" +
+      ".context.Empty\032\021.context.LinkList\"\000\022+\n\007G" +
+      "etLink\022\017.context.LinkId\032\r.context.Link\"\000" +
+      "\022+\n\007SetLink\022\r.context.Link\032\017.context.Lin" +
+      "kId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016.c" +
+      "ontext.Empty\"\000\0227\n\rGetLinkEvents\022\016.contex" +
+      "t.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016ListS" +
+      "erviceIds\022\022.context.ContextId\032\026.context." +
+      "ServiceIdList\"\000\022:\n\014ListServices\022\022.contex" +
+      "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" +
+      "etService\022\022.context.ServiceId\032\020.context." +
+      "Service\"\000\0224\n\nSetService\022\020.context.Servic" +
+      "e\032\022.context.ServiceId\"\000\0225\n\rRemoveService" +
+      "\022\022.context.ServiceId\032\016.context.Empty\"\000\022=" +
+      "\n\020GetServiceEvents\022\016.context.Empty\032\025.con" +
+      "text.ServiceEvent\"\0000\001\022:\n\014ListSliceIds\022\022." +
+      "context.ContextId\032\024.context.SliceIdList\"" +
+      "\000\0226\n\nListSlices\022\022.context.ContextId\032\022.co" +
+      "ntext.SliceList\"\000\022.\n\010GetSlice\022\020.context." +
+      "SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016." +
+      "context.Slice\032\020.context.SliceId\"\000\0221\n\013Rem" +
+      "oveSlice\022\020.context.SliceId\032\016.context.Emp" +
+      "ty\"\000\0229\n\016GetSliceEvents\022\016.context.Empty\032\023" +
+      ".context.SliceEvent\"\0000\001\022D\n\021ListConnectio" +
+      "nIds\022\022.context.ServiceId\032\031.context.Conne" +
+      "ctionIdList\"\000\022@\n\017ListConnections\022\022.conte" +
+      "xt.ServiceId\032\027.context.ConnectionList\"\000\022" +
+      "=\n\rGetConnection\022\025.context.ConnectionId\032" +
+      "\023.context.Connection\"\000\022=\n\rSetConnection\022" +
+      "\023.context.Connection\032\025.context.Connectio" +
+      "nId\"\000\022;\n\020RemoveConnection\022\025.context.Conn" +
+      "ectionId\032\016.context.Empty\"\000\022C\n\023GetConnect" +
+      "ionEvents\022\016.context.Empty\032\030.context.Conn" +
+      "ectionEvent\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
+          acl.Acl.getDescriptor(),
           kpi_sample_types.KpiSampleTypes.getDescriptor(),
         });
     internal_static_context_Empty_descriptor =
@@ -44137,282 +62224,403 @@ public final class ContextOuterClass {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Uuid_descriptor,
         new java.lang.String[] { "Uuid", });
-    internal_static_context_Event_descriptor =
+    internal_static_context_Timestamp_descriptor =
       getDescriptor().getMessageTypes().get(2);
+    internal_static_context_Timestamp_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Timestamp_descriptor,
+        new java.lang.String[] { "Timestamp", });
+    internal_static_context_Event_descriptor =
+      getDescriptor().getMessageTypes().get(3);
     internal_static_context_Event_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Event_descriptor,
         new java.lang.String[] { "Timestamp", "EventType", });
     internal_static_context_ContextId_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_context_ContextId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextId_descriptor,
         new java.lang.String[] { "ContextUuid", });
     internal_static_context_Context_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_context_Context_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Context_descriptor,
         new java.lang.String[] { "ContextId", "TopologyIds", "ServiceIds", "Controller", });
     internal_static_context_ContextIdList_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(6);
     internal_static_context_ContextIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextIdList_descriptor,
         new java.lang.String[] { "ContextIds", });
     internal_static_context_ContextList_descriptor =
-      getDescriptor().getMessageTypes().get(6);
+      getDescriptor().getMessageTypes().get(7);
     internal_static_context_ContextList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextList_descriptor,
         new java.lang.String[] { "Contexts", });
     internal_static_context_ContextEvent_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_context_ContextEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextEvent_descriptor,
         new java.lang.String[] { "Event", "ContextId", });
     internal_static_context_TopologyId_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_context_TopologyId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyId_descriptor,
         new java.lang.String[] { "ContextId", "TopologyUuid", });
     internal_static_context_Topology_descriptor =
-      getDescriptor().getMessageTypes().get(9);
+      getDescriptor().getMessageTypes().get(10);
     internal_static_context_Topology_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Topology_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceIds", "LinkIds", });
     internal_static_context_TopologyIdList_descriptor =
-      getDescriptor().getMessageTypes().get(10);
+      getDescriptor().getMessageTypes().get(11);
     internal_static_context_TopologyIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyIdList_descriptor,
         new java.lang.String[] { "TopologyIds", });
     internal_static_context_TopologyList_descriptor =
-      getDescriptor().getMessageTypes().get(11);
+      getDescriptor().getMessageTypes().get(12);
     internal_static_context_TopologyList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyList_descriptor,
         new java.lang.String[] { "Topologies", });
     internal_static_context_TopologyEvent_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_context_TopologyEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyEvent_descriptor,
         new java.lang.String[] { "Event", "TopologyId", });
     internal_static_context_DeviceId_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_context_DeviceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceId_descriptor,
         new java.lang.String[] { "DeviceUuid", });
     internal_static_context_Device_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_context_Device_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Device_descriptor,
         new java.lang.String[] { "DeviceId", "DeviceType", "DeviceConfig", "DeviceOperationalStatus", "DeviceDrivers", "DeviceEndpoints", });
     internal_static_context_DeviceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_context_DeviceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_DeviceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_context_DeviceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceIdList_descriptor,
         new java.lang.String[] { "DeviceIds", });
     internal_static_context_DeviceList_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_context_DeviceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceList_descriptor,
         new java.lang.String[] { "Devices", });
     internal_static_context_DeviceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(18);
+      getDescriptor().getMessageTypes().get(19);
     internal_static_context_DeviceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceEvent_descriptor,
         new java.lang.String[] { "Event", "DeviceId", });
     internal_static_context_LinkId_descriptor =
-      getDescriptor().getMessageTypes().get(19);
+      getDescriptor().getMessageTypes().get(20);
     internal_static_context_LinkId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkId_descriptor,
         new java.lang.String[] { "LinkUuid", });
     internal_static_context_Link_descriptor =
-      getDescriptor().getMessageTypes().get(20);
+      getDescriptor().getMessageTypes().get(21);
     internal_static_context_Link_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Link_descriptor,
         new java.lang.String[] { "LinkId", "LinkEndpointIds", });
     internal_static_context_LinkIdList_descriptor =
-      getDescriptor().getMessageTypes().get(21);
+      getDescriptor().getMessageTypes().get(22);
     internal_static_context_LinkIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkIdList_descriptor,
         new java.lang.String[] { "LinkIds", });
     internal_static_context_LinkList_descriptor =
-      getDescriptor().getMessageTypes().get(22);
+      getDescriptor().getMessageTypes().get(23);
     internal_static_context_LinkList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkList_descriptor,
         new java.lang.String[] { "Links", });
     internal_static_context_LinkEvent_descriptor =
-      getDescriptor().getMessageTypes().get(23);
+      getDescriptor().getMessageTypes().get(24);
     internal_static_context_LinkEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkEvent_descriptor,
         new java.lang.String[] { "Event", "LinkId", });
     internal_static_context_ServiceId_descriptor =
-      getDescriptor().getMessageTypes().get(24);
+      getDescriptor().getMessageTypes().get(25);
     internal_static_context_ServiceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceId_descriptor,
         new java.lang.String[] { "ContextId", "ServiceUuid", });
     internal_static_context_Service_descriptor =
-      getDescriptor().getMessageTypes().get(25);
+      getDescriptor().getMessageTypes().get(26);
     internal_static_context_Service_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Service_descriptor,
-        new java.lang.String[] { "ServiceId", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", });
+        new java.lang.String[] { "ServiceId", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", "Timestamp", });
     internal_static_context_ServiceStatus_descriptor =
-      getDescriptor().getMessageTypes().get(26);
+      getDescriptor().getMessageTypes().get(27);
     internal_static_context_ServiceStatus_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceStatus_descriptor,
         new java.lang.String[] { "ServiceStatus", });
     internal_static_context_ServiceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(27);
+      getDescriptor().getMessageTypes().get(28);
     internal_static_context_ServiceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_ServiceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(28);
+      getDescriptor().getMessageTypes().get(29);
     internal_static_context_ServiceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceIdList_descriptor,
         new java.lang.String[] { "ServiceIds", });
     internal_static_context_ServiceList_descriptor =
-      getDescriptor().getMessageTypes().get(29);
+      getDescriptor().getMessageTypes().get(30);
     internal_static_context_ServiceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceList_descriptor,
         new java.lang.String[] { "Services", });
     internal_static_context_ServiceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(30);
+      getDescriptor().getMessageTypes().get(31);
     internal_static_context_ServiceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceEvent_descriptor,
         new java.lang.String[] { "Event", "ServiceId", });
     internal_static_context_SliceId_descriptor =
-      getDescriptor().getMessageTypes().get(31);
+      getDescriptor().getMessageTypes().get(32);
     internal_static_context_SliceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceId_descriptor,
         new java.lang.String[] { "ContextId", "SliceUuid", });
     internal_static_context_Slice_descriptor =
-      getDescriptor().getMessageTypes().get(32);
+      getDescriptor().getMessageTypes().get(33);
     internal_static_context_Slice_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Slice_descriptor,
-        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", });
+        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceConfig", "SliceOwner", "Timestamp", });
+    internal_static_context_SliceOwner_descriptor =
+      getDescriptor().getMessageTypes().get(34);
+    internal_static_context_SliceOwner_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceOwner_descriptor,
+        new java.lang.String[] { "OwnerUuid", "OwnerString", });
     internal_static_context_SliceStatus_descriptor =
-      getDescriptor().getMessageTypes().get(33);
+      getDescriptor().getMessageTypes().get(35);
     internal_static_context_SliceStatus_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceStatus_descriptor,
         new java.lang.String[] { "SliceStatus", });
+    internal_static_context_SliceConfig_descriptor =
+      getDescriptor().getMessageTypes().get(36);
+    internal_static_context_SliceConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceConfig_descriptor,
+        new java.lang.String[] { "ConfigRules", });
     internal_static_context_SliceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(34);
+      getDescriptor().getMessageTypes().get(37);
     internal_static_context_SliceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceIdList_descriptor,
         new java.lang.String[] { "SliceIds", });
     internal_static_context_SliceList_descriptor =
-      getDescriptor().getMessageTypes().get(35);
+      getDescriptor().getMessageTypes().get(38);
     internal_static_context_SliceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceList_descriptor,
         new java.lang.String[] { "Slices", });
     internal_static_context_SliceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(36);
+      getDescriptor().getMessageTypes().get(39);
     internal_static_context_SliceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceEvent_descriptor,
         new java.lang.String[] { "Event", "SliceId", });
     internal_static_context_ConnectionId_descriptor =
-      getDescriptor().getMessageTypes().get(37);
+      getDescriptor().getMessageTypes().get(40);
     internal_static_context_ConnectionId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionId_descriptor,
         new java.lang.String[] { "ConnectionUuid", });
+    internal_static_context_ConnectionSettings_L0_descriptor =
+      getDescriptor().getMessageTypes().get(41);
+    internal_static_context_ConnectionSettings_L0_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionSettings_L0_descriptor,
+        new java.lang.String[] { "LspSymbolicName", });
+    internal_static_context_ConnectionSettings_L2_descriptor =
+      getDescriptor().getMessageTypes().get(42);
+    internal_static_context_ConnectionSettings_L2_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionSettings_L2_descriptor,
+        new java.lang.String[] { "SrcMacAddress", "DstMacAddress", "EtherType", "VlanId", "MplsLabel", "MplsTrafficClass", });
+    internal_static_context_ConnectionSettings_L3_descriptor =
+      getDescriptor().getMessageTypes().get(43);
+    internal_static_context_ConnectionSettings_L3_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionSettings_L3_descriptor,
+        new java.lang.String[] { "SrcIpAddress", "DstIpAddress", "Dscp", "Protocol", "Ttl", });
+    internal_static_context_ConnectionSettings_L4_descriptor =
+      getDescriptor().getMessageTypes().get(44);
+    internal_static_context_ConnectionSettings_L4_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionSettings_L4_descriptor,
+        new java.lang.String[] { "SrcPort", "DstPort", "TcpFlags", "Ttl", });
+    internal_static_context_ConnectionSettings_descriptor =
+      getDescriptor().getMessageTypes().get(45);
+    internal_static_context_ConnectionSettings_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionSettings_descriptor,
+        new java.lang.String[] { "L0", "L2", "L3", "L4", });
     internal_static_context_Connection_descriptor =
-      getDescriptor().getMessageTypes().get(38);
+      getDescriptor().getMessageTypes().get(46);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
-        new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", });
+        new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", "Settings", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(39);
+      getDescriptor().getMessageTypes().get(47);
     internal_static_context_ConnectionIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionIdList_descriptor,
         new java.lang.String[] { "ConnectionIds", });
     internal_static_context_ConnectionList_descriptor =
-      getDescriptor().getMessageTypes().get(40);
+      getDescriptor().getMessageTypes().get(48);
     internal_static_context_ConnectionList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionList_descriptor,
         new java.lang.String[] { "Connections", });
     internal_static_context_ConnectionEvent_descriptor =
-      getDescriptor().getMessageTypes().get(41);
+      getDescriptor().getMessageTypes().get(49);
     internal_static_context_ConnectionEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionEvent_descriptor,
         new java.lang.String[] { "Event", "ConnectionId", });
     internal_static_context_EndPointId_descriptor =
-      getDescriptor().getMessageTypes().get(42);
+      getDescriptor().getMessageTypes().get(50);
     internal_static_context_EndPointId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPointId_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
     internal_static_context_EndPoint_descriptor =
-      getDescriptor().getMessageTypes().get(43);
+      getDescriptor().getMessageTypes().get(51);
     internal_static_context_EndPoint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPoint_descriptor,
-        new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", });
+        new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
+    internal_static_context_ConfigRule_Custom_descriptor =
+      getDescriptor().getMessageTypes().get(52);
+    internal_static_context_ConfigRule_Custom_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConfigRule_Custom_descriptor,
+        new java.lang.String[] { "ResourceKey", "ResourceValue", });
+    internal_static_context_ConfigRule_ACL_descriptor =
+      getDescriptor().getMessageTypes().get(53);
+    internal_static_context_ConfigRule_ACL_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConfigRule_ACL_descriptor,
+        new java.lang.String[] { "EndpointId", "RuleSet", });
     internal_static_context_ConfigRule_descriptor =
-      getDescriptor().getMessageTypes().get(44);
+      getDescriptor().getMessageTypes().get(54);
     internal_static_context_ConfigRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_descriptor,
-        new java.lang.String[] { "Action", "ResourceKey", "ResourceValue", });
+        new java.lang.String[] { "Action", "Custom", "Acl", "ConfigRule", });
+    internal_static_context_Constraint_Custom_descriptor =
+      getDescriptor().getMessageTypes().get(55);
+    internal_static_context_Constraint_Custom_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_Custom_descriptor,
+        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
+    internal_static_context_Constraint_Schedule_descriptor =
+      getDescriptor().getMessageTypes().get(56);
+    internal_static_context_Constraint_Schedule_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_Schedule_descriptor,
+        new java.lang.String[] { "StartTimestamp", "DurationDays", });
+    internal_static_context_GPS_Position_descriptor =
+      getDescriptor().getMessageTypes().get(57);
+    internal_static_context_GPS_Position_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_GPS_Position_descriptor,
+        new java.lang.String[] { "Latitude", "Longitude", });
+    internal_static_context_Location_descriptor =
+      getDescriptor().getMessageTypes().get(58);
+    internal_static_context_Location_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Location_descriptor,
+        new java.lang.String[] { "Region", "GpsPosition", "Location", });
+    internal_static_context_Constraint_EndPointLocation_descriptor =
+      getDescriptor().getMessageTypes().get(59);
+    internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_EndPointLocation_descriptor,
+        new java.lang.String[] { "EndpointId", "Location", });
+    internal_static_context_Constraint_EndPointPriority_descriptor =
+      getDescriptor().getMessageTypes().get(60);
+    internal_static_context_Constraint_EndPointPriority_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_EndPointPriority_descriptor,
+        new java.lang.String[] { "EndpointId", "Priority", });
+    internal_static_context_Constraint_SLA_Latency_descriptor =
+      getDescriptor().getMessageTypes().get(61);
+    internal_static_context_Constraint_SLA_Latency_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_SLA_Latency_descriptor,
+        new java.lang.String[] { "E2ELatencyMs", });
+    internal_static_context_Constraint_SLA_Capacity_descriptor =
+      getDescriptor().getMessageTypes().get(62);
+    internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_SLA_Capacity_descriptor,
+        new java.lang.String[] { "CapacityGbps", });
+    internal_static_context_Constraint_SLA_Availability_descriptor =
+      getDescriptor().getMessageTypes().get(63);
+    internal_static_context_Constraint_SLA_Availability_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_SLA_Availability_descriptor,
+        new java.lang.String[] { "NumDisjointPaths", "AllActive", });
+    internal_static_context_Constraint_SLA_Isolation_level_descriptor =
+      getDescriptor().getMessageTypes().get(64);
+    internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_SLA_Isolation_level_descriptor,
+        new java.lang.String[] { "IsolationLevel", });
     internal_static_context_Constraint_descriptor =
-      getDescriptor().getMessageTypes().get(45);
+      getDescriptor().getMessageTypes().get(65);
     internal_static_context_Constraint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
+        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
     internal_static_context_TeraFlowController_descriptor =
-      getDescriptor().getMessageTypes().get(46);
+      getDescriptor().getMessageTypes().get(66);
     internal_static_context_TeraFlowController_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TeraFlowController_descriptor,
         new java.lang.String[] { "ContextId", "IpAddress", "Port", });
     internal_static_context_AuthenticationResult_descriptor =
-      getDescriptor().getMessageTypes().get(47);
+      getDescriptor().getMessageTypes().get(67);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
         new java.lang.String[] { "ContextId", "Authenticated", });
+    acl.Acl.getDescriptor();
     kpi_sample_types.KpiSampleTypes.getDescriptor();
   }
 
diff --git a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
index 1ef1f0c029d1d5916eaf5ffc4f185c048a40b5a3..5d63d4aa45e578957a7a3414c33491cebe98acbe 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -72,31 +72,34 @@ public final class Monitoring {
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
     boolean hasServiceId();
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
     context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      */
     context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
    * Protobuf type {@code monitoring.KpiDescriptor}
@@ -196,6 +199,19 @@ public final class Monitoring {
 
               break;
             }
+            case 50: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -340,10 +356,6 @@ public final class Monitoring {
     public static final int SERVICE_ID_FIELD_NUMBER = 5;
     private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
@@ -352,10 +364,6 @@ public final class Monitoring {
       return serviceId_ != null;
     }
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
@@ -364,10 +372,6 @@ public final class Monitoring {
       return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      */
     @java.lang.Override
@@ -375,6 +379,32 @@ public final class Monitoring {
       return getServiceId();
     }
 
+    public static final int SLICE_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -404,6 +434,9 @@ public final class Monitoring {
       if (serviceId_ != null) {
         output.writeMessage(5, getServiceId());
       }
+      if (sliceId_ != null) {
+        output.writeMessage(6, getSliceId());
+      }
       unknownFields.writeTo(output);
     }
 
@@ -432,6 +465,10 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(5, getServiceId());
       }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getSliceId());
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -465,6 +502,11 @@ public final class Monitoring {
         if (!getServiceId()
             .equals(other.getServiceId())) return false;
       }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -492,6 +534,10 @@ public final class Monitoring {
         hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
         hash = (53 * hash) + getServiceId().hashCode();
       }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -647,6 +693,12 @@ public final class Monitoring {
           serviceId_ = null;
           serviceIdBuilder_ = null;
         }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
         return this;
       }
 
@@ -690,6 +742,11 @@ public final class Monitoring {
         } else {
           result.serviceId_ = serviceIdBuilder_.build();
         }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -754,6 +811,9 @@ public final class Monitoring {
         if (other.hasServiceId()) {
           mergeServiceId(other.getServiceId());
         }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -1155,10 +1215,6 @@ public final class Monitoring {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        * @return Whether the serviceId field is set.
        */
@@ -1166,10 +1222,6 @@ public final class Monitoring {
         return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        * @return The serviceId.
        */
@@ -1181,10 +1233,6 @@ public final class Monitoring {
         }
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
@@ -1201,10 +1249,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder setServiceId(
@@ -1219,10 +1263,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
@@ -1241,10 +1281,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder clearServiceId() {
@@ -1259,10 +1295,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
@@ -1271,10 +1303,6 @@ public final class Monitoring {
         return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
@@ -1286,10 +1314,6 @@ public final class Monitoring {
         }
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
@@ -1305,6 +1329,125 @@ public final class Monitoring {
         }
         return serviceIdBuilder_;
       }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -1358,57 +1501,140 @@ public final class Monitoring {
 
   }
 
-  public interface MonitorKpiRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
+  public interface BundleKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.BundleKpiDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
-    boolean hasKpiId();
+    java.lang.String getKpiDescription();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdListList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    int getKpiIdListCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index);
 
     /**
-     * <code>float sampling_duration_s = 2;</code>
-     * @return The samplingDurationS.
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
      */
-    float getSamplingDurationS();
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>float sampling_interval_s = 3;</code>
-     * @return The samplingIntervalS.
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
      */
-    float getSamplingIntervalS();
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
+     */
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.MonitorKpiRequest}
+   * Protobuf type {@code monitoring.BundleKpiDescriptor}
    */
-  public static final class MonitorKpiRequest extends
+  public static final class BundleKpiDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
-      MonitorKpiRequestOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.BundleKpiDescriptor)
+      BundleKpiDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use MonitorKpiRequest.newBuilder() to construct.
-    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use BundleKpiDescriptor.newBuilder() to construct.
+    private BundleKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private MonitorKpiRequest() {
+    private BundleKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new MonitorKpiRequest();
+      return new BundleKpiDescriptor();
     }
 
     @java.lang.Override
@@ -1416,7 +1642,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private MonitorKpiRequest(
+    private BundleKpiDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -1424,6 +1650,7 @@ public final class Monitoring {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -1435,26 +1662,76 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              kpiDescription_ = s;
               break;
             }
-            case 21: {
-
-              samplingDurationS_ = input.readFloat();
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiIdList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
               break;
             }
-            case 29: {
+            case 24: {
+              int rawValue = input.readEnum();
+
+              kpiSampleType_ = rawValue;
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
 
-              samplingIntervalS_ = input.readFloat();
               break;
             }
             default: {
@@ -1472,69 +1749,225 @@ public final class Monitoring {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+              monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    public java.lang.String getKpiDescription() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        kpiDescription_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    public com.google.protobuf.ByteString
+        getKpiDescriptionBytes() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        kpiDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
     }
 
-    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 2;
-    private float samplingDurationS_;
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 3;
+    private int kpiSampleType_;
     /**
-     * <code>float sampling_duration_s = 2;</code>
-     * @return The samplingDurationS.
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    @java.lang.Override public int getKpiSampleTypeValue() {
+      return kpiSampleType_;
+    }
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+      @SuppressWarnings("deprecation")
+      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public float getSamplingDurationS() {
-      return samplingDurationS_;
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
     }
 
-    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 3;
-    private float samplingIntervalS_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>float sampling_interval_s = 3;</code>
-     * @return The samplingIntervalS.
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public float getSamplingIntervalS() {
-      return samplingIntervalS_;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -1551,14 +1984,26 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
       }
-      if (samplingDurationS_ != 0F) {
-        output.writeFloat(2, samplingDurationS_);
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(2, kpiIdList_.get(i));
       }
-      if (samplingIntervalS_ != 0F) {
-        output.writeFloat(3, samplingIntervalS_);
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(3, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(7, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -1569,17 +2014,32 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(2, kpiIdList_.get(i));
       }
-      if (samplingDurationS_ != 0F) {
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, samplingDurationS_);
+          .computeEnumSize(3, kpiSampleType_);
       }
-      if (samplingIntervalS_ != 0F) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingIntervalS_);
+          .computeMessageSize(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -1591,22 +2051,36 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
+      if (!(obj instanceof monitoring.Monitoring.BundleKpiDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
+      monitoring.Monitoring.BundleKpiDescriptor other = (monitoring.Monitoring.BundleKpiDescriptor) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
+      if (kpiSampleType_ != other.kpiSampleType_) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
-      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingDurationS())) return false;
-      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
-          != java.lang.Float.floatToIntBits(
-              other.getSamplingIntervalS())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -1618,84 +2092,98 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
+      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
+      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + kpiSampleType_;
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
-      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingDurationS());
-      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getSamplingIntervalS());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -1708,7 +2196,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.BundleKpiDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -1724,26 +2212,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.MonitorKpiRequest}
+     * Protobuf type {@code monitoring.BundleKpiDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
-        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.BundleKpiDescriptor)
+        monitoring.Monitoring.BundleKpiDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+                monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
+      // Construct using monitoring.Monitoring.BundleKpiDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1756,38 +2244,63 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+        kpiDescription_ = "";
+
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiIdListBuilder_.clear();
         }
-        samplingDurationS_ = 0F;
-
-        samplingIntervalS_ = 0F;
+        kpiSampleType_ = 0;
 
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
+      public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest build() {
-        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
+      public monitoring.Monitoring.BundleKpiDescriptor build() {
+        monitoring.Monitoring.BundleKpiDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -1795,15 +2308,40 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
-        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      public monitoring.Monitoring.BundleKpiDescriptor buildPartial() {
+        monitoring.Monitoring.BundleKpiDescriptor result = new monitoring.Monitoring.BundleKpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
         } else {
-          result.kpiId_ = kpiIdBuilder_.build();
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
+        result.kpiSampleType_ = kpiSampleType_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
-        result.samplingDurationS_ = samplingDurationS_;
-        result.samplingIntervalS_ = samplingIntervalS_;
         onBuilt();
         return result;
       }
@@ -1842,24 +2380,60 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
-          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
+        if (other instanceof monitoring.Monitoring.BundleKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.BundleKpiDescriptor)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
-        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      public Builder mergeFrom(monitoring.Monitoring.BundleKpiDescriptor other) {
+        if (other == monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()) return this;
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
         }
-        if (other.getSamplingDurationS() != 0F) {
-          setSamplingDurationS(other.getSamplingDurationS());
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
         }
-        if (other.getSamplingIntervalS() != 0F) {
-          setSamplingIntervalS(other.getSamplingIntervalS());
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -1876,11 +2450,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
+        monitoring.Monitoring.BundleKpiDescriptor parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.BundleKpiDescriptor) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -1889,186 +2463,13654 @@ public final class Monitoring {
         }
         return this;
       }
+      private int bitField0_;
 
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>string kpi_description = 1;</code>
+       * @return The kpiDescription.
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      public java.lang.String getKpiDescription() {
+        java.lang.Object ref = kpiDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          kpiDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>string kpi_description = 1;</code>
+       * @return The bytes for kpiDescription.
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+      public com.google.protobuf.ByteString
+          getKpiDescriptionBytes() {
+        java.lang.Object ref = kpiDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          kpiDescription_ = b;
+          return b;
         } else {
-          return kpiIdBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
+      public Builder setKpiDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        } else {
+          return kpiIdListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
+        } else {
+          return kpiIdListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiIdList_ = null;
+        }
+        return kpiIdListBuilder_;
+      }
+
+      private int kpiSampleType_ = 0;
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
+       */
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return The kpiSampleType.
+       */
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.BundleKpiDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.BundleKpiDescriptor)
+    private static final monitoring.Monitoring.BundleKpiDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.BundleKpiDescriptor();
+    }
+
+    public static monitoring.Monitoring.BundleKpiDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<BundleKpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<BundleKpiDescriptor>() {
+      @java.lang.Override
+      public BundleKpiDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new BundleKpiDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<BundleKpiDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<BundleKpiDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EditedKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.EditedKpiDescriptor)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The kpiDescription.
+     */
+    java.lang.String getKpiDescription();
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdListList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiIdList(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    int getKpiIdListCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index);
+
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
+
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return Whether the endpointId field is set.
+     */
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.EditedKpiDescriptor}
+   */
+  public static final class EditedKpiDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.EditedKpiDescriptor)
+      EditedKpiDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EditedKpiDescriptor.newBuilder() to construct.
+    private EditedKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EditedKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EditedKpiDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EditedKpiDescriptor(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              kpiDescription_ = s;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiIdList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+
+              kpiSampleType_ = rawValue;
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
+              }
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 2;
+    private volatile java.lang.Object kpiDescription_;
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The kpiDescription.
+     */
+    @java.lang.Override
+    public java.lang.String getKpiDescription() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        kpiDescription_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getKpiDescriptionBytes() {
+      java.lang.Object ref = kpiDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        kpiDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int KPI_ID_LIST_FIELD_NUMBER = 3;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
+    }
+
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 4;
+    private int kpiSampleType_;
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    @java.lang.Override public int getKpiSampleTypeValue() {
+      return kpiSampleType_;
+    }
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+     * @return The kpiSampleType.
+     */
+    @java.lang.Override public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+      @SuppressWarnings("deprecation")
+      kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+      return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     * @return The deviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(3, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(4, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(5, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(6, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(7, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(8, getSliceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, kpiDescription_);
+      }
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, kpiIdList_.get(i));
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getSliceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.EditedKpiDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.EditedKpiDescriptor other = (monitoring.Monitoring.EditedKpiDescriptor) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) return false;
+      if (!getKpiIdListList()
+          .equals(other.getKpiIdListList())) return false;
+      if (kpiSampleType_ != other.kpiSampleType_) return false;
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().hashCode();
+      if (getKpiIdListCount() > 0) {
+        hash = (37 * hash) + KPI_ID_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdListList().hashCode();
+      }
+      hash = (37 * hash) + KPI_SAMPLE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + kpiSampleType_;
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.EditedKpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.EditedKpiDescriptor prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.EditedKpiDescriptor}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.EditedKpiDescriptor)
+        monitoring.Monitoring.EditedKpiDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.EditedKpiDescriptor.class, monitoring.Monitoring.EditedKpiDescriptor.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.EditedKpiDescriptor.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiIdListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        kpiDescription_ = "";
+
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        kpiSampleType_ = 0;
+
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_EditedKpiDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor build() {
+        monitoring.Monitoring.EditedKpiDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.EditedKpiDescriptor buildPartial() {
+        monitoring.Monitoring.EditedKpiDescriptor result = new monitoring.Monitoring.EditedKpiDescriptor(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.kpiDescription_ = kpiDescription_;
+        if (kpiIdListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiIdList_ = java.util.Collections.unmodifiableList(kpiIdList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiIdList_ = kpiIdList_;
+        } else {
+          result.kpiIdList_ = kpiIdListBuilder_.build();
+        }
+        result.kpiSampleType_ = kpiSampleType_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.EditedKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.EditedKpiDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.EditedKpiDescriptor other) {
+        if (other == monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
+        }
+        if (kpiIdListBuilder_ == null) {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdList_.isEmpty()) {
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdListIsMutable();
+              kpiIdList_.addAll(other.kpiIdList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiIdList_.isEmpty()) {
+            if (kpiIdListBuilder_.isEmpty()) {
+              kpiIdListBuilder_.dispose();
+              kpiIdListBuilder_ = null;
+              kpiIdList_ = other.kpiIdList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdListFieldBuilder() : null;
+            } else {
+              kpiIdListBuilder_.addAllMessages(other.kpiIdList_);
+            }
+          }
+        }
+        if (other.kpiSampleType_ != 0) {
+          setKpiSampleTypeValue(other.getKpiSampleTypeValue());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.EditedKpiDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.EditedKpiDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private java.lang.Object kpiDescription_ = "";
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return The kpiDescription.
+       */
+      public java.lang.String getKpiDescription() {
+        java.lang.Object ref = kpiDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          kpiDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return The bytes for kpiDescription.
+       */
+      public com.google.protobuf.ByteString
+          getKpiDescriptionBytes() {
+        java.lang.Object ref = kpiDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          kpiDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 2;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        kpiDescription_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiIdList_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiIdList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+        if (kpiIdListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        } else {
+          return kpiIdListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);
+        } else {
+          return kpiIdListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder setKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addKpiIdList(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder addAllKpiIdList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiIdList_);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder clearKpiIdList() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public Builder removeKpiIdList(int index) {
+        if (kpiIdListBuilder_ == null) {
+          ensureKpiIdListIsMutable();
+          kpiIdList_.remove(index);
+          onChanged();
+        } else {
+          kpiIdListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+          int index) {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.get(index);  } else {
+          return kpiIdListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdListOrBuilderList() {
+        if (kpiIdListBuilder_ != null) {
+          return kpiIdListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder() {
+        return getKpiIdListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdListBuilder(
+          int index) {
+        return getKpiIdListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 3;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdListBuilderList() {
+        return getKpiIdListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdListFieldBuilder() {
+        if (kpiIdListBuilder_ == null) {
+          kpiIdListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiIdList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiIdList_ = null;
+        }
+        return kpiIdListBuilder_;
+      }
+
+      private int kpiSampleType_ = 0;
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The enum numeric value on the wire for kpiSampleType.
+       */
+      @java.lang.Override public int getKpiSampleTypeValue() {
+        return kpiSampleType_;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The enum numeric value on the wire for kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypeValue(int value) {
+        
+        kpiSampleType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return The kpiSampleType.
+       */
+      @java.lang.Override
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType() {
+        @SuppressWarnings("deprecation")
+        kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(kpiSampleType_);
+        return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @param value The kpiSampleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleType(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        kpiSampleType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiSampleType() {
+        
+        kpiSampleType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        } else {
+          return deviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
+          } else {
+            deviceId_ = value;
+          }
+          onChanged();
+        } else {
+          deviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId device_id = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
+                  getParentForChildren(),
+                  isClean());
+          deviceId_ = null;
+        }
+        return deviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 6;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 8;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.EditedKpiDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.EditedKpiDescriptor)
+    private static final monitoring.Monitoring.EditedKpiDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.EditedKpiDescriptor();
+    }
+
+    public static monitoring.Monitoring.EditedKpiDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<EditedKpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<EditedKpiDescriptor>() {
+      @java.lang.Override
+      public EditedKpiDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EditedKpiDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<EditedKpiDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EditedKpiDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.EditedKpiDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface MonitorKpiRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    float getMonitoringWindowS();
+
+    /**
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    float getSamplingRateS();
+  }
+  /**
+   * Protobuf type {@code monitoring.MonitorKpiRequest}
+   */
+  public static final class MonitorKpiRequest extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
+      MonitorKpiRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use MonitorKpiRequest.newBuilder() to construct.
+    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private MonitorKpiRequest() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new MonitorKpiRequest();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private MonitorKpiRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 21: {
+
+              monitoringWindowS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingRateS_ = input.readFloat();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    @java.lang.Override
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
+    }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
+    /**
+     * <pre>
+     * Pending add field to reflect Available Device Protocols
+     * </pre>
+     *
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    @java.lang.Override
+    public float getSamplingRateS() {
+      return samplingRateS_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingRateS_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.MonitorKpiRequest}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
+        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.MonitorKpiRequest build() {
+        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
+        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
+          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.MonitorKpiRequest other) {
+        if (other == monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
+        }
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private float monitoringWindowS_ ;
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
+       */
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingRateS_ ;
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Pending add field to reflect Available Device Protocols
+       * </pre>
+       *
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
+    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
+    }
+
+    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<MonitorKpiRequest>
+        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
+      @java.lang.Override
+      public MonitorKpiRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new MonitorKpiRequest(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiQueryOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiQuery)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiId> 
+        getKpiIdList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiId getKpiId(int index);
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    int getKpiIdCount();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index);
+
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    float getMonitoringWindowS();
+
+    /**
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    float getSamplingRateS();
+
+    /**
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
+     */
+    int getLastNSamples();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The startDate.
+     */
+    java.lang.String getStartDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The bytes for startDate.
+     */
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The endDate.
+     */
+    java.lang.String getEndDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiQuery}
+   */
+  public static final class KpiQuery extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiQuery)
+      KpiQueryOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiQuery.newBuilder() to construct.
+    private KpiQuery(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiQuery() {
+      kpiId_ = java.util.Collections.emptyList();
+      startDate_ = "";
+      endDate_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiQuery();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiQuery(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiId_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 21: {
+
+              monitoringWindowS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingRateS_ = input.readFloat();
+              break;
+            }
+            case 32: {
+
+              lastNSamples_ = input.readUInt32();
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endDate_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiId_;
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+      return kpiId_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdOrBuilderList() {
+      return kpiId_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdCount() {
+      return kpiId_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId(int index) {
+      return kpiId_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index) {
+      return kpiId_.get(index);
+    }
+
+    public static final int MONITORING_WINDOW_S_FIELD_NUMBER = 2;
+    private float monitoringWindowS_;
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    @java.lang.Override
+    public float getMonitoringWindowS() {
+      return monitoringWindowS_;
+    }
+
+    public static final int SAMPLING_RATE_S_FIELD_NUMBER = 3;
+    private float samplingRateS_;
+    /**
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    @java.lang.Override
+    public float getSamplingRateS() {
+      return samplingRateS_;
+    }
+
+    public static final int LAST_N_SAMPLES_FIELD_NUMBER = 4;
+    private int lastNSamples_;
+    /**
+     * <pre>
+     * used when you want something like "get the last N many samples
+     * </pre>
+     *
+     * <code>uint32 last_n_samples = 4;</code>
+     * @return The lastNSamples.
+     */
+    @java.lang.Override
+    public int getLastNSamples() {
+      return lastNSamples_;
+    }
+
+    public static final int START_DATE_FIELD_NUMBER = 5;
+    private volatile java.lang.Object startDate_;
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The startDate.
+     */
+    @java.lang.Override
+    public java.lang.String getStartDate() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        startDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 5;</code>
+     * @return The bytes for startDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getStartDateBytes() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        startDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int END_DATE_FIELD_NUMBER = 6;
+    private volatile java.lang.Object endDate_;
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The endDate.
+     */
+    @java.lang.Override
+    public java.lang.String getEndDate() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 6;</code>
+     * @return The bytes for endDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndDateBytes() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < kpiId_.size(); i++) {
+        output.writeMessage(1, kpiId_.get(i));
+      }
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        output.writeUInt32(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, endDate_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < kpiId_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, kpiId_.get(i));
+      }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, endDate_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiQuery)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiQuery other = (monitoring.Monitoring.KpiQuery) obj;
+
+      if (!getKpiIdList()
+          .equals(other.getKpiIdList())) return false;
+      if (java.lang.Float.floatToIntBits(getMonitoringWindowS())
+          != java.lang.Float.floatToIntBits(
+              other.getMonitoringWindowS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingRateS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingRateS())) return false;
+      if (getLastNSamples()
+          != other.getLastNSamples()) return false;
+      if (!getStartDate()
+          .equals(other.getStartDate())) return false;
+      if (!getEndDate()
+          .equals(other.getEndDate())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getKpiIdCount() > 0) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiIdList().hashCode();
+      }
+      hash = (37 * hash) + MONITORING_WINDOW_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getMonitoringWindowS());
+      hash = (37 * hash) + SAMPLING_RATE_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingRateS());
+      hash = (37 * hash) + LAST_N_SAMPLES_FIELD_NUMBER;
+      hash = (53 * hash) + getLastNSamples();
+      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getStartDate().hashCode();
+      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndDate().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiQuery parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiQuery parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiQuery prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiQuery}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiQuery)
+        monitoring.Monitoring.KpiQueryOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiQuery.class, monitoring.Monitoring.KpiQuery.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiIdFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiIdBuilder_.clear();
+        }
+        monitoringWindowS_ = 0F;
+
+        samplingRateS_ = 0F;
+
+        lastNSamples_ = 0;
+
+        startDate_ = "";
+
+        endDate_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiQuery_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiQuery.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiQuery build() {
+        monitoring.Monitoring.KpiQuery result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiQuery buildPartial() {
+        monitoring.Monitoring.KpiQuery result = new monitoring.Monitoring.KpiQuery(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiIdBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.monitoringWindowS_ = monitoringWindowS_;
+        result.samplingRateS_ = samplingRateS_;
+        result.lastNSamples_ = lastNSamples_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiQuery) {
+          return mergeFrom((monitoring.Monitoring.KpiQuery)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiQuery other) {
+        if (other == monitoring.Monitoring.KpiQuery.getDefaultInstance()) return this;
+        if (kpiIdBuilder_ == null) {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiId_.isEmpty()) {
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiIdIsMutable();
+              kpiId_.addAll(other.kpiId_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiId_.isEmpty()) {
+            if (kpiIdBuilder_.isEmpty()) {
+              kpiIdBuilder_.dispose();
+              kpiIdBuilder_ = null;
+              kpiId_ = other.kpiId_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiIdBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiIdFieldBuilder() : null;
+            } else {
+              kpiIdBuilder_.addAllMessages(other.kpiId_);
+            }
+          }
+        }
+        if (other.getMonitoringWindowS() != 0F) {
+          setMonitoringWindowS(other.getMonitoringWindowS());
+        }
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
+        if (other.getLastNSamples() != 0) {
+          setLastNSamples(other.getLastNSamples());
+        }
+        if (!other.getStartDate().isEmpty()) {
+          startDate_ = other.startDate_;
+          onChanged();
+        }
+        if (!other.getEndDate().isEmpty()) {
+          endDate_ = other.endDate_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiQuery parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiQuery) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiId> kpiId_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiIdIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiId_ = new java.util.ArrayList<monitoring.Monitoring.KpiId>(kpiId_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId> getKpiIdList() {
+        if (kpiIdBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        } else {
+          return kpiIdBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public int getKpiIdCount() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.size();
+        } else {
+          return kpiIdBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId getKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);
+        } else {
+          return kpiIdBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, value);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addKpiId(
+          int index, monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiIdBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder addAllKpiId(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiId> values) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiId_);
+          onChanged();
+        } else {
+          kpiIdBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiIdBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder removeKpiId(int index) {
+        if (kpiIdBuilder_ == null) {
+          ensureKpiIdIsMutable();
+          kpiId_.remove(index);
+          onChanged();
+        } else {
+          kpiIdBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+          int index) {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.get(index);  } else {
+          return kpiIdBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+           getKpiIdOrBuilderList() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiId_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder() {
+        return getKpiIdFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder addKpiIdBuilder(
+          int index) {
+        return getKpiIdFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiId.Builder> 
+           getKpiIdBuilderList() {
+        return getKpiIdFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  kpiId_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private float monitoringWindowS_ ;
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return The monitoringWindowS.
+       */
+      @java.lang.Override
+      public float getMonitoringWindowS() {
+        return monitoringWindowS_;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @param value The monitoringWindowS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMonitoringWindowS(float value) {
+        
+        monitoringWindowS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingRateS_ ;
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @param value The samplingRateS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingRateS(float value) {
+        
+        samplingRateS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingRateS() {
+        
+        samplingRateS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private int lastNSamples_ ;
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return The lastNSamples.
+       */
+      @java.lang.Override
+      public int getLastNSamples() {
+        return lastNSamples_;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @param value The lastNSamples to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLastNSamples(int value) {
+        
+        lastNSamples_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the last N many samples
+       * </pre>
+       *
+       * <code>uint32 last_n_samples = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLastNSamples() {
+        
+        lastNSamples_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object startDate_ = "";
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return The startDate.
+       */
+      public java.lang.String getStartDate() {
+        java.lang.Object ref = startDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          startDate_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return The bytes for startDate.
+       */
+      public com.google.protobuf.ByteString
+          getStartDateBytes() {
+        java.lang.Object ref = startDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          startDate_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @param value The startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        startDate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearStartDate() {
+        
+        startDate_ = getDefaultInstance().getStartDate();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 5;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object endDate_ = "";
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return The endDate.
+       */
+      public java.lang.String getEndDate() {
+        java.lang.Object ref = endDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endDate_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return The bytes for endDate.
+       */
+      public com.google.protobuf.ByteString
+          getEndDateBytes() {
+        java.lang.Object ref = endDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endDate_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @param value The endDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndDate() {
+        
+        endDate_ = getDefaultInstance().getEndDate();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 6;</code>
+       * @param value The bytes for endDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiQuery)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiQuery)
+    private static final monitoring.Monitoring.KpiQuery DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiQuery();
+    }
+
+    public static monitoring.Monitoring.KpiQuery getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiQuery>
+        PARSER = new com.google.protobuf.AbstractParser<KpiQuery>() {
+      @java.lang.Override
+      public KpiQuery parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiQuery(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiQuery> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiQuery> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiQuery getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    context.ContextOuterClass.Uuid getKpiId();
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiId}
+   */
+  public static final class KpiId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
+      KpiIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiId.newBuilder() to construct.
+    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiId(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid kpiId_;
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getKpiId() {
+      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.context.Uuid kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
+        monitoring.Monitoring.KpiIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId build() {
+        monitoring.Monitoring.KpiId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId buildPartial() {
+        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiId) {
+          return mergeFrom((monitoring.Monitoring.KpiId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
+        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public context.ContextOuterClass.Uuid getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
+    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+    }
+
+    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiId>
+        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
+      @java.lang.Override
+      public KpiId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>string timestamp = 2;</code>
+     * @return The timestamp.
+     */
+    java.lang.String getTimestamp();
+    /**
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
+     */
+    com.google.protobuf.ByteString
+        getTimestampBytes();
+
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    boolean hasKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.Kpi}
+   */
+  public static final class Kpi extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
+      KpiOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Kpi.newBuilder() to construct.
+    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Kpi() {
+      timestamp_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Kpi();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Kpi(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              timestamp_ = s;
+              break;
+            }
+            case 26: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiValue_ != null) {
+                subBuilder = kpiValue_.toBuilder();
+              }
+              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValue_);
+                kpiValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private volatile java.lang.Object timestamp_;
+    /**
+     * <code>string timestamp = 2;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public java.lang.String getTimestamp() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        timestamp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTimestampBytes() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        timestamp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int KPI_VALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+      return getKpiValue();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
+      }
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
+      }
+      if (kpiValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getKpiValue());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
+      if (hasKpiValue() != other.hasKpiValue()) return false;
+      if (hasKpiValue()) {
+        if (!getKpiValue()
+            .equals(other.getKpiValue())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.Kpi parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.Kpi parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.Kpi}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
+        monitoring.Monitoring.KpiOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.Kpi.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        timestamp_ = "";
+
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.Kpi build() {
+        monitoring.Monitoring.Kpi result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.Kpi buildPartial() {
+        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.timestamp_ = timestamp_;
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.Kpi) {
+          return mergeFrom((monitoring.Monitoring.Kpi)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
+        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.Kpi parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
+            kpiId_ = value;
+          }
+          onChanged();
+        } else {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private java.lang.Object timestamp_ = "";
+      /**
+       * <code>string timestamp = 2;</code>
+       * @return The timestamp.
+       */
+      public java.lang.String getTimestamp() {
+        java.lang.Object ref = timestamp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          timestamp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 2;</code>
+       * @return The bytes for timestamp.
+       */
+      public com.google.protobuf.ByteString
+          getTimestampBytes() {
+        java.lang.Object ref = timestamp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          timestamp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 2;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string timestamp = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string timestamp = 2;</code>
+       * @param value The bytes for timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestampBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return Whether the kpiValue field is set.
+       */
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return The kpiValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValue_ = value;
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder setKpiValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (kpiValue_ != null) {
+            kpiValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+          onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+        if (kpiValueBuilder_ != null) {
+          return kpiValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiValueFieldBuilder() {
+        if (kpiValueBuilder_ == null) {
+          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValue_ = null;
+        }
+        return kpiValueBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
+    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+    }
+
+    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Kpi>
+        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
+      @java.lang.Override
+      public Kpi parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Kpi(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Kpi> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Kpi> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiValueRangeOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
+     */
+    boolean hasKpiMinValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiMinValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
+     */
+    boolean hasKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiValueRange}
+   */
+  public static final class KpiValueRange extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
+      KpiValueRangeOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiValueRange.newBuilder() to construct.
+    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiValueRange() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiValueRange();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiValueRange(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMinValue_ != null) {
+                subBuilder = kpiMinValue_.toBuilder();
+              }
+              kpiMinValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiMinValue_);
+                kpiMinValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiMaxValue_ != null) {
+                subBuilder = kpiMaxValue_.toBuilder();
+              }
+              kpiMaxValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiMaxValue_);
+                kpiMaxValue_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+    }
+
+    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiValue kpiMinValue_;
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiMinValue() {
+      return kpiMinValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiMinValue() {
+      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+      return getKpiMinValue();
+    }
+
+    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiValue kpiMaxValue_;
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiMaxValue() {
+      return kpiMaxValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+      return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+      return getKpiMaxValue();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiMinValue_ != null) {
+        output.writeMessage(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        output.writeMessage(2, getKpiMaxValue());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiMinValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiMaxValue());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiValueRange)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) obj;
+
+      if (hasKpiMinValue() != other.hasKpiMinValue()) return false;
+      if (hasKpiMinValue()) {
+        if (!getKpiMinValue()
+            .equals(other.getKpiMinValue())) return false;
+      }
+      if (hasKpiMaxValue() != other.hasKpiMaxValue()) return false;
+      if (hasKpiMaxValue()) {
+        if (!getKpiMaxValue()
+            .equals(other.getKpiMaxValue())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiMinValue()) {
+        hash = (37 * hash) + KPIMINVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMinValue().hashCode();
+      }
+      if (hasKpiMaxValue()) {
+        hash = (37 * hash) + KPIMAXVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiMaxValue().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiValueRange prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiValueRange}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValueRange)
+        monitoring.Monitoring.KpiValueRangeOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiValueRange.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
+        } else {
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+        } else {
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValueRange build() {
+        monitoring.Monitoring.KpiValueRange result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValueRange buildPartial() {
+        monitoring.Monitoring.KpiValueRange result = new monitoring.Monitoring.KpiValueRange(this);
+        if (kpiMinValueBuilder_ == null) {
+          result.kpiMinValue_ = kpiMinValue_;
+        } else {
+          result.kpiMinValue_ = kpiMinValueBuilder_.build();
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          result.kpiMaxValue_ = kpiMaxValue_;
+        } else {
+          result.kpiMaxValue_ = kpiMaxValueBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiValueRange) {
+          return mergeFrom((monitoring.Monitoring.KpiValueRange)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiValueRange other) {
+        if (other == monitoring.Monitoring.KpiValueRange.getDefaultInstance()) return this;
+        if (other.hasKpiMinValue()) {
+          mergeKpiMinValue(other.getKpiMinValue());
+        }
+        if (other.hasKpiMaxValue()) {
+          mergeKpiMaxValue(other.getKpiMaxValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiValueRange parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiMinValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMinValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return Whether the kpiMinValue field is set.
+       */
+      public boolean hasKpiMinValue() {
+        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return The kpiMinValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+        } else {
+          return kpiMinValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiMinValue_ = value;
+          onChanged();
+        } else {
+          kpiMinValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder setKpiMinValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiMinValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder mergeKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
+          if (kpiMinValue_ != null) {
+            kpiMinValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMinValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiMinValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiMinValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder clearKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
+          onChanged();
+        } else {
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
+        
+        onChanged();
+        return getKpiMinValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+        if (kpiMinValueBuilder_ != null) {
+          return kpiMinValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiMinValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMinValueFieldBuilder() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMinValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiMinValue_ = null;
+        }
+        return kpiMinValueBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValue kpiMaxValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiMaxValueBuilder_;
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return Whether the kpiMaxValue field is set.
+       */
+      public boolean hasKpiMaxValue() {
+        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return The kpiMaxValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+        } else {
+          return kpiMaxValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiMaxValue_ = value;
+          onChanged();
+        } else {
+          kpiMaxValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder setKpiMaxValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiMaxValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder mergeKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (kpiMaxValue_ != null) {
+            kpiMaxValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiMaxValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiMaxValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiMaxValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder clearKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+          onChanged();
+        } else {
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
+        
+        onChanged();
+        return getKpiMaxValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+        if (kpiMaxValueBuilder_ != null) {
+          return kpiMaxValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiMaxValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiMaxValueFieldBuilder() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiMaxValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiMaxValue_ = null;
+        }
+        return kpiMaxValueBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValueRange)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
+    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
+    }
+
+    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiValueRange>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
+      @java.lang.Override
+      public KpiValueRange parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiValueRange(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiValueRange> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiValueOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return Whether the intVal field is set.
+     */
+    boolean hasIntVal();
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
+     */
+    int getIntVal();
+
+    /**
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
+     */
+    boolean hasFloatVal();
+    /**
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
+     */
+    float getFloatVal();
+
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return Whether the stringVal field is set.
+     */
+    boolean hasStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    java.lang.String getStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    com.google.protobuf.ByteString
+        getStringValBytes();
+
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
+     */
+    boolean hasBoolVal();
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
+     */
+    boolean getBoolVal();
+
+    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiValue}
+   */
+  public static final class KpiValue extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
+      KpiValueOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiValue.newBuilder() to construct.
+    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiValue() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiValue();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiValue(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+              valueCase_ = 1;
+              value_ = input.readUInt32();
+              break;
+            }
+            case 21: {
+              valueCase_ = 2;
+              value_ = input.readFloat();
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+              valueCase_ = 3;
+              value_ = s;
+              break;
+            }
+            case 32: {
+              valueCase_ = 4;
+              value_ = input.readBool();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+    }
+
+    private int valueCase_ = 0;
+    private java.lang.Object value_;
+    public enum ValueCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      INTVAL(1),
+      FLOATVAL(2),
+      STRINGVAL(3),
+      BOOLVAL(4),
+      VALUE_NOT_SET(0);
+      private final int value;
+      private ValueCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ValueCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ValueCase forNumber(int value) {
+        switch (value) {
+          case 1: return INTVAL;
+          case 2: return FLOATVAL;
+          case 3: return STRINGVAL;
+          case 4: return BOOLVAL;
+          case 0: return VALUE_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ValueCase
+    getValueCase() {
+      return ValueCase.forNumber(
+          valueCase_);
+    }
+
+    public static final int INTVAL_FIELD_NUMBER = 1;
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return Whether the intVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasIntVal() {
+      return valueCase_ == 1;
+    }
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
+     */
+    @java.lang.Override
+    public int getIntVal() {
+      if (valueCase_ == 1) {
+        return (java.lang.Integer) value_;
+      }
+      return 0;
+    }
+
+    public static final int FLOATVAL_FIELD_NUMBER = 2;
+    /**
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasFloatVal() {
+      return valueCase_ == 2;
+    }
+    /**
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
+     */
+    @java.lang.Override
+    public float getFloatVal() {
+      if (valueCase_ == 2) {
+        return (java.lang.Float) value_;
+      }
+      return 0F;
+    }
+
+    public static final int STRINGVAL_FIELD_NUMBER = 3;
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return Whether the stringVal field is set.
+     */
+    public boolean hasStringVal() {
+      return valueCase_ == 3;
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    public java.lang.String getStringVal() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 3) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (valueCase_ == 3) {
+          value_ = s;
+        }
+        return s;
+      }
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    public com.google.protobuf.ByteString
+        getStringValBytes() {
+      java.lang.Object ref = "";
+      if (valueCase_ == 3) {
+        ref = value_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (valueCase_ == 3) {
+          value_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int BOOLVAL_FIELD_NUMBER = 4;
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasBoolVal() {
+      return valueCase_ == 4;
+    }
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
+     */
+    @java.lang.Override
+    public boolean getBoolVal() {
+      if (valueCase_ == 4) {
+        return (java.lang.Boolean) value_;
+      }
+      return false;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (valueCase_ == 1) {
+        output.writeUInt32(
+            1, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 2) {
+        output.writeFloat(
+            2, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 3) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
+      }
+      if (valueCase_ == 4) {
+        output.writeBool(
+            4, (boolean)((java.lang.Boolean) value_));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (valueCase_ == 1) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(
+              1, (int)((java.lang.Integer) value_));
+      }
+      if (valueCase_ == 2) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(
+              2, (float)((java.lang.Float) value_));
+      }
+      if (valueCase_ == 3) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
+      }
+      if (valueCase_ == 4) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(
+              4, (boolean)((java.lang.Boolean) value_));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
+
+      if (!getValueCase().equals(other.getValueCase())) return false;
+      switch (valueCase_) {
+        case 1:
+          if (getIntVal()
+              != other.getIntVal()) return false;
+          break;
+        case 2:
+          if (java.lang.Float.floatToIntBits(getFloatVal())
+              != java.lang.Float.floatToIntBits(
+                  other.getFloatVal())) return false;
+          break;
+        case 3:
+          if (!getStringVal()
+              .equals(other.getStringVal())) return false;
+          break;
+        case 4:
+          if (getBoolVal()
+              != other.getBoolVal()) return false;
+          break;
+        case 0:
+        default:
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      switch (valueCase_) {
+        case 1:
+          hash = (37 * hash) + INTVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getIntVal();
+          break;
+        case 2:
+          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
+          hash = (53 * hash) + java.lang.Float.floatToIntBits(
+              getFloatVal());
+          break;
+        case 3:
+          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
+          hash = (53 * hash) + getStringVal().hashCode();
+          break;
+        case 4:
+          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
+          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+              getBoolVal());
+          break;
+        case 0:
+        default:
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiValue}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
+        monitoring.Monitoring.KpiValueOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        valueCase_ = 0;
+        value_ = null;
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValue.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValue build() {
+        monitoring.Monitoring.KpiValue result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValue buildPartial() {
+        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
+        if (valueCase_ == 1) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 2) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 3) {
+          result.value_ = value_;
+        }
+        if (valueCase_ == 4) {
+          result.value_ = value_;
+        }
+        result.valueCase_ = valueCase_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiValue) {
+          return mergeFrom((monitoring.Monitoring.KpiValue)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
+        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
+        switch (other.getValueCase()) {
+          case INTVAL: {
+            setIntVal(other.getIntVal());
+            break;
+          }
+          case FLOATVAL: {
+            setFloatVal(other.getFloatVal());
+            break;
+          }
+          case STRINGVAL: {
+            valueCase_ = 3;
+            value_ = other.value_;
+            onChanged();
+            break;
+          }
+          case BOOLVAL: {
+            setBoolVal(other.getBoolVal());
+            break;
+          }
+          case VALUE_NOT_SET: {
+            break;
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiValue parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int valueCase_ = 0;
+      private java.lang.Object value_;
+      public ValueCase
+          getValueCase() {
+        return ValueCase.forNumber(
+            valueCase_);
+      }
+
+      public Builder clearValue() {
+        valueCase_ = 0;
+        value_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @return Whether the intVal field is set.
+       */
+      public boolean hasIntVal() {
+        return valueCase_ == 1;
+      }
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @return The intVal.
+       */
+      public int getIntVal() {
+        if (valueCase_ == 1) {
+          return (java.lang.Integer) value_;
+        }
+        return 0;
+      }
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @param value The intVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIntVal(int value) {
+        valueCase_ = 1;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIntVal() {
+        if (valueCase_ == 1) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        return this;
+      }
+
+      /**
+       * <code>float floatVal = 2;</code>
+       * @return Whether the floatVal field is set.
+       */
+      public boolean hasFloatVal() {
+        return valueCase_ == 2;
+      }
+      /**
+       * <code>float floatVal = 2;</code>
+       * @return The floatVal.
+       */
+      public float getFloatVal() {
+        if (valueCase_ == 2) {
+          return (java.lang.Float) value_;
+        }
+        return 0F;
+      }
+      /**
+       * <code>float floatVal = 2;</code>
+       * @param value The floatVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFloatVal(float value) {
+        valueCase_ = 2;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float floatVal = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFloatVal() {
+        if (valueCase_ == 2) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        return this;
+      }
+
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return Whether the stringVal field is set.
+       */
+      @java.lang.Override
+      public boolean hasStringVal() {
+        return valueCase_ == 3;
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return The stringVal.
+       */
+      @java.lang.Override
+      public java.lang.String getStringVal() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 3) {
+          ref = value_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (valueCase_ == 3) {
+            value_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return The bytes for stringVal.
+       */
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getStringValBytes() {
+        java.lang.Object ref = "";
+        if (valueCase_ == 3) {
+          ref = value_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (valueCase_ == 3) {
+            value_ = b;
+          }
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @param value The stringVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStringVal(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  valueCase_ = 3;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearStringVal() {
+        if (valueCase_ == 3) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        return this;
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @param value The bytes for stringVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStringValBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        valueCase_ = 3;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @return Whether the boolVal field is set.
+       */
+      public boolean hasBoolVal() {
+        return valueCase_ == 4;
+      }
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @return The boolVal.
+       */
+      public boolean getBoolVal() {
+        if (valueCase_ == 4) {
+          return (java.lang.Boolean) value_;
+        }
+        return false;
+      }
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @param value The boolVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoolVal(boolean value) {
+        valueCase_ = 4;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoolVal() {
+        if (valueCase_ == 4) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
+    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+    }
+
+    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiValue>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
+      @java.lang.Override
+      public KpiValue parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiValue(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiValue> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.Kpi> 
+        getKpiListList();
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    monitoring.Monitoring.Kpi getKpiList(int index);
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    int getKpiListCount();
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiList}
+   */
+  public static final class KpiList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
+      KpiListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiList.newBuilder() to construct.
+    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiList() {
+      kpiList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+    }
+
+    public static final int KPI_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getKpiListCount() {
+      return kpiList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.Kpi getKpiList(int index) {
+      return kpiList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(1, kpiList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < kpiList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, kpiList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
+        monitoring.Monitoring.KpiListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList build() {
+        monitoring.Monitoring.KpiList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList buildPartial() {
+        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiList_ = kpiList_;
+        } else {
+          result.kpiList_ = kpiListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiList) {
+          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
+        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiListFieldBuilder() : null;
+            } else {
+              kpiListBuilder_.addAllMessages(other.kpiList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
+        } else {
+          return kpiListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder addKpiList(
+          monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
+          onChanged();
+        } else {
+          kpiListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiList_ = null;
+        }
+        return kpiListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
+    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+    }
+
+    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
+      @java.lang.Override
+      public KpiList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiDescriptorListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiDescriptor> 
+        getKpiDescriptorListList();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    int getKpiDescriptorListCount();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiDescriptorList}
+   */
+  public static final class KpiDescriptorList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
+      KpiDescriptorListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiDescriptorList.newBuilder() to construct.
+    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiDescriptorList() {
+      kpiDescriptorList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiDescriptorList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiDescriptorList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiDescriptorList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiDescriptor.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+    }
+
+    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+      return kpiDescriptorList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList() {
+      return kpiDescriptorList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getKpiDescriptorListCount() {
+      return kpiDescriptorList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+      return kpiDescriptorList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index) {
+      return kpiDescriptorList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+        output.writeMessage(1, kpiDescriptorList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < kpiDescriptorList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, kpiDescriptorList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.KpiDescriptorList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
+
+      if (!getKpiDescriptorListList()
+          .equals(other.getKpiDescriptorListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getKpiDescriptorListCount() > 0) {
+        hash = (37 * hash) + KPI_DESCRIPTOR_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiDescriptorListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.KpiDescriptorList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.KpiDescriptorList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptorList)
+        monitoring.Monitoring.KpiDescriptorListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiDescriptorListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiDescriptorListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptorList build() {
+        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptorList buildPartial() {
+        monitoring.Monitoring.KpiDescriptorList result = new monitoring.Monitoring.KpiDescriptorList(this);
+        int from_bitField0_ = bitField0_;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiDescriptorList_ = java.util.Collections.unmodifiableList(kpiDescriptorList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiDescriptorList_ = kpiDescriptorList_;
+        } else {
+          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.KpiDescriptorList) {
+          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptorList other) {
+        if (other == monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()) return this;
+        if (kpiDescriptorListBuilder_ == null) {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorList_.isEmpty()) {
+              kpiDescriptorList_ = other.kpiDescriptorList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiDescriptorListIsMutable();
+              kpiDescriptorList_.addAll(other.kpiDescriptorList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiDescriptorList_.isEmpty()) {
+            if (kpiDescriptorListBuilder_.isEmpty()) {
+              kpiDescriptorListBuilder_.dispose();
+              kpiDescriptorListBuilder_ = null;
+              kpiDescriptorList_ = other.kpiDescriptorList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiDescriptorListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiDescriptorListFieldBuilder() : null;
+            } else {
+              kpiDescriptorListBuilder_.addAllMessages(other.kpiDescriptorList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.KpiDescriptorList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiDescriptorList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiDescriptorListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>(kpiDescriptorList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> kpiDescriptorListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        } else {
+          return kpiDescriptorListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public int getKpiDescriptorListCount() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.size();
+        } else {
+          return kpiDescriptorListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);
+        } else {
+          return kpiDescriptorListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addAllKpiDescriptorList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiDescriptor> values) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiDescriptorList_);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder clearKpiDescriptorList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder removeKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.remove(index);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+          int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);  } else {
+          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+           getKpiDescriptorListOrBuilderList() {
+        if (kpiDescriptorListBuilder_ != null) {
+          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiDescriptor.Builder> 
+           getKpiDescriptorListBuilderList() {
+        return getKpiDescriptorListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder> 
+          getKpiDescriptorListFieldBuilder() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiDescriptor.Builder, monitoring.Monitoring.KpiDescriptorOrBuilder>(
+                  kpiDescriptorList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiDescriptorList_ = null;
+        }
+        return kpiDescriptorListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiDescriptorList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
+    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
+    }
+
+    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiDescriptorList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
+      @java.lang.Override
+      public KpiDescriptorList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiDescriptorList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiDescriptorList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiDescriptorList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SubsDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsDescriptor)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
+     */
+    float getSamplingDurationS();
+
+    /**
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
+     */
+    float getSamplingIntervalS();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The startDate.
+     */
+    java.lang.String getStartDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The bytes for startDate.
+     */
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The endDate.
+     */
+    java.lang.String getEndDate();
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsDescriptor}
+   */
+  public static final class SubsDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
+      SubsDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsDescriptor.newBuilder() to construct.
+    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsDescriptor() {
+      startDate_ = "";
+      endDate_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsDescriptor(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
+              if (kpiId_ != null) {
+                subBuilder = kpiId_.toBuilder();
+              }
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiId_);
+                kpiId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 21: {
+
+              samplingDurationS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingIntervalS_ = input.readFloat();
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endDate_ = s;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
+    }
+
+    public static final int KPI_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 2;
+    private float samplingDurationS_;
+    /**
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
+     */
+    @java.lang.Override
+    public float getSamplingDurationS() {
+      return samplingDurationS_;
+    }
+
+    public static final int SAMPLING_INTERVAL_S_FIELD_NUMBER = 3;
+    private float samplingIntervalS_;
+    /**
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
+     */
+    @java.lang.Override
+    public float getSamplingIntervalS() {
+      return samplingIntervalS_;
+    }
+
+    public static final int START_DATE_FIELD_NUMBER = 4;
+    private volatile java.lang.Object startDate_;
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The startDate.
+     */
+    @java.lang.Override
+    public java.lang.String getStartDate() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        startDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples since X date/time"
+     * </pre>
+     *
+     * <code>string start_date = 4;</code>
+     * @return The bytes for startDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getStartDateBytes() {
+      java.lang.Object ref = startDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        startDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int END_DATE_FIELD_NUMBER = 5;
+    private volatile java.lang.Object endDate_;
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The endDate.
+     */
+    @java.lang.Override
+    public java.lang.String getEndDate() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endDate_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</code>
+     * @return The bytes for endDate.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getEndDateBytes() {
+      java.lang.Object ref = endDate_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endDate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (kpiId_ != null) {
+        output.writeMessage(1, getKpiId());
+      }
+      if (samplingDurationS_ != 0F) {
+        output.writeFloat(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        output.writeFloat(3, samplingIntervalS_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, endDate_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiId());
+      }
+      if (samplingDurationS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingIntervalS_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, endDate_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.SubsDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (java.lang.Float.floatToIntBits(getSamplingDurationS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingDurationS())) return false;
+      if (java.lang.Float.floatToIntBits(getSamplingIntervalS())
+          != java.lang.Float.floatToIntBits(
+              other.getSamplingIntervalS())) return false;
+      if (!getStartDate()
+          .equals(other.getStartDate())) return false;
+      if (!getEndDate()
+          .equals(other.getEndDate())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasKpiId()) {
+        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + SAMPLING_DURATION_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingDurationS());
+      hash = (37 * hash) + SAMPLING_INTERVAL_S_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getSamplingIntervalS());
+      hash = (37 * hash) + START_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getStartDate().hashCode();
+      hash = (37 * hash) + END_DATE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndDate().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.SubsDescriptor prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.SubsDescriptor}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsDescriptor)
+        monitoring.Monitoring.SubsDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsDescriptor.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+        samplingDurationS_ = 0F;
+
+        samplingIntervalS_ = 0F;
+
+        startDate_ = "";
+
+        endDate_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor build() {
+        monitoring.Monitoring.SubsDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor buildPartial() {
+        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.samplingDurationS_ = samplingDurationS_;
+        result.samplingIntervalS_ = samplingIntervalS_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubsDescriptor) {
+          return mergeFrom((monitoring.Monitoring.SubsDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubsDescriptor other) {
+        if (other == monitoring.Monitoring.SubsDescriptor.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.getSamplingDurationS() != 0F) {
+          setSamplingDurationS(other.getSamplingDurationS());
+        }
+        if (other.getSamplingIntervalS() != 0F) {
+          setSamplingIntervalS(other.getSamplingIntervalS());
+        }
+        if (!other.getStartDate().isEmpty()) {
+          startDate_ = other.startDate_;
+          onChanged();
+        }
+        if (!other.getEndDate().isEmpty()) {
+          endDate_ = other.endDate_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubsDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private monitoring.Monitoring.KpiId kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * @return The kpiId.
+       */
+      public monitoring.Monitoring.KpiId getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiId_ = value;
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
+        if (kpiIdBuilder_ == null) {
+          if (kpiId_ != null) {
+            kpiId_ =
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+          } else {
             kpiId_ = value;
           }
           onChanged();
         } else {
-          kpiIdBuilder_.mergeFrom(value);
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private float samplingDurationS_ ;
+      /**
+       * <code>float sampling_duration_s = 2;</code>
+       * @return The samplingDurationS.
+       */
+      @java.lang.Override
+      public float getSamplingDurationS() {
+        return samplingDurationS_;
+      }
+      /**
+       * <code>float sampling_duration_s = 2;</code>
+       * @param value The samplingDurationS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingDurationS(float value) {
+        
+        samplingDurationS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float sampling_duration_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingDurationS() {
+        
+        samplingDurationS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingIntervalS_ ;
+      /**
+       * <code>float sampling_interval_s = 3;</code>
+       * @return The samplingIntervalS.
+       */
+      @java.lang.Override
+      public float getSamplingIntervalS() {
+        return samplingIntervalS_;
+      }
+      /**
+       * <code>float sampling_interval_s = 3;</code>
+       * @param value The samplingIntervalS to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSamplingIntervalS(float value) {
+        
+        samplingIntervalS_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float sampling_interval_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingIntervalS() {
+        
+        samplingIntervalS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object startDate_ = "";
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return The startDate.
+       */
+      public java.lang.String getStartDate() {
+        java.lang.Object ref = startDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          startDate_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return The bytes for startDate.
+       */
+      public com.google.protobuf.ByteString
+          getStartDateBytes() {
+        java.lang.Object ref = startDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          startDate_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @param value The startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        startDate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearStartDate() {
+        
+        startDate_ = getDefaultInstance().getStartDate();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples since X date/time"
+       * </pre>
+       *
+       * <code>string start_date = 4;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object endDate_ = "";
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return The endDate.
+       */
+      public java.lang.String getEndDate() {
+        java.lang.Object ref = endDate_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endDate_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return The bytes for endDate.
+       */
+      public com.google.protobuf.ByteString
+          getEndDateBytes() {
+        java.lang.Object ref = endDate_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endDate_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @param value The endDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndDate() {
+        
+        endDate_ = getDefaultInstance().getEndDate();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * used when you want something like "get the samples until X date/time"
+       * </pre>
+       *
+       * <code>string end_date = 5;</code>
+       * @param value The bytes for endDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
+    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
+    }
+
+    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
+      @java.lang.Override
+      public SubsDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SubscriptionIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubscriptionID)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
+     */
+    boolean hasSubsId();
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
+     */
+    context.ContextOuterClass.Uuid getSubsId();
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.SubscriptionID}
+   */
+  public static final class SubscriptionID extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
+      SubscriptionIDOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubscriptionID.newBuilder() to construct.
+    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubscriptionID() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubscriptionID();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubscriptionID(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
+              }
+              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+    }
+
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid subsId_;
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSubsId() {
+      return subsId_ != null;
+    }
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getSubsId() {
+      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+    }
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (subsId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getSubsId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.SubscriptionID)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
+
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.SubscriptionID prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.SubscriptionID}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.SubscriptionID)
+        monitoring.Monitoring.SubscriptionIDOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubscriptionID.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubscriptionID build() {
+        monitoring.Monitoring.SubscriptionID result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubscriptionID buildPartial() {
+        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
+        } else {
+          result.subsId_ = subsIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubscriptionID) {
+          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubscriptionID other) {
+        if (other == monitoring.Monitoring.SubscriptionID.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubscriptionID parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubscriptionID) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> subsIdBuilder_;
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return Whether the subsId field is set.
+       */
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public context.ContextOuterClass.Uuid getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder mergeSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              context.ContextOuterClass.Uuid.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubscriptionID)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
+    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
+    }
+
+    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubscriptionID>
+        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
+      @java.lang.Override
+      public SubscriptionID parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubscriptionID(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubscriptionID> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubscriptionID> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SubsResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsResponse)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
+     */
+    boolean hasSubsId();
+    /**
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
+     */
+    monitoring.Monitoring.SubscriptionID getSubsId();
+    /**
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder();
+
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiList> 
+        getKpiListList();
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiList getKpiList(int index);
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    int getKpiListCount();
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsResponse}
+   */
+  public static final class SubsResponse extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
+      SubsResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsResponse.newBuilder() to construct.
+    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsResponse() {
+      kpiList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsResponse();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsResponse(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              monitoring.Monitoring.SubscriptionID.Builder subBuilder = null;
+              if (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
+              }
+              subsId_ = input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiList.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+    }
+
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.SubscriptionID subsId_;
+    /**
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return Whether the subsId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSubsId() {
+      return subsId_ != null;
+    }
+    /**
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     * @return The subsId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionID getSubsId() {
+      return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+    }
+    /**
+     * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
+    }
+
+    public static final int KPI_LIST_FIELD_NUMBER = 2;
+    private java.util.List<monitoring.Monitoring.KpiList> kpiList_;
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public int getKpiListCount() {
+      return kpiList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiList getKpiList(int index) {
+      return kpiList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
+      }
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(2, kpiList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (subsId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getSubsId());
+      }
+      for (int i = 0; i < kpiList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, kpiList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.SubsResponse)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubsResponse other = (monitoring.Monitoring.SubsResponse) obj;
+
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) return false;
+      }
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
+      }
+      if (getKpiListCount() > 0) {
+        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsResponse parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.SubsResponse prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.SubsResponse}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsResponse)
+        monitoring.Monitoring.SubsResponseOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsResponse build() {
+        monitoring.Monitoring.SubsResponse result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsResponse buildPartial() {
+        monitoring.Monitoring.SubsResponse result = new monitoring.Monitoring.SubsResponse(this);
+        int from_bitField0_ = bitField0_;
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
+        } else {
+          result.subsId_ = subsIdBuilder_.build();
+        }
+        if (kpiListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiList_ = kpiList_;
+        } else {
+          result.kpiList_ = kpiListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubsResponse) {
+          return mergeFrom((monitoring.Monitoring.SubsResponse)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubsResponse other) {
+        if (other == monitoring.Monitoring.SubsResponse.getDefaultInstance()) return this;
+        if (other.hasSubsId()) {
+          mergeSubsId(other.getSubsId());
+        }
+        if (kpiListBuilder_ == null) {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiList_.isEmpty()) {
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureKpiListIsMutable();
+              kpiList_.addAll(other.kpiList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.kpiList_.isEmpty()) {
+            if (kpiListBuilder_.isEmpty()) {
+              kpiListBuilder_.dispose();
+              kpiListBuilder_ = null;
+              kpiList_ = other.kpiList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              kpiListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getKpiListFieldBuilder() : null;
+            } else {
+              kpiListBuilder_.addAllMessages(other.kpiList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubsResponse parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private monitoring.Monitoring.SubscriptionID subsId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsIdBuilder_;
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return Whether the subsId field is set.
+       */
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder mergeSubsId(monitoring.Monitoring.SubscriptionID value) {
+        if (subsIdBuilder_ == null) {
+          if (subsId_ != null) {
+            subsId_ =
+              monitoring.Monitoring.SubscriptionID.newBuilder(subsId_).mergeFrom(value).buildPartial();
+          } else {
+            subsId_ = value;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              monitoring.Monitoring.SubscriptionID.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.monitoring.SubscriptionID subs_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsIdFieldBuilder() {
+        if (subsIdBuilder_ == null) {
+          subsIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  getSubsId(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+
+      private java.util.List<monitoring.Monitoring.KpiList> kpiList_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.KpiList>(kpiList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> kpiListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiList> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
+        } else {
+          return kpiListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.set(index, value);
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder setKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(
+          monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addAllKpiList(
+          java.lang.Iterable<? extends monitoring.Monitoring.KpiList> values) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, kpiList_);
+          onChanged();
+        } else {
+          kpiListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiListOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiListOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiList.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public monitoring.Monitoring.KpiList.Builder addKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiList.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public java.util.List<monitoring.Monitoring.KpiList.Builder> 
+           getKpiListBuilderList() {
+        return getKpiListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder> 
+          getKpiListFieldBuilder() {
+        if (kpiListBuilder_ == null) {
+          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.KpiList, monitoring.Monitoring.KpiList.Builder, monitoring.Monitoring.KpiListOrBuilder>(
+                  kpiList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          kpiList_ = null;
+        }
+        return kpiListBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
+    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+    }
+
+    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsResponse>
+        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+      @java.lang.Override
+      public SubsResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsResponse(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsResponse> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SubsIDListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.SubsIDList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.SubscriptionID> 
+        getSubsListList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionID getSubsList(int index);
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    int getSubsListCount();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsIDList}
+   */
+  public static final class SubsIDList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
+      SubsIDListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsIDList.newBuilder() to construct.
+    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsIDList() {
+      subsList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsIDList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsIDList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              subsList_.add(
+                  input.readMessage(monitoring.Monitoring.SubscriptionID.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          subsList_ = java.util.Collections.unmodifiableList(subsList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+    }
+
+    public static final int SUBS_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getSubsListCount() {
+      return subsList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+      return subsList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index) {
+      return subsList_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < subsList_.size(); i++) {
+        output.writeMessage(1, subsList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < subsList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, subsList_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof monitoring.Monitoring.SubsIDList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+
+      if (!getSubsListList()
+          .equals(other.getSubsListList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getSubsListCount() > 0) {
+        hash = (37 * hash) + SUBS_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsListList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(monitoring.Monitoring.SubsIDList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code monitoring.SubsIDList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.SubsIDList)
+        monitoring.Monitoring.SubsIDListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getSubsListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          subsListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsIDList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList build() {
+        monitoring.Monitoring.SubsIDList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsIDList buildPartial() {
+        monitoring.Monitoring.SubsIDList result = new monitoring.Monitoring.SubsIDList(this);
+        int from_bitField0_ = bitField0_;
+        if (subsListBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            subsList_ = java.util.Collections.unmodifiableList(subsList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.subsList_ = subsList_;
+        } else {
+          result.subsList_ = subsListBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.SubsIDList) {
+          return mergeFrom((monitoring.Monitoring.SubsIDList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.SubsIDList other) {
+        if (other == monitoring.Monitoring.SubsIDList.getDefaultInstance()) return this;
+        if (subsListBuilder_ == null) {
+          if (!other.subsList_.isEmpty()) {
+            if (subsList_.isEmpty()) {
+              subsList_ = other.subsList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSubsListIsMutable();
+              subsList_.addAll(other.subsList_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subsList_.isEmpty()) {
+            if (subsListBuilder_.isEmpty()) {
+              subsListBuilder_.dispose();
+              subsListBuilder_ = null;
+              subsList_ = other.subsList_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              subsListBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubsListFieldBuilder() : null;
+            } else {
+              subsListBuilder_.addAllMessages(other.subsList_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.SubsIDList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsIDList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_ =
+        java.util.Collections.emptyList();
+      private void ensureSubsListIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>(subsList_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> subsListBuilder_;
+
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+        if (subsListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subsList_);
+        } else {
+          return subsListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public int getSubsListCount() {
+        if (subsListBuilder_ == null) {
+          return subsList_.size();
+        } else {
+          return subsListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);
+        } else {
+          return subsListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubsListIsMutable();
+          subsList_.set(index, value);
+          onChanged();
+        } else {
+          subsListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          subsListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubsListIsMutable();
+          subsList_.add(value);
+          onChanged();
+        } else {
+          subsListBuilder_.addMessage(value);
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubsListIsMutable();
+          subsList_.add(index, value);
+          onChanged();
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          subsListBuilder_.addMessage(index, value);
         }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
+      public Builder addSubsList(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subsListBuilder_.addMessage(builderForValue.build());
         }
-        return kpiIdBuilder_;
+        return this;
       }
-
-      private float samplingDurationS_ ;
       /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @return The samplingDurationS.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      @java.lang.Override
-      public float getSamplingDurationS() {
-        return samplingDurationS_;
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subsListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @param value The samplingDurationS to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setSamplingDurationS(float value) {
-        
-        samplingDurationS_ = value;
-        onChanged();
+      public Builder addAllSubsList(
+          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subsList_);
+          onChanged();
+        } else {
+          subsListBuilder_.addAllMessages(values);
+        }
         return this;
       }
       /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearSamplingDurationS() {
-        
-        samplingDurationS_ = 0F;
-        onChanged();
+      public Builder clearSubsList() {
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          subsListBuilder_.clear();
+        }
         return this;
       }
-
-      private float samplingIntervalS_ ;
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @return The samplingIntervalS.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      @java.lang.Override
-      public float getSamplingIntervalS() {
-        return samplingIntervalS_;
+      public Builder removeSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.remove(index);
+          onChanged();
+        } else {
+          subsListBuilder_.remove(index);
+        }
+        return this;
       }
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @param value The samplingIntervalS to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setSamplingIntervalS(float value) {
-        
-        samplingIntervalS_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
+          int index) {
+        return getSubsListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearSamplingIntervalS() {
-        
-        samplingIntervalS_ = 0F;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+          int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);  } else {
+          return subsListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+           getSubsListOrBuilderList() {
+        if (subsListBuilder_ != null) {
+          return subsListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subsList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder() {
+        return getSubsListFieldBuilder().addBuilder(
+            monitoring.Monitoring.SubscriptionID.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID.Builder addSubsListBuilder(
+          int index) {
+        return getSubsListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.SubscriptionID.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.SubscriptionID.Builder> 
+           getSubsListBuilderList() {
+        return getSubsListFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder> 
+          getSubsListFieldBuilder() {
+        if (subsListBuilder_ == null) {
+          subsListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubscriptionID.Builder, monitoring.Monitoring.SubscriptionIDOrBuilder>(
+                  subsList_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subsList_ = null;
+        }
+        return subsListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -2083,85 +16125,139 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
-    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
+    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
+    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<MonitorKpiRequest>
-        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
+    private static final com.google.protobuf.Parser<SubsIDList>
+        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
       @java.lang.Override
-      public MonitorKpiRequest parsePartialFrom(
+      public SubsIDList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MonitorKpiRequest(input, extensionRegistry);
+        return new SubsIDList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
+    public static com.google.protobuf.Parser<SubsIDList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
+    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+  public interface AlarmDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>string alarm_description = 1;</code>
+     * @return The alarmDescription.
+     */
+    java.lang.String getAlarmDescription();
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The bytes for alarmDescription.
+     */
+    com.google.protobuf.ByteString
+        getAlarmDescriptionBytes();
+
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      * @return Whether the kpiId field is set.
      */
     boolean hasKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      * @return The kpiId.
      */
-    context.ContextOuterClass.Uuid getKpiId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return Whether the kpiValueRange field is set.
+     */
+    boolean hasKpiValueRange();
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return The kpiValueRange.
+     */
+    monitoring.Monitoring.KpiValueRange getKpiValueRange();
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     */
+    monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder();
+
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The timestamp.
+     */
+    java.lang.String getTimestamp();
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The bytes for timestamp.
+     */
+    com.google.protobuf.ByteString
+        getTimestampBytes();
   }
   /**
-   * Protobuf type {@code monitoring.KpiId}
+   * Protobuf type {@code monitoring.AlarmDescriptor}
    */
-  public static final class KpiId extends
+  public static final class AlarmDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
-      KpiIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
+      AlarmDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiId.newBuilder() to construct.
-    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmDescriptor.newBuilder() to construct.
+    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiId() {
+    private AlarmDescriptor() {
+      alarmDescription_ = "";
+      name_ = "";
+      timestamp_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiId();
+      return new AlarmDescriptor();
     }
 
     @java.lang.Override
@@ -2169,7 +16265,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiId(
+    private AlarmDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2188,11 +16284,23 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              java.lang.String s = input.readStringRequireUtf8();
+
+              alarmDescription_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 26: {
+              monitoring.Monitoring.KpiId.Builder subBuilder = null;
               if (kpiId_ != null) {
                 subBuilder = kpiId_.toBuilder();
               }
-              kpiId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(kpiId_);
                 kpiId_ = subBuilder.buildPartial();
@@ -2200,6 +16308,25 @@ public final class Monitoring {
 
               break;
             }
+            case 34: {
+              monitoring.Monitoring.KpiValueRange.Builder subBuilder = null;
+              if (kpiValueRange_ != null) {
+                subBuilder = kpiValueRange_.toBuilder();
+              }
+              kpiValueRange_ = input.readMessage(monitoring.Monitoring.KpiValueRange.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValueRange_);
+                kpiValueRange_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              timestamp_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2219,23 +16346,99 @@ public final class Monitoring {
         makeExtensionsImmutable();
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
+    }
+
+    public static final int ALARM_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object alarmDescription_;
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The alarmDescription.
+     */
+    @java.lang.Override
+    public java.lang.String getAlarmDescription() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        alarmDescription_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string alarm_description = 1;</code>
+     * @return The bytes for alarmDescription.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getAlarmDescriptionBytes() {
+      java.lang.Object ref = alarmDescription_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        alarmDescription_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
+    public static final int NAME_FIELD_NUMBER = 2;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 2;</code>
+     * @return The name.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+    public java.lang.String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        name_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string name = 2;</code>
+     * @return The bytes for name.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid kpiId_;
+    public static final int KPI_ID_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      * @return Whether the kpiId field is set.
      */
     @java.lang.Override
@@ -2243,21 +16446,85 @@ public final class Monitoring {
       return kpiId_ != null;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      * @return The kpiId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getKpiId() {
-      return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
       return getKpiId();
     }
 
+    public static final int KPI_VALUE_RANGE_FIELD_NUMBER = 4;
+    private monitoring.Monitoring.KpiValueRange kpiValueRange_;
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return Whether the kpiValueRange field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValueRange() {
+      return kpiValueRange_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     * @return The kpiValueRange.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+      return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+    }
+    /**
+     * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+      return getKpiValueRange();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 5;
+    private volatile java.lang.Object timestamp_;
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public java.lang.String getTimestamp() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        timestamp_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string timestamp = 5;</code>
+     * @return The bytes for timestamp.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTimestampBytes() {
+      java.lang.Object ref = timestamp_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        timestamp_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2272,8 +16539,20 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
       if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+        output.writeMessage(3, getKpiId());
+      }
+      if (kpiValueRange_ != null) {
+        output.writeMessage(4, getKpiValueRange());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timestamp_);
       }
       unknownFields.writeTo(output);
     }
@@ -2284,9 +16563,22 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
       if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(3, getKpiId());
+      }
+      if (kpiValueRange_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getKpiValueRange());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timestamp_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2298,16 +16590,27 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+      monitoring.Monitoring.AlarmDescriptor other = (monitoring.Monitoring.AlarmDescriptor) obj;
 
+      if (!getAlarmDescription()
+          .equals(other.getAlarmDescription())) return false;
+      if (!getName()
+          .equals(other.getName())) return false;
       if (hasKpiId() != other.hasKpiId()) return false;
       if (hasKpiId()) {
         if (!getKpiId()
             .equals(other.getKpiId())) return false;
       }
+      if (hasKpiValueRange() != other.hasKpiValueRange()) return false;
+      if (hasKpiValueRange()) {
+        if (!getKpiValueRange()
+            .equals(other.getKpiValueRange())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2319,78 +16622,88 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ALARM_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getAlarmDescription().hashCode();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
       if (hasKpiId()) {
         hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
         hash = (53 * hash) + getKpiId().hashCode();
       }
+      if (hasKpiValueRange()) {
+        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValueRange().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2403,7 +16716,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiId prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2419,26 +16732,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiId}
+     * Protobuf type {@code monitoring.AlarmDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiId)
-        monitoring.Monitoring.KpiIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmDescriptor)
+        monitoring.Monitoring.AlarmDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2456,29 +16769,41 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        alarmDescription_ = "";
+
+        name_ = "";
+
         if (kpiIdBuilder_ == null) {
           kpiId_ = null;
         } else {
           kpiId_ = null;
           kpiIdBuilder_ = null;
         }
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
+        } else {
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
+        }
+        timestamp_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId build() {
-        monitoring.Monitoring.KpiId result = buildPartial();
+      public monitoring.Monitoring.AlarmDescriptor build() {
+        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2486,13 +16811,21 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId buildPartial() {
-        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+      public monitoring.Monitoring.AlarmDescriptor buildPartial() {
+        monitoring.Monitoring.AlarmDescriptor result = new monitoring.Monitoring.AlarmDescriptor(this);
+        result.alarmDescription_ = alarmDescription_;
+        result.name_ = name_;
         if (kpiIdBuilder_ == null) {
           result.kpiId_ = kpiId_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
+        if (kpiValueRangeBuilder_ == null) {
+          result.kpiValueRange_ = kpiValueRange_;
+        } else {
+          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
+        }
+        result.timestamp_ = timestamp_;
         onBuilt();
         return result;
       }
@@ -2517,87 +16850,254 @@ public final class Monitoring {
           com.google.protobuf.Descriptors.OneofDescriptor oneof) {
         return super.clearOneof(oneof);
       }
-      @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof monitoring.Monitoring.AlarmDescriptor) {
+          return mergeFrom((monitoring.Monitoring.AlarmDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.AlarmDescriptor other) {
+        if (other == monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()) return this;
+        if (!other.getAlarmDescription().isEmpty()) {
+          alarmDescription_ = other.alarmDescription_;
+          onChanged();
+        }
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.hasKpiValueRange()) {
+          mergeKpiValueRange(other.getKpiValueRange());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        monitoring.Monitoring.AlarmDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.AlarmDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object alarmDescription_ = "";
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return The alarmDescription.
+       */
+      public java.lang.String getAlarmDescription() {
+        java.lang.Object ref = alarmDescription_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          alarmDescription_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return The bytes for alarmDescription.
+       */
+      public com.google.protobuf.ByteString
+          getAlarmDescriptionBytes() {
+        java.lang.Object ref = alarmDescription_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          alarmDescription_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @param value The alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        alarmDescription_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmDescription() {
+        
+        alarmDescription_ = getDefaultInstance().getAlarmDescription();
+        onChanged();
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @param value The bytes for alarmDescription to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAlarmDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        alarmDescription_ = value;
+        onChanged();
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiId) {
-          return mergeFrom((monitoring.Monitoring.KpiId)other);
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 2;</code>
+       * @return The name.
+       */
+      public java.lang.String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          name_ = s;
+          return s;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return (java.lang.String) ref;
         }
       }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
-        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      /**
+       * <code>string name = 2;</code>
+       * @return The bytes for name.
+       */
+      public com.google.protobuf.ByteString
+          getNameBytes() {
+        java.lang.Object ref = name_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          name_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
-        this.mergeUnknownFields(other.unknownFields);
+      }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        name_ = value;
         onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        monitoring.Monitoring.KpiId parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiId) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
+      /**
+       * <code>string name = 2;</code>
+       * @param value The bytes for name to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        name_ = value;
+        onChanged();
         return this;
       }
 
-      private context.ContextOuterClass.Uuid kpiId_;
+      private monitoring.Monitoring.KpiId kpiId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        * @return Whether the kpiId field is set.
        */
       public boolean hasKpiId() {
         return kpiIdBuilder_ != null || kpiId_ != null;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        * @return The kpiId.
        */
-      public context.ContextOuterClass.Uuid getKpiId() {
+      public monitoring.Monitoring.KpiId getKpiId() {
         if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
         } else {
           return kpiIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        */
-      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -2611,10 +17111,10 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        */
       public Builder setKpiId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
           kpiId_ = builderForValue.build();
           onChanged();
@@ -2625,13 +17125,13 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        */
-      public Builder mergeKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (kpiId_ != null) {
             kpiId_ =
-              context.ContextOuterClass.Uuid.newBuilder(kpiId_).mergeFrom(value).buildPartial();
+              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
           } else {
             kpiId_ = value;
           }
@@ -2643,7 +17143,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
@@ -2657,39 +17157,234 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
+          getKpiIdFieldBuilder() {
+        if (kpiIdBuilder_ == null) {
+          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
+                  getKpiId(),
+                  getParentForChildren(),
+                  isClean());
+          kpiId_ = null;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValueRange kpiValueRange_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return Whether the kpiValueRange field is set.
+       */
+      public boolean hasKpiValueRange() {
+        return kpiValueRangeBuilder_ != null || kpiValueRange_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return The kpiValueRange.
+       */
+      public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+        } else {
+          return kpiValueRangeBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValueRange_ = value;
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder setKpiValueRange(
+          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (kpiValueRange_ != null) {
+            kpiValueRange_ =
+              monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValueRange_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder clearKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
+          onChanged();
+        } else {
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() {
+        
+        onChanged();
+        return getKpiValueRangeFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+        if (kpiValueRangeBuilder_ != null) {
+          return kpiValueRangeBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValueRange_ == null ?
+              monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> 
+          getKpiValueRangeFieldBuilder() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRangeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder>(
+                  getKpiValueRange(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValueRange_ = null;
+        }
+        return kpiValueRangeBuilder_;
+      }
+
+      private java.lang.Object timestamp_ = "";
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return The timestamp.
+       */
+      public java.lang.String getTimestamp() {
+        java.lang.Object ref = timestamp_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          timestamp_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @return The bytes for timestamp.
+       */
+      public com.google.protobuf.ByteString
+          getTimestampBytes() {
+        java.lang.Object ref = timestamp_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          timestamp_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
-        
+      public Builder setTimestamp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        timestamp_ = value;
         onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>string timestamp = 5;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
-        }
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>string timestamp = 5;</code>
+       * @param value The bytes for timestamp to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
+      public Builder setTimestampBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -2704,113 +17399,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
-    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
+    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
     }
 
-    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmDescriptor getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiId>
-        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
+    private static final com.google.protobuf.Parser<AlarmDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
       @java.lang.Override
-      public KpiId parsePartialFrom(
+      public AlarmDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiId(input, extensionRegistry);
+        return new AlarmDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiId> parser() {
+    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiId> getParserForType() {
+    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+  public interface AlarmIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    boolean hasKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    monitoring.Monitoring.KpiId getKpiId();
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
-
-    /**
-     * <code>string timestamp = 2;</code>
-     * @return The timestamp.
-     */
-    java.lang.String getTimestamp();
-    /**
-     * <code>string timestamp = 2;</code>
-     * @return The bytes for timestamp.
-     */
-    com.google.protobuf.ByteString
-        getTimestampBytes();
-
-    /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return Whether the kpiValue field is set.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    boolean hasKpiValue();
+    boolean hasAlarmId();
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return The kpiValue.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    monitoring.Monitoring.KpiValue getKpiValue();
+    context.ContextOuterClass.Uuid getAlarmId();
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.Kpi}
+   * Protobuf type {@code monitoring.AlarmID}
    */
-  public static final class Kpi extends
+  public static final class AlarmID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
-      KpiOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
+      AlarmIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Kpi.newBuilder() to construct.
-    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmID.newBuilder() to construct.
+    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Kpi() {
-      timestamp_ = "";
+    private AlarmID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Kpi();
+      return new AlarmID();
     }
 
     @java.lang.Override
@@ -2818,7 +17485,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Kpi(
+    private AlarmID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2837,33 +17504,14 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              monitoring.Monitoring.KpiId.Builder subBuilder = null;
-              if (kpiId_ != null) {
-                subBuilder = kpiId_.toBuilder();
-              }
-              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiId_);
-                kpiId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              timestamp_ = s;
-              break;
-            }
-            case 34: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiValue_ != null) {
-                subBuilder = kpiValue_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
               }
-              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiValue_);
-                kpiValue_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -2889,105 +17537,41 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
-    }
-
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
-     */
-    @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-    }
-    /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     */
-    @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
-    }
-
-    public static final int TIMESTAMP_FIELD_NUMBER = 2;
-    private volatile java.lang.Object timestamp_;
-    /**
-     * <code>string timestamp = 2;</code>
-     * @return The timestamp.
-     */
-    @java.lang.Override
-    public java.lang.String getTimestamp() {
-      java.lang.Object ref = timestamp_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        timestamp_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string timestamp = 2;</code>
-     * @return The bytes for timestamp.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getTimestampBytes() {
-      java.lang.Object ref = timestamp_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        timestamp_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
     }
 
-    public static final int KPI_VALUE_FIELD_NUMBER = 4;
-    private monitoring.Monitoring.KpiValue kpiValue_;
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid alarmId_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return Whether the kpiValue field is set.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public boolean hasKpiValue() {
-      return kpiValue_ != null;
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return The kpiValue.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiValue() {
-      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    public context.ContextOuterClass.Uuid getAlarmId() {
+      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
     }
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-      return getKpiValue();
+    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -3004,14 +17588,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
-      }
-      if (!getTimestampBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
-      }
-      if (kpiValue_ != null) {
-        output.writeMessage(4, getKpiValue());
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
       unknownFields.writeTo(output);
     }
@@ -3022,16 +17600,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
-      if (!getTimestampBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
-      }
-      if (kpiValue_ != null) {
+      if (alarmId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getKpiValue());
+          .computeMessageSize(1, getAlarmId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -3043,22 +17614,15 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
+      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) return false;
-      }
-      if (!getTimestamp()
-          .equals(other.getTimestamp())) return false;
-      if (hasKpiValue() != other.hasKpiValue()) return false;
-      if (hasKpiValue()) {
-        if (!getKpiValue()
-            .equals(other.getKpiValue())) return false;
+      if (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -3071,84 +17635,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasKpiId()) {
-        hash = (37 * hash) + KPI_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiId().hashCode();
-      }
-      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
-      hash = (53 * hash) + getTimestamp().hashCode();
-      if (hasKpiValue()) {
-        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiValue().hashCode();
+      if (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmID parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmID parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -3161,7 +17719,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.Kpi prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -3177,26 +17735,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.Kpi}
+     * Protobuf type {@code monitoring.AlarmID}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.Kpi)
-        monitoring.Monitoring.KpiOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmID)
+        monitoring.Monitoring.AlarmIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.Kpi.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -3214,19 +17772,11 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        timestamp_ = "";
-
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
         return this;
       }
@@ -3234,17 +17784,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
-        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi build() {
-        monitoring.Monitoring.Kpi result = buildPartial();
+      public monitoring.Monitoring.AlarmID build() {
+        monitoring.Monitoring.AlarmID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -3252,18 +17802,12 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi buildPartial() {
-        monitoring.Monitoring.Kpi result = new monitoring.Monitoring.Kpi(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        result.timestamp_ = timestamp_;
-        if (kpiValueBuilder_ == null) {
-          result.kpiValue_ = kpiValue_;
+      public monitoring.Monitoring.AlarmID buildPartial() {
+        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
         } else {
-          result.kpiValue_ = kpiValueBuilder_.build();
+          result.alarmId_ = alarmIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -3303,25 +17847,18 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.Kpi) {
-          return mergeFrom((monitoring.Monitoring.Kpi)other);
+        if (other instanceof monitoring.Monitoring.AlarmID) {
+          return mergeFrom((monitoring.Monitoring.AlarmID)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.Kpi other) {
-        if (other == monitoring.Monitoring.Kpi.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
-        }
-        if (!other.getTimestamp().isEmpty()) {
-          timestamp_ = other.timestamp_;
-          onChanged();
-        }
-        if (other.hasKpiValue()) {
-          mergeKpiValue(other.getKpiValue());
+      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
+        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -3338,332 +17875,137 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.Kpi parsedMessage = null;
+        monitoring.Monitoring.AlarmID parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.Kpi) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private monitoring.Monitoring.KpiId kpiId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
-       */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
-       */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        } else {
-          return kpiIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
-            kpiId_ = value;
-          }
-          onChanged();
-        } else {
-          kpiIdBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-          onChanged();
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
-        }
-      }
-      /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> 
-          getKpiIdFieldBuilder() {
-        if (kpiIdBuilder_ == null) {
-          kpiIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder>(
-                  getKpiId(),
-                  getParentForChildren(),
-                  isClean());
-          kpiId_ = null;
-        }
-        return kpiIdBuilder_;
-      }
-
-      private java.lang.Object timestamp_ = "";
-      /**
-       * <code>string timestamp = 2;</code>
-       * @return The timestamp.
-       */
-      public java.lang.String getTimestamp() {
-        java.lang.Object ref = timestamp_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          timestamp_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string timestamp = 2;</code>
-       * @return The bytes for timestamp.
-       */
-      public com.google.protobuf.ByteString
-          getTimestampBytes() {
-        java.lang.Object ref = timestamp_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          timestamp_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string timestamp = 2;</code>
-       * @param value The timestamp to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestamp(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        timestamp_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string timestamp = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearTimestamp() {
-        
-        timestamp_ = getDefaultInstance().getTimestamp();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string timestamp = 2;</code>
-       * @param value The bytes for timestamp to set.
-       * @return This builder for chaining.
-       */
-      public Builder setTimestampBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        timestamp_ = value;
-        onChanged();
+          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
 
-      private monitoring.Monitoring.KpiValue kpiValue_;
+      private context.ContextOuterClass.Uuid alarmId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
-       * @return Whether the kpiValue field is set.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasKpiValue() {
-        return kpiValueBuilder_ != null || kpiValue_ != null;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
-       * @return The kpiValue.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public monitoring.Monitoring.KpiValue getKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+      public context.ContextOuterClass.Uuid getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         } else {
-          return kpiValueBuilder_.getMessage();
+          return alarmIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
+      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiValue_ = value;
+          alarmId_ = value;
           onChanged();
         } else {
-          kpiValueBuilder_.setMessage(value);
+          alarmIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setKpiValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = builderForValue.build();
+      public Builder setAlarmId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiValueBuilder_.setMessage(builderForValue.build());
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
-          if (kpiValue_ != null) {
-            kpiValue_ =
-              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+      public Builder mergeAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
           } else {
-            kpiValue_ = value;
+            alarmId_ = value;
           }
           onChanged();
         } else {
-          kpiValueBuilder_.mergeFrom(value);
+          alarmIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder clearKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
           onChanged();
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
         
         onChanged();
-        return getKpiValueFieldBuilder().getBuilder();
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-        if (kpiValueBuilder_ != null) {
-          return kpiValueBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
         } else {
-          return kpiValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+          return alarmId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         }
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
-          getKpiValueFieldBuilder() {
-        if (kpiValueBuilder_ == null) {
-          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
-                  getKpiValue(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getAlarmIdFieldBuilder() {
+        if (alarmIdBuilder_ == null) {
+          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getAlarmId(),
                   getParentForChildren(),
                   isClean());
-          kpiValue_ = null;
+          alarmId_ = null;
         }
-        return kpiValueBuilder_;
+        return alarmIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -3678,122 +18020,113 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
-    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
+    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
     }
 
-    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmID getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Kpi>
-        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
+    private static final com.google.protobuf.Parser<AlarmID>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
       @java.lang.Override
-      public Kpi parsePartialFrom(
+      public AlarmID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Kpi(input, extensionRegistry);
+        return new AlarmID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Kpi> parser() {
+    public static com.google.protobuf.Parser<AlarmID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Kpi> getParserForType() {
+    public com.google.protobuf.Parser<AlarmID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+  public interface AlarmResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmResponse)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>uint32 intVal = 1;</code>
-     * @return Whether the intVal field is set.
-     */
-    boolean hasIntVal();
-    /**
-     * <code>uint32 intVal = 1;</code>
-     * @return The intVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    int getIntVal();
-
+    boolean hasAlarmId();
     /**
-     * <code>float floatVal = 2;</code>
-     * @return Whether the floatVal field is set.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    boolean hasFloatVal();
+    monitoring.Monitoring.AlarmID getAlarmId();
     /**
-     * <code>float floatVal = 2;</code>
-     * @return The floatVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
      */
-    float getFloatVal();
+    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder();
 
     /**
-     * <code>string stringVal = 3;</code>
-     * @return Whether the stringVal field is set.
-     */
-    boolean hasStringVal();
-    /**
-     * <code>string stringVal = 3;</code>
-     * @return The stringVal.
+     * <code>string text = 2;</code>
+     * @return The text.
      */
-    java.lang.String getStringVal();
+    java.lang.String getText();
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The bytes for stringVal.
+     * <code>string text = 2;</code>
+     * @return The bytes for text.
      */
     com.google.protobuf.ByteString
-        getStringValBytes();
+        getTextBytes();
 
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
-    boolean hasBoolVal();
+    boolean hasKpiValue();
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
-    boolean getBoolVal();
-
-    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValue}
+   * Protobuf type {@code monitoring.AlarmResponse}
    */
-  public static final class KpiValue extends
+  public static final class AlarmResponse extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
-      KpiValueOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmResponse)
+      AlarmResponseOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValue.newBuilder() to construct.
-    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmResponse.newBuilder() to construct.
+    private AlarmResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValue() {
+    private AlarmResponse() {
+      text_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValue();
+      return new AlarmResponse();
     }
 
     @java.lang.Override
@@ -3801,7 +18134,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValue(
+    private AlarmResponse(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3819,25 +18152,36 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 8: {
-              valueCase_ = 1;
-              value_ = input.readUInt32();
-              break;
-            }
-            case 21: {
-              valueCase_ = 2;
-              value_ = input.readFloat();
+            case 10: {
+              monitoring.Monitoring.AlarmID.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
+              }
+              alarmId_ = input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
-            case 26: {
+            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
-              valueCase_ = 3;
-              value_ = s;
+
+              text_ = s;
               break;
             }
-            case 32: {
-              valueCase_ = 4;
-              value_ = input.readBool();
+            case 26: {
+              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
+              if (kpiValue_ != null) {
+                subBuilder = kpiValue_.toBuilder();
+              }
+              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(kpiValue_);
+                kpiValue_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -3861,175 +18205,105 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
-    }
-
-    private int valueCase_ = 0;
-    private java.lang.Object value_;
-    public enum ValueCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      INTVAL(1),
-      FLOATVAL(2),
-      STRINGVAL(3),
-      BOOLVAL(4),
-      VALUE_NOT_SET(0);
-      private final int value;
-      private ValueCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ValueCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ValueCase forNumber(int value) {
-        switch (value) {
-          case 1: return INTVAL;
-          case 2: return FLOATVAL;
-          case 3: return STRINGVAL;
-          case 4: return BOOLVAL;
-          case 0: return VALUE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ValueCase
-    getValueCase() {
-      return ValueCase.forNumber(
-          valueCase_);
+              monitoring.Monitoring.AlarmResponse.class, monitoring.Monitoring.AlarmResponse.Builder.class);
     }
 
-    public static final int INTVAL_FIELD_NUMBER = 1;
-    /**
-     * <code>uint32 intVal = 1;</code>
-     * @return Whether the intVal field is set.
-     */
-    @java.lang.Override
-    public boolean hasIntVal() {
-      return valueCase_ == 1;
-    }
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.AlarmID alarmId_;
     /**
-     * <code>uint32 intVal = 1;</code>
-     * @return The intVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public int getIntVal() {
-      if (valueCase_ == 1) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
-
-    public static final int FLOATVAL_FIELD_NUMBER = 2;
     /**
-     * <code>float floatVal = 2;</code>
-     * @return Whether the floatVal field is set.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public boolean hasFloatVal() {
-      return valueCase_ == 2;
+    public monitoring.Monitoring.AlarmID getAlarmId() {
+      return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
     }
     /**
-     * <code>float floatVal = 2;</code>
-     * @return The floatVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
      */
     @java.lang.Override
-    public float getFloatVal() {
-      if (valueCase_ == 2) {
-        return (java.lang.Float) value_;
-      }
-      return 0F;
+    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
 
-    public static final int STRINGVAL_FIELD_NUMBER = 3;
-    /**
-     * <code>string stringVal = 3;</code>
-     * @return Whether the stringVal field is set.
-     */
-    public boolean hasStringVal() {
-      return valueCase_ == 3;
-    }
+    public static final int TEXT_FIELD_NUMBER = 2;
+    private volatile java.lang.Object text_;
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The stringVal.
+     * <code>string text = 2;</code>
+     * @return The text.
      */
-    public java.lang.String getStringVal() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 3) {
-        ref = value_;
-      }
+    @java.lang.Override
+    public java.lang.String getText() {
+      java.lang.Object ref = text_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        if (valueCase_ == 3) {
-          value_ = s;
-        }
+        text_ = s;
         return s;
       }
     }
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The bytes for stringVal.
+     * <code>string text = 2;</code>
+     * @return The bytes for text.
      */
-    public com.google.protobuf.ByteString
-        getStringValBytes() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 3) {
-        ref = value_;
-      }
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTextBytes() {
+      java.lang.Object ref = text_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        if (valueCase_ == 3) {
-          value_ = b;
-        }
+        text_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int BOOLVAL_FIELD_NUMBER = 4;
+    public static final int KPI_VALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
     @java.lang.Override
-    public boolean hasBoolVal() {
-      return valueCase_ == 4;
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
     }
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
     @java.lang.Override
-    public boolean getBoolVal() {
-      if (valueCase_ == 4) {
-        return (java.lang.Boolean) value_;
-      }
-      return false;
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+      return getKpiValue();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4046,20 +18320,14 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (valueCase_ == 1) {
-        output.writeUInt32(
-            1, (int)((java.lang.Integer) value_));
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
-      if (valueCase_ == 2) {
-        output.writeFloat(
-            2, (float)((java.lang.Float) value_));
-      }
-      if (valueCase_ == 3) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
+      if (!getTextBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, text_);
       }
-      if (valueCase_ == 4) {
-        output.writeBool(
-            4, (boolean)((java.lang.Boolean) value_));
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
       }
       unknownFields.writeTo(output);
     }
@@ -4070,23 +18338,16 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (valueCase_ == 1) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(
-              1, (int)((java.lang.Integer) value_));
-      }
-      if (valueCase_ == 2) {
+      if (alarmId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(
-              2, (float)((java.lang.Float) value_));
+          .computeMessageSize(1, getAlarmId());
       }
-      if (valueCase_ == 3) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
+      if (!getTextBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, text_);
       }
-      if (valueCase_ == 4) {
+      if (kpiValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(
-              4, (boolean)((java.lang.Boolean) value_));
+          .computeMessageSize(3, getKpiValue());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4098,32 +18359,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmResponse)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
+      monitoring.Monitoring.AlarmResponse other = (monitoring.Monitoring.AlarmResponse) obj;
 
-      if (!getValueCase().equals(other.getValueCase())) return false;
-      switch (valueCase_) {
-        case 1:
-          if (getIntVal()
-              != other.getIntVal()) return false;
-          break;
-        case 2:
-          if (java.lang.Float.floatToIntBits(getFloatVal())
-              != java.lang.Float.floatToIntBits(
-                  other.getFloatVal())) return false;
-          break;
-        case 3:
-          if (!getStringVal()
-              .equals(other.getStringVal())) return false;
-          break;
-        case 4:
-          if (getBoolVal()
-              != other.getBoolVal()) return false;
-          break;
-        case 0:
-        default:
+      if (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
+      }
+      if (!getText()
+          .equals(other.getText())) return false;
+      if (hasKpiValue() != other.hasKpiValue()) return false;
+      if (hasKpiValue()) {
+        if (!getKpiValue()
+            .equals(other.getKpiValue())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -4136,96 +18387,84 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (valueCase_) {
-        case 1:
-          hash = (37 * hash) + INTVAL_FIELD_NUMBER;
-          hash = (53 * hash) + getIntVal();
-          break;
-        case 2:
-          hash = (37 * hash) + FLOATVAL_FIELD_NUMBER;
-          hash = (53 * hash) + java.lang.Float.floatToIntBits(
-              getFloatVal());
-          break;
-        case 3:
-          hash = (37 * hash) + STRINGVAL_FIELD_NUMBER;
-          hash = (53 * hash) + getStringVal().hashCode();
-          break;
-        case 4:
-          hash = (37 * hash) + BOOLVAL_FIELD_NUMBER;
-          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
-              getBoolVal());
-          break;
-        case 0:
-        default:
+      if (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
+      }
+      hash = (37 * hash) + TEXT_FIELD_NUMBER;
+      hash = (53 * hash) + getText().hashCode();
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPI_VALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -4238,7 +18477,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiValue prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmResponse prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -4254,26 +18493,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValue}
+     * Protobuf type {@code monitoring.AlarmResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiValue)
-        monitoring.Monitoring.KpiValueOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmResponse)
+        monitoring.Monitoring.AlarmResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+                monitoring.Monitoring.AlarmResponse.class, monitoring.Monitoring.AlarmResponse.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -4291,25 +18530,37 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        valueCase_ = 0;
-        value_ = null;
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
+        } else {
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
+        }
+        text_ = "";
+
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValue.getDefaultInstance();
+      public monitoring.Monitoring.AlarmResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmResponse.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue build() {
-        monitoring.Monitoring.KpiValue result = buildPartial();
+      public monitoring.Monitoring.AlarmResponse build() {
+        monitoring.Monitoring.AlarmResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -4317,21 +18568,19 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue buildPartial() {
-        monitoring.Monitoring.KpiValue result = new monitoring.Monitoring.KpiValue(this);
-        if (valueCase_ == 1) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 2) {
-          result.value_ = value_;
-        }
-        if (valueCase_ == 3) {
-          result.value_ = value_;
+      public monitoring.Monitoring.AlarmResponse buildPartial() {
+        monitoring.Monitoring.AlarmResponse result = new monitoring.Monitoring.AlarmResponse(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
+        } else {
+          result.alarmId_ = alarmIdBuilder_.build();
         }
-        if (valueCase_ == 4) {
-          result.value_ = value_;
+        result.text_ = text_;
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
         }
-        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -4370,38 +18619,25 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiValue) {
-          return mergeFrom((monitoring.Monitoring.KpiValue)other);
+        if (other instanceof monitoring.Monitoring.AlarmResponse) {
+          return mergeFrom((monitoring.Monitoring.AlarmResponse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiValue other) {
-        if (other == monitoring.Monitoring.KpiValue.getDefaultInstance()) return this;
-        switch (other.getValueCase()) {
-          case INTVAL: {
-            setIntVal(other.getIntVal());
-            break;
-          }
-          case FLOATVAL: {
-            setFloatVal(other.getFloatVal());
-            break;
-          }
-          case STRINGVAL: {
-            valueCase_ = 3;
-            value_ = other.value_;
-            onChanged();
-            break;
-          }
-          case BOOLVAL: {
-            setBoolVal(other.getBoolVal());
-            break;
-          }
-          case VALUE_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(monitoring.Monitoring.AlarmResponse other) {
+        if (other == monitoring.Monitoring.AlarmResponse.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
+        }
+        if (!other.getText().isEmpty()) {
+          text_ = other.text_;
+          onChanged();
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -4418,11 +18654,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiValue parsedMessage = null;
+        monitoring.Monitoring.AlarmResponse parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmResponse) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -4431,241 +18667,320 @@ public final class Monitoring {
         }
         return this;
       }
-      private int valueCase_ = 0;
-      private java.lang.Object value_;
-      public ValueCase
-          getValueCase() {
-        return ValueCase.forNumber(
-            valueCase_);
-      }
-
-      public Builder clearValue() {
-        valueCase_ = 0;
-        value_ = null;
-        onChanged();
-        return this;
-      }
-
 
+      private monitoring.Monitoring.AlarmID alarmId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return Whether the intVal field is set.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasIntVal() {
-        return valueCase_ == 1;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return The intVal.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public int getIntVal() {
-        if (valueCase_ == 1) {
-          return (java.lang.Integer) value_;
+      public monitoring.Monitoring.AlarmID getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+        } else {
+          return alarmIdBuilder_.getMessage();
         }
-        return 0;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @param value The intVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder setIntVal(int value) {
-        valueCase_ = 1;
-        value_ = value;
-        onChanged();
+      public Builder setAlarmId(monitoring.Monitoring.AlarmID value) {
+        if (alarmIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          alarmId_ = value;
+          onChanged();
+        } else {
+          alarmIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder clearIntVal() {
-        if (valueCase_ == 1) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setAlarmId(
+          monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
+        } else {
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
-
       /**
-       * <code>float floatVal = 2;</code>
-       * @return Whether the floatVal field is set.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public boolean hasFloatVal() {
-        return valueCase_ == 2;
+      public Builder mergeAlarmId(monitoring.Monitoring.AlarmID value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              monitoring.Monitoring.AlarmID.newBuilder(alarmId_).mergeFrom(value).buildPartial();
+          } else {
+            alarmId_ = value;
+          }
+          onChanged();
+        } else {
+          alarmIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @return The floatVal.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public float getFloatVal() {
-        if (valueCase_ == 2) {
-          return (java.lang.Float) value_;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
+          onChanged();
+        } else {
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
-        return 0F;
+
+        return this;
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @param value The floatVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder setFloatVal(float value) {
-        valueCase_ = 2;
-        value_ = value;
+      public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
+        
         onChanged();
-        return this;
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder clearFloatVal() {
-        if (valueCase_ == 2) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
+      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
+        } else {
+          return alarmId_ == null ?
+              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
         }
-        return this;
       }
-
       /**
-       * <code>string stringVal = 3;</code>
-       * @return Whether the stringVal field is set.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean hasStringVal() {
-        return valueCase_ == 3;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
+          getAlarmIdFieldBuilder() {
+        if (alarmIdBuilder_ == null) {
+          alarmIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
+                  getAlarmId(),
+                  getParentForChildren(),
+                  isClean());
+          alarmId_ = null;
+        }
+        return alarmIdBuilder_;
       }
+
+      private java.lang.Object text_ = "";
       /**
-       * <code>string stringVal = 3;</code>
-       * @return The stringVal.
+       * <code>string text = 2;</code>
+       * @return The text.
        */
-      @java.lang.Override
-      public java.lang.String getStringVal() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 3) {
-          ref = value_;
-        }
+      public java.lang.String getText() {
+        java.lang.Object ref = text_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          if (valueCase_ == 3) {
-            value_ = s;
-          }
+          text_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @return The bytes for stringVal.
+       * <code>string text = 2;</code>
+       * @return The bytes for text.
        */
-      @java.lang.Override
       public com.google.protobuf.ByteString
-          getStringValBytes() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 3) {
-          ref = value_;
-        }
+          getTextBytes() {
+        java.lang.Object ref = text_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          if (valueCase_ == 3) {
-            value_ = b;
-          }
+          text_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @param value The stringVal to set.
+       * <code>string text = 2;</code>
+       * @param value The text to set.
        * @return This builder for chaining.
        */
-      public Builder setStringVal(
+      public Builder setText(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  valueCase_ = 3;
-        value_ = value;
+  
+        text_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
+       * <code>string text = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStringVal() {
-        if (valueCase_ == 3) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
+      public Builder clearText() {
+        
+        text_ = getDefaultInstance().getText();
+        onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @param value The bytes for stringVal to set.
+       * <code>string text = 2;</code>
+       * @param value The bytes for text to set.
        * @return This builder for chaining.
        */
-      public Builder setStringValBytes(
+      public Builder setTextBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
-        valueCase_ = 3;
-        value_ = value;
+        
+        text_ = value;
         onChanged();
         return this;
       }
 
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return Whether the boolVal field is set.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return Whether the kpiValue field is set.
        */
-      public boolean hasBoolVal() {
-        return valueCase_ == 4;
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return The boolVal.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return The kpiValue.
        */
-      public boolean getBoolVal() {
-        if (valueCase_ == 4) {
-          return (java.lang.Boolean) value_;
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
         }
-        return false;
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @param value The boolVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder setBoolVal(boolean value) {
-        valueCase_ = 4;
-        value_ = value;
-        onChanged();
+      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValue_ = value;
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder clearBoolVal() {
-        if (valueCase_ == 4) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setKpiValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder mergeKpiValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiValueBuilder_ == null) {
+          if (kpiValue_ != null) {
+            kpiValue_ =
+              monitoring.Monitoring.KpiValue.newBuilder(kpiValue_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValue_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
           onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
         }
+
         return this;
       }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
+        if (kpiValueBuilder_ != null) {
+          return kpiValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> 
+          getKpiValueFieldBuilder() {
+        if (kpiValueBuilder_ == null) {
+          kpiValueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder>(
+                  getKpiValue(),
+                  getParentForChildren(),
+                  isClean());
+          kpiValue_ = null;
+        }
+        return kpiValueBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4679,95 +18994,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmResponse)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
-    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmResponse)
+    private static final monitoring.Monitoring.AlarmResponse DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmResponse();
     }
 
-    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmResponse getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiValue>
-        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
+    private static final com.google.protobuf.Parser<AlarmResponse>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmResponse>() {
       @java.lang.Override
-      public KpiValue parsePartialFrom(
+      public AlarmResponse parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValue(input, extensionRegistry);
+        return new AlarmResponse(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValue> parser() {
+    public static com.google.protobuf.Parser<AlarmResponse> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+    public com.google.protobuf.Parser<AlarmResponse> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmResponse getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+  public interface AlarmIDListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmIDList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    java.util.List<monitoring.Monitoring.Kpi> 
-        getKpiListList();
+    java.util.List<monitoring.Monitoring.AlarmID> 
+        getAlarmListList();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    monitoring.Monitoring.Kpi getKpiList(int index);
+    monitoring.Monitoring.AlarmID getAlarmList(int index);
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    int getKpiListCount();
+    int getAlarmListCount();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList();
+    java.util.List<? extends monitoring.Monitoring.AlarmIDOrBuilder> 
+        getAlarmListOrBuilderList();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+    monitoring.Monitoring.AlarmIDOrBuilder getAlarmListOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code monitoring.KpiList}
+   * Protobuf type {@code monitoring.AlarmIDList}
    */
-  public static final class KpiList extends
+  public static final class AlarmIDList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
-      KpiListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmIDList)
+      AlarmIDListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiList.newBuilder() to construct.
-    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmIDList.newBuilder() to construct.
+    private AlarmIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiList() {
-      kpiList_ = java.util.Collections.emptyList();
+    private AlarmIDList() {
+      alarmList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiList();
+      return new AlarmIDList();
     }
 
     @java.lang.Override
@@ -4775,7 +19090,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiList(
+    private AlarmIDList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4796,11 +19111,11 @@ public final class Monitoring {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                alarmList_ = new java.util.ArrayList<monitoring.Monitoring.AlarmID>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
+              alarmList_.add(
+                  input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -4819,7 +19134,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+          alarmList_ = java.util.Collections.unmodifiableList(alarmList_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -4827,55 +19142,55 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmIDList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_AlarmIDList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+              monitoring.Monitoring.AlarmIDList.class, monitoring.Monitoring.AlarmIDList.Builder.class);
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    public static final int ALARM_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.AlarmID> alarmList_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-      return kpiList_;
+    public java.util.List<monitoring.Monitoring.AlarmID> getAlarmListList() {
+      return alarmList_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public java.util.List<? extends monitoring.Monitoring.AlarmIDOrBuilder> 
+        getAlarmListOrBuilderList() {
+      return alarmList_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public int getAlarmListCount() {
+      return alarmList_.size();
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    @java.lang.Override
-    public monitoring.Monitoring.Kpi getKpiList(int index) {
-      return kpiList_.get(index);
+    @java.lang.Override
+    public monitoring.Monitoring.AlarmID getAlarmList(int index) {
+      return alarmList_.get(index);
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmListOrBuilder(
         int index) {
-      return kpiList_.get(index);
+      return alarmList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4892,8 +19207,8 @@ public final class Monitoring {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < kpiList_.size(); i++) {
-        output.writeMessage(1, kpiList_.get(i));
+      for (int i = 0; i < alarmList_.size(); i++) {
+        output.writeMessage(1, alarmList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -4904,9 +19219,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < kpiList_.size(); i++) {
+      for (int i = 0; i < alarmList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiList_.get(i));
+          .computeMessageSize(1, alarmList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4918,13 +19233,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmIDList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+      monitoring.Monitoring.AlarmIDList other = (monitoring.Monitoring.AlarmIDList) obj;
 
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (!getAlarmListList()
+          .equals(other.getAlarmListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4936,78 +19251,78 @@ public final class Monitoring {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getKpiListCount() > 0) {
-        hash = (37 * hash) + KPI_LIST_FIELD_NUMBER;
-        hash = (53 * hash) + getKpiListList().hashCode();
+      if (getAlarmListCount() > 0) {
+        hash = (37 * hash) + ALARM_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmIDList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmIDList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(java.io.InputStream input)
+    public static monitoring.Monitoring.AlarmIDList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseDelimitedFrom(
+    public static monitoring.Monitoring.AlarmIDList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5020,7 +19335,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.KpiList prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.AlarmIDList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5036,26 +19351,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiList}
+     * Protobuf type {@code monitoring.AlarmIDList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.KpiList)
-        monitoring.Monitoring.KpiListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.AlarmIDList)
+        monitoring.Monitoring.AlarmIDListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmIDList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmIDList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+                monitoring.Monitoring.AlarmIDList.class, monitoring.Monitoring.AlarmIDList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmIDList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5068,17 +19383,17 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
+          getAlarmListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+        if (alarmListBuilder_ == null) {
+          alarmList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiListBuilder_.clear();
+          alarmListBuilder_.clear();
         }
         return this;
       }
@@ -5086,17 +19401,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmIDList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      public monitoring.Monitoring.AlarmIDList getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmIDList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList build() {
-        monitoring.Monitoring.KpiList result = buildPartial();
+      public monitoring.Monitoring.AlarmIDList build() {
+        monitoring.Monitoring.AlarmIDList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5104,17 +19419,17 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList buildPartial() {
-        monitoring.Monitoring.KpiList result = new monitoring.Monitoring.KpiList(this);
+      public monitoring.Monitoring.AlarmIDList buildPartial() {
+        monitoring.Monitoring.AlarmIDList result = new monitoring.Monitoring.AlarmIDList(this);
         int from_bitField0_ = bitField0_;
-        if (kpiListBuilder_ == null) {
+        if (alarmListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            alarmList_ = java.util.Collections.unmodifiableList(alarmList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.kpiList_ = kpiList_;
+          result.alarmList_ = alarmList_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.alarmList_ = alarmListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -5154,39 +19469,39 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiList) {
-          return mergeFrom((monitoring.Monitoring.KpiList)other);
+        if (other instanceof monitoring.Monitoring.AlarmIDList) {
+          return mergeFrom((monitoring.Monitoring.AlarmIDList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(monitoring.Monitoring.KpiList other) {
-        if (other == monitoring.Monitoring.KpiList.getDefaultInstance()) return this;
-        if (kpiListBuilder_ == null) {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiList_.isEmpty()) {
-              kpiList_ = other.kpiList_;
+      public Builder mergeFrom(monitoring.Monitoring.AlarmIDList other) {
+        if (other == monitoring.Monitoring.AlarmIDList.getDefaultInstance()) return this;
+        if (alarmListBuilder_ == null) {
+          if (!other.alarmList_.isEmpty()) {
+            if (alarmList_.isEmpty()) {
+              alarmList_ = other.alarmList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
+              ensureAlarmListIsMutable();
+              alarmList_.addAll(other.alarmList_);
             }
             onChanged();
           }
         } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
+          if (!other.alarmList_.isEmpty()) {
+            if (alarmListBuilder_.isEmpty()) {
+              alarmListBuilder_.dispose();
+              alarmListBuilder_ = null;
+              alarmList_ = other.alarmList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
+              alarmListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
+                   getAlarmListFieldBuilder() : null;
             } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
+              alarmListBuilder_.addAllMessages(other.alarmList_);
             }
           }
         }
@@ -5205,11 +19520,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.KpiList parsedMessage = null;
+        monitoring.Monitoring.AlarmIDList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmIDList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -5220,244 +19535,244 @@ public final class Monitoring {
       }
       private int bitField0_;
 
-      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+      private java.util.List<monitoring.Monitoring.AlarmID> alarmList_ =
         java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
+      private void ensureAlarmListIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          alarmList_ = new java.util.ArrayList<monitoring.Monitoring.AlarmID>(alarmList_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmListBuilder_;
 
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-        if (kpiListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(kpiList_);
+      public java.util.List<monitoring.Monitoring.AlarmID> getAlarmListList() {
+        if (alarmListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(alarmList_);
         } else {
-          return kpiListBuilder_.getMessageList();
+          return alarmListBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
+      public int getAlarmListCount() {
+        if (alarmListBuilder_ == null) {
+          return alarmList_.size();
         } else {
-          return kpiListBuilder_.getCount();
+          return alarmListBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
+      public monitoring.Monitoring.AlarmID getAlarmList(int index) {
+        if (alarmListBuilder_ == null) {
+          return alarmList_.get(index);
         } else {
-          return kpiListBuilder_.getMessage(index);
+          return alarmListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder setAlarmList(
+          int index, monitoring.Monitoring.AlarmID value) {
+        if (alarmListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
+          ensureAlarmListIsMutable();
+          alarmList_.set(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, value);
+          alarmListBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
+      public Builder setAlarmList(
+          int index, monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
+          alarmListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addAlarmList(monitoring.Monitoring.AlarmID value) {
+        if (alarmListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
+          ensureAlarmListIsMutable();
+          alarmList_.add(value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(value);
+          alarmListBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addAlarmList(
+          int index, monitoring.Monitoring.AlarmID value) {
+        if (alarmListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
+          ensureAlarmListIsMutable();
+          alarmList_.add(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, value);
+          alarmListBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
+      public Builder addAlarmList(
+          monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
+          alarmListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
+      public Builder addAlarmList(
+          int index, monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
+          alarmListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
+      public Builder addAllAlarmList(
+          java.lang.Iterable<? extends monitoring.Monitoring.AlarmID> values) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
+              values, alarmList_);
           onChanged();
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          alarmListBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+      public Builder clearAlarmList() {
+        if (alarmListBuilder_ == null) {
+          alarmList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiListBuilder_.clear();
+          alarmListBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
+      public Builder removeAlarmList(int index) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.remove(index);
           onChanged();
         } else {
-          kpiListBuilder_.remove(index);
+          alarmListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+      public monitoring.Monitoring.AlarmID.Builder getAlarmListBuilder(
           int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
+        return getAlarmListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmListOrBuilder(
           int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
+        if (alarmListBuilder_ == null) {
+          return alarmList_.get(index);  } else {
+          return alarmListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-           getKpiListOrBuilderList() {
-        if (kpiListBuilder_ != null) {
-          return kpiListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends monitoring.Monitoring.AlarmIDOrBuilder> 
+           getAlarmListOrBuilderList() {
+        if (alarmListBuilder_ != null) {
+          return alarmListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          return java.util.Collections.unmodifiableList(alarmList_);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.AlarmID.Builder addAlarmListBuilder() {
+        return getAlarmListFieldBuilder().addBuilder(
+            monitoring.Monitoring.AlarmID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+      public monitoring.Monitoring.AlarmID.Builder addAlarmListBuilder(
           int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+        return getAlarmListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.AlarmID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
+      public java.util.List<monitoring.Monitoring.AlarmID.Builder> 
+           getAlarmListBuilderList() {
+        return getAlarmListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> 
-          getKpiListFieldBuilder() {
-        if (kpiListBuilder_ == null) {
-          kpiListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder>(
-                  kpiList_,
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
+          getAlarmListFieldBuilder() {
+        if (alarmListBuilder_ == null) {
+          alarmListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
+                  alarmList_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiList_ = null;
+          alarmList_ = null;
         }
-        return kpiListBuilder_;
+        return alarmListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -5472,41 +19787,41 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmIDList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
-    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmIDList)
+    private static final monitoring.Monitoring.AlarmIDList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmIDList();
     }
 
-    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmIDList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<KpiList>
-        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
+    private static final com.google.protobuf.Parser<AlarmIDList>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmIDList>() {
       @java.lang.Override
-      public KpiList parsePartialFrom(
+      public AlarmIDList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiList(input, extensionRegistry);
+        return new AlarmIDList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiList> parser() {
+    public static com.google.protobuf.Parser<AlarmIDList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiList> getParserForType() {
+    public com.google.protobuf.Parser<AlarmIDList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmIDList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -5517,11 +19832,26 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_BundleKpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_EditedKpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_MonitorKpiRequest_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiQuery_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiQuery_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_KpiId_descriptor;
   private static final 
@@ -5532,6 +19862,11 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_Kpi_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiValueRange_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiValueRange_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_KpiValue_descriptor;
   private static final 
@@ -5542,6 +19877,51 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiDescriptorList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiDescriptorList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubsDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubsDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubscriptionID_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubscriptionID_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubsResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubsResponse_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubsIDList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubsIDList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmID_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmID_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmResponse_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmIDList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmIDList_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -5552,32 +19932,97 @@ public final class Monitoring {
   static {
     java.lang.String[] descriptorData = {
       "\n\020monitoring.proto\022\nmonitoring\032\rcontext." +
-      "proto\032\026kpi_sample_types.proto\"\332\001\n\rKpiDes" +
+      "proto\032\026kpi_sample_types.proto\"\376\001\n\rKpiDes" +
       "criptor\022\027\n\017kpi_description\030\001 \001(\t\0228\n\017kpi_" +
       "sample_type\030\002 \001(\0162\037.kpi_sample_types.Kpi" +
       "SampleType\022$\n\tdevice_id\030\003 \001(\0132\021.context." +
       "DeviceId\022(\n\013endpoint_id\030\004 \001(\0132\023.context." +
       "EndPointId\022&\n\nservice_id\030\005 \001(\0132\022.context" +
-      ".ServiceId\"p\n\021MonitorKpiRequest\022!\n\006kpi_i" +
-      "d\030\001 \001(\0132\021.monitoring.KpiId\022\033\n\023sampling_d" +
-      "uration_s\030\002 \001(\002\022\033\n\023sampling_interval_s\030\003" +
-      " \001(\002\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context." +
-      "Uuid\"d\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring" +
-      ".KpiId\022\021\n\ttimestamp\030\002 \001(\t\022\'\n\tkpi_value\030\004" +
-      " \001(\0132\024.monitoring.KpiValue\"a\n\010KpiValue\022\020" +
-      "\n\006intVal\030\001 \001(\rH\000\022\022\n\010floatVal\030\002 \001(\002H\000\022\023\n\t" +
-      "stringVal\030\003 \001(\tH\000\022\021\n\007boolVal\030\004 \001(\010H\000B\007\n\005" +
-      "value\",\n\007KpiList\022!\n\010kpi_list\030\001 \003(\0132\017.mon" +
-      "itoring.Kpi2\363\002\n\021MonitoringService\022;\n\tCre" +
-      "ateKpi\022\031.monitoring.KpiDescriptor\032\021.moni" +
-      "toring.KpiId\"\000\022B\n\020GetKpiDescriptor\022\021.mon" +
-      "itoring.KpiId\032\031.monitoring.KpiDescriptor" +
-      "\"\000\022/\n\nIncludeKpi\022\017.monitoring.Kpi\032\016.cont" +
-      "ext.Empty\"\000\022=\n\nMonitorKpi\022\035.monitoring.M" +
-      "onitorKpiRequest\032\016.context.Empty\"\000\0226\n\014Ge" +
-      "tStreamKpi\022\021.monitoring.KpiId\032\017.monitori" +
-      "ng.Kpi\"\0000\001\0225\n\rGetInstantKpi\022\021.monitoring" +
-      ".KpiId\032\017.monitoring.Kpi\"\000b\006proto3"
+      ".ServiceId\022\"\n\010slice_id\030\006 \001(\0132\020.context.S" +
+      "liceId\"\254\002\n\023BundleKpiDescriptor\022\027\n\017kpi_de" +
+      "scription\030\001 \001(\t\022&\n\013kpi_id_list\030\002 \003(\0132\021.m" +
+      "onitoring.KpiId\0228\n\017kpi_sample_type\030\003 \001(\016" +
+      "2\037.kpi_sample_types.KpiSampleType\022$\n\tdev" +
+      "ice_id\030\004 \001(\0132\021.context.DeviceId\022(\n\013endpo" +
+      "int_id\030\005 \001(\0132\023.context.EndPointId\022&\n\nser" +
+      "vice_id\030\006 \001(\0132\022.context.ServiceId\022\"\n\010sli" +
+      "ce_id\030\007 \001(\0132\020.context.SliceId\"\317\002\n\023Edited" +
+      "KpiDescriptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitori" +
+      "ng.KpiId\022\027\n\017kpi_description\030\002 \001(\t\022&\n\013kpi" +
+      "_id_list\030\003 \003(\0132\021.monitoring.KpiId\0228\n\017kpi" +
+      "_sample_type\030\004 \001(\0162\037.kpi_sample_types.Kp" +
+      "iSampleType\022$\n\tdevice_id\030\005 \001(\0132\021.context" +
+      ".DeviceId\022(\n\013endpoint_id\030\006 \001(\0132\023.context" +
+      ".EndPointId\022&\n\nservice_id\030\007 \001(\0132\022.contex" +
+      "t.ServiceId\022\"\n\010slice_id\030\010 \001(\0132\020.context." +
+      "SliceId\"l\n\021MonitorKpiRequest\022!\n\006kpi_id\030\001" +
+      " \001(\0132\021.monitoring.KpiId\022\033\n\023monitoring_wi" +
+      "ndow_s\030\002 \001(\002\022\027\n\017sampling_rate_s\030\003 \001(\002\"\241\001" +
+      "\n\010KpiQuery\022!\n\006kpi_id\030\001 \003(\0132\021.monitoring." +
+      "KpiId\022\033\n\023monitoring_window_s\030\002 \001(\002\022\027\n\017sa" +
+      "mpling_rate_s\030\003 \001(\002\022\026\n\016last_n_samples\030\004 " +
+      "\001(\r\022\022\n\nstart_date\030\005 \001(\t\022\020\n\010end_date\030\006 \001(" +
+      "\t\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context.Uui" +
+      "d\"d\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kp" +
+      "iId\022\021\n\ttimestamp\030\002 \001(\t\022\'\n\tkpi_value\030\003 \001(" +
+      "\0132\024.monitoring.KpiValue\"e\n\rKpiValueRange" +
+      "\022)\n\013kpiMinValue\030\001 \001(\0132\024.monitoring.KpiVa" +
+      "lue\022)\n\013kpiMaxValue\030\002 \001(\0132\024.monitoring.Kp" +
+      "iValue\"a\n\010KpiValue\022\020\n\006intVal\030\001 \001(\rH\000\022\022\n\010" +
+      "floatVal\030\002 \001(\002H\000\022\023\n\tstringVal\030\003 \001(\tH\000\022\021\n" +
+      "\007boolVal\030\004 \001(\010H\000B\007\n\005value\",\n\007KpiList\022!\n\010" +
+      "kpi_list\030\001 \003(\0132\017.monitoring.Kpi\"K\n\021KpiDe" +
+      "scriptorList\0226\n\023kpi_descriptor_list\030\001 \003(" +
+      "\0132\031.monitoring.KpiDescriptor\"\223\001\n\016SubsDes" +
+      "criptor\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring.Kpi" +
+      "Id\022\033\n\023sampling_duration_s\030\002 \001(\002\022\033\n\023sampl" +
+      "ing_interval_s\030\003 \001(\002\022\022\n\nstart_date\030\004 \001(\t" +
+      "\022\020\n\010end_date\030\005 \001(\t\"0\n\016SubscriptionID\022\036\n\007" +
+      "subs_id\030\001 \001(\0132\r.context.Uuid\"b\n\014SubsResp" +
+      "onse\022+\n\007subs_id\030\001 \001(\0132\032.monitoring.Subsc" +
+      "riptionID\022%\n\010kpi_list\030\002 \003(\0132\023.monitoring" +
+      ".KpiList\";\n\nSubsIDList\022-\n\tsubs_list\030\001 \003(" +
+      "\0132\032.monitoring.SubscriptionID\"\244\001\n\017AlarmD" +
+      "escriptor\022\031\n\021alarm_description\030\001 \001(\t\022\014\n\004" +
+      "name\030\002 \001(\t\022!\n\006kpi_id\030\003 \001(\0132\021.monitoring." +
+      "KpiId\0222\n\017kpi_value_range\030\004 \001(\0132\031.monitor" +
+      "ing.KpiValueRange\022\021\n\ttimestamp\030\005 \001(\t\"*\n\007" +
+      "AlarmID\022\037\n\010alarm_id\030\001 \001(\0132\r.context.Uuid" +
+      "\"m\n\rAlarmResponse\022%\n\010alarm_id\030\001 \001(\0132\023.mo" +
+      "nitoring.AlarmID\022\014\n\004text\030\002 \001(\t\022\'\n\tkpi_va" +
+      "lue\030\003 \001(\0132\024.monitoring.KpiValue\"6\n\013Alarm" +
+      "IDList\022\'\n\nalarm_list\030\001 \003(\0132\023.monitoring." +
+      "AlarmID2\271\t\n\021MonitoringService\022;\n\tCreateK" +
+      "pi\022\031.monitoring.KpiDescriptor\032\021.monitori" +
+      "ng.KpiId\"\000\022F\n\021EditKpiDescriptor\022\037.monito" +
+      "ring.EditedKpiDescriptor\032\016.context.Empty" +
+      "\"\000\0220\n\tDeleteKpi\022\021.monitoring.KpiId\032\016.con" +
+      "text.Empty\"\000\022G\n\024GetKpiDescriptorList\022\016.c" +
+      "ontext.Empty\032\035.monitoring.KpiDescriptorL" +
+      "ist\"\000\022G\n\017CreateBundleKpi\022\037.monitoring.Bu" +
+      "ndleKpiDescriptor\032\021.monitoring.KpiId\"\000\022B" +
+      "\n\020GetKpiDescriptor\022\021.monitoring.KpiId\032\031." +
+      "monitoring.KpiDescriptor\"\000\022/\n\nIncludeKpi" +
+      "\022\017.monitoring.Kpi\032\016.context.Empty\"\000\022=\n\nM" +
+      "onitorKpi\022\035.monitoring.MonitorKpiRequest" +
+      "\032\016.context.Empty\"\000\022;\n\014QueryKpiData\022\024.mon" +
+      "itoring.KpiQuery\032\023.monitoring.KpiList\"\000\022" +
+      "C\n\014SubscribeKpi\022\032.monitoring.SubsDescrip" +
+      "tor\032\023.monitoring.KpiList\"\0000\001\022M\n\021GetSubsD" +
+      "escriptor\022\032.monitoring.SubscriptionID\032\032." +
+      "monitoring.SubsDescriptor\"\000\022<\n\020GetSubscr" +
+      "iptions\022\016.context.Empty\032\026.monitoring.Sub" +
+      "sIDList\"\000\022C\n\023EditKpiSubscription\022\032.monit" +
+      "oring.SubsDescriptor\032\016.context.Empty\"\000\022D" +
+      "\n\016CreateKpiAlarm\022\033.monitoring.AlarmDescr" +
+      "iptor\032\023.monitoring.AlarmID\"\000\022=\n\014EditKpiA" +
+      "larm\022\033.monitoring.AlarmDescriptor\032\016.cont" +
+      "ext.Empty\"\000\0226\n\tGetAlarms\022\016.context.Empty" +
+      "\032\027.monitoring.AlarmIDList\"\000\022H\n\022GetAlarmD" +
+      "escriptor\022\023.monitoring.AlarmID\032\033.monitor" +
+      "ing.AlarmDescriptor\"\000\022L\n\026GetAlarmRespons" +
+      "eStream\022\023.monitoring.AlarmID\032\031.monitorin" +
+      "g.AlarmResponse\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -5590,37 +20035,115 @@ public final class Monitoring {
     internal_static_monitoring_KpiDescriptor_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiDescriptor_descriptor,
-        new java.lang.String[] { "KpiDescription", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", });
-    internal_static_monitoring_MonitorKpiRequest_descriptor =
+        new java.lang.String[] { "KpiDescription", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_BundleKpiDescriptor_descriptor =
       getDescriptor().getMessageTypes().get(1);
+    internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_BundleKpiDescriptor_descriptor,
+        new java.lang.String[] { "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_EditedKpiDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_monitoring_EditedKpiDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_EditedKpiDescriptor_descriptor,
+        new java.lang.String[] { "KpiId", "KpiDescription", "KpiIdList", "KpiSampleType", "DeviceId", "EndpointId", "ServiceId", "SliceId", });
+    internal_static_monitoring_MonitorKpiRequest_descriptor =
+      getDescriptor().getMessageTypes().get(3);
     internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_MonitorKpiRequest_descriptor,
-        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", });
+        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", });
+    internal_static_monitoring_KpiQuery_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    internal_static_monitoring_KpiQuery_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_KpiQuery_descriptor,
+        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", "LastNSamples", "StartDate", "EndDate", });
     internal_static_monitoring_KpiId_descriptor =
-      getDescriptor().getMessageTypes().get(2);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_monitoring_KpiId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiId_descriptor,
         new java.lang.String[] { "KpiId", });
     internal_static_monitoring_Kpi_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(6);
     internal_static_monitoring_Kpi_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_Kpi_descriptor,
         new java.lang.String[] { "KpiId", "Timestamp", "KpiValue", });
+    internal_static_monitoring_KpiValueRange_descriptor =
+      getDescriptor().getMessageTypes().get(7);
+    internal_static_monitoring_KpiValueRange_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_KpiValueRange_descriptor,
+        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", });
     internal_static_monitoring_KpiValue_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_monitoring_KpiValue_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiValue_descriptor,
         new java.lang.String[] { "IntVal", "FloatVal", "StringVal", "BoolVal", "Value", });
     internal_static_monitoring_KpiList_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_monitoring_KpiList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_KpiList_descriptor,
         new java.lang.String[] { "KpiList", });
+    internal_static_monitoring_KpiDescriptorList_descriptor =
+      getDescriptor().getMessageTypes().get(10);
+    internal_static_monitoring_KpiDescriptorList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_KpiDescriptorList_descriptor,
+        new java.lang.String[] { "KpiDescriptorList", });
+    internal_static_monitoring_SubsDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(11);
+    internal_static_monitoring_SubsDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_SubsDescriptor_descriptor,
+        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", "StartDate", "EndDate", });
+    internal_static_monitoring_SubscriptionID_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    internal_static_monitoring_SubscriptionID_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_SubscriptionID_descriptor,
+        new java.lang.String[] { "SubsId", });
+    internal_static_monitoring_SubsResponse_descriptor =
+      getDescriptor().getMessageTypes().get(13);
+    internal_static_monitoring_SubsResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_SubsResponse_descriptor,
+        new java.lang.String[] { "SubsId", "KpiList", });
+    internal_static_monitoring_SubsIDList_descriptor =
+      getDescriptor().getMessageTypes().get(14);
+    internal_static_monitoring_SubsIDList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_SubsIDList_descriptor,
+        new java.lang.String[] { "SubsList", });
+    internal_static_monitoring_AlarmDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(15);
+    internal_static_monitoring_AlarmDescriptor_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmDescriptor_descriptor,
+        new java.lang.String[] { "AlarmDescription", "Name", "KpiId", "KpiValueRange", "Timestamp", });
+    internal_static_monitoring_AlarmID_descriptor =
+      getDescriptor().getMessageTypes().get(16);
+    internal_static_monitoring_AlarmID_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmID_descriptor,
+        new java.lang.String[] { "AlarmId", });
+    internal_static_monitoring_AlarmResponse_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_monitoring_AlarmResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmResponse_descriptor,
+        new java.lang.String[] { "AlarmId", "Text", "KpiValue", });
+    internal_static_monitoring_AlarmIDList_descriptor =
+      getDescriptor().getMessageTypes().get(18);
+    internal_static_monitoring_AlarmIDList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmIDList_descriptor,
+        new java.lang.String[] { "AlarmList", });
     context.ContextOuterClass.getDescriptor();
     kpi_sample_types.KpiSampleTypes.getDescriptor();
   }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
index 480e193125e51851a72e18473c139d71190bab11..f826e1167d1ed56567fc470ba70cc09003617eda 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -10,16 +10,40 @@ public interface MonitoringService extends MutinyService {
     
     io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request);
     
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request);
+    
     io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request);
+    
     
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request);
     
     
 
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
index b0b2f5abd4144d8f6e41c2613a36c5b78051dd57..c7f776e7bd0c56cabc7009e7b7bdb208669fb441 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -24,6 +24,38 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+       try {
+         return delegate.editKpiDescriptor(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+       try {
+         return delegate.deleteKpi(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getKpiDescriptorList(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+       try {
+         return delegate.createBundleKpi(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
        try {
          return delegate.getKpiDescriptor(request);
@@ -48,18 +80,83 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+       try {
+         return delegate.queryKpiData(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+       try {
+         return delegate.getSubsDescriptor(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getSubscriptions(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+       try {
+         return delegate.editKpiSubscription(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       try {
+         return delegate.createKpiAlarm(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       try {
+         return delegate.editKpiAlarm(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getAlarms(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+       try {
+         return delegate.getAlarmDescriptor(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
        try {
-         return delegate.getInstantKpi(request);
+         return delegate.subscribeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.getStreamKpi(request);
+         return delegate.getAlarmResponseStream(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
index 293a7c418e6e027792e8007234e34225b8c1848a..35c98e8ff2c240e749e602c4d097c3bef81c8203 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -25,6 +25,22 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.createKpi(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+       return stub.editKpiDescriptor(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+       return stub.deleteKpi(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+       return stub.getKpiDescriptorList(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+       return stub.createBundleKpi(request);
+    }
+    @Override
     public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
        return stub.getKpiDescriptor(request);
     }
@@ -37,13 +53,46 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.monitorKpi(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getInstantKpi(request);
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+       return stub.queryKpiData(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+       return stub.getSubsDescriptor(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+       return stub.getSubscriptions(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.editKpiSubscription(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.createKpiAlarm(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.editKpiAlarm(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+       return stub.getAlarms(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+       return stub.getAlarmDescriptor(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.subscribeKpi(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getStreamKpi(request);
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+       return stub.getAlarmResponseStream(request);
     }
 
 }
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
index 7749c322a714ed96bc523a6bb77da9d43e54dbca..d4ae3510a2f622b195854e4c7d197b8e3ff4d5fd 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -45,6 +45,130 @@ public final class MonitoringServiceGrpc {
     return getCreateKpiMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiDescriptor",
+      requestType = monitoring.Monitoring.EditedKpiDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
+    if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiDescriptorMethod = getEditKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      context.ContextOuterClass.Empty> getDeleteKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "DeleteKpi",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
+    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+          MonitoringServiceGrpc.getDeleteKpiMethod = getDeleteKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("DeleteKpi"))
+              .build();
+        }
+      }
+    }
+    return getDeleteKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.KpiDescriptorList> getGetKpiDescriptorListMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptorList",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.KpiDescriptorList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.KpiDescriptorList> getGetKpiDescriptorListMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, monitoring.Monitoring.KpiDescriptorList> getGetKpiDescriptorListMethod;
+    if ((getGetKpiDescriptorListMethod = MonitoringServiceGrpc.getGetKpiDescriptorListMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetKpiDescriptorListMethod = MonitoringServiceGrpc.getGetKpiDescriptorListMethod) == null) {
+          MonitoringServiceGrpc.getGetKpiDescriptorListMethod = getGetKpiDescriptorListMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, monitoring.Monitoring.KpiDescriptorList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptorList"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptorList"))
+              .build();
+        }
+      }
+    }
+    return getGetKpiDescriptorListMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "CreateBundleKpi",
+      requestType = monitoring.Monitoring.BundleKpiDescriptor.class,
+      responseType = monitoring.Monitoring.KpiId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateBundleKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId> getCreateBundleKpiMethod;
+    if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getCreateBundleKpiMethod = MonitoringServiceGrpc.getCreateBundleKpiMethod) == null) {
+          MonitoringServiceGrpc.getCreateBundleKpiMethod = getCreateBundleKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.BundleKpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateBundleKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateBundleKpi"))
+              .build();
+        }
+      }
+    }
+    return getCreateBundleKpiMethod;
+  }
+
   private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
       monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
 
@@ -138,66 +262,314 @@ public final class MonitoringServiceGrpc {
     return getMonitorKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery,
+      monitoring.Monitoring.KpiList> getQueryKpiDataMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetStreamKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.Kpi.class,
+      fullMethodName = SERVICE_NAME + '/' + "QueryKpiData",
+      requestType = monitoring.Monitoring.KpiQuery.class,
+      responseType = monitoring.Monitoring.KpiList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery,
+      monitoring.Monitoring.KpiList> getQueryKpiDataMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.KpiList> getQueryKpiDataMethod;
+    if ((getQueryKpiDataMethod = MonitoringServiceGrpc.getQueryKpiDataMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getQueryKpiDataMethod = MonitoringServiceGrpc.getQueryKpiDataMethod) == null) {
+          MonitoringServiceGrpc.getQueryKpiDataMethod = getQueryKpiDataMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.KpiList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "QueryKpiData"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiQuery.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("QueryKpiData"))
+              .build();
+        }
+      }
+    }
+    return getQueryKpiDataMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SubscribeKpi",
+      requestType = monitoring.Monitoring.SubsDescriptor.class,
+      responseType = monitoring.Monitoring.KpiList.class,
       methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
-    if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
+    if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetStreamKpiMethod = getGetStreamKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+        if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
+          MonitoringServiceGrpc.getSubscribeKpiMethod = getSubscribeKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetStreamKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SubscribeKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.Kpi.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetStreamKpi"))
+                  monitoring.Monitoring.KpiList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SubscribeKpi"))
               .build();
         }
       }
     }
-    return getGetStreamKpiMethod;
+    return getSubscribeKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetInstantKpiMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
+      monitoring.Monitoring.SubsDescriptor> getGetSubsDescriptorMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetInstantKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.Kpi.class,
+      fullMethodName = SERVICE_NAME + '/' + "GetSubsDescriptor",
+      requestType = monitoring.Monitoring.SubscriptionID.class,
+      responseType = monitoring.Monitoring.SubsDescriptor.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetInstantKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi> getGetInstantKpiMethod;
-    if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
+      monitoring.Monitoring.SubsDescriptor> getGetSubsDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubsDescriptor> getGetSubsDescriptorMethod;
+    if ((getGetSubsDescriptorMethod = MonitoringServiceGrpc.getGetSubsDescriptorMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetInstantKpiMethod = getGetInstantKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+        if ((getGetSubsDescriptorMethod = MonitoringServiceGrpc.getGetSubsDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetSubsDescriptorMethod = getGetSubsDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubsDescriptor>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInstantKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSubsDescriptor"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+                  monitoring.Monitoring.SubscriptionID.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.Kpi.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetInstantKpi"))
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetSubsDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetSubsDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.SubsIDList> getGetSubscriptionsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetSubscriptions",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.SubsIDList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.SubsIDList> getGetSubscriptionsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, monitoring.Monitoring.SubsIDList> getGetSubscriptionsMethod;
+    if ((getGetSubscriptionsMethod = MonitoringServiceGrpc.getGetSubscriptionsMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetSubscriptionsMethod = MonitoringServiceGrpc.getGetSubscriptionsMethod) == null) {
+          MonitoringServiceGrpc.getGetSubscriptionsMethod = getGetSubscriptionsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, monitoring.Monitoring.SubsIDList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSubscriptions"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.SubsIDList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetSubscriptions"))
+              .build();
+        }
+      }
+    }
+    return getGetSubscriptionsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiSubscription",
+      requestType = monitoring.Monitoring.SubsDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
+    if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiSubscriptionMethod = getEditKpiSubscriptionMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiSubscription"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiSubscription"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiSubscriptionMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpiAlarm",
+      requestType = monitoring.Monitoring.AlarmDescriptor.class,
+      responseType = monitoring.Monitoring.AlarmID.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
+    if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiAlarmMethod = getCreateKpiAlarmMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpiAlarm"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpiAlarm"))
+              .build();
+        }
+      }
+    }
+    return getCreateKpiAlarmMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiAlarm",
+      requestType = monitoring.Monitoring.AlarmDescriptor.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiAlarmMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty> getEditKpiAlarmMethod;
+    if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiAlarmMethod = MonitoringServiceGrpc.getEditKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiAlarmMethod = getEditKpiAlarmMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiAlarm"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiAlarm"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiAlarmMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.AlarmIDList> getGetAlarmsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetAlarms",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.AlarmIDList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.AlarmIDList> getGetAlarmsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, monitoring.Monitoring.AlarmIDList> getGetAlarmsMethod;
+    if ((getGetAlarmsMethod = MonitoringServiceGrpc.getGetAlarmsMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetAlarmsMethod = MonitoringServiceGrpc.getGetAlarmsMethod) == null) {
+          MonitoringServiceGrpc.getGetAlarmsMethod = getGetAlarmsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, monitoring.Monitoring.AlarmIDList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarms"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmIDList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarms"))
               .build();
         }
       }
     }
-    return getGetInstantKpiMethod;
+    return getGetAlarmsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmDescriptor> getGetAlarmDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetAlarmDescriptor",
+      requestType = monitoring.Monitoring.AlarmID.class,
+      responseType = monitoring.Monitoring.AlarmDescriptor.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmDescriptor> getGetAlarmDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmDescriptor> getGetAlarmDescriptorMethod;
+    if ((getGetAlarmDescriptorMethod = MonitoringServiceGrpc.getGetAlarmDescriptorMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetAlarmDescriptorMethod = MonitoringServiceGrpc.getGetAlarmDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetAlarmDescriptorMethod = getGetAlarmDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmDescriptor>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetAlarmDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetAlarmResponseStream",
+      requestType = monitoring.Monitoring.AlarmID.class,
+      responseType = monitoring.Monitoring.AlarmResponse.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
+    if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetAlarmResponseStreamMethod = MonitoringServiceGrpc.getGetAlarmResponseStreamMethod) == null) {
+          MonitoringServiceGrpc.getGetAlarmResponseStreamMethod = getGetAlarmResponseStreamMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmResponse>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmResponseStream"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmResponse.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmResponseStream"))
+              .build();
+        }
+      }
+    }
+    return getGetAlarmResponseStreamMethod;
   }
 
   /**
@@ -255,6 +627,34 @@ public final class MonitoringServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiDescriptorMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptorList(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorListMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateBundleKpiMethod(), responseObserver);
+    }
+
     /**
      */
     public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
@@ -278,16 +678,72 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
+    public void queryKpiData(monitoring.Monitoring.KpiQuery request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getQueryKpiDataMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSubscribeKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getSubsDescriptor(monitoring.Monitoring.SubscriptionID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSubsDescriptorMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getSubscriptions(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSubscriptionsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiSubscriptionMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiAlarmMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiAlarmMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarms(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarmDescriptor(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmDescriptorMethod(), responseObserver);
     }
 
     /**
      */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmResponseStreamMethod(), responseObserver);
     }
 
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
@@ -299,6 +755,34 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.KpiDescriptor,
                 monitoring.Monitoring.KpiId>(
                   this, METHODID_CREATE_KPI)))
+          .addMethod(
+            getEditKpiDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.EditedKpiDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_DESCRIPTOR)))
+          .addMethod(
+            getDeleteKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_DELETE_KPI)))
+          .addMethod(
+            getGetKpiDescriptorListMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                monitoring.Monitoring.KpiDescriptorList>(
+                  this, METHODID_GET_KPI_DESCRIPTOR_LIST)))
+          .addMethod(
+            getCreateBundleKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.BundleKpiDescriptor,
+                monitoring.Monitoring.KpiId>(
+                  this, METHODID_CREATE_BUNDLE_KPI)))
           .addMethod(
             getGetKpiDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
@@ -321,19 +805,75 @@ public final class MonitoringServiceGrpc {
                 context.ContextOuterClass.Empty>(
                   this, METHODID_MONITOR_KPI)))
           .addMethod(
-            getGetStreamKpiMethod(),
+            getQueryKpiDataMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiQuery,
+                monitoring.Monitoring.KpiList>(
+                  this, METHODID_QUERY_KPI_DATA)))
+          .addMethod(
+            getSubscribeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.Kpi>(
-                  this, METHODID_GET_STREAM_KPI)))
+                monitoring.Monitoring.SubsDescriptor,
+                monitoring.Monitoring.KpiList>(
+                  this, METHODID_SUBSCRIBE_KPI)))
           .addMethod(
-            getGetInstantKpiMethod(),
+            getGetSubsDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.Kpi>(
-                  this, METHODID_GET_INSTANT_KPI)))
+                monitoring.Monitoring.SubscriptionID,
+                monitoring.Monitoring.SubsDescriptor>(
+                  this, METHODID_GET_SUBS_DESCRIPTOR)))
+          .addMethod(
+            getGetSubscriptionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                monitoring.Monitoring.SubsIDList>(
+                  this, METHODID_GET_SUBSCRIPTIONS)))
+          .addMethod(
+            getEditKpiSubscriptionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.SubsDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_SUBSCRIPTION)))
+          .addMethod(
+            getCreateKpiAlarmMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmDescriptor,
+                monitoring.Monitoring.AlarmID>(
+                  this, METHODID_CREATE_KPI_ALARM)))
+          .addMethod(
+            getEditKpiAlarmMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_ALARM)))
+          .addMethod(
+            getGetAlarmsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                monitoring.Monitoring.AlarmIDList>(
+                  this, METHODID_GET_ALARMS)))
+          .addMethod(
+            getGetAlarmDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmID,
+                monitoring.Monitoring.AlarmDescriptor>(
+                  this, METHODID_GET_ALARM_DESCRIPTOR)))
+          .addMethod(
+            getGetAlarmResponseStreamMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmID,
+                monitoring.Monitoring.AlarmResponse>(
+                  this, METHODID_GET_ALARM_RESPONSE_STREAM)))
           .build();
     }
   }
@@ -360,6 +900,38 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptorList(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
     /**
      */
     public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
@@ -386,18 +958,82 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+    public void queryKpiData(monitoring.Monitoring.KpiQuery request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getQueryKpiDataMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getGetStreamKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSubscribeKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+    public void getSubsDescriptor(monitoring.Monitoring.SubscriptionID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getGetSubsDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getSubscriptions(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetSubscriptionsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarms(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarmDescriptor(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetAlarmResponseStreamMethod(), getCallOptions()), request, responseObserver);
     }
   }
 
@@ -422,6 +1058,34 @@ public final class MonitoringServiceGrpc {
           getChannel(), getCreateKpiMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty deleteKpi(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getDeleteKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiDescriptorList getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetKpiDescriptorListMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiId createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getCreateBundleKpiMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
@@ -445,17 +1109,74 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public java.util.Iterator<monitoring.Monitoring.Kpi> getStreamKpi(
-        monitoring.Monitoring.KpiId request) {
+    public monitoring.Monitoring.KpiList queryKpiData(monitoring.Monitoring.KpiQuery request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getQueryKpiDataMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<monitoring.Monitoring.KpiList> subscribeKpi(
+        monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getGetStreamKpiMethod(), getCallOptions(), request);
+          getChannel(), getSubscribeKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.SubsDescriptor getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetSubsDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.SubsIDList getSubscriptions(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetSubscriptionsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiSubscriptionMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.AlarmID createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getCreateKpiAlarmMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiAlarmMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public monitoring.Monitoring.Kpi getInstantKpi(monitoring.Monitoring.KpiId request) {
+    public monitoring.Monitoring.AlarmIDList getAlarms(context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetInstantKpiMethod(), getCallOptions(), request);
+          getChannel(), getGetAlarmsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.AlarmDescriptor getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetAlarmDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(
+        monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetAlarmResponseStreamMethod(), getCallOptions(), request);
     }
   }
 
@@ -481,6 +1202,38 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiDescriptor(
+        monitoring.Monitoring.EditedKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorListMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createBundleKpi(
+        monitoring.Monitoring.BundleKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getCreateBundleKpiMethod(), getCallOptions()), request);
+    }
+
     /**
      */
     public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
@@ -507,19 +1260,87 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.Kpi> getInstantKpi(
-        monitoring.Monitoring.KpiId request) {
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiList> queryKpiData(
+        monitoring.Monitoring.KpiQuery request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getQueryKpiDataMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(
+        monitoring.Monitoring.SubscriptionID request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetSubsDescriptorMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.SubsIDList> getSubscriptions(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetSubscriptionsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiSubscription(
+        monitoring.Monitoring.SubsDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmID> createKpiAlarm(
+        monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiAlarm(
+        monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmIDList> getAlarms(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(
+        monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
     }
   }
 
   private static final int METHODID_CREATE_KPI = 0;
-  private static final int METHODID_GET_KPI_DESCRIPTOR = 1;
-  private static final int METHODID_INCLUDE_KPI = 2;
-  private static final int METHODID_MONITOR_KPI = 3;
-  private static final int METHODID_GET_STREAM_KPI = 4;
-  private static final int METHODID_GET_INSTANT_KPI = 5;
+  private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+  private static final int METHODID_DELETE_KPI = 2;
+  private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
+  private static final int METHODID_CREATE_BUNDLE_KPI = 4;
+  private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
+  private static final int METHODID_INCLUDE_KPI = 6;
+  private static final int METHODID_MONITOR_KPI = 7;
+  private static final int METHODID_QUERY_KPI_DATA = 8;
+  private static final int METHODID_SUBSCRIBE_KPI = 9;
+  private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
+  private static final int METHODID_GET_SUBSCRIPTIONS = 11;
+  private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
+  private static final int METHODID_CREATE_KPI_ALARM = 13;
+  private static final int METHODID_EDIT_KPI_ALARM = 14;
+  private static final int METHODID_GET_ALARMS = 15;
+  private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
+  private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -542,6 +1363,22 @@ public final class MonitoringServiceGrpc {
           serviceImpl.createKpi((monitoring.Monitoring.KpiDescriptor) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
           break;
+        case METHODID_EDIT_KPI_DESCRIPTOR:
+          serviceImpl.editKpiDescriptor((monitoring.Monitoring.EditedKpiDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_DELETE_KPI:
+          serviceImpl.deleteKpi((monitoring.Monitoring.KpiId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_KPI_DESCRIPTOR_LIST:
+          serviceImpl.getKpiDescriptorList((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver);
+          break;
+        case METHODID_CREATE_BUNDLE_KPI:
+          serviceImpl.createBundleKpi((monitoring.Monitoring.BundleKpiDescriptor) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver);
+          break;
         case METHODID_GET_KPI_DESCRIPTOR:
           serviceImpl.getKpiDescriptor((monitoring.Monitoring.KpiId) request,
               (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver);
@@ -554,13 +1391,45 @@ public final class MonitoringServiceGrpc {
           serviceImpl.monitorKpi((monitoring.Monitoring.MonitorKpiRequest) request,
               (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
           break;
-        case METHODID_GET_STREAM_KPI:
-          serviceImpl.getStreamKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver);
+        case METHODID_QUERY_KPI_DATA:
+          serviceImpl.queryKpiData((monitoring.Monitoring.KpiQuery) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
+          break;
+        case METHODID_SUBSCRIBE_KPI:
+          serviceImpl.subscribeKpi((monitoring.Monitoring.SubsDescriptor) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
+          break;
+        case METHODID_GET_SUBS_DESCRIPTOR:
+          serviceImpl.getSubsDescriptor((monitoring.Monitoring.SubscriptionID) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor>) responseObserver);
+          break;
+        case METHODID_GET_SUBSCRIPTIONS:
+          serviceImpl.getSubscriptions((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver);
+          break;
+        case METHODID_EDIT_KPI_SUBSCRIPTION:
+          serviceImpl.editKpiSubscription((monitoring.Monitoring.SubsDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_CREATE_KPI_ALARM:
+          serviceImpl.createKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver);
+          break;
+        case METHODID_EDIT_KPI_ALARM:
+          serviceImpl.editKpiAlarm((monitoring.Monitoring.AlarmDescriptor) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_ALARMS:
+          serviceImpl.getAlarms((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList>) responseObserver);
+          break;
+        case METHODID_GET_ALARM_DESCRIPTOR:
+          serviceImpl.getAlarmDescriptor((monitoring.Monitoring.AlarmID) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver);
           break;
-        case METHODID_GET_INSTANT_KPI:
-          serviceImpl.getInstantKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver);
+        case METHODID_GET_ALARM_RESPONSE_STREAM:
+          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmID) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver);
           break;
         default:
           throw new AssertionError();
@@ -624,11 +1493,23 @@ public final class MonitoringServiceGrpc {
           serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
               .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier())
               .addMethod(getCreateKpiMethod())
+              .addMethod(getEditKpiDescriptorMethod())
+              .addMethod(getDeleteKpiMethod())
+              .addMethod(getGetKpiDescriptorListMethod())
+              .addMethod(getCreateBundleKpiMethod())
               .addMethod(getGetKpiDescriptorMethod())
               .addMethod(getIncludeKpiMethod())
               .addMethod(getMonitorKpiMethod())
-              .addMethod(getGetStreamKpiMethod())
-              .addMethod(getGetInstantKpiMethod())
+              .addMethod(getQueryKpiDataMethod())
+              .addMethod(getSubscribeKpiMethod())
+              .addMethod(getGetSubsDescriptorMethod())
+              .addMethod(getGetSubscriptionsMethod())
+              .addMethod(getEditKpiSubscriptionMethod())
+              .addMethod(getCreateKpiAlarmMethod())
+              .addMethod(getEditKpiAlarmMethod())
+              .addMethod(getGetAlarmsMethod())
+              .addMethod(getGetAlarmDescriptorMethod())
+              .addMethod(getGetAlarmResponseStreamMethod())
               .build();
         }
       }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
index e5157378c1d8d4608d5da2ec0e429fbb2412c175..46f442b743ee176a83a416fe13711beda6baf937 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -41,6 +41,26 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiDescriptor);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptorList);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createBundleKpi);
+        }
+
+        
         public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
             return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
         }
@@ -56,13 +76,53 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInstantKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::queryKpiData);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getSubsDescriptor);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getSubscriptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiSubscription);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpiAlarm);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiAlarm);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getAlarms);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getStreamKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getAlarmDescriptor);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::subscribeKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getAlarmResponseStream);
         }
 
     }
@@ -88,6 +148,26 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -103,12 +183,52 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -121,6 +241,34 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.KpiDescriptor,
                                             monitoring.Monitoring.KpiId>(
                                             this, METHODID_CREATE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.EditedKpiDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_DELETE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorListMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            monitoring.Monitoring.KpiDescriptorList>(
+                                            this, METHODID_GET_KPI_DESCRIPTOR_LIST, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getCreateBundleKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.BundleKpiDescriptor,
+                                            monitoring.Monitoring.KpiId>(
+                                            this, METHODID_CREATE_BUNDLE_KPI, compression)))
                     .addMethod(
                             monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
                             asyncUnaryCall(
@@ -143,29 +291,97 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             context.ContextOuterClass.Empty>(
                                             this, METHODID_MONITOR_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetStreamKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getQueryKpiDataMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiQuery,
+                                            monitoring.Monitoring.KpiList>(
+                                            this, METHODID_QUERY_KPI_DATA, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getSubscribeKpiMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.Kpi>(
-                                            this, METHODID_GET_STREAM_KPI, compression)))
+                                            monitoring.Monitoring.SubsDescriptor,
+                                            monitoring.Monitoring.KpiList>(
+                                            this, METHODID_SUBSCRIBE_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetInstantKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getGetSubsDescriptorMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.Kpi>(
-                                            this, METHODID_GET_INSTANT_KPI, compression)))
+                                            monitoring.Monitoring.SubscriptionID,
+                                            monitoring.Monitoring.SubsDescriptor>(
+                                            this, METHODID_GET_SUBS_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetSubscriptionsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            monitoring.Monitoring.SubsIDList>(
+                                            this, METHODID_GET_SUBSCRIPTIONS, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiSubscriptionMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.SubsDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_SUBSCRIPTION, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getCreateKpiAlarmMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmDescriptor,
+                                            monitoring.Monitoring.AlarmID>(
+                                            this, METHODID_CREATE_KPI_ALARM, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiAlarmMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_ALARM, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetAlarmsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            monitoring.Monitoring.AlarmIDList>(
+                                            this, METHODID_GET_ALARMS, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetAlarmDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmID,
+                                            monitoring.Monitoring.AlarmDescriptor>(
+                                            this, METHODID_GET_ALARM_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetAlarmResponseStreamMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmID,
+                                            monitoring.Monitoring.AlarmResponse>(
+                                            this, METHODID_GET_ALARM_RESPONSE_STREAM, compression)))
                     .build();
         }
     }
 
     private static final int METHODID_CREATE_KPI = 0;
-    private static final int METHODID_GET_KPI_DESCRIPTOR = 1;
-    private static final int METHODID_INCLUDE_KPI = 2;
-    private static final int METHODID_MONITOR_KPI = 3;
-    private static final int METHODID_GET_STREAM_KPI = 4;
-    private static final int METHODID_GET_INSTANT_KPI = 5;
+    private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+    private static final int METHODID_DELETE_KPI = 2;
+    private static final int METHODID_GET_KPI_DESCRIPTOR_LIST = 3;
+    private static final int METHODID_CREATE_BUNDLE_KPI = 4;
+    private static final int METHODID_GET_KPI_DESCRIPTOR = 5;
+    private static final int METHODID_INCLUDE_KPI = 6;
+    private static final int METHODID_MONITOR_KPI = 7;
+    private static final int METHODID_QUERY_KPI_DATA = 8;
+    private static final int METHODID_SUBSCRIBE_KPI = 9;
+    private static final int METHODID_GET_SUBS_DESCRIPTOR = 10;
+    private static final int METHODID_GET_SUBSCRIPTIONS = 11;
+    private static final int METHODID_EDIT_KPI_SUBSCRIPTION = 12;
+    private static final int METHODID_CREATE_KPI_ALARM = 13;
+    private static final int METHODID_EDIT_KPI_ALARM = 14;
+    private static final int METHODID_GET_ALARMS = 15;
+    private static final int METHODID_GET_ALARM_DESCRIPTOR = 16;
+    private static final int METHODID_GET_ALARM_RESPONSE_STREAM = 17;
 
     private static final class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -192,6 +408,30 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::createKpi);
                     break;
+                case METHODID_EDIT_KPI_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.EditedKpiDescriptor) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::editKpiDescriptor);
+                    break;
+                case METHODID_DELETE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::deleteKpi);
+                    break;
+                case METHODID_GET_KPI_DESCRIPTOR_LIST:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList>) responseObserver,
+                            compression,
+                            serviceImpl::getKpiDescriptorList);
+                    break;
+                case METHODID_CREATE_BUNDLE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.BundleKpiDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
+                            compression,
+                            serviceImpl::createBundleKpi);
+                    break;
                 case METHODID_GET_KPI_DESCRIPTOR:
                     io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
                             (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
@@ -210,17 +450,65 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::monitorKpi);
                     break;
-                case METHODID_GET_STREAM_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
+                case METHODID_QUERY_KPI_DATA:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiQuery) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
                             compression,
-                            serviceImpl::getStreamKpi);
+                            serviceImpl::queryKpiData);
                     break;
-                case METHODID_GET_INSTANT_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
+                case METHODID_SUBSCRIBE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.SubsDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
+                            compression,
+                            serviceImpl::subscribeKpi);
+                    break;
+                case METHODID_GET_SUBS_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getSubsDescriptor);
+                    break;
+                case METHODID_GET_SUBSCRIPTIONS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver,
+                            compression,
+                            serviceImpl::getSubscriptions);
+                    break;
+                case METHODID_EDIT_KPI_SUBSCRIPTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubsDescriptor) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::editKpiSubscription);
+                    break;
+                case METHODID_CREATE_KPI_ALARM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmID>) responseObserver,
+                            compression,
+                            serviceImpl::createKpiAlarm);
+                    break;
+                case METHODID_EDIT_KPI_ALARM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmDescriptor) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::editKpiAlarm);
+                    break;
+                case METHODID_GET_ALARMS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList>) responseObserver,
+                            compression,
+                            serviceImpl::getAlarms);
+                    break;
+                case METHODID_GET_ALARM_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmID) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getAlarmDescriptor);
+                    break;
+                case METHODID_GET_ALARM_RESPONSE_STREAM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmID) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver,
                             compression,
-                            serviceImpl::getInstantKpi);
+                            serviceImpl::getAlarmResponseStream);
                     break;
                 default:
                     throw new java.lang.AssertionError();
diff --git a/src/automation/target/kubernetes/kubernetes.yml b/src/automation/target/kubernetes/kubernetes.yml
index d494e82f18a77d85b696d865270eac7923f6cc7c..f5cea3757989504c02ee45db20a1a2ef80b28f98 100644
--- a/src/automation/target/kubernetes/kubernetes.yml
+++ b/src/automation/target/kubernetes/kubernetes.yml
@@ -3,8 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:57:09 +0000
+    app.quarkus.io/commit-id: ac09ca6e8827edf1379450dc3e68dcdc35957479
+    app.quarkus.io/build-timestamp: 2022-08-02 - 07:36:43 +0000
   labels:
     app.kubernetes.io/name: automationservice
     app: automationservice
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:57:09 +0000
+    app.quarkus.io/commit-id: ac09ca6e8827edf1379450dc3e68dcdc35957479
+    app.quarkus.io/build-timestamp: 2022-08-02 - 07:36:43 +0000
   labels:
     app: automationservice
     app.kubernetes.io/name: automationservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-        app.quarkus.io/build-timestamp: 2022-07-14 - 07:57:09 +0000
+        app.quarkus.io/commit-id: ac09ca6e8827edf1379450dc3e68dcdc35957479
+        app.quarkus.io/build-timestamp: 2022-08-02 - 07:36:43 +0000
       labels:
         app: automationservice
         app.kubernetes.io/name: automationservice
@@ -51,10 +51,10 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-            - name: DEVICE_SERVICE_HOST
-              value: DeviceService
             - name: CONTEXT_SERVICE_HOST
               value: ContextService
+            - name: DEVICE_SERVICE_HOST
+              value: DeviceService
           image: registry.gitlab.com/teraflow-h2020/controller/automation:0.2.0
           imagePullPolicy: Always
           livenessProbe:
diff --git a/src/common/tools/grpc/ConfigRules.py b/src/common/tools/grpc/ConfigRules.py
new file mode 100644
index 0000000000000000000000000000000000000000..e109cb7a00086da8530c7677967d86e57df1457a
--- /dev/null
+++ b/src/common/tools/grpc/ConfigRules.py
@@ -0,0 +1,62 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+import json
+from typing import Any, Dict, Tuple
+from common.proto.context_pb2 import ConfigActionEnum, ConfigRule
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+def update_config_rule_custom(config_rules, resource_key : str, fields : Dict[str, Tuple[Any, bool]]) -> ConfigRule:
+    # fields: Dict[field_name : str, Tuple[field_value : Any, raise_if_differs : bool]]
+
+    for config_rule in config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != resource_key: continue
+        json_resource_value = json.loads(config_rule.custom.resource_value)
+        break   # found, end loop
+    else:
+        # not found, add it
+        config_rule = config_rules.add()    # pylint: disable=no-member
+        config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+        config_rule.custom.resource_key = resource_key
+        json_resource_value = {}
+
+    for field_name,(field_value, raise_if_differs) in fields.items():
+        if (field_name not in json_resource_value) or not raise_if_differs:
+            # missing or raise_if_differs=False, add/update it
+            json_resource_value[field_name] = field_value
+        elif json_resource_value[field_name] != field_value:
+            # exists, differs, and raise_if_differs=True
+            msg = 'Specified {:s}({:s}) differs existing value({:s})'
+            raise Exception(msg.format(str(field_name), str(field_value), str(json_resource_value[field_name])))
+
+    config_rule.custom.resource_value = json.dumps(json_resource_value, sort_keys=True)
+
+def copy_config_rules(source_config_rules, target_config_rules):
+    for source_config_rule in source_config_rules:
+        config_rule_kind = source_config_rule.WhichOneof('config_rule')
+        if config_rule_kind == 'custom':
+            custom = source_config_rule.custom
+            resource_key = custom.resource_key
+            resource_value = json.loads(custom.resource_value)
+            raise_if_differs = True
+            fields = {name:(value, raise_if_differs) for name,value in resource_value.items()}
+            update_config_rule_custom(target_config_rules, resource_key, fields)
+
+        else:
+            raise NotImplementedError('ConfigRule({:s})'.format(grpc_message_to_json_string(source_config_rule)))
diff --git a/src/common/tools/grpc/Constraints.py b/src/common/tools/grpc/Constraints.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9dd4f40cbd823752b8cc09936ac48ebe32ec1a5
--- /dev/null
+++ b/src/common/tools/grpc/Constraints.py
@@ -0,0 +1,164 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+import json
+from typing import Any, Dict, Optional, Tuple
+from common.proto.context_pb2 import Constraint, EndPointId
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+def update_constraint_custom(constraints, constraint_type : str, fields : Dict[str, Tuple[Any, bool]]) -> Constraint:
+    # fields: Dict[field_name : str, Tuple[field_value : Any, raise_if_differs : bool]]
+
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'custom': continue
+        if constraint.custom.constraint_type != constraint_type: continue
+        json_constraint_value = json.loads(constraint.custom.constraint_value)
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+        constraint.custom.constraint_type = constraint_type
+        json_constraint_value = {}
+
+    for field_name,(field_value, raise_if_differs) in fields.items():
+        if (field_name not in json_constraint_value) or not raise_if_differs:
+            # missing or raise_if_differs=False, add/update it
+            json_constraint_value[field_name] = field_value
+        elif json_constraint_value[field_name] != field_value:
+            # exists, differs, and raise_if_differs=True
+            msg = 'Specified {:s}({:s}) differs existing value({:s})'
+            raise Exception(msg.format(str(field_name), str(field_value), str(json_constraint_value[field_name])))
+
+    constraint.custom.constraint_value = json.dumps(json_constraint_value, sort_keys=True)
+
+def update_constraint_endpoint_location(
+    constraints, endpoint_id : EndPointId,
+    region : Optional[str] = None, gps_position : Optional[Tuple[float, float]] = None
+) -> Constraint:
+    # gps_position: (latitude, longitude)
+    if region is not None and gps_position is not None:
+        raise Exception('Only one of region/gps_position can be provided')
+
+    endpoint_uuid = endpoint_id.endpoint_uuid.uuid
+    device_uuid = endpoint_id.device_id.device_uuid.uuid
+    topology_uuid = endpoint_id.topology_id.topology_uuid.uuid
+    context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
+
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'endpoint_location': continue
+        _endpoint_id = constraint.endpoint_location.endpoint_id
+        if _endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        if _endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        if _endpoint_id.topology_id.topology_uuid.uuid != topology_uuid: continue
+        if _endpoint_id.topology_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+        _endpoint_id = constraint.endpoint_location.endpoint_id
+        _endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+        _endpoint_id.device_id.device_uuid.uuid = device_uuid
+        _endpoint_id.topology_id.topology_uuid.uuid = topology_uuid
+        _endpoint_id.topology_id.context_id.context_uuid.uuid = context_uuid
+
+    location = constraint.endpoint_location.location
+    if region is not None:
+        location.region = region
+    elif gps_position is not None:
+        location.gps_position.latitude = gps_position[0]
+        location.gps_position.longitude = gps_position[1]
+    return constraint
+
+def update_constraint_endpoint_priority(constraints, endpoint_id : EndPointId, priority : int) -> Constraint:
+    endpoint_uuid = endpoint_id.endpoint_uuid.uuid
+    device_uuid = endpoint_id.device_id.device_uuid.uuid
+    topology_uuid = endpoint_id.topology_id.topology_uuid.uuid
+    context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
+
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'endpoint_priority': continue
+        _endpoint_id = constraint.endpoint_priority.endpoint_id
+        if _endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        if _endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        if _endpoint_id.topology_id.topology_uuid.uuid != topology_uuid: continue
+        if _endpoint_id.topology_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+        _endpoint_id = constraint.endpoint_priority.endpoint_id
+        _endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+        _endpoint_id.device_id.device_uuid.uuid = device_uuid
+        _endpoint_id.topology_id.topology_uuid.uuid = topology_uuid
+        _endpoint_id.topology_id.context_id.context_uuid.uuid = context_uuid
+
+    constraint.endpoint_priority.priority = priority
+    return constraint
+
+def update_constraint_sla_availability(constraints, num_disjoint_paths : int, all_active : bool) -> Constraint:
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'sla_availability': continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+
+    constraint.sla_availability.num_disjoint_paths = num_disjoint_paths
+    constraint.sla_availability.all_active = all_active
+    return constraint
+
+
+def copy_constraints(source_constraints, target_constraints):
+    for source_constraint in source_constraints:
+        constraint_kind = source_constraint.WhichOneof('constraint')
+        if constraint_kind == 'custom':
+            custom = source_constraint.custom
+            constraint_type = custom.constraint_type
+            constraint_value = json.loads(custom.constraint_value)
+            raise_if_differs = True
+            fields = {name:(value, raise_if_differs) for name,value in constraint_value.items()}
+            update_constraint_custom(target_constraints, constraint_type, fields)
+
+        elif constraint_kind == 'endpoint_location':
+            endpoint_id = source_constraint.endpoint_location.endpoint_id
+            location = source_constraint.endpoint_location.location
+            location_kind = location.WhichOneof('location')
+            if location_kind == 'region':
+                region = location.region
+                update_constraint_endpoint_location(target_constraints, endpoint_id, region=region)
+            elif location_kind == 'gps_position':
+                gps_position = location.gps_position
+                gps_position = (gps_position.latitude, gps_position.longitude)
+                update_constraint_endpoint_location(target_constraints, endpoint_id, gps_position=gps_position)
+            else:
+                str_constraint = grpc_message_to_json_string(source_constraint)
+                raise NotImplementedError('Constraint({:s}): Location({:s})'.format(str_constraint, constraint_kind))
+
+        elif constraint_kind == 'endpoint_priority':
+            endpoint_id = source_constraint.endpoint_priority.endpoint_id
+            priority = source_constraint.endpoint_priority.priority
+            update_constraint_endpoint_priority(target_constraints, endpoint_id, priority)
+
+        elif constraint_kind == 'sla_availability':
+            sla_availability = source_constraint.sla_availability
+            num_disjoint_paths = sla_availability.num_disjoint_paths
+            all_active = sla_availability.all_active
+            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active)
+
+        else:
+            raise NotImplementedError('Constraint({:s})'.format(grpc_message_to_json_string(source_constraint)))
diff --git a/src/common/tools/grpc/EndPointIds.py b/src/common/tools/grpc/EndPointIds.py
new file mode 100644
index 0000000000000000000000000000000000000000..b3830d4c809bb6dc065e58bc8af0f1ad56c610f4
--- /dev/null
+++ b/src/common/tools/grpc/EndPointIds.py
@@ -0,0 +1,50 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+from typing import Optional
+from common.proto.context_pb2 import EndPointId
+
+def update_endpoint_ids(
+    endpoint_ids, device_uuid : str, endpoint_uuid : str,
+    context_uuid : Optional[str] = None, topology_uuid : Optional[str] = None
+) -> EndPointId:
+    for endpoint_id in endpoint_ids:
+        if endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        if endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        topology_id = endpoint_id.topology_id
+        if topology_uuid is not None and topology_id.topology_uuid.uuid != topology_uuid: continue
+        if context_uuid is not None and topology_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, do nothing
+    else:
+        # not found, add it
+        endpoint_id = endpoint_ids.add()    # pylint: disable=no-member
+        endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+        endpoint_id.device_id.device_uuid.uuid = device_uuid
+        if topology_uuid is not None: endpoint_id.topology_id.topology_uuid.uuid = topology_uuid
+        if context_uuid is not None: endpoint_id.topology_id.context_id.context_uuid.uuid = context_uuid
+    return endpoint_id
+
+def copy_endpoint_ids(source_endpoint_ids, target_endpoint_ids):
+    for source_endpoint_id in source_endpoint_ids:
+        device_uuid = source_endpoint_id.device_id.device_uuid.uuid
+        endpoint_uuid = source_endpoint_id.endpoint_uuid.uuid
+        source_topology_id = source_endpoint_id.topology_id
+        context_uuid = source_topology_id.context_id.context_uuid.uuid
+        topology_uuid = source_topology_id.topology_uuid.uuid
+        update_endpoint_ids(
+            target_endpoint_ids, device_uuid, endpoint_uuid, context_uuid=context_uuid, topology_uuid=topology_uuid)
diff --git a/src/common/tools/grpc/ServiceIds.py b/src/common/tools/grpc/ServiceIds.py
new file mode 100644
index 0000000000000000000000000000000000000000..0e1073cab7c4e82e0f21584f2831d94a0b8a23ba
--- /dev/null
+++ b/src/common/tools/grpc/ServiceIds.py
@@ -0,0 +1,37 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+
+from common.proto.context_pb2 import ServiceId
+
+def update_service_ids(service_ids, context_uuid : str, service_uuid : str) -> ServiceId:
+    for service_id in service_ids:
+        if service_id.service_uuid.uuid != service_uuid: continue
+        if service_id.context_id.context_uuid.uuid != context_uuid: continue
+        break   # found, do nothing
+    else:
+        # not found, add it
+        service_id = service_ids.add()    # pylint: disable=no-member
+        service_id.service_uuid.uuid = service_uuid
+        service_id.context_id.context_uuid.uuid = context_uuid
+    return service_id
+
+def copy_service_ids(source_service_ids, target_service_ids):
+    for source_service_id in source_service_ids:
+        context_uuid = source_service_id.context_id.context_uuid.uuid
+        service_uuid = source_service_id.service_uuid.uuid
+        update_service_ids(target_service_ids, context_uuid, service_uuid)
diff --git a/src/common/tools/object_factory/Service.py b/src/common/tools/object_factory/Service.py
index f0f49210ec067267984dede6f28d7adad8009261..51f75e6dbe5e430330e697da772d65703f7568c7 100644
--- a/src/common/tools/object_factory/Service.py
+++ b/src/common/tools/object_factory/Service.py
@@ -21,7 +21,7 @@ from common.tools.object_factory.Context import json_context_id
 def get_service_uuid(a_endpoint_id : Dict, z_endpoint_id : Dict) -> str:
     return 'svc:{:s}/{:s}=={:s}/{:s}'.format(
         a_endpoint_id['device_id']['device_uuid']['uuid'], a_endpoint_id['endpoint_uuid']['uuid'],
-        a_endpoint_id['device_id']['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
+        z_endpoint_id['device_id']['device_uuid']['uuid'], z_endpoint_id['endpoint_uuid']['uuid'])
 
 def json_service_id(service_uuid : str, context_id : Optional[Dict] = None):
     result = {'service_uuid': {'uuid': service_uuid}}
diff --git a/src/compute/.gitlab-ci.yml b/src/compute/.gitlab-ci.yml
index 9cbc2b03f9b3d553fea75bde3fdc9fc03d95d229..52b36e8196822c35503f3e644a0d57691fc5f5f0 100644
--- a/src/compute/.gitlab-ci.yml
+++ b/src/compute/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build compute:
   variables:
     IMAGE_NAME: 'compute' # name of the microservice
diff --git a/src/compute/requirements.in b/src/compute/requirements.in
index af1ed2a2856a7be38393c034310e74f69ad7b558..906615e54488056e3f8e8801bbfd333eab1c23b7 100644
--- a/src/compute/requirements.in
+++ b/src/compute/requirements.in
@@ -1,4 +1,4 @@
-Flask==2.0.2
+Flask==2.1.3
 Flask-HTTPAuth==4.5.0
 Flask-RESTful==0.3.9
 jsonschema==4.4.0
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
index b7f377254f3bec36ce407ee2e25f63adba22baa7..d432e5605cfebaa01c2a8faf0cbffcff110d7dbe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
@@ -21,10 +21,10 @@ DEFAULT_BGP_ROUTE_TARGET = '{:d}:{:d}'.format(DEFAULT_BGP_AS, 333)
 # device_uuid:endpoint_uuid => (
 #       device_uuid, endpoint_uuid, router_id, route_distinguisher, sub_if_index, address_ip, address_prefix)
 BEARER_MAPPINGS = {
-    'R1-INF:13/2/1': ('R1-INF', '13/2/1', '10.10.10.1', '65000:100', 400, '3.3.2.1', 24),
-    'R2-EMU:13/2/1': ('R2-EMU', '13/2/1', '12.12.12.1', '65000:120', 450, '3.4.2.1', 24),
-    'R3-INF:13/2/1': ('R3-INF', '13/2/1', '20.20.20.1', '65000:200', 500, '3.3.1.1', 24),
-    'R4-EMU:13/2/1': ('R4-EMU', '13/2/1', '22.22.22.1', '65000:220', 550, '3.4.1.1', 24),
+    'R1-EMU:13/1/2': ('R1-EMU', '13/1/2', '10.10.10.1', '65000:100', 400, '3.3.2.1', 24),
+    'R2-EMU:13/1/2': ('R2-EMU', '13/1/2', '12.12.12.1', '65000:120', 450, '3.4.2.1', 24),
+    'R3-EMU:13/1/2': ('R3-EMU', '13/1/2', '20.20.20.1', '65000:200', 500, '3.3.1.1', 24),
+    'R4-EMU:13/1/2': ('R4-EMU', '13/1/2', '22.22.22.1', '65000:220', 550, '3.4.1.1', 24),
 
     'R1@D1:3/1': ('R1@D1', '3/1', '10.0.1.1', '65001:101', 100, '1.1.3.1', 24),
     'R1@D1:3/2': ('R1@D1', '3/2', '10.0.1.1', '65001:101', 100, '1.1.3.2', 24),
diff --git a/src/compute/tests/Constants.py b/src/compute/tests/Constants.py
index 8d4e2ba8fe6144e6fc11c61bbe2c8296d74fc910..640124b07fd8e5dc0dff0635175b1499544f1b2d 100644
--- a/src/compute/tests/Constants.py
+++ b/src/compute/tests/Constants.py
@@ -22,7 +22,7 @@ WIM_MAPPING  = [
         #'device_interface_id' : ??,                # pop_switch_port
         'service_endpoint_id' : 'ep-1',             # wan_service_endpoint_id
         'service_mapping_info': {                   # wan_service_mapping_info, other extra info
-            'bearer': {'bearer-reference': 'R1-INF:13/2/1'},
+            'bearer': {'bearer-reference': 'R1-EMU:13/1/2'},
             'site-id': '1',
         },
         #'switch_dpid'         : ??,                # wan_switch_dpid
@@ -34,7 +34,7 @@ WIM_MAPPING  = [
         #'device_interface_id' : ??,                # pop_switch_port
         'service_endpoint_id' : 'ep-2',             # wan_service_endpoint_id
         'service_mapping_info': {                   # wan_service_mapping_info, other extra info
-            'bearer': {'bearer-reference': 'R2-EMU:13/2/1'},
+            'bearer': {'bearer-reference': 'R2-EMU:13/1/2'},
             'site-id': '2',
         },
         #'switch_dpid'         : ??,                # wan_switch_dpid
@@ -46,7 +46,7 @@ WIM_MAPPING  = [
         #'device_interface_id' : ??,                # pop_switch_port
         'service_endpoint_id' : 'ep-3',             # wan_service_endpoint_id
         'service_mapping_info': {                   # wan_service_mapping_info, other extra info
-            'bearer': {'bearer-reference': 'R3-INF:13/2/1'},
+            'bearer': {'bearer-reference': 'R3-EMU:13/1/2'},
             'site-id': '3',
         },
         #'switch_dpid'         : ??,                # wan_switch_dpid
@@ -58,7 +58,7 @@ WIM_MAPPING  = [
         #'device_interface_id' : ??,                # pop_switch_port
         'service_endpoint_id' : 'ep-4',             # wan_service_endpoint_id
         'service_mapping_info': {                   # wan_service_mapping_info, other extra info
-            'bearer': {'bearer-reference': 'R4-EMU:13/2/1'},
+            'bearer': {'bearer-reference': 'R4-EMU:13/1/2'},
             'site-id': '4',
         },
         #'switch_dpid'         : ??,                # wan_switch_dpid
diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml
index 8f112e690cd51b4bec1c8a9652ddfc3e489fddd1..0da2b582edf879f793341887adef9cef5ad4fff2 100644
--- a/src/context/.gitlab-ci.yml
+++ b/src/context/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build context:
   variables:
     IMAGE_NAME: 'context' # name of the microservice
diff --git a/src/context/requirements.in b/src/context/requirements.in
index 83193ae7012c81881dbbb0412878cd759252f65e..9cc7e71f2428fbb42693f47c911340e5f3f2dbc1 100644
--- a/src/context/requirements.in
+++ b/src/context/requirements.in
@@ -1,4 +1,4 @@
-Flask==2.0.2
+Flask==2.1.3
 Flask-RESTful==0.3.9
 redis==4.1.2
 requests==2.27.1
diff --git a/src/context/service/database/ConfigModel.py b/src/context/service/database/ConfigModel.py
index e36fc58cfa2a42425004f6c9766457c5d1c53896..bb2a37467ce3ad451bd29f824a5092ec1ad43cee 100644
--- a/src/context/service/database/ConfigModel.py
+++ b/src/context/service/database/ConfigModel.py
@@ -41,6 +41,11 @@ grpc_to_enum__config_action = functools.partial(
 class ConfigModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
 
+    def delete(self) -> None:
+        db_config_rule_pks = self.references(ConfigRuleModel)
+        for pk,_ in db_config_rule_pks: ConfigRuleModel(self.database, pk).delete()
+        super().delete()
+
     def dump(self) -> List[Dict]:
         db_config_rule_pks = self.references(ConfigRuleModel)
         config_rules = [ConfigRuleModel(self.database, pk).dump(include_position=True) for pk,_ in db_config_rule_pks]
diff --git a/src/context/service/database/ConnectionModel.py b/src/context/service/database/ConnectionModel.py
index 1d3f093727fc59b06b13e9f39636bbd9da3b010a..4cbed43a40f3538633216f09060f8a2483fe5e1f 100644
--- a/src/context/service/database/ConnectionModel.py
+++ b/src/context/service/database/ConnectionModel.py
@@ -32,6 +32,11 @@ LOGGER = logging.getLogger(__name__)
 class PathModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
 
+    def delete(self) -> None:
+        for db_path_hop_pk,_ in self.references(PathHopModel):
+            PathHopModel(self.database, db_path_hop_pk).delete()
+        super().delete()
+
     def dump(self) -> List[Dict]:
         db_path_hop_pks = self.references(PathHopModel)
         path_hops = [PathHopModel(self.database, pk).dump(include_position=True) for pk,_ in db_path_hop_pks]
@@ -56,6 +61,18 @@ class ConnectionModel(Model):
     service_fk = ForeignKeyField(ServiceModel, required=False)
     path_fk = ForeignKeyField(PathModel, required=True)
 
+    def delete(self) -> None:
+        # pylint: disable=import-outside-toplevel
+        from .RelationModels import ConnectionSubServiceModel
+
+        # Do not remove sub-services automatically. They are supported by real services, so Service component should
+        # deal with the correct removal workflow to deconfigure the devices.
+        for db_connection_sub_service_pk,_ in self.references(ConnectionSubServiceModel):
+            ConnectionSubServiceModel(self.database, db_connection_sub_service_pk).delete()
+
+        super().delete()
+        PathModel(self.database, self.path_fk).delete()
+
     def dump_id(self) -> Dict:
         return {
             'connection_uuid': {'uuid': self.connection_uuid},
@@ -108,7 +125,7 @@ def set_path(
 
     str_path_key = connection_uuid if len(path_name) == 0 else key_to_str([connection_uuid, path_name], separator=':')
     result : Tuple[PathModel, bool] = get_or_create_object(database, PathModel, str_path_key)
-    db_path, created = result
+    db_path, created = result # pylint: disable=unused-variable
 
     db_path_hop_pks : Set[str] = set(map(operator.itemgetter(0), db_path.references(PathHopModel)))
     db_objects : List[Tuple[Union[PathModel, PathHopModel], bool]] = [db_path]
@@ -127,7 +144,7 @@ def set_path(
         db_endpoint : EndPointModel = get_object(database, EndPointModel, str_endpoint_key)
 
         result : Tuple[PathHopModel, bool] = set_path_hop(database, db_path, position, db_endpoint)
-        db_path_hop, updated = result
+        db_path_hop, updated = result # pylint: disable=unused-variable
         db_objects.append(db_path_hop)
         db_path_hop_pks.discard(db_path_hop.instance_key)
 
diff --git a/src/context/service/database/ConstraintModel.py b/src/context/service/database/ConstraintModel.py
index 4eca404ca32b0c88136c5c89fed379919c60a33d..a35ec250d8a62a8a2534e9f27ddecac801db6eff 100644
--- a/src/context/service/database/ConstraintModel.py
+++ b/src/context/service/database/ConstraintModel.py
@@ -13,10 +13,14 @@
 # limitations under the License.
 
 import logging, operator
-from typing import Dict, List, Tuple, Union
+from enum import Enum
+from typing import Dict, List, Optional, Tuple, Type, Union
 from common.orm.Database import Database
-from common.orm.HighLevel import get_or_create_object, update_or_create_object
+from common.orm.HighLevel import get_object, get_or_create_object, update_or_create_object
 from common.orm.backend.Tools import key_to_str
+from common.orm.fields.BooleanField import BooleanField
+from common.orm.fields.EnumeratedField import EnumeratedField
+from common.orm.fields.FloatField import FloatField
 from common.orm.fields.ForeignKeyField import ForeignKeyField
 from common.orm.fields.IntegerField import IntegerField
 from common.orm.fields.PrimaryKeyField import PrimaryKeyField
@@ -24,55 +28,213 @@ from common.orm.fields.StringField import StringField
 from common.orm.model.Model import Model
 from common.proto.context_pb2 import Constraint
 from common.tools.grpc.Tools import grpc_message_to_json_string
-from context.service.database.Tools import fast_hasher, remove_dict_key
+from .EndPointModel import EndPointModel, get_endpoint
+from .Tools import fast_hasher, remove_dict_key
 
 LOGGER = logging.getLogger(__name__)
 
 class ConstraintsModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
 
+    def delete(self) -> None:
+        db_constraint_pks = self.references(ConstraintModel)
+        for pk,_ in db_constraint_pks: ConstraintModel(self.database, pk).delete()
+        super().delete()
+
     def dump(self) -> List[Dict]:
         db_constraint_pks = self.references(ConstraintModel)
         constraints = [ConstraintModel(self.database, pk).dump(include_position=True) for pk,_ in db_constraint_pks]
         constraints = sorted(constraints, key=operator.itemgetter('position'))
         return [remove_dict_key(constraint, 'position') for constraint in constraints]
 
+class ConstraintCustomModel(Model): # pylint: disable=abstract-method
+    constraint_type = StringField(required=True, allow_empty=False)
+    constraint_value = StringField(required=True, allow_empty=False)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'custom': {'constraint_type': self.constraint_type, 'constraint_value': self.constraint_value}}
+
+Union_ConstraintEndpoint = Union[
+    'ConstraintEndpointLocationGpsPositionModel', 'ConstraintEndpointLocationRegionModel',
+    'ConstraintEndpointPriorityModel'
+]
+def dump_endpoint_id(endpoint_constraint : Union_ConstraintEndpoint):
+    db_endpoints_pks = list(endpoint_constraint.references(EndPointModel))
+    num_endpoints = len(db_endpoints_pks)
+    if num_endpoints != 1:
+        raise Exception('Wrong number({:d}) of associated Endpoints with constraint'.format(num_endpoints))
+    db_endpoint = EndPointModel(endpoint_constraint.database, db_endpoints_pks[0])
+    return db_endpoint.dump_id()
+
+class ConstraintEndpointLocationRegionModel(Model): # pylint: disable=abstract-method
+    endpoint_fk = ForeignKeyField(EndPointModel)
+    region = StringField(required=True, allow_empty=False)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'region': self.region}}
+
+class ConstraintEndpointLocationGpsPositionModel(Model): # pylint: disable=abstract-method
+    endpoint_fk = ForeignKeyField(EndPointModel)
+    latitude = FloatField(required=True, min_value=-90.0, max_value=90.0)
+    longitude = FloatField(required=True, min_value=-180.0, max_value=180.0)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        gps_position = {'latitude': self.latitude, 'longitude': self.longitude}
+        return {'endpoint_location': {'endpoint_id': dump_endpoint_id(self), 'gps_position': gps_position}}
+
+class ConstraintEndpointPriorityModel(Model): # pylint: disable=abstract-method
+    endpoint_fk = ForeignKeyField(EndPointModel)
+    priority = FloatField(required=True)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'endpoint_priority': {'endpoint_id': dump_endpoint_id(self), 'priority': self.priority}}
+
+class ConstraintSlaAvailabilityModel(Model): # pylint: disable=abstract-method
+    num_disjoint_paths = IntegerField(required=True, min_value=1)
+    all_active = BooleanField(required=True)
+
+    def dump(self) -> Dict: # pylint: disable=arguments-differ
+        return {'sla_availability': {'num_disjoint_paths': self.num_disjoint_paths, 'all_active': self.all_active}}
+
+# enum values should match name of field in ConstraintModel
+class ConstraintKindEnum(Enum):
+    CUSTOM                        = 'custom'
+    ENDPOINT_LOCATION_REGION      = 'ep_loc_region'
+    ENDPOINT_LOCATION_GPSPOSITION = 'ep_loc_gpspos'
+    ENDPOINT_PRIORITY             = 'ep_priority'
+    SLA_AVAILABILITY              = 'sla_avail'
+
+Union_SpecificConstraint = Union[
+    ConstraintCustomModel, ConstraintEndpointLocationRegionModel, ConstraintEndpointLocationGpsPositionModel,
+    ConstraintEndpointPriorityModel, ConstraintSlaAvailabilityModel,
+]
+
 class ConstraintModel(Model): # pylint: disable=abstract-method
     pk = PrimaryKeyField()
     constraints_fk = ForeignKeyField(ConstraintsModel)
+    kind = EnumeratedField(ConstraintKindEnum)
     position = IntegerField(min_value=0, required=True)
-    constraint_type = StringField(required=True, allow_empty=False)
-    constraint_value = StringField(required=True, allow_empty=False)
+    constraint_custom_fk        = ForeignKeyField(ConstraintCustomModel, required=False)
+    constraint_ep_loc_region_fk = ForeignKeyField(ConstraintEndpointLocationRegionModel, required=False)
+    constraint_ep_loc_gpspos_fk = ForeignKeyField(ConstraintEndpointLocationGpsPositionModel, required=False)
+    constraint_ep_priority_fk   = ForeignKeyField(ConstraintEndpointPriorityModel, required=False)
+    constraint_sla_avail_fk     = ForeignKeyField(ConstraintSlaAvailabilityModel, required=False)
+
+    def delete(self) -> None:
+        field_name = 'constraint_{:s}_fk'.format(str(self.kind.value))
+        specific_fk_value : Optional[ForeignKeyField] = getattr(self, field_name, None)
+        if specific_fk_value is None:
+            raise Exception('Unable to find constraint key for field_name({:s})'.format(field_name))
+        specific_fk_class = getattr(ConstraintModel, field_name, None)
+        foreign_model_class : Model = specific_fk_class.foreign_model
+        super().delete()
+        get_object(self.database, foreign_model_class, str(specific_fk_value)).delete()
 
     def dump(self, include_position=True) -> Dict: # pylint: disable=arguments-differ
-        result = {
-            'custom': {
-                'constraint_type': self.constraint_type,
-                'constraint_value': self.constraint_value,
-            },
-        }
+        field_name = 'constraint_{:s}_fk'.format(str(self.kind.value))
+        specific_fk_value : Optional[ForeignKeyField] = getattr(self, field_name, None)
+        if specific_fk_value is None:
+            raise Exception('Unable to find constraint key for field_name({:s})'.format(field_name))
+        specific_fk_class = getattr(ConstraintModel, field_name, None)
+        foreign_model_class : Model = specific_fk_class.foreign_model
+        constraint : Union_SpecificConstraint = get_object(self.database, foreign_model_class, str(specific_fk_value))
+        result = constraint.dump()
         if include_position: result['position'] = self.position
         return result
 
+Tuple_ConstraintSpecs = Tuple[Type, str, Dict, ConstraintKindEnum]
+def parse_constraint_custom(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    constraint_class = ConstraintCustomModel
+    str_constraint_id = grpc_constraint.custom.constraint_type
+    constraint_data = {
+        'constraint_type' : grpc_constraint.custom.constraint_type,
+        'constraint_value': grpc_constraint.custom.constraint_value,
+    }
+    return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.CUSTOM
+
+def parse_constraint_endpoint_location(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    grpc_endpoint_id = grpc_constraint.endpoint_location.endpoint_id
+    str_endpoint_key, db_endpoint = get_endpoint(database, grpc_endpoint_id)
+
+    str_constraint_id = str_endpoint_key
+    constraint_data = {'endpoint_fk': db_endpoint}
+
+    grpc_location = grpc_constraint.endpoint_location.location
+    location_kind = str(grpc_location.WhichOneof('location'))
+    if location_kind == 'region':
+        constraint_class = ConstraintEndpointLocationRegionModel
+        constraint_data.update({'region': grpc_location.region})
+        return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.ENDPOINT_LOCATION_REGION
+    elif location_kind == 'gps_position':
+        constraint_class = ConstraintEndpointLocationGpsPositionModel
+        gps_position = grpc_location.gps_position
+        constraint_data.update({'latitude': gps_position.latitude, 'longitude': gps_position.longitude})
+        return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.ENDPOINT_LOCATION_GPSPOSITION
+    else:
+        MSG = 'Location kind {:s} in Constraint of kind endpoint_location is not implemented: {:s}'
+        raise NotImplementedError(MSG.format(location_kind, grpc_message_to_json_string(grpc_constraint)))
+
+def parse_constraint_endpoint_priority(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    grpc_endpoint_id = grpc_constraint.endpoint_priority.endpoint_id
+    str_endpoint_key, db_endpoint = get_endpoint(database, grpc_endpoint_id)
+
+    constraint_class = ConstraintEndpointPriorityModel
+    str_constraint_id = str_endpoint_key
+    priority = grpc_constraint.endpoint_priority.priority
+    constraint_data = {'endpoint_fk': db_endpoint, 'priority': priority}
+
+    return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.ENDPOINT_PRIORITY
+
+def parse_constraint_sla_availability(database : Database, grpc_constraint) -> Tuple_ConstraintSpecs:
+    constraint_class = ConstraintSlaAvailabilityModel
+    str_constraint_id = ''
+    constraint_data = {
+        'num_disjoint_paths' : grpc_constraint.sla_availability.num_disjoint_paths,
+        'all_active': grpc_constraint.sla_availability.all_active,
+    }
+    return constraint_class, str_constraint_id, constraint_data, ConstraintKindEnum.SLA_AVAILABILITY
+
+CONSTRAINT_PARSERS = {
+    'custom'            : parse_constraint_custom,
+    'endpoint_location' : parse_constraint_endpoint_location,
+    'endpoint_priority' : parse_constraint_endpoint_priority,
+    'sla_availability'  : parse_constraint_sla_availability,
+}
+
+Union_ConstraintModel = Union[
+    ConstraintCustomModel, ConstraintEndpointLocationGpsPositionModel, ConstraintEndpointLocationRegionModel,
+    ConstraintEndpointPriorityModel, ConstraintSlaAvailabilityModel
+]
+
 def set_constraint(
-    database : Database, db_constraints : ConstraintsModel, grpc_constraint, position : int
-) -> Tuple[Constraint, bool]:
-    constraint_type = str(grpc_constraint.WhichOneof('constraint'))
-    if constraint_type != 'custom':
-        raise NotImplementedError('Constraint of type {:s} is not implemented: {:s}'.format(
-            constraint_type, grpc_message_to_json_string(grpc_constraint)))
-
-    str_constraint_key_hash = fast_hasher(grpc_constraint.custom.constraint_type)
+    database : Database, db_constraints : ConstraintsModel, grpc_constraint : Constraint, position : int
+) -> Tuple[Union_ConstraintModel, bool]:
+    grpc_constraint_kind = str(grpc_constraint.WhichOneof('constraint'))
+
+    parser = CONSTRAINT_PARSERS.get(grpc_constraint_kind)
+    if parser is None:
+        raise NotImplementedError('Constraint of kind {:s} is not implemented: {:s}'.format(
+            grpc_constraint_kind, grpc_message_to_json_string(grpc_constraint)))
+
+    # create specific constraint
+    constraint_class, str_constraint_id, constraint_data, constraint_kind = parser(database, grpc_constraint)
+    str_constraint_key_hash = fast_hasher(':'.join([constraint_kind.value, str_constraint_id]))
     str_constraint_key = key_to_str([db_constraints.pk, str_constraint_key_hash], separator=':')
+    result : Tuple[Union_ConstraintModel, bool] = update_or_create_object(
+        database, constraint_class, str_constraint_key, constraint_data)
+    db_specific_constraint, updated = result
 
-    result : Tuple[ConstraintModel, bool] = update_or_create_object(database, ConstraintModel, str_constraint_key, {
-        'constraints_fk'  : db_constraints,
-        'position'        : position,
-        'constraint_type' : grpc_constraint.custom.constraint_type,
-        'constraint_value': grpc_constraint.custom.constraint_value,
-    })
-    db_config_rule, updated = result
-    return db_config_rule, updated
+    # create generic constraint
+    constraint_fk_field_name = 'constraint_{:s}_fk'.format(constraint_kind.value)
+    constraint_data = {
+        'constraints_fk': db_constraints, 'position': position, 'kind': constraint_kind,
+        constraint_fk_field_name: db_specific_constraint
+    }
+    result : Tuple[ConstraintModel, bool] = update_or_create_object(
+        database, ConstraintModel, str_constraint_key, constraint_data)
+    db_constraint, updated = result
+
+    return db_constraint, updated
 
 def set_constraints(
     database : Database, db_parent_pk : str, constraints_name : str, grpc_constraints
@@ -85,7 +247,8 @@ def set_constraints(
     db_objects = [(db_constraints, created)]
 
     for position,grpc_constraint in enumerate(grpc_constraints):
-        result : Tuple[ConstraintModel, bool] = set_constraint(database, db_constraints, grpc_constraint, position)
+        result : Tuple[ConstraintModel, bool] = set_constraint(
+            database, db_constraints, grpc_constraint, position)
         db_constraint, updated = result
         db_objects.append((db_constraint, updated))
 
diff --git a/src/context/service/database/DeviceModel.py b/src/context/service/database/DeviceModel.py
index 0f0201190542397a34b68fa217706c904606ead3..0d42326793b44473d8aef3da2c3e9ce8464bd1c4 100644
--- a/src/context/service/database/DeviceModel.py
+++ b/src/context/service/database/DeviceModel.py
@@ -54,6 +54,24 @@ class DeviceModel(Model):
     device_config_fk = ForeignKeyField(ConfigModel)
     device_operational_status = EnumeratedField(ORM_DeviceOperationalStatusEnum, required=True)
 
+    def delete(self) -> None:
+        # pylint: disable=import-outside-toplevel
+        from .EndPointModel import EndPointModel
+        from .RelationModels import TopologyDeviceModel
+
+        for db_endpoint_pk,_ in self.references(EndPointModel):
+            EndPointModel(self.database, db_endpoint_pk).delete()
+
+        for db_topology_device_pk,_ in self.references(TopologyDeviceModel):
+            TopologyDeviceModel(self.database, db_topology_device_pk).delete()
+
+        for db_driver_pk,_ in self.references(DriverModel):
+            DriverModel(self.database, db_driver_pk).delete()
+
+        super().delete()
+
+        ConfigModel(self.database, self.device_config_fk).delete()
+
     def dump_id(self) -> Dict:
         return {'device_uuid': {'uuid': self.device_uuid}}
 
diff --git a/src/context/service/database/EndPointModel.py b/src/context/service/database/EndPointModel.py
index abeeb1b690b97e47772e3bf38d77016569bf55dc..aeef91b654dfaaaaf14d53f625126632b7303741 100644
--- a/src/context/service/database/EndPointModel.py
+++ b/src/context/service/database/EndPointModel.py
@@ -13,14 +13,16 @@
 # limitations under the License.
 
 import logging
-from typing import Dict, List
+from typing import Dict, List, Optional, Tuple
 from common.orm.Database import Database
+from common.orm.HighLevel import get_object
 from common.orm.backend.Tools import key_to_str
 from common.orm.fields.EnumeratedField import EnumeratedField
 from common.orm.fields.ForeignKeyField import ForeignKeyField
 from common.orm.fields.PrimaryKeyField import PrimaryKeyField
 from common.orm.fields.StringField import StringField
 from common.orm.model.Model import Model
+from common.proto.context_pb2 import EndPointId
 from .DeviceModel import DeviceModel
 from .KpiSampleType import ORM_KpiSampleTypeEnum, grpc_to_enum__kpi_sample_type
 from .TopologyModel import TopologyModel
@@ -34,6 +36,11 @@ class EndPointModel(Model):
     endpoint_uuid = StringField(required=True, allow_empty=False)
     endpoint_type = StringField()
 
+    def delete(self) -> None:
+        for db_kpi_sample_type_pk,_ in self.references(KpiSampleTypeModel):
+            KpiSampleTypeModel(self.database, db_kpi_sample_type_pk).delete()
+        super().delete()
+
     def dump_id(self) -> Dict:
         device_id = DeviceModel(self.database, self.device_fk).dump_id()
         result = {
@@ -75,3 +82,31 @@ def set_kpi_sample_types(database : Database, db_endpoint : EndPointModel, grpc_
         db_endpoint_kpi_sample_type.endpoint_fk = db_endpoint
         db_endpoint_kpi_sample_type.kpi_sample_type = orm_kpi_sample_type
         db_endpoint_kpi_sample_type.save()
+
+def get_endpoint(
+    database : Database, grpc_endpoint_id : EndPointId,
+    validate_topology_exists : bool = True, validate_device_in_topology : bool = True
+) -> Tuple[str, EndPointModel]:
+    endpoint_uuid                  = grpc_endpoint_id.endpoint_uuid.uuid
+    endpoint_device_uuid           = grpc_endpoint_id.device_id.device_uuid.uuid
+    endpoint_topology_uuid         = grpc_endpoint_id.topology_id.topology_uuid.uuid
+    endpoint_topology_context_uuid = grpc_endpoint_id.topology_id.context_id.context_uuid.uuid
+    str_endpoint_key = key_to_str([endpoint_device_uuid, endpoint_uuid])
+
+    if len(endpoint_topology_context_uuid) > 0 and len(endpoint_topology_uuid) > 0:
+        # check topology exists
+        str_topology_key = key_to_str([endpoint_topology_context_uuid, endpoint_topology_uuid])
+        if validate_topology_exists:
+            from .TopologyModel import TopologyModel
+            get_object(database, TopologyModel, str_topology_key)
+
+        # check device is in topology
+        str_topology_device_key = key_to_str([str_topology_key, endpoint_device_uuid], separator='--')
+        if validate_device_in_topology:
+            from .RelationModels import TopologyDeviceModel
+            get_object(database, TopologyDeviceModel, str_topology_device_key)
+
+        str_endpoint_key = key_to_str([str_endpoint_key, str_topology_key], separator=':')
+
+    db_endpoint : EndPointModel = get_object(database, EndPointModel, str_endpoint_key)
+    return str_endpoint_key, db_endpoint
diff --git a/src/context/service/database/LinkModel.py b/src/context/service/database/LinkModel.py
index 742044b9758df297413ad2d0318520c825e8b738..8f1d971c3127371e0d9a1a401d885a02269bd8dd 100644
--- a/src/context/service/database/LinkModel.py
+++ b/src/context/service/database/LinkModel.py
@@ -25,6 +25,18 @@ class LinkModel(Model):
     pk = PrimaryKeyField()
     link_uuid = StringField(required=True, allow_empty=False)
 
+    def delete(self) -> None:
+        #pylint: disable=import-outside-toplevel
+        from .RelationModels import LinkEndPointModel, TopologyLinkModel
+
+        for db_link_endpoint_pk,_ in self.references(LinkEndPointModel):
+            LinkEndPointModel(self.database, db_link_endpoint_pk).delete()
+
+        for db_topology_link_pk,_ in self.references(TopologyLinkModel):
+            TopologyLinkModel(self.database, db_topology_link_pk).delete()
+
+        super().delete()
+
     def dump_id(self) -> Dict:
         return {'link_uuid': {'uuid': self.link_uuid}}
 
diff --git a/src/context/service/database/ServiceModel.py b/src/context/service/database/ServiceModel.py
index cf756af60a8178a9ae2fda2a5fa5ddeebc73912c..8b32d1cc9eeec248d1097f972df93dbd2c0882fa 100644
--- a/src/context/service/database/ServiceModel.py
+++ b/src/context/service/database/ServiceModel.py
@@ -56,6 +56,18 @@ class ServiceModel(Model):
     service_status = EnumeratedField(ORM_ServiceStatusEnum, required=True)
     service_config_fk = ForeignKeyField(ConfigModel)
 
+    def delete(self) -> None:
+        #pylint: disable=import-outside-toplevel
+        from .RelationModels import ServiceEndPointModel
+
+        for db_service_endpoint_pk,_ in self.references(ServiceEndPointModel):
+            ServiceEndPointModel(self.database, db_service_endpoint_pk).delete()
+
+        super().delete()
+
+        ConfigModel(self.database, self.service_config_fk).delete()
+        ConstraintsModel(self.database, self.service_constraints_fk).delete()
+
     def dump_id(self) -> Dict:
         context_id = ContextModel(self.database, self.context_fk).dump_id()
         return {
diff --git a/src/context/service/database/SliceModel.py b/src/context/service/database/SliceModel.py
index 1bc51df2e10d46bb565ef7fbb34524e1e238be5f..bc00ada43758c9c5ffefbb88a87134aa46fbd73a 100644
--- a/src/context/service/database/SliceModel.py
+++ b/src/context/service/database/SliceModel.py
@@ -22,6 +22,7 @@ from common.orm.fields.StringField import StringField
 from common.orm.model.Model import Model
 from common.orm.HighLevel import get_related_objects
 from common.proto.context_pb2 import SliceStatusEnum
+from .ConfigModel import ConfigModel
 from .ConstraintModel import ConstraintsModel
 from .ContextModel import ContextModel
 from .Tools import grpc_to_enum
@@ -44,6 +45,25 @@ class SliceModel(Model):
     slice_uuid = StringField(required=True, allow_empty=False)
     slice_constraints_fk = ForeignKeyField(ConstraintsModel)
     slice_status = EnumeratedField(ORM_SliceStatusEnum, required=True)
+    slice_config_fk = ForeignKeyField(ConfigModel)
+
+    def delete(self) -> None:
+        # pylint: disable=import-outside-toplevel
+        from .RelationModels import SliceEndPointModel, SliceServiceModel, SliceSubSliceModel
+
+        for db_slice_endpoint_pk,_ in self.references(SliceEndPointModel):
+            SliceEndPointModel(self.database, db_slice_endpoint_pk).delete()
+
+        for db_slice_service_pk,_ in self.references(SliceServiceModel):
+            SliceServiceModel(self.database, db_slice_service_pk).delete()
+
+        for db_slice_subslice_pk,_ in self.references(SliceSubSliceModel):
+            SliceSubSliceModel(self.database, db_slice_subslice_pk).delete()
+
+        super().delete()
+
+        ConfigModel(self.database, self.slice_config_fk).delete()
+        ConstraintsModel(self.database, self.slice_constraints_fk).delete()
 
     def dump_id(self) -> Dict:
         context_id = ContextModel(self.database, self.context_fk).dump_id()
@@ -60,6 +80,9 @@ class SliceModel(Model):
     def dump_constraints(self) -> List[Dict]:
         return ConstraintsModel(self.database, self.slice_constraints_fk).dump()
 
+    def dump_config(self) -> Dict:
+        return ConfigModel(self.database, self.slice_config_fk).dump()
+
     def dump_service_ids(self) -> List[Dict]:
         from .RelationModels import SliceServiceModel # pylint: disable=import-outside-toplevel
         db_services = get_related_objects(self, SliceServiceModel, 'service_fk')
@@ -71,8 +94,8 @@ class SliceModel(Model):
         return [db_subslice.dump_id() for db_subslice in sorted(db_subslices, key=operator.attrgetter('pk'))]
 
     def dump(   # pylint: disable=arguments-differ
-            self, include_endpoint_ids=True, include_constraints=True, include_service_ids=True,
-            include_subslice_ids=True
+            self, include_endpoint_ids=True, include_constraints=True, include_config_rules=True,
+            include_service_ids=True, include_subslice_ids=True
         ) -> Dict:
         result = {
             'slice_id': self.dump_id(),
@@ -80,6 +103,7 @@ class SliceModel(Model):
         }
         if include_endpoint_ids: result['slice_endpoint_ids'] = self.dump_endpoint_ids()
         if include_constraints: result['slice_constraints'] = self.dump_constraints()
+        if include_config_rules: result.setdefault('slice_config', {})['config_rules'] = self.dump_config()
         if include_service_ids: result['slice_service_ids'] = self.dump_service_ids()
         if include_subslice_ids: result['slice_subslice_ids'] = self.dump_subslice_ids()
         return result
diff --git a/src/context/service/grpc_server/ContextServiceServicerImpl.py b/src/context/service/grpc_server/ContextServiceServicerImpl.py
index 49663069d77b6da3aad989d00e9e5bd108a89f78..4c8f957ecb70765cbd36032fca7bfacc27f9b5ae 100644
--- a/src/context/service/grpc_server/ContextServiceServicerImpl.py
+++ b/src/context/service/grpc_server/ContextServiceServicerImpl.py
@@ -31,23 +31,24 @@ from common.proto.context_pb2 import (
 from common.proto.context_pb2_grpc import ContextServiceServicer
 from common.rpc_method_wrapper.Decorator import create_metrics, safe_and_metered_rpc_method
 from common.rpc_method_wrapper.ServiceExceptions import InvalidArgumentException
-from context.service.database.ConfigModel import ConfigModel, ConfigRuleModel, grpc_config_rules_to_raw, update_config
-from context.service.database.ConnectionModel import ConnectionModel, PathHopModel, PathModel, set_path
-from context.service.database.ConstraintModel import ConstraintModel, ConstraintsModel, set_constraints
+from context.service.database.ConfigModel import grpc_config_rules_to_raw, update_config
+from context.service.database.ConnectionModel import ConnectionModel, set_path
+from context.service.database.ConstraintModel import set_constraints
 from context.service.database.ContextModel import ContextModel
-from context.service.database.DeviceModel import (
-    DeviceModel, DriverModel, grpc_to_enum__device_operational_status, set_drivers)
-from context.service.database.EndPointModel import EndPointModel, KpiSampleTypeModel, set_kpi_sample_types
+from context.service.database.DeviceModel import DeviceModel, grpc_to_enum__device_operational_status, set_drivers
+from context.service.database.EndPointModel import EndPointModel, set_kpi_sample_types
 from context.service.database.Events import notify_event
 from context.service.database.LinkModel import LinkModel
 from context.service.database.RelationModels import (
-    ConnectionSubServiceModel, LinkEndPointModel, ServiceEndPointModel, SliceEndPointModel, SliceServiceModel, SliceSubSliceModel, TopologyDeviceModel, TopologyLinkModel)
+    ConnectionSubServiceModel, LinkEndPointModel, ServiceEndPointModel, SliceEndPointModel, SliceServiceModel,
+    SliceSubSliceModel, TopologyDeviceModel, TopologyLinkModel)
 from context.service.database.ServiceModel import (
     ServiceModel, grpc_to_enum__service_status, grpc_to_enum__service_type)
 from context.service.database.SliceModel import SliceModel, grpc_to_enum__slice_status
 from context.service.database.TopologyModel import TopologyModel
 from .Constants import (
-    CONSUME_TIMEOUT, TOPIC_CONNECTION, TOPIC_CONTEXT, TOPIC_DEVICE, TOPIC_LINK, TOPIC_SERVICE, TOPIC_SLICE, TOPIC_TOPOLOGY)
+    CONSUME_TIMEOUT, TOPIC_CONNECTION, TOPIC_CONTEXT, TOPIC_DEVICE, TOPIC_LINK, TOPIC_SERVICE, TOPIC_SLICE,
+    TOPIC_TOPOLOGY)
 
 LOGGER = logging.getLogger(__name__)
 
@@ -336,25 +337,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_device_id = db_device.dump_id()
-
-            for db_endpoint_pk,_ in db_device.references(EndPointModel):
-                db_endpoint = EndPointModel(self.database, db_endpoint_pk)
-                for db_kpi_sample_type_pk,_ in db_endpoint.references(KpiSampleTypeModel):
-                    KpiSampleTypeModel(self.database, db_kpi_sample_type_pk).delete()
-                db_endpoint.delete()
-
-            for db_topology_device_pk,_ in db_device.references(TopologyDeviceModel):
-                TopologyDeviceModel(self.database, db_topology_device_pk).delete()
-
-            for db_driver_pk,_ in db_device.references(DriverModel):
-                DriverModel(self.database, db_driver_pk).delete()
-
-            db_config = ConfigModel(self.database, db_device.device_config_fk)
-            for db_config_rule_pk,_ in db_config.references(ConfigRuleModel):
-                ConfigRuleModel(self.database, db_config_rule_pk).delete()
-
             db_device.delete()
-            db_config.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_DEVICE, event_type, {'device_id': dict_device_id})
@@ -443,14 +426,8 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_link_id = db_link.dump_id()
-
-            for db_link_endpoint_pk,_ in db_link.references(LinkEndPointModel):
-                LinkEndPointModel(self.database, db_link_endpoint_pk).delete()
-
-            for db_topology_link_pk,_ in db_link.references(TopologyLinkModel):
-                TopologyLinkModel(self.database, db_topology_link_pk).delete()
-
             db_link.delete()
+
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_LINK, event_type, {'link_id': dict_link_id})
             return Empty()
@@ -557,21 +534,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_service_id = db_service.dump_id()
-
-            for db_service_endpoint_pk,_ in db_service.references(ServiceEndPointModel):
-                ServiceEndPointModel(self.database, db_service_endpoint_pk).delete()
-
-            db_config = ConfigModel(self.database, db_service.service_config_fk)
-            for db_config_rule_pk,_ in db_config.references(ConfigRuleModel):
-                ConfigRuleModel(self.database, db_config_rule_pk).delete()
-
-            db_constraints = ConstraintsModel(self.database, db_service.service_constraints_fk)
-            for db_constraint_pk,_ in db_constraints.references(ConstraintModel):
-                ConstraintModel(self.database, db_constraint_pk).delete()
-
             db_service.delete()
-            db_config.delete()
-            db_constraints.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_SERVICE, event_type, {'service_id': dict_service_id})
@@ -607,8 +570,8 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             str_key = key_to_str([request.context_id.context_uuid.uuid, request.slice_uuid.uuid])
             db_slice : SliceModel = get_object(self.database, SliceModel, str_key)
             return Slice(**db_slice.dump(
-                include_endpoint_ids=True, include_constraints=True, include_service_ids=True,
-                include_subslice_ids=True))
+                include_endpoint_ids=True, include_constraints=True, include_config_rules=True,
+                include_service_ids=True, include_subslice_ids=True))
 
     @safe_and_metered_rpc_method(METRICS, LOGGER)
     def SetSlice(self, request: Slice, context : grpc.ServicerContext) -> SliceId:
@@ -632,11 +595,16 @@ class ContextServiceServicerImpl(ContextServiceServicer):
                 self.database, str_slice_key, 'constraints', request.slice_constraints)
             db_constraints = constraints_result[0][0]
 
+            config_rules = grpc_config_rules_to_raw(request.slice_config.config_rules)
+            running_config_result = update_config(self.database, str_slice_key, 'running', config_rules)
+            db_running_config = running_config_result[0][0]
+
             result : Tuple[SliceModel, bool] = update_or_create_object(self.database, SliceModel, str_slice_key, {
                 'context_fk'          : db_context,
                 'slice_uuid'          : slice_uuid,
                 'slice_constraints_fk': db_constraints,
                 'slice_status'        : grpc_to_enum__slice_status(request.slice_status.slice_status),
+                'slice_config_fk'     : db_running_config,
             })
             db_slice, updated = result
 
@@ -698,22 +666,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_slice_id = db_slice.dump_id()
-
-            for db_slice_endpoint_pk,_ in db_slice.references(SliceEndPointModel):
-                SliceEndPointModel(self.database, db_slice_endpoint_pk).delete()
-
-            db_constraints = ConstraintsModel(self.database, db_slice.slice_constraints_fk)
-            for db_constraint_pk,_ in db_constraints.references(ConstraintModel):
-                ConstraintModel(self.database, db_constraint_pk).delete()
-
-            for db_slice_service_pk,_ in db_slice.references(SliceServiceModel):
-                SliceServiceModel(self.database, db_slice_service_pk).delete()
-
-            for db_slice_subslice_pk,_ in db_slice.references(SliceSubSliceModel):
-                SliceSubSliceModel(self.database, db_slice_subslice_pk).delete()
-
             db_slice.delete()
-            db_constraints.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_SLICE, event_type, {'slice_id': dict_slice_id})
@@ -798,20 +751,7 @@ class ContextServiceServicerImpl(ContextServiceServicer):
             if not found: return Empty()
 
             dict_connection_id = db_connection.dump_id()
-
-            db_path = PathModel(self.database, db_connection.path_fk)
-            for db_path_hop_pk,_ in db_path.references(PathHopModel):
-                PathHopModel(self.database, db_path_hop_pk).delete()
-
-            # Do not remove sub-services automatically. They are supported by real services, so Service component should
-            # deal with the correct removal workflow to deconfigure the devices.
-            for db_connection_sub_service_pk,_ in db_connection.references(ConnectionSubServiceModel):
-                db_connection_sub_service : ConnectionSubServiceModel = get_object(
-                    self.database, ConnectionSubServiceModel, db_connection_sub_service_pk)
-                db_connection_sub_service.delete()
-
             db_connection.delete()
-            db_path.delete()
 
             event_type = EventTypeEnum.EVENTTYPE_REMOVE
             notify_event(self.messagebroker, TOPIC_CONNECTION, event_type, {'connection_id': dict_connection_id})
diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py
index efdd1f8b96a09b31b7d144b676ddd355152fc003..b46c9468c56974be5c987dbbc284daae337d3c7b 100644
--- a/src/context/tests/test_unitary.py
+++ b/src/context/tests/test_unitary.py
@@ -846,7 +846,7 @@ def test_grpc_service(
     for db_entry in db_entries:
         LOGGER.info('  [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover
     LOGGER.info('-----------------------------------------------------------')
-    assert len(db_entries) == 84
+    assert len(db_entries) == 89
 
     # ----- Get when the object exists ---------------------------------------------------------------------------------
     response = context_client_grpc.GetService(ServiceId(**SERVICE_R1_R2_ID))
@@ -1042,7 +1042,7 @@ def test_grpc_connection(
     for db_entry in db_entries:
         LOGGER.info('  [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover
     LOGGER.info('-----------------------------------------------------------')
-    assert len(db_entries) == 137
+    assert len(db_entries) == 150
 
     # ----- Create the object ------------------------------------------------------------------------------------------
     with pytest.raises(grpc.RpcError) as e:
@@ -1082,7 +1082,7 @@ def test_grpc_connection(
     for db_entry in db_entries:
         LOGGER.info('  [{:>4s}] {:40s} :: {:s}'.format(*db_entry)) # pragma: no cover
     LOGGER.info('-----------------------------------------------------------')
-    assert len(db_entries) == 153
+    assert len(db_entries) == 166
 
     # ----- Get when the object exists ---------------------------------------------------------------------------------
     response = context_client_grpc.GetConnection(ConnectionId(**CONNECTION_R1_R3_ID))
diff --git a/src/device/.gitlab-ci.yml b/src/device/.gitlab-ci.yml
index cb6750d6b215c84a139a6630ae19762e7813fc0c..3da19e7a38c9659fb8c86afd7beaefc7e08a6d7c 100644
--- a/src/device/.gitlab-ci.yml
+++ b/src/device/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build device:
   variables:
     IMAGE_NAME: 'device' # name of the microservice
diff --git a/src/device/tests/test_unitary_emulated.py b/src/device/tests/test_unitary_emulated.py
index 48331347ffcc9f3b3a05f271e3f2e342caef88b2..87c067a08e37475bcf44b0546abcfcaf25fc965d 100644
--- a/src/device/tests/test_unitary_emulated.py
+++ b/src/device/tests/test_unitary_emulated.py
@@ -86,6 +86,15 @@ def test_device_emulated_add_correct(
     driver : _Driver = driver_instance_cache.get(DEVICE_EMU_UUID) # we know the driver exists now
     assert driver is not None
 
+    device_data = context_client.GetDevice(DeviceId(**DEVICE_EMU_ID))
+    config_rules = [
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
+        for config_rule in device_data.device_config.config_rules
+        if config_rule.WhichOneof('config_rule') == 'custom'
+    ]
+    LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format(
+        '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules])))
+
 
 def test_device_emulated_get(
     context_client : ContextClient,     # pylint: disable=redefined-outer-name
diff --git a/src/device/tests/test_unitary_openconfig.py b/src/device/tests/test_unitary_openconfig.py
index 47bea7ef68475c8b447b52d234d8ab44fa4ab684..32fb5709a98d095982d46d16450117a84f89f165 100644
--- a/src/device/tests/test_unitary_openconfig.py
+++ b/src/device/tests/test_unitary_openconfig.py
@@ -88,8 +88,9 @@ def test_device_openconfig_add_correct(
 
     device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID))
     config_rules = [
-        (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value)
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
         for config_rule in device_data.device_config.config_rules
+        if config_rule.WhichOneof('config_rule') == 'custom'
     ]
     LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format(
         '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules])))
@@ -135,8 +136,9 @@ def test_device_openconfig_configure(
 
     device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID))
     config_rules = [
-        (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value)
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
         for config_rule in device_data.device_config.config_rules
+        if config_rule.WhichOneof('config_rule') == 'custom'
     ]
     LOGGER.info('device_data.device_config.config_rules = \n{:s}'.format(
         '\n'.join(['{:s} {:s} = {:s}'.format(*config_rule) for config_rule in config_rules])))
@@ -276,7 +278,7 @@ def test_device_openconfig_deconfigure(
 
     device_data = context_client.GetDevice(DeviceId(**DEVICE_OC_ID))
     config_rules = [
-        (ConfigActionEnum.Name(config_rule.action), config_rule.resource_key, config_rule.resource_value)
+        (ConfigActionEnum.Name(config_rule.action), config_rule.custom.resource_key, config_rule.custom.resource_value)
         for config_rule in device_data.device_config.config_rules
         if config_rule.WhichOneof('config_rule') == 'custom'
     ]
diff --git a/src/interdomain/.gitlab-ci.yml b/src/interdomain/.gitlab-ci.yml
index 6aa2849f75ff225fc78d8693003bb8348b89adbf..23bad6cf3b604b6134325b72316d036a9e53b6fc 100644
--- a/src/interdomain/.gitlab-ci.yml
+++ b/src/interdomain/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build interdomain:
   variables:
     IMAGE_NAME: 'interdomain' # name of the microservice
diff --git a/src/l3_attackmitigator/.gitlab-ci.yml b/src/l3_attackmitigator/.gitlab-ci.yml
index 28d5ad4cf109cd438da2625a08689b327688ea37..bcad35c74b3ca2f427b54831f313db855657c821 100644
--- a/src/l3_attackmitigator/.gitlab-ci.yml
+++ b/src/l3_attackmitigator/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag, and push the Docker images to the GitLab Docker registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build l3_attackmitigator:
   variables:
     IMAGE_NAME: 'l3_attackmitigator' # name of the microservice
@@ -21,22 +21,24 @@ build l3_attackmitigator:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
-# Pull, execute, and run unitary tests for the Docker image from the GitLab registry
+# Apply unit test to the component
 unit test l3_attackmitigator:
   variables:
     IMAGE_NAME: 'l3_attackmitigator' # name of the microservice
@@ -46,7 +48,7 @@ unit test l3_attackmitigator:
     - build l3_attackmitigator
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi  
+    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
@@ -62,8 +64,10 @@ unit test l3_attackmitigator:
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
diff --git a/src/l3_attackmitigator/Dockerfile b/src/l3_attackmitigator/Dockerfile
index 2ed76a70b6ca0e2a140cb926b3343aab7fed37a5..2b814f0eed8fbfba96a759212ae5ff0e2172c14f 100644
--- a/src/l3_attackmitigator/Dockerfile
+++ b/src/l3_attackmitigator/Dockerfile
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:3-slim
+FROM python:3.9-slim
 
 # Install dependencies
 RUN apt-get --yes --quiet --quiet update && \
@@ -28,22 +28,41 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
 
-# Set working directory
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
 WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
 
-# Create module sub-folders
-RUN mkdir -p /var/teraflow/l3_attackmitigator
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
 
-# Get Python packages per module
-COPY l3_attackmitigator/requirements.in l3_attackmitigator/requirements.in
-RUN pip-compile --output-file=l3_attackmitigator/requirements.txt l3_attackmitigator/requirements.in
-RUN python3 -m pip install -r l3_attackmitigator/requirements.in
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/l3_attackmitigator
+WORKDIR /var/teraflow/l3_attackmitigator
+COPY src/l3_attackmitigator/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
 
-# Add files into working directory
-COPY common/. common
-COPY l3_attackmitigator/. l3_attackmitigator
+# Add component files into working directory
+WORKDIR /var/teraflow
+COPY src/l3_attackmitigator/. l3_attackmitigator
 
-# Start service service
+# Start the service
 ENTRYPOINT ["python", "-m", "l3_attackmitigator.service"]
diff --git a/src/l3_attackmitigator/client/l3_attackmitigatorClient.py b/src/l3_attackmitigator/client/l3_attackmitigatorClient.py
index ba061c15d7f27383aefec63a92b15557d803fb80..77e09a2f718fb7d0748666842117f60652bebdea 100644
--- a/src/l3_attackmitigator/client/l3_attackmitigatorClient.py
+++ b/src/l3_attackmitigator/client/l3_attackmitigatorClient.py
@@ -14,10 +14,10 @@
 
 import grpc, logging
 from common.tools.client.RetryDecorator import retry, delay_exponential
-from l3_attackmitigator.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     L3AttackmitigatorStub,
 )
-from l3_attackmitigator.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     Output,
     EmptyMitigator
 )
diff --git a/src/l3_attackmitigator/genproto.sh b/src/l3_attackmitigator/genproto.sh
deleted file mode 100755
index c69f7d0250f287259a68b6663bd7b46b8137f6dd..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/genproto.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Make folder containing the script the root folder for its execution
-cd $(dirname $0)
-
-rm -rf proto/*.py
-rm -rf proto/__pycache__
-tee proto/__init__.py << EOF > /dev/null
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-EOF
-
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto context.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto kpi_sample_types.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_attackmitigator.proto
-
-rm proto/context_pb2_grpc.py
-rm proto/kpi_sample_types_pb2_grpc.py
-
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/context_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/kpi_sample_types_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_attackmitigator_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_attackmitigator_pb2_grpc.py
diff --git a/src/l3_attackmitigator/proto/__init__.py b/src/l3_attackmitigator/proto/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
diff --git a/src/l3_attackmitigator/proto/context_pb2.py b/src/l3_attackmitigator/proto/context_pb2.py
deleted file mode 100644
index 50d501d3ac053ad644554331af26e3c40cd426a1..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/context_pb2.py
+++ /dev/null
@@ -1,3071 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: context.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import kpi_sample_types_pb2 as kpi__sample__types__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='context.proto',
-  package='context',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\rcontext.proto\x12\x07\x63ontext\x1a\x16kpi_sample_types.proto\"\x07\n\x05\x45mpty\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"F\n\x05\x45vent\x12\x11\n\ttimestamp\x18\x01 \x01(\x01\x12*\n\nevent_type\x18\x02 \x01(\x0e\x32\x16.context.EventTypeEnum\"0\n\tContextId\x12#\n\x0c\x63ontext_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xb6\x01\n\x07\x43ontext\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12)\n\x0ctopology_ids\x18\x02 \x03(\x0b\x32\x13.context.TopologyId\x12\'\n\x0bservice_ids\x18\x03 \x03(\x0b\x32\x12.context.ServiceId\x12/\n\ncontroller\x18\x04 \x01(\x0b\x32\x1b.context.TeraFlowController\"8\n\rContextIdList\x12\'\n\x0b\x63ontext_ids\x18\x01 \x03(\x0b\x32\x12.context.ContextId\"1\n\x0b\x43ontextList\x12\"\n\x08\x63ontexts\x18\x01 \x03(\x0b\x32\x10.context.Context\"U\n\x0c\x43ontextEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\ncontext_id\x18\x02 \x01(\x0b\x32\x12.context.ContextId\"Z\n\nTopologyId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12$\n\rtopology_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"~\n\x08Topology\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12%\n\ndevice_ids\x18\x02 \x03(\x0b\x32\x11.context.DeviceId\x12!\n\x08link_ids\x18\x03 \x03(\x0b\x32\x0f.context.LinkId\";\n\x0eTopologyIdList\x12)\n\x0ctopology_ids\x18\x01 \x03(\x0b\x32\x13.context.TopologyId\"5\n\x0cTopologyList\x12%\n\ntopologies\x18\x01 \x03(\x0b\x32\x11.context.Topology\"X\n\rTopologyEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12(\n\x0btopology_id\x18\x02 \x01(\x0b\x32\x13.context.TopologyId\".\n\x08\x44\x65viceId\x12\"\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x9a\x02\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12G\n\x19\x64\x65vice_operational_status\x18\x04 \x01(\x0e\x32$.context.DeviceOperationalStatusEnum\x12\x31\n\x0e\x64\x65vice_drivers\x18\x05 \x03(\x0e\x32\x19.context.DeviceDriverEnum\x12+\n\x10\x64\x65vice_endpoints\x18\x06 \x03(\x0b\x32\x11.context.EndPoint\"9\n\x0c\x44\x65viceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"5\n\x0c\x44\x65viceIdList\x12%\n\ndevice_ids\x18\x01 \x03(\x0b\x32\x11.context.DeviceId\".\n\nDeviceList\x12 \n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x0f.context.Device\"R\n\x0b\x44\x65viceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"*\n\x06LinkId\x12 \n\tlink_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"X\n\x04Link\x12 \n\x07link_id\x18\x01 \x01(\x0b\x32\x0f.context.LinkId\x12.\n\x11link_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\"/\n\nLinkIdList\x12!\n\x08link_ids\x18\x01 \x03(\x0b\x32\x0f.context.LinkId\"(\n\x08LinkList\x12\x1c\n\x05links\x18\x01 \x03(\x0b\x32\r.context.Link\"L\n\tLinkEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12 \n\x07link_id\x18\x02 \x01(\x0b\x32\x0f.context.LinkId\"X\n\tServiceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12#\n\x0cservice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\xa6\x02\n\x07Service\x12&\n\nservice_id\x18\x01 \x01(\x0b\x32\x12.context.ServiceId\x12.\n\x0cservice_type\x18\x02 \x01(\x0e\x32\x18.context.ServiceTypeEnum\x12\x31\n\x14service_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12\x30\n\x13service_constraints\x18\x04 \x03(\x0b\x32\x13.context.Constraint\x12.\n\x0eservice_status\x18\x05 \x01(\x0b\x32\x16.context.ServiceStatus\x12.\n\x0eservice_config\x18\x06 \x01(\x0b\x32\x16.context.ServiceConfig\"C\n\rServiceStatus\x12\x32\n\x0eservice_status\x18\x01 \x01(\x0e\x32\x1a.context.ServiceStatusEnum\":\n\rServiceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"8\n\rServiceIdList\x12\'\n\x0bservice_ids\x18\x01 \x03(\x0b\x32\x12.context.ServiceId\"1\n\x0bServiceList\x12\"\n\x08services\x18\x01 \x03(\x0b\x32\x10.context.Service\"U\n\x0cServiceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\"T\n\x07SliceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12!\n\nslice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\x95\x02\n\x05Slice\x12\"\n\x08slice_id\x18\x01 \x01(\x0b\x32\x10.context.SliceId\x12/\n\x12slice_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\x12.\n\x11slice_constraints\x18\x03 \x03(\x0b\x32\x13.context.Constraint\x12-\n\x11slice_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\x12,\n\x12slice_subslice_ids\x18\x05 \x03(\x0b\x32\x10.context.SliceId\x12*\n\x0cslice_status\x18\x06 \x01(\x0b\x32\x14.context.SliceStatus\"=\n\x0bSliceStatus\x12.\n\x0cslice_status\x18\x01 \x01(\x0e\x32\x18.context.SliceStatusEnum\"2\n\x0bSliceIdList\x12#\n\tslice_ids\x18\x01 \x03(\x0b\x32\x10.context.SliceId\"+\n\tSliceList\x12\x1e\n\x06slices\x18\x01 \x03(\x0b\x32\x0e.context.Slice\"O\n\nSliceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12\"\n\x08slice_id\x18\x02 \x01(\x0b\x32\x10.context.SliceId\"6\n\x0c\x43onnectionId\x12&\n\x0f\x63onnection_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xc4\x01\n\nConnection\x12,\n\rconnection_id\x18\x01 \x01(\x0b\x32\x15.context.ConnectionId\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\x12\x33\n\x16path_hops_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12+\n\x0fsub_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\"A\n\x10\x43onnectionIdList\x12-\n\x0e\x63onnection_ids\x18\x01 \x03(\x0b\x32\x15.context.ConnectionId\":\n\x0e\x43onnectionList\x12(\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\x13.context.Connection\"^\n\x0f\x43onnectionEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12,\n\rconnection_id\x18\x02 \x01(\x0b\x32\x15.context.ConnectionId\"\x82\x01\n\nEndPointId\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12$\n\rendpoint_uuid\x18\x03 \x01(\x0b\x32\r.context.Uuid\"\x86\x01\n\x08\x45ndPoint\x12(\n\x0b\x65ndpoint_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x15\n\rendpoint_type\x18\x02 \x01(\t\x12\x39\n\x10kpi_sample_types\x18\x03 \x03(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\"e\n\nConfigRule\x12)\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x19.context.ConfigActionEnum\x12\x14\n\x0cresource_key\x18\x02 \x01(\t\x12\x16\n\x0eresource_value\x18\x03 \x01(\t\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"^\n\x12TeraFlowController\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x12\n\nip_address\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\"U\n\x14\x41uthenticationResult\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*j\n\rEventTypeEnum\x12\x17\n\x13\x45VENTTYPE_UNDEFINED\x10\x00\x12\x14\n\x10\x45VENTTYPE_CREATE\x10\x01\x12\x14\n\x10\x45VENTTYPE_UPDATE\x10\x02\x12\x14\n\x10\x45VENTTYPE_REMOVE\x10\x03*\xc5\x01\n\x10\x44\x65viceDriverEnum\x12\x1a\n\x16\x44\x45VICEDRIVER_UNDEFINED\x10\x00\x12\x1b\n\x17\x44\x45VICEDRIVER_OPENCONFIG\x10\x01\x12\x1e\n\x1a\x44\x45VICEDRIVER_TRANSPORT_API\x10\x02\x12\x13\n\x0f\x44\x45VICEDRIVER_P4\x10\x03\x12&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\x10\x04\x12\x1b\n\x17\x44\x45VICEDRIVER_ONF_TR_352\x10\x05*\x8f\x01\n\x1b\x44\x65viceOperationalStatusEnum\x12%\n!DEVICEOPERATIONALSTATUS_UNDEFINED\x10\x00\x12$\n DEVICEOPERATIONALSTATUS_DISABLED\x10\x01\x12#\n\x1f\x44\x45VICEOPERATIONALSTATUS_ENABLED\x10\x02*\x81\x01\n\x0fServiceTypeEnum\x12\x17\n\x13SERVICETYPE_UNKNOWN\x10\x00\x12\x14\n\x10SERVICETYPE_L3NM\x10\x01\x12\x14\n\x10SERVICETYPE_L2NM\x10\x02\x12)\n%SERVICETYPE_TAPI_CONNECTIVITY_SERVICE\x10\x03*\x88\x01\n\x11ServiceStatusEnum\x12\x1b\n\x17SERVICESTATUS_UNDEFINED\x10\x00\x12\x19\n\x15SERVICESTATUS_PLANNED\x10\x01\x12\x18\n\x14SERVICESTATUS_ACTIVE\x10\x02\x12!\n\x1dSERVICESTATUS_PENDING_REMOVAL\x10\x03*\x8b\x01\n\x0fSliceStatusEnum\x12\x19\n\x15SLICESTATUS_UNDEFINED\x10\x00\x12\x17\n\x13SLICESTATUS_PLANNED\x10\x01\x12\x14\n\x10SLICESTATUS_INIT\x10\x02\x12\x16\n\x12SLICESTATUS_ACTIVE\x10\x03\x12\x16\n\x12SLICESTATUS_DEINIT\x10\x04*]\n\x10\x43onfigActionEnum\x12\x1a\n\x16\x43ONFIGACTION_UNDEFINED\x10\x00\x12\x14\n\x10\x43ONFIGACTION_SET\x10\x01\x12\x17\n\x13\x43ONFIGACTION_DELETE\x10\x02\x32\xef\x12\n\x0e\x43ontextService\x12:\n\x0eListContextIds\x12\x0e.context.Empty\x1a\x16.context.ContextIdList\"\x00\x12\x36\n\x0cListContexts\x12\x0e.context.Empty\x1a\x14.context.ContextList\"\x00\x12\x34\n\nGetContext\x12\x12.context.ContextId\x1a\x10.context.Context\"\x00\x12\x34\n\nSetContext\x12\x10.context.Context\x1a\x12.context.ContextId\"\x00\x12\x35\n\rRemoveContext\x12\x12.context.ContextId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetContextEvents\x12\x0e.context.Empty\x1a\x15.context.ContextEvent\"\x00\x30\x01\x12@\n\x0fListTopologyIds\x12\x12.context.ContextId\x1a\x17.context.TopologyIdList\"\x00\x12=\n\x0eListTopologies\x12\x12.context.ContextId\x1a\x15.context.TopologyList\"\x00\x12\x37\n\x0bGetTopology\x12\x13.context.TopologyId\x1a\x11.context.Topology\"\x00\x12\x37\n\x0bSetTopology\x12\x11.context.Topology\x1a\x13.context.TopologyId\"\x00\x12\x37\n\x0eRemoveTopology\x12\x13.context.TopologyId\x1a\x0e.context.Empty\"\x00\x12?\n\x11GetTopologyEvents\x12\x0e.context.Empty\x1a\x16.context.TopologyEvent\"\x00\x30\x01\x12\x38\n\rListDeviceIds\x12\x0e.context.Empty\x1a\x15.context.DeviceIdList\"\x00\x12\x34\n\x0bListDevices\x12\x0e.context.Empty\x1a\x13.context.DeviceList\"\x00\x12\x31\n\tGetDevice\x12\x11.context.DeviceId\x1a\x0f.context.Device\"\x00\x12\x31\n\tSetDevice\x12\x0f.context.Device\x1a\x11.context.DeviceId\"\x00\x12\x33\n\x0cRemoveDevice\x12\x11.context.DeviceId\x1a\x0e.context.Empty\"\x00\x12;\n\x0fGetDeviceEvents\x12\x0e.context.Empty\x1a\x14.context.DeviceEvent\"\x00\x30\x01\x12\x34\n\x0bListLinkIds\x12\x0e.context.Empty\x1a\x13.context.LinkIdList\"\x00\x12\x30\n\tListLinks\x12\x0e.context.Empty\x1a\x11.context.LinkList\"\x00\x12+\n\x07GetLink\x12\x0f.context.LinkId\x1a\r.context.Link\"\x00\x12+\n\x07SetLink\x12\r.context.Link\x1a\x0f.context.LinkId\"\x00\x12/\n\nRemoveLink\x12\x0f.context.LinkId\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetLinkEvents\x12\x0e.context.Empty\x1a\x12.context.LinkEvent\"\x00\x30\x01\x12>\n\x0eListServiceIds\x12\x12.context.ContextId\x1a\x16.context.ServiceIdList\"\x00\x12:\n\x0cListServices\x12\x12.context.ContextId\x1a\x14.context.ServiceList\"\x00\x12\x34\n\nGetService\x12\x12.context.ServiceId\x1a\x10.context.Service\"\x00\x12\x34\n\nSetService\x12\x10.context.Service\x1a\x12.context.ServiceId\"\x00\x12\x35\n\rRemoveService\x12\x12.context.ServiceId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetServiceEvents\x12\x0e.context.Empty\x1a\x15.context.ServiceEvent\"\x00\x30\x01\x12:\n\x0cListSliceIds\x12\x12.context.ContextId\x1a\x14.context.SliceIdList\"\x00\x12\x36\n\nListSlices\x12\x12.context.ContextId\x1a\x12.context.SliceList\"\x00\x12.\n\x08GetSlice\x12\x10.context.SliceId\x1a\x0e.context.Slice\"\x00\x12.\n\x08SetSlice\x12\x0e.context.Slice\x1a\x10.context.SliceId\"\x00\x12\x31\n\x0bRemoveSlice\x12\x10.context.SliceId\x1a\x0e.context.Empty\"\x00\x12\x39\n\x0eGetSliceEvents\x12\x0e.context.Empty\x1a\x13.context.SliceEvent\"\x00\x30\x01\x12\x44\n\x11ListConnectionIds\x12\x12.context.ServiceId\x1a\x19.context.ConnectionIdList\"\x00\x12@\n\x0fListConnections\x12\x12.context.ServiceId\x1a\x17.context.ConnectionList\"\x00\x12=\n\rGetConnection\x12\x15.context.ConnectionId\x1a\x13.context.Connection\"\x00\x12=\n\rSetConnection\x12\x13.context.Connection\x1a\x15.context.ConnectionId\"\x00\x12;\n\x10RemoveConnection\x12\x15.context.ConnectionId\x1a\x0e.context.Empty\"\x00\x12\x43\n\x13GetConnectionEvents\x12\x0e.context.Empty\x1a\x18.context.ConnectionEvent\"\x00\x30\x01\x62\x06proto3'
-  ,
-  dependencies=[kpi__sample__types__pb2.DESCRIPTOR,])
-
-_EVENTTYPEENUM = _descriptor.EnumDescriptor(
-  name='EventTypeEnum',
-  full_name='context.EventTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_CREATE', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UPDATE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_REMOVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4310,
-  serialized_end=4416,
-)
-_sym_db.RegisterEnumDescriptor(_EVENTTYPEENUM)
-
-EventTypeEnum = enum_type_wrapper.EnumTypeWrapper(_EVENTTYPEENUM)
-_DEVICEDRIVERENUM = _descriptor.EnumDescriptor(
-  name='DeviceDriverEnum',
-  full_name='context.DeviceDriverEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_OPENCONFIG', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_TRANSPORT_API', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_P4', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_IETF_NETWORK_TOPOLOGY', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_ONF_TR_352', index=5, number=5,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4419,
-  serialized_end=4616,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEDRIVERENUM)
-
-DeviceDriverEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEDRIVERENUM)
-_DEVICEOPERATIONALSTATUSENUM = _descriptor.EnumDescriptor(
-  name='DeviceOperationalStatusEnum',
-  full_name='context.DeviceOperationalStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_DISABLED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_ENABLED', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4619,
-  serialized_end=4762,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEOPERATIONALSTATUSENUM)
-
-DeviceOperationalStatusEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEOPERATIONALSTATUSENUM)
-_SERVICETYPEENUM = _descriptor.EnumDescriptor(
-  name='ServiceTypeEnum',
-  full_name='context.ServiceTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L3NM', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L2NM', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_TAPI_CONNECTIVITY_SERVICE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4765,
-  serialized_end=4894,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICETYPEENUM)
-
-ServiceTypeEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICETYPEENUM)
-_SERVICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='ServiceStatusEnum',
-  full_name='context.ServiceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_ACTIVE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PENDING_REMOVAL', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4897,
-  serialized_end=5033,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICESTATUSENUM)
-
-ServiceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICESTATUSENUM)
-_SLICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='SliceStatusEnum',
-  full_name='context.SliceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_INIT', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_ACTIVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_DEINIT', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5036,
-  serialized_end=5175,
-)
-_sym_db.RegisterEnumDescriptor(_SLICESTATUSENUM)
-
-SliceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SLICESTATUSENUM)
-_CONFIGACTIONENUM = _descriptor.EnumDescriptor(
-  name='ConfigActionEnum',
-  full_name='context.ConfigActionEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_SET', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_DELETE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5177,
-  serialized_end=5270,
-)
-_sym_db.RegisterEnumDescriptor(_CONFIGACTIONENUM)
-
-ConfigActionEnum = enum_type_wrapper.EnumTypeWrapper(_CONFIGACTIONENUM)
-EVENTTYPE_UNDEFINED = 0
-EVENTTYPE_CREATE = 1
-EVENTTYPE_UPDATE = 2
-EVENTTYPE_REMOVE = 3
-DEVICEDRIVER_UNDEFINED = 0
-DEVICEDRIVER_OPENCONFIG = 1
-DEVICEDRIVER_TRANSPORT_API = 2
-DEVICEDRIVER_P4 = 3
-DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4
-DEVICEDRIVER_ONF_TR_352 = 5
-DEVICEOPERATIONALSTATUS_UNDEFINED = 0
-DEVICEOPERATIONALSTATUS_DISABLED = 1
-DEVICEOPERATIONALSTATUS_ENABLED = 2
-SERVICETYPE_UNKNOWN = 0
-SERVICETYPE_L3NM = 1
-SERVICETYPE_L2NM = 2
-SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3
-SERVICESTATUS_UNDEFINED = 0
-SERVICESTATUS_PLANNED = 1
-SERVICESTATUS_ACTIVE = 2
-SERVICESTATUS_PENDING_REMOVAL = 3
-SLICESTATUS_UNDEFINED = 0
-SLICESTATUS_PLANNED = 1
-SLICESTATUS_INIT = 2
-SLICESTATUS_ACTIVE = 3
-SLICESTATUS_DEINIT = 4
-CONFIGACTION_UNDEFINED = 0
-CONFIGACTION_SET = 1
-CONFIGACTION_DELETE = 2
-
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='context.Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=50,
-  serialized_end=57,
-)
-
-
-_UUID = _descriptor.Descriptor(
-  name='Uuid',
-  full_name='context.Uuid',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='uuid', full_name='context.Uuid.uuid', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=59,
-  serialized_end=79,
-)
-
-
-_EVENT = _descriptor.Descriptor(
-  name='Event',
-  full_name='context.Event',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='context.Event.timestamp', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='event_type', full_name='context.Event.event_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=81,
-  serialized_end=151,
-)
-
-
-_CONTEXTID = _descriptor.Descriptor(
-  name='ContextId',
-  full_name='context.ContextId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_uuid', full_name='context.ContextId.context_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=153,
-  serialized_end=201,
-)
-
-
-_CONTEXT = _descriptor.Descriptor(
-  name='Context',
-  full_name='context.Context',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.Context.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.Context.topology_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.Context.service_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='controller', full_name='context.Context.controller', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=204,
-  serialized_end=386,
-)
-
-
-_CONTEXTIDLIST = _descriptor.Descriptor(
-  name='ContextIdList',
-  full_name='context.ContextIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_ids', full_name='context.ContextIdList.context_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=388,
-  serialized_end=444,
-)
-
-
-_CONTEXTLIST = _descriptor.Descriptor(
-  name='ContextList',
-  full_name='context.ContextList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='contexts', full_name='context.ContextList.contexts', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=446,
-  serialized_end=495,
-)
-
-
-_CONTEXTEVENT = _descriptor.Descriptor(
-  name='ContextEvent',
-  full_name='context.ContextEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ContextEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ContextEvent.context_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=497,
-  serialized_end=582,
-)
-
-
-_TOPOLOGYID = _descriptor.Descriptor(
-  name='TopologyId',
-  full_name='context.TopologyId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TopologyId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_uuid', full_name='context.TopologyId.topology_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=584,
-  serialized_end=674,
-)
-
-
-_TOPOLOGY = _descriptor.Descriptor(
-  name='Topology',
-  full_name='context.Topology',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.Topology.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.Topology.device_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.Topology.link_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=676,
-  serialized_end=802,
-)
-
-
-_TOPOLOGYIDLIST = _descriptor.Descriptor(
-  name='TopologyIdList',
-  full_name='context.TopologyIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.TopologyIdList.topology_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=804,
-  serialized_end=863,
-)
-
-
-_TOPOLOGYLIST = _descriptor.Descriptor(
-  name='TopologyList',
-  full_name='context.TopologyList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topologies', full_name='context.TopologyList.topologies', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=865,
-  serialized_end=918,
-)
-
-
-_TOPOLOGYEVENT = _descriptor.Descriptor(
-  name='TopologyEvent',
-  full_name='context.TopologyEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.TopologyEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.TopologyEvent.topology_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=920,
-  serialized_end=1008,
-)
-
-
-_DEVICEID = _descriptor.Descriptor(
-  name='DeviceId',
-  full_name='context.DeviceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_uuid', full_name='context.DeviceId.device_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1010,
-  serialized_end=1056,
-)
-
-
-_DEVICE = _descriptor.Descriptor(
-  name='Device',
-  full_name='context.Device',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.Device.device_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_type', full_name='context.Device.device_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_config', full_name='context.Device.device_config', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_operational_status', full_name='context.Device.device_operational_status', index=3,
-      number=4, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_drivers', full_name='context.Device.device_drivers', index=4,
-      number=5, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_endpoints', full_name='context.Device.device_endpoints', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1059,
-  serialized_end=1341,
-)
-
-
-_DEVICECONFIG = _descriptor.Descriptor(
-  name='DeviceConfig',
-  full_name='context.DeviceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.DeviceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1343,
-  serialized_end=1400,
-)
-
-
-_DEVICEIDLIST = _descriptor.Descriptor(
-  name='DeviceIdList',
-  full_name='context.DeviceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.DeviceIdList.device_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1402,
-  serialized_end=1455,
-)
-
-
-_DEVICELIST = _descriptor.Descriptor(
-  name='DeviceList',
-  full_name='context.DeviceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='devices', full_name='context.DeviceList.devices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1457,
-  serialized_end=1503,
-)
-
-
-_DEVICEEVENT = _descriptor.Descriptor(
-  name='DeviceEvent',
-  full_name='context.DeviceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.DeviceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.DeviceEvent.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1505,
-  serialized_end=1587,
-)
-
-
-_LINKID = _descriptor.Descriptor(
-  name='LinkId',
-  full_name='context.LinkId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_uuid', full_name='context.LinkId.link_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1589,
-  serialized_end=1631,
-)
-
-
-_LINK = _descriptor.Descriptor(
-  name='Link',
-  full_name='context.Link',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.Link.link_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_endpoint_ids', full_name='context.Link.link_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1633,
-  serialized_end=1721,
-)
-
-
-_LINKIDLIST = _descriptor.Descriptor(
-  name='LinkIdList',
-  full_name='context.LinkIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.LinkIdList.link_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1723,
-  serialized_end=1770,
-)
-
-
-_LINKLIST = _descriptor.Descriptor(
-  name='LinkList',
-  full_name='context.LinkList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='links', full_name='context.LinkList.links', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1772,
-  serialized_end=1812,
-)
-
-
-_LINKEVENT = _descriptor.Descriptor(
-  name='LinkEvent',
-  full_name='context.LinkEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.LinkEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.LinkEvent.link_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1814,
-  serialized_end=1890,
-)
-
-
-_SERVICEID = _descriptor.Descriptor(
-  name='ServiceId',
-  full_name='context.ServiceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ServiceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_uuid', full_name='context.ServiceId.service_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1892,
-  serialized_end=1980,
-)
-
-
-_SERVICE = _descriptor.Descriptor(
-  name='Service',
-  full_name='context.Service',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Service.service_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_type', full_name='context.Service.service_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_endpoint_ids', full_name='context.Service.service_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_constraints', full_name='context.Service.service_constraints', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.Service.service_status', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_config', full_name='context.Service.service_config', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1983,
-  serialized_end=2277,
-)
-
-
-_SERVICESTATUS = _descriptor.Descriptor(
-  name='ServiceStatus',
-  full_name='context.ServiceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.ServiceStatus.service_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2279,
-  serialized_end=2346,
-)
-
-
-_SERVICECONFIG = _descriptor.Descriptor(
-  name='ServiceConfig',
-  full_name='context.ServiceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.ServiceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2348,
-  serialized_end=2406,
-)
-
-
-_SERVICEIDLIST = _descriptor.Descriptor(
-  name='ServiceIdList',
-  full_name='context.ServiceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.ServiceIdList.service_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2408,
-  serialized_end=2464,
-)
-
-
-_SERVICELIST = _descriptor.Descriptor(
-  name='ServiceList',
-  full_name='context.ServiceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='services', full_name='context.ServiceList.services', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2466,
-  serialized_end=2515,
-)
-
-
-_SERVICEEVENT = _descriptor.Descriptor(
-  name='ServiceEvent',
-  full_name='context.ServiceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ServiceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.ServiceEvent.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2517,
-  serialized_end=2602,
-)
-
-
-_SLICEID = _descriptor.Descriptor(
-  name='SliceId',
-  full_name='context.SliceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.SliceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_uuid', full_name='context.SliceId.slice_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2604,
-  serialized_end=2688,
-)
-
-
-_SLICE = _descriptor.Descriptor(
-  name='Slice',
-  full_name='context.Slice',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.Slice.slice_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_endpoint_ids', full_name='context.Slice.slice_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_constraints', full_name='context.Slice.slice_constraints', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_service_ids', full_name='context.Slice.slice_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_subslice_ids', full_name='context.Slice.slice_subslice_ids', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.Slice.slice_status', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2691,
-  serialized_end=2968,
-)
-
-
-_SLICESTATUS = _descriptor.Descriptor(
-  name='SliceStatus',
-  full_name='context.SliceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.SliceStatus.slice_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2970,
-  serialized_end=3031,
-)
-
-
-_SLICEIDLIST = _descriptor.Descriptor(
-  name='SliceIdList',
-  full_name='context.SliceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_ids', full_name='context.SliceIdList.slice_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3033,
-  serialized_end=3083,
-)
-
-
-_SLICELIST = _descriptor.Descriptor(
-  name='SliceList',
-  full_name='context.SliceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slices', full_name='context.SliceList.slices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3085,
-  serialized_end=3128,
-)
-
-
-_SLICEEVENT = _descriptor.Descriptor(
-  name='SliceEvent',
-  full_name='context.SliceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.SliceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.SliceEvent.slice_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3130,
-  serialized_end=3209,
-)
-
-
-_CONNECTIONID = _descriptor.Descriptor(
-  name='ConnectionId',
-  full_name='context.ConnectionId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_uuid', full_name='context.ConnectionId.connection_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3211,
-  serialized_end=3265,
-)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='context.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.Connection.connection_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Connection.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='path_hops_endpoint_ids', full_name='context.Connection.path_hops_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sub_service_ids', full_name='context.Connection.sub_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3268,
-  serialized_end=3464,
-)
-
-
-_CONNECTIONIDLIST = _descriptor.Descriptor(
-  name='ConnectionIdList',
-  full_name='context.ConnectionIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_ids', full_name='context.ConnectionIdList.connection_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3466,
-  serialized_end=3531,
-)
-
-
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='context.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connections', full_name='context.ConnectionList.connections', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3533,
-  serialized_end=3591,
-)
-
-
-_CONNECTIONEVENT = _descriptor.Descriptor(
-  name='ConnectionEvent',
-  full_name='context.ConnectionEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ConnectionEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.ConnectionEvent.connection_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3593,
-  serialized_end=3687,
-)
-
-
-_ENDPOINTID = _descriptor.Descriptor(
-  name='EndPointId',
-  full_name='context.EndPointId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.EndPointId.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.EndPointId.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_uuid', full_name='context.EndPointId.endpoint_uuid', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3690,
-  serialized_end=3820,
-)
-
-
-_ENDPOINT = _descriptor.Descriptor(
-  name='EndPoint',
-  full_name='context.EndPoint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='endpoint_id', full_name='context.EndPoint.endpoint_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_type', full_name='context.EndPoint.endpoint_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='kpi_sample_types', full_name='context.EndPoint.kpi_sample_types', index=2,
-      number=3, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3823,
-  serialized_end=3957,
-)
-
-
-_CONFIGRULE = _descriptor.Descriptor(
-  name='ConfigRule',
-  full_name='context.ConfigRule',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='context.ConfigRule.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_key', full_name='context.ConfigRule.resource_key', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_value', full_name='context.ConfigRule.resource_value', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3959,
-  serialized_end=4060,
-)
-
-
-_CONSTRAINT = _descriptor.Descriptor(
-  name='Constraint',
-  full_name='context.Constraint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='constraint_type', full_name='context.Constraint.constraint_type', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='constraint_value', full_name='context.Constraint.constraint_value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4062,
-  serialized_end=4125,
-)
-
-
-_TERAFLOWCONTROLLER = _descriptor.Descriptor(
-  name='TeraFlowController',
-  full_name='context.TeraFlowController',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TeraFlowController.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_address', full_name='context.TeraFlowController.ip_address', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port', full_name='context.TeraFlowController.port', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4127,
-  serialized_end=4221,
-)
-
-
-_AUTHENTICATIONRESULT = _descriptor.Descriptor(
-  name='AuthenticationResult',
-  full_name='context.AuthenticationResult',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.AuthenticationResult.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='authenticated', full_name='context.AuthenticationResult.authenticated', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4223,
-  serialized_end=4308,
-)
-
-_EVENT.fields_by_name['event_type'].enum_type = _EVENTTYPEENUM
-_CONTEXTID.fields_by_name['context_uuid'].message_type = _UUID
-_CONTEXT.fields_by_name['context_id'].message_type = _CONTEXTID
-_CONTEXT.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_CONTEXT.fields_by_name['service_ids'].message_type = _SERVICEID
-_CONTEXT.fields_by_name['controller'].message_type = _TERAFLOWCONTROLLER
-_CONTEXTIDLIST.fields_by_name['context_ids'].message_type = _CONTEXTID
-_CONTEXTLIST.fields_by_name['contexts'].message_type = _CONTEXT
-_CONTEXTEVENT.fields_by_name['event'].message_type = _EVENT
-_CONTEXTEVENT.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['topology_uuid'].message_type = _UUID
-_TOPOLOGY.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_TOPOLOGY.fields_by_name['device_ids'].message_type = _DEVICEID
-_TOPOLOGY.fields_by_name['link_ids'].message_type = _LINKID
-_TOPOLOGYIDLIST.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_TOPOLOGYLIST.fields_by_name['topologies'].message_type = _TOPOLOGY
-_TOPOLOGYEVENT.fields_by_name['event'].message_type = _EVENT
-_TOPOLOGYEVENT.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_DEVICEID.fields_by_name['device_uuid'].message_type = _UUID
-_DEVICE.fields_by_name['device_id'].message_type = _DEVICEID
-_DEVICE.fields_by_name['device_config'].message_type = _DEVICECONFIG
-_DEVICE.fields_by_name['device_operational_status'].enum_type = _DEVICEOPERATIONALSTATUSENUM
-_DEVICE.fields_by_name['device_drivers'].enum_type = _DEVICEDRIVERENUM
-_DEVICE.fields_by_name['device_endpoints'].message_type = _ENDPOINT
-_DEVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_DEVICEIDLIST.fields_by_name['device_ids'].message_type = _DEVICEID
-_DEVICELIST.fields_by_name['devices'].message_type = _DEVICE
-_DEVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_DEVICEEVENT.fields_by_name['device_id'].message_type = _DEVICEID
-_LINKID.fields_by_name['link_uuid'].message_type = _UUID
-_LINK.fields_by_name['link_id'].message_type = _LINKID
-_LINK.fields_by_name['link_endpoint_ids'].message_type = _ENDPOINTID
-_LINKIDLIST.fields_by_name['link_ids'].message_type = _LINKID
-_LINKLIST.fields_by_name['links'].message_type = _LINK
-_LINKEVENT.fields_by_name['event'].message_type = _EVENT
-_LINKEVENT.fields_by_name['link_id'].message_type = _LINKID
-_SERVICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SERVICEID.fields_by_name['service_uuid'].message_type = _UUID
-_SERVICE.fields_by_name['service_id'].message_type = _SERVICEID
-_SERVICE.fields_by_name['service_type'].enum_type = _SERVICETYPEENUM
-_SERVICE.fields_by_name['service_endpoint_ids'].message_type = _ENDPOINTID
-_SERVICE.fields_by_name['service_constraints'].message_type = _CONSTRAINT
-_SERVICE.fields_by_name['service_status'].message_type = _SERVICESTATUS
-_SERVICE.fields_by_name['service_config'].message_type = _SERVICECONFIG
-_SERVICESTATUS.fields_by_name['service_status'].enum_type = _SERVICESTATUSENUM
-_SERVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_SERVICEIDLIST.fields_by_name['service_ids'].message_type = _SERVICEID
-_SERVICELIST.fields_by_name['services'].message_type = _SERVICE
-_SERVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SERVICEEVENT.fields_by_name['service_id'].message_type = _SERVICEID
-_SLICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SLICEID.fields_by_name['slice_uuid'].message_type = _UUID
-_SLICE.fields_by_name['slice_id'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_endpoint_ids'].message_type = _ENDPOINTID
-_SLICE.fields_by_name['slice_constraints'].message_type = _CONSTRAINT
-_SLICE.fields_by_name['slice_service_ids'].message_type = _SERVICEID
-_SLICE.fields_by_name['slice_subslice_ids'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_status'].message_type = _SLICESTATUS
-_SLICESTATUS.fields_by_name['slice_status'].enum_type = _SLICESTATUSENUM
-_SLICEIDLIST.fields_by_name['slice_ids'].message_type = _SLICEID
-_SLICELIST.fields_by_name['slices'].message_type = _SLICE
-_SLICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SLICEEVENT.fields_by_name['slice_id'].message_type = _SLICEID
-_CONNECTIONID.fields_by_name['connection_uuid'].message_type = _UUID
-_CONNECTION.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_CONNECTION.fields_by_name['service_id'].message_type = _SERVICEID
-_CONNECTION.fields_by_name['path_hops_endpoint_ids'].message_type = _ENDPOINTID
-_CONNECTION.fields_by_name['sub_service_ids'].message_type = _SERVICEID
-_CONNECTIONIDLIST.fields_by_name['connection_ids'].message_type = _CONNECTIONID
-_CONNECTIONLIST.fields_by_name['connections'].message_type = _CONNECTION
-_CONNECTIONEVENT.fields_by_name['event'].message_type = _EVENT
-_CONNECTIONEVENT.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_ENDPOINTID.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_ENDPOINTID.fields_by_name['device_id'].message_type = _DEVICEID
-_ENDPOINTID.fields_by_name['endpoint_uuid'].message_type = _UUID
-_ENDPOINT.fields_by_name['endpoint_id'].message_type = _ENDPOINTID
-_ENDPOINT.fields_by_name['kpi_sample_types'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
-_CONFIGRULE.fields_by_name['action'].enum_type = _CONFIGACTIONENUM
-_TERAFLOWCONTROLLER.fields_by_name['context_id'].message_type = _CONTEXTID
-_AUTHENTICATIONRESULT.fields_by_name['context_id'].message_type = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['Uuid'] = _UUID
-DESCRIPTOR.message_types_by_name['Event'] = _EVENT
-DESCRIPTOR.message_types_by_name['ContextId'] = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Context'] = _CONTEXT
-DESCRIPTOR.message_types_by_name['ContextIdList'] = _CONTEXTIDLIST
-DESCRIPTOR.message_types_by_name['ContextList'] = _CONTEXTLIST
-DESCRIPTOR.message_types_by_name['ContextEvent'] = _CONTEXTEVENT
-DESCRIPTOR.message_types_by_name['TopologyId'] = _TOPOLOGYID
-DESCRIPTOR.message_types_by_name['Topology'] = _TOPOLOGY
-DESCRIPTOR.message_types_by_name['TopologyIdList'] = _TOPOLOGYIDLIST
-DESCRIPTOR.message_types_by_name['TopologyList'] = _TOPOLOGYLIST
-DESCRIPTOR.message_types_by_name['TopologyEvent'] = _TOPOLOGYEVENT
-DESCRIPTOR.message_types_by_name['DeviceId'] = _DEVICEID
-DESCRIPTOR.message_types_by_name['Device'] = _DEVICE
-DESCRIPTOR.message_types_by_name['DeviceConfig'] = _DEVICECONFIG
-DESCRIPTOR.message_types_by_name['DeviceIdList'] = _DEVICEIDLIST
-DESCRIPTOR.message_types_by_name['DeviceList'] = _DEVICELIST
-DESCRIPTOR.message_types_by_name['DeviceEvent'] = _DEVICEEVENT
-DESCRIPTOR.message_types_by_name['LinkId'] = _LINKID
-DESCRIPTOR.message_types_by_name['Link'] = _LINK
-DESCRIPTOR.message_types_by_name['LinkIdList'] = _LINKIDLIST
-DESCRIPTOR.message_types_by_name['LinkList'] = _LINKLIST
-DESCRIPTOR.message_types_by_name['LinkEvent'] = _LINKEVENT
-DESCRIPTOR.message_types_by_name['ServiceId'] = _SERVICEID
-DESCRIPTOR.message_types_by_name['Service'] = _SERVICE
-DESCRIPTOR.message_types_by_name['ServiceStatus'] = _SERVICESTATUS
-DESCRIPTOR.message_types_by_name['ServiceConfig'] = _SERVICECONFIG
-DESCRIPTOR.message_types_by_name['ServiceIdList'] = _SERVICEIDLIST
-DESCRIPTOR.message_types_by_name['ServiceList'] = _SERVICELIST
-DESCRIPTOR.message_types_by_name['ServiceEvent'] = _SERVICEEVENT
-DESCRIPTOR.message_types_by_name['SliceId'] = _SLICEID
-DESCRIPTOR.message_types_by_name['Slice'] = _SLICE
-DESCRIPTOR.message_types_by_name['SliceStatus'] = _SLICESTATUS
-DESCRIPTOR.message_types_by_name['SliceIdList'] = _SLICEIDLIST
-DESCRIPTOR.message_types_by_name['SliceList'] = _SLICELIST
-DESCRIPTOR.message_types_by_name['SliceEvent'] = _SLICEEVENT
-DESCRIPTOR.message_types_by_name['ConnectionId'] = _CONNECTIONID
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionIdList'] = _CONNECTIONIDLIST
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-DESCRIPTOR.message_types_by_name['ConnectionEvent'] = _CONNECTIONEVENT
-DESCRIPTOR.message_types_by_name['EndPointId'] = _ENDPOINTID
-DESCRIPTOR.message_types_by_name['EndPoint'] = _ENDPOINT
-DESCRIPTOR.message_types_by_name['ConfigRule'] = _CONFIGRULE
-DESCRIPTOR.message_types_by_name['Constraint'] = _CONSTRAINT
-DESCRIPTOR.message_types_by_name['TeraFlowController'] = _TERAFLOWCONTROLLER
-DESCRIPTOR.message_types_by_name['AuthenticationResult'] = _AUTHENTICATIONRESULT
-DESCRIPTOR.enum_types_by_name['EventTypeEnum'] = _EVENTTYPEENUM
-DESCRIPTOR.enum_types_by_name['DeviceDriverEnum'] = _DEVICEDRIVERENUM
-DESCRIPTOR.enum_types_by_name['DeviceOperationalStatusEnum'] = _DEVICEOPERATIONALSTATUSENUM
-DESCRIPTOR.enum_types_by_name['ServiceTypeEnum'] = _SERVICETYPEENUM
-DESCRIPTOR.enum_types_by_name['ServiceStatusEnum'] = _SERVICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['SliceStatusEnum'] = _SLICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['ConfigActionEnum'] = _CONFIGACTIONENUM
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), {
-  'DESCRIPTOR' : _UUID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Uuid)
-  })
-_sym_db.RegisterMessage(Uuid)
-
-Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), {
-  'DESCRIPTOR' : _EVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Event)
-  })
-_sym_db.RegisterMessage(Event)
-
-ContextId = _reflection.GeneratedProtocolMessageType('ContextId', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextId)
-  })
-_sym_db.RegisterMessage(ContextId)
-
-Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Context)
-  })
-_sym_db.RegisterMessage(Context)
-
-ContextIdList = _reflection.GeneratedProtocolMessageType('ContextIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextIdList)
-  })
-_sym_db.RegisterMessage(ContextIdList)
-
-ContextList = _reflection.GeneratedProtocolMessageType('ContextList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextList)
-  })
-_sym_db.RegisterMessage(ContextList)
-
-ContextEvent = _reflection.GeneratedProtocolMessageType('ContextEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextEvent)
-  })
-_sym_db.RegisterMessage(ContextEvent)
-
-TopologyId = _reflection.GeneratedProtocolMessageType('TopologyId', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyId)
-  })
-_sym_db.RegisterMessage(TopologyId)
-
-Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Topology)
-  })
-_sym_db.RegisterMessage(Topology)
-
-TopologyIdList = _reflection.GeneratedProtocolMessageType('TopologyIdList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyIdList)
-  })
-_sym_db.RegisterMessage(TopologyIdList)
-
-TopologyList = _reflection.GeneratedProtocolMessageType('TopologyList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyList)
-  })
-_sym_db.RegisterMessage(TopologyList)
-
-TopologyEvent = _reflection.GeneratedProtocolMessageType('TopologyEvent', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyEvent)
-  })
-_sym_db.RegisterMessage(TopologyEvent)
-
-DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceId)
-  })
-_sym_db.RegisterMessage(DeviceId)
-
-Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Device)
-  })
-_sym_db.RegisterMessage(Device)
-
-DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceConfig)
-  })
-_sym_db.RegisterMessage(DeviceConfig)
-
-DeviceIdList = _reflection.GeneratedProtocolMessageType('DeviceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceIdList)
-  })
-_sym_db.RegisterMessage(DeviceIdList)
-
-DeviceList = _reflection.GeneratedProtocolMessageType('DeviceList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceList)
-  })
-_sym_db.RegisterMessage(DeviceList)
-
-DeviceEvent = _reflection.GeneratedProtocolMessageType('DeviceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceEvent)
-  })
-_sym_db.RegisterMessage(DeviceEvent)
-
-LinkId = _reflection.GeneratedProtocolMessageType('LinkId', (_message.Message,), {
-  'DESCRIPTOR' : _LINKID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkId)
-  })
-_sym_db.RegisterMessage(LinkId)
-
-Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), {
-  'DESCRIPTOR' : _LINK,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Link)
-  })
-_sym_db.RegisterMessage(Link)
-
-LinkIdList = _reflection.GeneratedProtocolMessageType('LinkIdList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkIdList)
-  })
-_sym_db.RegisterMessage(LinkIdList)
-
-LinkList = _reflection.GeneratedProtocolMessageType('LinkList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkList)
-  })
-_sym_db.RegisterMessage(LinkList)
-
-LinkEvent = _reflection.GeneratedProtocolMessageType('LinkEvent', (_message.Message,), {
-  'DESCRIPTOR' : _LINKEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkEvent)
-  })
-_sym_db.RegisterMessage(LinkEvent)
-
-ServiceId = _reflection.GeneratedProtocolMessageType('ServiceId', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceId)
-  })
-_sym_db.RegisterMessage(ServiceId)
-
-Service = _reflection.GeneratedProtocolMessageType('Service', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Service)
-  })
-_sym_db.RegisterMessage(Service)
-
-ServiceStatus = _reflection.GeneratedProtocolMessageType('ServiceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceStatus)
-  })
-_sym_db.RegisterMessage(ServiceStatus)
-
-ServiceConfig = _reflection.GeneratedProtocolMessageType('ServiceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceConfig)
-  })
-_sym_db.RegisterMessage(ServiceConfig)
-
-ServiceIdList = _reflection.GeneratedProtocolMessageType('ServiceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceIdList)
-  })
-_sym_db.RegisterMessage(ServiceIdList)
-
-ServiceList = _reflection.GeneratedProtocolMessageType('ServiceList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceList)
-  })
-_sym_db.RegisterMessage(ServiceList)
-
-ServiceEvent = _reflection.GeneratedProtocolMessageType('ServiceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceEvent)
-  })
-_sym_db.RegisterMessage(ServiceEvent)
-
-SliceId = _reflection.GeneratedProtocolMessageType('SliceId', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceId)
-  })
-_sym_db.RegisterMessage(SliceId)
-
-Slice = _reflection.GeneratedProtocolMessageType('Slice', (_message.Message,), {
-  'DESCRIPTOR' : _SLICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Slice)
-  })
-_sym_db.RegisterMessage(Slice)
-
-SliceStatus = _reflection.GeneratedProtocolMessageType('SliceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SLICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceStatus)
-  })
-_sym_db.RegisterMessage(SliceStatus)
-
-SliceIdList = _reflection.GeneratedProtocolMessageType('SliceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceIdList)
-  })
-_sym_db.RegisterMessage(SliceIdList)
-
-SliceList = _reflection.GeneratedProtocolMessageType('SliceList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceList)
-  })
-_sym_db.RegisterMessage(SliceList)
-
-SliceEvent = _reflection.GeneratedProtocolMessageType('SliceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceEvent)
-  })
-_sym_db.RegisterMessage(SliceEvent)
-
-ConnectionId = _reflection.GeneratedProtocolMessageType('ConnectionId', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionId)
-  })
-_sym_db.RegisterMessage(ConnectionId)
-
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTION,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Connection)
-  })
-_sym_db.RegisterMessage(Connection)
-
-ConnectionIdList = _reflection.GeneratedProtocolMessageType('ConnectionIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-  })
-_sym_db.RegisterMessage(ConnectionIdList)
-
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionList)
-  })
-_sym_db.RegisterMessage(ConnectionList)
-
-ConnectionEvent = _reflection.GeneratedProtocolMessageType('ConnectionEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-  })
-_sym_db.RegisterMessage(ConnectionEvent)
-
-EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPointId)
-  })
-_sym_db.RegisterMessage(EndPointId)
-
-EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPoint)
-  })
-_sym_db.RegisterMessage(EndPoint)
-
-ConfigRule = _reflection.GeneratedProtocolMessageType('ConfigRule', (_message.Message,), {
-  'DESCRIPTOR' : _CONFIGRULE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConfigRule)
-  })
-_sym_db.RegisterMessage(ConfigRule)
-
-Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), {
-  'DESCRIPTOR' : _CONSTRAINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Constraint)
-  })
-_sym_db.RegisterMessage(Constraint)
-
-TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), {
-  'DESCRIPTOR' : _TERAFLOWCONTROLLER,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TeraFlowController)
-  })
-_sym_db.RegisterMessage(TeraFlowController)
-
-AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), {
-  'DESCRIPTOR' : _AUTHENTICATIONRESULT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-  })
-_sym_db.RegisterMessage(AuthenticationResult)
-
-
-
-_CONTEXTSERVICE = _descriptor.ServiceDescriptor(
-  name='ContextService',
-  full_name='context.ContextService',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=5273,
-  serialized_end=7688,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ListContextIds',
-    full_name='context.ContextService.ListContextIds',
-    index=0,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListContexts',
-    full_name='context.ContextService.ListContexts',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContext',
-    full_name='context.ContextService.GetContext',
-    index=2,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_CONTEXT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetContext',
-    full_name='context.ContextService.SetContext',
-    index=3,
-    containing_service=None,
-    input_type=_CONTEXT,
-    output_type=_CONTEXTID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveContext',
-    full_name='context.ContextService.RemoveContext',
-    index=4,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContextEvents',
-    full_name='context.ContextService.GetContextEvents',
-    index=5,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologyIds',
-    full_name='context.ContextService.ListTopologyIds',
-    index=6,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologies',
-    full_name='context.ContextService.ListTopologies',
-    index=7,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopology',
-    full_name='context.ContextService.GetTopology',
-    index=8,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_TOPOLOGY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetTopology',
-    full_name='context.ContextService.SetTopology',
-    index=9,
-    containing_service=None,
-    input_type=_TOPOLOGY,
-    output_type=_TOPOLOGYID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveTopology',
-    full_name='context.ContextService.RemoveTopology',
-    index=10,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopologyEvents',
-    full_name='context.ContextService.GetTopologyEvents',
-    index=11,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_TOPOLOGYEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDeviceIds',
-    full_name='context.ContextService.ListDeviceIds',
-    index=12,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDevices',
-    full_name='context.ContextService.ListDevices',
-    index=13,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDevice',
-    full_name='context.ContextService.GetDevice',
-    index=14,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_DEVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetDevice',
-    full_name='context.ContextService.SetDevice',
-    index=15,
-    containing_service=None,
-    input_type=_DEVICE,
-    output_type=_DEVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveDevice',
-    full_name='context.ContextService.RemoveDevice',
-    index=16,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDeviceEvents',
-    full_name='context.ContextService.GetDeviceEvents',
-    index=17,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinkIds',
-    full_name='context.ContextService.ListLinkIds',
-    index=18,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinks',
-    full_name='context.ContextService.ListLinks',
-    index=19,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLink',
-    full_name='context.ContextService.GetLink',
-    index=20,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_LINK,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetLink',
-    full_name='context.ContextService.SetLink',
-    index=21,
-    containing_service=None,
-    input_type=_LINK,
-    output_type=_LINKID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveLink',
-    full_name='context.ContextService.RemoveLink',
-    index=22,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLinkEvents',
-    full_name='context.ContextService.GetLinkEvents',
-    index=23,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServiceIds',
-    full_name='context.ContextService.ListServiceIds',
-    index=24,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServices',
-    full_name='context.ContextService.ListServices',
-    index=25,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetService',
-    full_name='context.ContextService.GetService',
-    index=26,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_SERVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetService',
-    full_name='context.ContextService.SetService',
-    index=27,
-    containing_service=None,
-    input_type=_SERVICE,
-    output_type=_SERVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveService',
-    full_name='context.ContextService.RemoveService',
-    index=28,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetServiceEvents',
-    full_name='context.ContextService.GetServiceEvents',
-    index=29,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SERVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSliceIds',
-    full_name='context.ContextService.ListSliceIds',
-    index=30,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSlices',
-    full_name='context.ContextService.ListSlices',
-    index=31,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSlice',
-    full_name='context.ContextService.GetSlice',
-    index=32,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_SLICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetSlice',
-    full_name='context.ContextService.SetSlice',
-    index=33,
-    containing_service=None,
-    input_type=_SLICE,
-    output_type=_SLICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveSlice',
-    full_name='context.ContextService.RemoveSlice',
-    index=34,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSliceEvents',
-    full_name='context.ContextService.GetSliceEvents',
-    index=35,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SLICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnectionIds',
-    full_name='context.ContextService.ListConnectionIds',
-    index=36,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnections',
-    full_name='context.ContextService.ListConnections',
-    index=37,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnection',
-    full_name='context.ContextService.GetConnection',
-    index=38,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_CONNECTION,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetConnection',
-    full_name='context.ContextService.SetConnection',
-    index=39,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=_CONNECTIONID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveConnection',
-    full_name='context.ContextService.RemoveConnection',
-    index=40,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnectionEvents',
-    full_name='context.ContextService.GetConnectionEvents',
-    index=41,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONNECTIONEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONTEXTSERVICE)
-
-DESCRIPTOR.services_by_name['ContextService'] = _CONTEXTSERVICE
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_attackmitigator/proto/kpi_sample_types_pb2.py b/src/l3_attackmitigator/proto/kpi_sample_types_pb2.py
deleted file mode 100644
index ea7fd2f82757d4c3db02d7e2c7817e2787b0b490..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/kpi_sample_types_pb2.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: kpi_sample_types.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='kpi_sample_types.proto',
-  package='kpi_sample_types',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x16kpi_sample_types.proto\x12\x10kpi_sample_types*\xbe\x01\n\rKpiSampleType\x12\x19\n\x15KPISAMPLETYPE_UNKNOWN\x10\x00\x12%\n!KPISAMPLETYPE_PACKETS_TRANSMITTED\x10\x65\x12\"\n\x1eKPISAMPLETYPE_PACKETS_RECEIVED\x10\x66\x12$\n\x1fKPISAMPLETYPE_BYTES_TRANSMITTED\x10\xc9\x01\x12!\n\x1cKPISAMPLETYPE_BYTES_RECEIVED\x10\xca\x01\x62\x06proto3'
-)
-
-_KPISAMPLETYPE = _descriptor.EnumDescriptor(
-  name='KpiSampleType',
-  full_name='kpi_sample_types.KpiSampleType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_TRANSMITTED', index=1, number=101,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_RECEIVED', index=2, number=102,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_TRANSMITTED', index=3, number=201,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_RECEIVED', index=4, number=202,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=45,
-  serialized_end=235,
-)
-_sym_db.RegisterEnumDescriptor(_KPISAMPLETYPE)
-
-KpiSampleType = enum_type_wrapper.EnumTypeWrapper(_KPISAMPLETYPE)
-KPISAMPLETYPE_UNKNOWN = 0
-KPISAMPLETYPE_PACKETS_TRANSMITTED = 101
-KPISAMPLETYPE_PACKETS_RECEIVED = 102
-KPISAMPLETYPE_BYTES_TRANSMITTED = 201
-KPISAMPLETYPE_BYTES_RECEIVED = 202
-
-
-DESCRIPTOR.enum_types_by_name['KpiSampleType'] = _KPISAMPLETYPE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2.py b/src/l3_attackmitigator/proto/l3_attackmitigator_pb2.py
deleted file mode 100644
index e148d0a2cfda7b7ea00b40218dcfe3dcb70f1f8f..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_attackmitigator.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import context_pb2 as context__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_attackmitigator.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x18l3_attackmitigator.proto\x1a\rcontext.proto\"\xd5\x01\n\x17L3AttackmitigatorOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x80\x01\n\x11L3Attackmitigator\x12\x38\n\nSendOutput\x12\x18.L3AttackmitigatorOutput\x1a\x0e.context.Empty\"\x00\x12\x31\n\rGetMitigation\x12\x0e.context.Empty\x1a\x0e.context.Empty\"\x00\x62\x06proto3'
-  ,
-  dependencies=[context__pb2.DESCRIPTOR,])
-
-
-
-
-_L3ATTACKMITIGATOROUTPUT = _descriptor.Descriptor(
-  name='L3AttackmitigatorOutput',
-  full_name='L3AttackmitigatorOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3AttackmitigatorOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3AttackmitigatorOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3AttackmitigatorOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3AttackmitigatorOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3AttackmitigatorOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3AttackmitigatorOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3AttackmitigatorOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3AttackmitigatorOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3AttackmitigatorOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3AttackmitigatorOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3AttackmitigatorOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=44,
-  serialized_end=257,
-)
-
-DESCRIPTOR.message_types_by_name['L3AttackmitigatorOutput'] = _L3ATTACKMITIGATOROUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3AttackmitigatorOutput = _reflection.GeneratedProtocolMessageType('L3AttackmitigatorOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3ATTACKMITIGATOROUTPUT,
-  '__module__' : 'l3_attackmitigator_pb2'
-  # @@protoc_insertion_point(class_scope:L3AttackmitigatorOutput)
-  })
-_sym_db.RegisterMessage(L3AttackmitigatorOutput)
-
-
-
-_L3ATTACKMITIGATOR = _descriptor.ServiceDescriptor(
-  name='L3Attackmitigator',
-  full_name='L3Attackmitigator',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=260,
-  serialized_end=388,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendOutput',
-    full_name='L3Attackmitigator.SendOutput',
-    index=0,
-    containing_service=None,
-    input_type=_L3ATTACKMITIGATOROUTPUT,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetMitigation',
-    full_name='L3Attackmitigator.GetMitigation',
-    index=1,
-    containing_service=None,
-    input_type=context__pb2._EMPTY,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3ATTACKMITIGATOR)
-
-DESCRIPTOR.services_by_name['L3Attackmitigator'] = _L3ATTACKMITIGATOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2_grpc.py b/src/l3_attackmitigator/proto/l3_attackmitigator_pb2_grpc.py
deleted file mode 100644
index 25d4afdbad81390589992b48374eb2226a31647e..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2_grpc.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from . import context_pb2 as context__pb2
-from . import l3_attackmitigator_pb2 as l3__attackmitigator__pb2
-
-
-class L3AttackmitigatorStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.SendOutput = channel.unary_unary(
-                '/L3Attackmitigator/SendOutput',
-                request_serializer=l3__attackmitigator__pb2.L3AttackmitigatorOutput.SerializeToString,
-                response_deserializer=context__pb2.Empty.FromString,
-                )
-        self.GetMitigation = channel.unary_unary(
-                '/L3Attackmitigator/GetMitigation',
-                request_serializer=context__pb2.Empty.SerializeToString,
-                response_deserializer=context__pb2.Empty.FromString,
-                )
-
-
-class L3AttackmitigatorServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def SendOutput(self, request, context):
-        """Sends a greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetMitigation(self, request, context):
-        """Sends another greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_L3AttackmitigatorServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'SendOutput': grpc.unary_unary_rpc_method_handler(
-                    servicer.SendOutput,
-                    request_deserializer=l3__attackmitigator__pb2.L3AttackmitigatorOutput.FromString,
-                    response_serializer=context__pb2.Empty.SerializeToString,
-            ),
-            'GetMitigation': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetMitigation,
-                    request_deserializer=context__pb2.Empty.FromString,
-                    response_serializer=context__pb2.Empty.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'L3Attackmitigator', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class L3Attackmitigator(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def SendOutput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Attackmitigator/SendOutput',
-            l3__attackmitigator__pb2.L3AttackmitigatorOutput.SerializeToString,
-            context__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetMitigation(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Attackmitigator/GetMitigation',
-            context__pb2.Empty.SerializeToString,
-            context__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/l3_attackmitigator/requirements.in b/src/l3_attackmitigator/requirements.in
index ede9c839d93cc377e93c525bc1e85243576faa00..772ae923931c8b09917e75a600ce2b5a0d2d4ecf 100644
--- a/src/l3_attackmitigator/requirements.in
+++ b/src/l3_attackmitigator/requirements.in
@@ -1,9 +1 @@
-grpcio-health-checking
-grpcio
-grpcio-tools
-prometheus-client
-pytest
-pytest-benchmark
-numpy
-scikit-learn
-coverage
\ No newline at end of file
+# no extra dependency
diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorService.py b/src/l3_attackmitigator/service/l3_attackmitigatorService.py
index ae52d6285c74e121f6062c42de69597d05c37b45..2ce7f93169430d586ba33a03f03918966c8dcc7b 100644
--- a/src/l3_attackmitigator/service/l3_attackmitigatorService.py
+++ b/src/l3_attackmitigator/service/l3_attackmitigatorService.py
@@ -18,7 +18,7 @@ from concurrent import futures
 from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH
 from grpc_health.v1.health_pb2 import HealthCheckResponse
 from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server
-from l3_attackmitigator.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     add_L3AttackmitigatorServicer_to_server,
 )
 from l3_attackmitigator.service.l3_attackmitigatorServiceServicerImpl import (
diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py
index 6e74cd455b8a166802f2a1f781451a0aa5e743ca..8664704524ecef779235af3ca3dc765af7af4898 100644
--- a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py
+++ b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py
@@ -14,10 +14,10 @@
 
 from __future__ import print_function
 import logging
-from l3_attackmitigator.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     EmptyMitigator
 )
-from l3_attackmitigator.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     L3AttackmitigatorServicer,
 )
 
diff --git a/src/l3_attackmitigator/tests/test_unitary.py b/src/l3_attackmitigator/tests/test_unitary.py
index 7a33cbd8a29c8d64ca468ac366d38bdc7199aacd..14d43edaff85da0e2597c55557dde74dbaae32aa 100644
--- a/src/l3_attackmitigator/tests/test_unitary.py
+++ b/src/l3_attackmitigator/tests/test_unitary.py
@@ -17,7 +17,7 @@ import pytest
 from l3_attackmitigator.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
 from l3_attackmitigator.client.l3_attackmitigatorClient import l3_attackmitigatorClient
 from l3_attackmitigator.service.l3_attackmitigatorService import l3_attackmitigatorService
-from l3_attackmitigator.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     Output,
 )
 
diff --git a/src/l3_centralizedattackdetector/.gitlab-ci.yml b/src/l3_centralizedattackdetector/.gitlab-ci.yml
index ca95af8816ce01b433d462a5d09d8ef14776734f..073b7925c7f7c39e1a44766fc21167236875877d 100644
--- a/src/l3_centralizedattackdetector/.gitlab-ci.yml
+++ b/src/l3_centralizedattackdetector/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag, and push the Docker images to the GitLab Docker registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build l3_centralizedattackdetector:
   variables:
     IMAGE_NAME: 'l3_centralizedattackdetector' # name of the microservice
@@ -21,22 +21,24 @@ build l3_centralizedattackdetector:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
-# Pull, execute, and run unitary tests for the Docker image from the GitLab registry
+# Apply unit test to the component
 unit test l3_centralizedattackdetector:
   variables:
     IMAGE_NAME: 'l3_centralizedattackdetector' # name of the microservice
@@ -46,7 +48,7 @@ unit test l3_centralizedattackdetector:
     - build l3_centralizedattackdetector
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi  
+    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
@@ -62,8 +64,10 @@ unit test l3_centralizedattackdetector:
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
diff --git a/src/l3_centralizedattackdetector/Dockerfile b/src/l3_centralizedattackdetector/Dockerfile
index 6a52cda86e9de16213bc058a0ffeeba04f85f6f9..3db5c2b4d7e4020b727d0d3f9b106f9c4af2e6b6 100644
--- a/src/l3_centralizedattackdetector/Dockerfile
+++ b/src/l3_centralizedattackdetector/Dockerfile
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:3-slim
+FROM python:3.9-slim
 
 # Install dependencies
 RUN apt-get --yes --quiet --quiet update && \
@@ -28,22 +28,41 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
 
-# Set working directory
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
 WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
 
-# Create module sub-folders
-RUN mkdir -p /var/teraflow/l3_centralizedattackdetector
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
 
-# Get Python packages per module
-COPY l3_centralizedattackdetector/requirements.in l3_centralizedattackdetector/requirements.in
-RUN pip-compile --output-file=l3_centralizedattackdetector/requirements.txt l3_centralizedattackdetector/requirements.in
-RUN python3 -m pip install -r l3_centralizedattackdetector/requirements.in
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/l3_centralizedattackdetector
+WORKDIR /var/teraflow/l3_centralizedattackdetector
+COPY src/l3_centralizedattackdetector/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
 
-# Add files into working directory
-COPY common/. common
-COPY l3_centralizedattackdetector/. l3_centralizedattackdetector
+# Add component files into working directory
+WORKDIR /var/teraflow
+COPY src/l3_centralizedattackdetector/. l3_centralizedattackdetector
 
-# Start service service
+# Start the service
 ENTRYPOINT ["python", "-m", "l3_centralizedattackdetector.service"]
diff --git a/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py b/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py
index b5181d63e02bcb77ec92e8c53374b38cb4bc72d3..3a159503c1c2d6b7387122430f1d36b77cd3ff78 100644
--- a/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py
+++ b/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py
@@ -14,10 +14,10 @@
 
 import grpc, logging
 from common.tools.client.RetryDecorator import retry, delay_exponential
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     L3CentralizedattackdetectorStub,
 )
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     Empty,
     ModelInput,
     ModelOutput
diff --git a/src/l3_centralizedattackdetector/genproto.sh b/src/l3_centralizedattackdetector/genproto.sh
deleted file mode 100755
index 54b16a486f893938a4970c5c28f80505dec5fc40..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/genproto.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Make folder containing the script the root folder for its execution
-cd $(dirname $0)
-
-rm -rf proto/*.py
-rm -rf proto/__pycache__
-tee proto/__init__.py << EOF > /dev/null
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-EOF
-
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto context.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto kpi_sample_types.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_attackmitigator.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_centralizedattackdetector.proto
-
-rm proto/context_pb2_grpc.py
-rm proto/kpi_sample_types_pb2_grpc.py
-rm proto/l3_attackmitigator_pb2_grpc.py
-
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/context_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/kpi_sample_types_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2_grpc.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_attackmitigator_pb2.py
diff --git a/src/l3_centralizedattackdetector/proto/__init__.py b/src/l3_centralizedattackdetector/proto/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
diff --git a/src/l3_centralizedattackdetector/proto/context_pb2.py b/src/l3_centralizedattackdetector/proto/context_pb2.py
deleted file mode 100644
index 50d501d3ac053ad644554331af26e3c40cd426a1..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/context_pb2.py
+++ /dev/null
@@ -1,3071 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: context.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import kpi_sample_types_pb2 as kpi__sample__types__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='context.proto',
-  package='context',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\rcontext.proto\x12\x07\x63ontext\x1a\x16kpi_sample_types.proto\"\x07\n\x05\x45mpty\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"F\n\x05\x45vent\x12\x11\n\ttimestamp\x18\x01 \x01(\x01\x12*\n\nevent_type\x18\x02 \x01(\x0e\x32\x16.context.EventTypeEnum\"0\n\tContextId\x12#\n\x0c\x63ontext_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xb6\x01\n\x07\x43ontext\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12)\n\x0ctopology_ids\x18\x02 \x03(\x0b\x32\x13.context.TopologyId\x12\'\n\x0bservice_ids\x18\x03 \x03(\x0b\x32\x12.context.ServiceId\x12/\n\ncontroller\x18\x04 \x01(\x0b\x32\x1b.context.TeraFlowController\"8\n\rContextIdList\x12\'\n\x0b\x63ontext_ids\x18\x01 \x03(\x0b\x32\x12.context.ContextId\"1\n\x0b\x43ontextList\x12\"\n\x08\x63ontexts\x18\x01 \x03(\x0b\x32\x10.context.Context\"U\n\x0c\x43ontextEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\ncontext_id\x18\x02 \x01(\x0b\x32\x12.context.ContextId\"Z\n\nTopologyId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12$\n\rtopology_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"~\n\x08Topology\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12%\n\ndevice_ids\x18\x02 \x03(\x0b\x32\x11.context.DeviceId\x12!\n\x08link_ids\x18\x03 \x03(\x0b\x32\x0f.context.LinkId\";\n\x0eTopologyIdList\x12)\n\x0ctopology_ids\x18\x01 \x03(\x0b\x32\x13.context.TopologyId\"5\n\x0cTopologyList\x12%\n\ntopologies\x18\x01 \x03(\x0b\x32\x11.context.Topology\"X\n\rTopologyEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12(\n\x0btopology_id\x18\x02 \x01(\x0b\x32\x13.context.TopologyId\".\n\x08\x44\x65viceId\x12\"\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x9a\x02\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12G\n\x19\x64\x65vice_operational_status\x18\x04 \x01(\x0e\x32$.context.DeviceOperationalStatusEnum\x12\x31\n\x0e\x64\x65vice_drivers\x18\x05 \x03(\x0e\x32\x19.context.DeviceDriverEnum\x12+\n\x10\x64\x65vice_endpoints\x18\x06 \x03(\x0b\x32\x11.context.EndPoint\"9\n\x0c\x44\x65viceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"5\n\x0c\x44\x65viceIdList\x12%\n\ndevice_ids\x18\x01 \x03(\x0b\x32\x11.context.DeviceId\".\n\nDeviceList\x12 \n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x0f.context.Device\"R\n\x0b\x44\x65viceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"*\n\x06LinkId\x12 \n\tlink_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"X\n\x04Link\x12 \n\x07link_id\x18\x01 \x01(\x0b\x32\x0f.context.LinkId\x12.\n\x11link_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\"/\n\nLinkIdList\x12!\n\x08link_ids\x18\x01 \x03(\x0b\x32\x0f.context.LinkId\"(\n\x08LinkList\x12\x1c\n\x05links\x18\x01 \x03(\x0b\x32\r.context.Link\"L\n\tLinkEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12 \n\x07link_id\x18\x02 \x01(\x0b\x32\x0f.context.LinkId\"X\n\tServiceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12#\n\x0cservice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\xa6\x02\n\x07Service\x12&\n\nservice_id\x18\x01 \x01(\x0b\x32\x12.context.ServiceId\x12.\n\x0cservice_type\x18\x02 \x01(\x0e\x32\x18.context.ServiceTypeEnum\x12\x31\n\x14service_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12\x30\n\x13service_constraints\x18\x04 \x03(\x0b\x32\x13.context.Constraint\x12.\n\x0eservice_status\x18\x05 \x01(\x0b\x32\x16.context.ServiceStatus\x12.\n\x0eservice_config\x18\x06 \x01(\x0b\x32\x16.context.ServiceConfig\"C\n\rServiceStatus\x12\x32\n\x0eservice_status\x18\x01 \x01(\x0e\x32\x1a.context.ServiceStatusEnum\":\n\rServiceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"8\n\rServiceIdList\x12\'\n\x0bservice_ids\x18\x01 \x03(\x0b\x32\x12.context.ServiceId\"1\n\x0bServiceList\x12\"\n\x08services\x18\x01 \x03(\x0b\x32\x10.context.Service\"U\n\x0cServiceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\"T\n\x07SliceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12!\n\nslice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\x95\x02\n\x05Slice\x12\"\n\x08slice_id\x18\x01 \x01(\x0b\x32\x10.context.SliceId\x12/\n\x12slice_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\x12.\n\x11slice_constraints\x18\x03 \x03(\x0b\x32\x13.context.Constraint\x12-\n\x11slice_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\x12,\n\x12slice_subslice_ids\x18\x05 \x03(\x0b\x32\x10.context.SliceId\x12*\n\x0cslice_status\x18\x06 \x01(\x0b\x32\x14.context.SliceStatus\"=\n\x0bSliceStatus\x12.\n\x0cslice_status\x18\x01 \x01(\x0e\x32\x18.context.SliceStatusEnum\"2\n\x0bSliceIdList\x12#\n\tslice_ids\x18\x01 \x03(\x0b\x32\x10.context.SliceId\"+\n\tSliceList\x12\x1e\n\x06slices\x18\x01 \x03(\x0b\x32\x0e.context.Slice\"O\n\nSliceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12\"\n\x08slice_id\x18\x02 \x01(\x0b\x32\x10.context.SliceId\"6\n\x0c\x43onnectionId\x12&\n\x0f\x63onnection_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xc4\x01\n\nConnection\x12,\n\rconnection_id\x18\x01 \x01(\x0b\x32\x15.context.ConnectionId\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\x12\x33\n\x16path_hops_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12+\n\x0fsub_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\"A\n\x10\x43onnectionIdList\x12-\n\x0e\x63onnection_ids\x18\x01 \x03(\x0b\x32\x15.context.ConnectionId\":\n\x0e\x43onnectionList\x12(\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\x13.context.Connection\"^\n\x0f\x43onnectionEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12,\n\rconnection_id\x18\x02 \x01(\x0b\x32\x15.context.ConnectionId\"\x82\x01\n\nEndPointId\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12$\n\rendpoint_uuid\x18\x03 \x01(\x0b\x32\r.context.Uuid\"\x86\x01\n\x08\x45ndPoint\x12(\n\x0b\x65ndpoint_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x15\n\rendpoint_type\x18\x02 \x01(\t\x12\x39\n\x10kpi_sample_types\x18\x03 \x03(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\"e\n\nConfigRule\x12)\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x19.context.ConfigActionEnum\x12\x14\n\x0cresource_key\x18\x02 \x01(\t\x12\x16\n\x0eresource_value\x18\x03 \x01(\t\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"^\n\x12TeraFlowController\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x12\n\nip_address\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\"U\n\x14\x41uthenticationResult\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*j\n\rEventTypeEnum\x12\x17\n\x13\x45VENTTYPE_UNDEFINED\x10\x00\x12\x14\n\x10\x45VENTTYPE_CREATE\x10\x01\x12\x14\n\x10\x45VENTTYPE_UPDATE\x10\x02\x12\x14\n\x10\x45VENTTYPE_REMOVE\x10\x03*\xc5\x01\n\x10\x44\x65viceDriverEnum\x12\x1a\n\x16\x44\x45VICEDRIVER_UNDEFINED\x10\x00\x12\x1b\n\x17\x44\x45VICEDRIVER_OPENCONFIG\x10\x01\x12\x1e\n\x1a\x44\x45VICEDRIVER_TRANSPORT_API\x10\x02\x12\x13\n\x0f\x44\x45VICEDRIVER_P4\x10\x03\x12&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\x10\x04\x12\x1b\n\x17\x44\x45VICEDRIVER_ONF_TR_352\x10\x05*\x8f\x01\n\x1b\x44\x65viceOperationalStatusEnum\x12%\n!DEVICEOPERATIONALSTATUS_UNDEFINED\x10\x00\x12$\n DEVICEOPERATIONALSTATUS_DISABLED\x10\x01\x12#\n\x1f\x44\x45VICEOPERATIONALSTATUS_ENABLED\x10\x02*\x81\x01\n\x0fServiceTypeEnum\x12\x17\n\x13SERVICETYPE_UNKNOWN\x10\x00\x12\x14\n\x10SERVICETYPE_L3NM\x10\x01\x12\x14\n\x10SERVICETYPE_L2NM\x10\x02\x12)\n%SERVICETYPE_TAPI_CONNECTIVITY_SERVICE\x10\x03*\x88\x01\n\x11ServiceStatusEnum\x12\x1b\n\x17SERVICESTATUS_UNDEFINED\x10\x00\x12\x19\n\x15SERVICESTATUS_PLANNED\x10\x01\x12\x18\n\x14SERVICESTATUS_ACTIVE\x10\x02\x12!\n\x1dSERVICESTATUS_PENDING_REMOVAL\x10\x03*\x8b\x01\n\x0fSliceStatusEnum\x12\x19\n\x15SLICESTATUS_UNDEFINED\x10\x00\x12\x17\n\x13SLICESTATUS_PLANNED\x10\x01\x12\x14\n\x10SLICESTATUS_INIT\x10\x02\x12\x16\n\x12SLICESTATUS_ACTIVE\x10\x03\x12\x16\n\x12SLICESTATUS_DEINIT\x10\x04*]\n\x10\x43onfigActionEnum\x12\x1a\n\x16\x43ONFIGACTION_UNDEFINED\x10\x00\x12\x14\n\x10\x43ONFIGACTION_SET\x10\x01\x12\x17\n\x13\x43ONFIGACTION_DELETE\x10\x02\x32\xef\x12\n\x0e\x43ontextService\x12:\n\x0eListContextIds\x12\x0e.context.Empty\x1a\x16.context.ContextIdList\"\x00\x12\x36\n\x0cListContexts\x12\x0e.context.Empty\x1a\x14.context.ContextList\"\x00\x12\x34\n\nGetContext\x12\x12.context.ContextId\x1a\x10.context.Context\"\x00\x12\x34\n\nSetContext\x12\x10.context.Context\x1a\x12.context.ContextId\"\x00\x12\x35\n\rRemoveContext\x12\x12.context.ContextId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetContextEvents\x12\x0e.context.Empty\x1a\x15.context.ContextEvent\"\x00\x30\x01\x12@\n\x0fListTopologyIds\x12\x12.context.ContextId\x1a\x17.context.TopologyIdList\"\x00\x12=\n\x0eListTopologies\x12\x12.context.ContextId\x1a\x15.context.TopologyList\"\x00\x12\x37\n\x0bGetTopology\x12\x13.context.TopologyId\x1a\x11.context.Topology\"\x00\x12\x37\n\x0bSetTopology\x12\x11.context.Topology\x1a\x13.context.TopologyId\"\x00\x12\x37\n\x0eRemoveTopology\x12\x13.context.TopologyId\x1a\x0e.context.Empty\"\x00\x12?\n\x11GetTopologyEvents\x12\x0e.context.Empty\x1a\x16.context.TopologyEvent\"\x00\x30\x01\x12\x38\n\rListDeviceIds\x12\x0e.context.Empty\x1a\x15.context.DeviceIdList\"\x00\x12\x34\n\x0bListDevices\x12\x0e.context.Empty\x1a\x13.context.DeviceList\"\x00\x12\x31\n\tGetDevice\x12\x11.context.DeviceId\x1a\x0f.context.Device\"\x00\x12\x31\n\tSetDevice\x12\x0f.context.Device\x1a\x11.context.DeviceId\"\x00\x12\x33\n\x0cRemoveDevice\x12\x11.context.DeviceId\x1a\x0e.context.Empty\"\x00\x12;\n\x0fGetDeviceEvents\x12\x0e.context.Empty\x1a\x14.context.DeviceEvent\"\x00\x30\x01\x12\x34\n\x0bListLinkIds\x12\x0e.context.Empty\x1a\x13.context.LinkIdList\"\x00\x12\x30\n\tListLinks\x12\x0e.context.Empty\x1a\x11.context.LinkList\"\x00\x12+\n\x07GetLink\x12\x0f.context.LinkId\x1a\r.context.Link\"\x00\x12+\n\x07SetLink\x12\r.context.Link\x1a\x0f.context.LinkId\"\x00\x12/\n\nRemoveLink\x12\x0f.context.LinkId\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetLinkEvents\x12\x0e.context.Empty\x1a\x12.context.LinkEvent\"\x00\x30\x01\x12>\n\x0eListServiceIds\x12\x12.context.ContextId\x1a\x16.context.ServiceIdList\"\x00\x12:\n\x0cListServices\x12\x12.context.ContextId\x1a\x14.context.ServiceList\"\x00\x12\x34\n\nGetService\x12\x12.context.ServiceId\x1a\x10.context.Service\"\x00\x12\x34\n\nSetService\x12\x10.context.Service\x1a\x12.context.ServiceId\"\x00\x12\x35\n\rRemoveService\x12\x12.context.ServiceId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetServiceEvents\x12\x0e.context.Empty\x1a\x15.context.ServiceEvent\"\x00\x30\x01\x12:\n\x0cListSliceIds\x12\x12.context.ContextId\x1a\x14.context.SliceIdList\"\x00\x12\x36\n\nListSlices\x12\x12.context.ContextId\x1a\x12.context.SliceList\"\x00\x12.\n\x08GetSlice\x12\x10.context.SliceId\x1a\x0e.context.Slice\"\x00\x12.\n\x08SetSlice\x12\x0e.context.Slice\x1a\x10.context.SliceId\"\x00\x12\x31\n\x0bRemoveSlice\x12\x10.context.SliceId\x1a\x0e.context.Empty\"\x00\x12\x39\n\x0eGetSliceEvents\x12\x0e.context.Empty\x1a\x13.context.SliceEvent\"\x00\x30\x01\x12\x44\n\x11ListConnectionIds\x12\x12.context.ServiceId\x1a\x19.context.ConnectionIdList\"\x00\x12@\n\x0fListConnections\x12\x12.context.ServiceId\x1a\x17.context.ConnectionList\"\x00\x12=\n\rGetConnection\x12\x15.context.ConnectionId\x1a\x13.context.Connection\"\x00\x12=\n\rSetConnection\x12\x13.context.Connection\x1a\x15.context.ConnectionId\"\x00\x12;\n\x10RemoveConnection\x12\x15.context.ConnectionId\x1a\x0e.context.Empty\"\x00\x12\x43\n\x13GetConnectionEvents\x12\x0e.context.Empty\x1a\x18.context.ConnectionEvent\"\x00\x30\x01\x62\x06proto3'
-  ,
-  dependencies=[kpi__sample__types__pb2.DESCRIPTOR,])
-
-_EVENTTYPEENUM = _descriptor.EnumDescriptor(
-  name='EventTypeEnum',
-  full_name='context.EventTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_CREATE', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UPDATE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_REMOVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4310,
-  serialized_end=4416,
-)
-_sym_db.RegisterEnumDescriptor(_EVENTTYPEENUM)
-
-EventTypeEnum = enum_type_wrapper.EnumTypeWrapper(_EVENTTYPEENUM)
-_DEVICEDRIVERENUM = _descriptor.EnumDescriptor(
-  name='DeviceDriverEnum',
-  full_name='context.DeviceDriverEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_OPENCONFIG', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_TRANSPORT_API', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_P4', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_IETF_NETWORK_TOPOLOGY', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_ONF_TR_352', index=5, number=5,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4419,
-  serialized_end=4616,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEDRIVERENUM)
-
-DeviceDriverEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEDRIVERENUM)
-_DEVICEOPERATIONALSTATUSENUM = _descriptor.EnumDescriptor(
-  name='DeviceOperationalStatusEnum',
-  full_name='context.DeviceOperationalStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_DISABLED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_ENABLED', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4619,
-  serialized_end=4762,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEOPERATIONALSTATUSENUM)
-
-DeviceOperationalStatusEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEOPERATIONALSTATUSENUM)
-_SERVICETYPEENUM = _descriptor.EnumDescriptor(
-  name='ServiceTypeEnum',
-  full_name='context.ServiceTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L3NM', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L2NM', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_TAPI_CONNECTIVITY_SERVICE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4765,
-  serialized_end=4894,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICETYPEENUM)
-
-ServiceTypeEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICETYPEENUM)
-_SERVICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='ServiceStatusEnum',
-  full_name='context.ServiceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_ACTIVE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PENDING_REMOVAL', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4897,
-  serialized_end=5033,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICESTATUSENUM)
-
-ServiceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICESTATUSENUM)
-_SLICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='SliceStatusEnum',
-  full_name='context.SliceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_INIT', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_ACTIVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_DEINIT', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5036,
-  serialized_end=5175,
-)
-_sym_db.RegisterEnumDescriptor(_SLICESTATUSENUM)
-
-SliceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SLICESTATUSENUM)
-_CONFIGACTIONENUM = _descriptor.EnumDescriptor(
-  name='ConfigActionEnum',
-  full_name='context.ConfigActionEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_SET', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_DELETE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5177,
-  serialized_end=5270,
-)
-_sym_db.RegisterEnumDescriptor(_CONFIGACTIONENUM)
-
-ConfigActionEnum = enum_type_wrapper.EnumTypeWrapper(_CONFIGACTIONENUM)
-EVENTTYPE_UNDEFINED = 0
-EVENTTYPE_CREATE = 1
-EVENTTYPE_UPDATE = 2
-EVENTTYPE_REMOVE = 3
-DEVICEDRIVER_UNDEFINED = 0
-DEVICEDRIVER_OPENCONFIG = 1
-DEVICEDRIVER_TRANSPORT_API = 2
-DEVICEDRIVER_P4 = 3
-DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4
-DEVICEDRIVER_ONF_TR_352 = 5
-DEVICEOPERATIONALSTATUS_UNDEFINED = 0
-DEVICEOPERATIONALSTATUS_DISABLED = 1
-DEVICEOPERATIONALSTATUS_ENABLED = 2
-SERVICETYPE_UNKNOWN = 0
-SERVICETYPE_L3NM = 1
-SERVICETYPE_L2NM = 2
-SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3
-SERVICESTATUS_UNDEFINED = 0
-SERVICESTATUS_PLANNED = 1
-SERVICESTATUS_ACTIVE = 2
-SERVICESTATUS_PENDING_REMOVAL = 3
-SLICESTATUS_UNDEFINED = 0
-SLICESTATUS_PLANNED = 1
-SLICESTATUS_INIT = 2
-SLICESTATUS_ACTIVE = 3
-SLICESTATUS_DEINIT = 4
-CONFIGACTION_UNDEFINED = 0
-CONFIGACTION_SET = 1
-CONFIGACTION_DELETE = 2
-
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='context.Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=50,
-  serialized_end=57,
-)
-
-
-_UUID = _descriptor.Descriptor(
-  name='Uuid',
-  full_name='context.Uuid',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='uuid', full_name='context.Uuid.uuid', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=59,
-  serialized_end=79,
-)
-
-
-_EVENT = _descriptor.Descriptor(
-  name='Event',
-  full_name='context.Event',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='context.Event.timestamp', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='event_type', full_name='context.Event.event_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=81,
-  serialized_end=151,
-)
-
-
-_CONTEXTID = _descriptor.Descriptor(
-  name='ContextId',
-  full_name='context.ContextId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_uuid', full_name='context.ContextId.context_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=153,
-  serialized_end=201,
-)
-
-
-_CONTEXT = _descriptor.Descriptor(
-  name='Context',
-  full_name='context.Context',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.Context.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.Context.topology_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.Context.service_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='controller', full_name='context.Context.controller', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=204,
-  serialized_end=386,
-)
-
-
-_CONTEXTIDLIST = _descriptor.Descriptor(
-  name='ContextIdList',
-  full_name='context.ContextIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_ids', full_name='context.ContextIdList.context_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=388,
-  serialized_end=444,
-)
-
-
-_CONTEXTLIST = _descriptor.Descriptor(
-  name='ContextList',
-  full_name='context.ContextList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='contexts', full_name='context.ContextList.contexts', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=446,
-  serialized_end=495,
-)
-
-
-_CONTEXTEVENT = _descriptor.Descriptor(
-  name='ContextEvent',
-  full_name='context.ContextEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ContextEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ContextEvent.context_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=497,
-  serialized_end=582,
-)
-
-
-_TOPOLOGYID = _descriptor.Descriptor(
-  name='TopologyId',
-  full_name='context.TopologyId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TopologyId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_uuid', full_name='context.TopologyId.topology_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=584,
-  serialized_end=674,
-)
-
-
-_TOPOLOGY = _descriptor.Descriptor(
-  name='Topology',
-  full_name='context.Topology',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.Topology.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.Topology.device_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.Topology.link_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=676,
-  serialized_end=802,
-)
-
-
-_TOPOLOGYIDLIST = _descriptor.Descriptor(
-  name='TopologyIdList',
-  full_name='context.TopologyIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.TopologyIdList.topology_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=804,
-  serialized_end=863,
-)
-
-
-_TOPOLOGYLIST = _descriptor.Descriptor(
-  name='TopologyList',
-  full_name='context.TopologyList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topologies', full_name='context.TopologyList.topologies', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=865,
-  serialized_end=918,
-)
-
-
-_TOPOLOGYEVENT = _descriptor.Descriptor(
-  name='TopologyEvent',
-  full_name='context.TopologyEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.TopologyEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.TopologyEvent.topology_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=920,
-  serialized_end=1008,
-)
-
-
-_DEVICEID = _descriptor.Descriptor(
-  name='DeviceId',
-  full_name='context.DeviceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_uuid', full_name='context.DeviceId.device_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1010,
-  serialized_end=1056,
-)
-
-
-_DEVICE = _descriptor.Descriptor(
-  name='Device',
-  full_name='context.Device',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.Device.device_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_type', full_name='context.Device.device_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_config', full_name='context.Device.device_config', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_operational_status', full_name='context.Device.device_operational_status', index=3,
-      number=4, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_drivers', full_name='context.Device.device_drivers', index=4,
-      number=5, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_endpoints', full_name='context.Device.device_endpoints', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1059,
-  serialized_end=1341,
-)
-
-
-_DEVICECONFIG = _descriptor.Descriptor(
-  name='DeviceConfig',
-  full_name='context.DeviceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.DeviceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1343,
-  serialized_end=1400,
-)
-
-
-_DEVICEIDLIST = _descriptor.Descriptor(
-  name='DeviceIdList',
-  full_name='context.DeviceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.DeviceIdList.device_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1402,
-  serialized_end=1455,
-)
-
-
-_DEVICELIST = _descriptor.Descriptor(
-  name='DeviceList',
-  full_name='context.DeviceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='devices', full_name='context.DeviceList.devices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1457,
-  serialized_end=1503,
-)
-
-
-_DEVICEEVENT = _descriptor.Descriptor(
-  name='DeviceEvent',
-  full_name='context.DeviceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.DeviceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.DeviceEvent.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1505,
-  serialized_end=1587,
-)
-
-
-_LINKID = _descriptor.Descriptor(
-  name='LinkId',
-  full_name='context.LinkId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_uuid', full_name='context.LinkId.link_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1589,
-  serialized_end=1631,
-)
-
-
-_LINK = _descriptor.Descriptor(
-  name='Link',
-  full_name='context.Link',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.Link.link_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_endpoint_ids', full_name='context.Link.link_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1633,
-  serialized_end=1721,
-)
-
-
-_LINKIDLIST = _descriptor.Descriptor(
-  name='LinkIdList',
-  full_name='context.LinkIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.LinkIdList.link_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1723,
-  serialized_end=1770,
-)
-
-
-_LINKLIST = _descriptor.Descriptor(
-  name='LinkList',
-  full_name='context.LinkList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='links', full_name='context.LinkList.links', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1772,
-  serialized_end=1812,
-)
-
-
-_LINKEVENT = _descriptor.Descriptor(
-  name='LinkEvent',
-  full_name='context.LinkEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.LinkEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.LinkEvent.link_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1814,
-  serialized_end=1890,
-)
-
-
-_SERVICEID = _descriptor.Descriptor(
-  name='ServiceId',
-  full_name='context.ServiceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ServiceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_uuid', full_name='context.ServiceId.service_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1892,
-  serialized_end=1980,
-)
-
-
-_SERVICE = _descriptor.Descriptor(
-  name='Service',
-  full_name='context.Service',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Service.service_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_type', full_name='context.Service.service_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_endpoint_ids', full_name='context.Service.service_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_constraints', full_name='context.Service.service_constraints', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.Service.service_status', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_config', full_name='context.Service.service_config', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1983,
-  serialized_end=2277,
-)
-
-
-_SERVICESTATUS = _descriptor.Descriptor(
-  name='ServiceStatus',
-  full_name='context.ServiceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.ServiceStatus.service_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2279,
-  serialized_end=2346,
-)
-
-
-_SERVICECONFIG = _descriptor.Descriptor(
-  name='ServiceConfig',
-  full_name='context.ServiceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.ServiceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2348,
-  serialized_end=2406,
-)
-
-
-_SERVICEIDLIST = _descriptor.Descriptor(
-  name='ServiceIdList',
-  full_name='context.ServiceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.ServiceIdList.service_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2408,
-  serialized_end=2464,
-)
-
-
-_SERVICELIST = _descriptor.Descriptor(
-  name='ServiceList',
-  full_name='context.ServiceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='services', full_name='context.ServiceList.services', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2466,
-  serialized_end=2515,
-)
-
-
-_SERVICEEVENT = _descriptor.Descriptor(
-  name='ServiceEvent',
-  full_name='context.ServiceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ServiceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.ServiceEvent.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2517,
-  serialized_end=2602,
-)
-
-
-_SLICEID = _descriptor.Descriptor(
-  name='SliceId',
-  full_name='context.SliceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.SliceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_uuid', full_name='context.SliceId.slice_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2604,
-  serialized_end=2688,
-)
-
-
-_SLICE = _descriptor.Descriptor(
-  name='Slice',
-  full_name='context.Slice',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.Slice.slice_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_endpoint_ids', full_name='context.Slice.slice_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_constraints', full_name='context.Slice.slice_constraints', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_service_ids', full_name='context.Slice.slice_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_subslice_ids', full_name='context.Slice.slice_subslice_ids', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.Slice.slice_status', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2691,
-  serialized_end=2968,
-)
-
-
-_SLICESTATUS = _descriptor.Descriptor(
-  name='SliceStatus',
-  full_name='context.SliceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.SliceStatus.slice_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2970,
-  serialized_end=3031,
-)
-
-
-_SLICEIDLIST = _descriptor.Descriptor(
-  name='SliceIdList',
-  full_name='context.SliceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_ids', full_name='context.SliceIdList.slice_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3033,
-  serialized_end=3083,
-)
-
-
-_SLICELIST = _descriptor.Descriptor(
-  name='SliceList',
-  full_name='context.SliceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slices', full_name='context.SliceList.slices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3085,
-  serialized_end=3128,
-)
-
-
-_SLICEEVENT = _descriptor.Descriptor(
-  name='SliceEvent',
-  full_name='context.SliceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.SliceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.SliceEvent.slice_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3130,
-  serialized_end=3209,
-)
-
-
-_CONNECTIONID = _descriptor.Descriptor(
-  name='ConnectionId',
-  full_name='context.ConnectionId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_uuid', full_name='context.ConnectionId.connection_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3211,
-  serialized_end=3265,
-)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='context.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.Connection.connection_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Connection.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='path_hops_endpoint_ids', full_name='context.Connection.path_hops_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sub_service_ids', full_name='context.Connection.sub_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3268,
-  serialized_end=3464,
-)
-
-
-_CONNECTIONIDLIST = _descriptor.Descriptor(
-  name='ConnectionIdList',
-  full_name='context.ConnectionIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_ids', full_name='context.ConnectionIdList.connection_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3466,
-  serialized_end=3531,
-)
-
-
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='context.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connections', full_name='context.ConnectionList.connections', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3533,
-  serialized_end=3591,
-)
-
-
-_CONNECTIONEVENT = _descriptor.Descriptor(
-  name='ConnectionEvent',
-  full_name='context.ConnectionEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ConnectionEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.ConnectionEvent.connection_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3593,
-  serialized_end=3687,
-)
-
-
-_ENDPOINTID = _descriptor.Descriptor(
-  name='EndPointId',
-  full_name='context.EndPointId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.EndPointId.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.EndPointId.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_uuid', full_name='context.EndPointId.endpoint_uuid', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3690,
-  serialized_end=3820,
-)
-
-
-_ENDPOINT = _descriptor.Descriptor(
-  name='EndPoint',
-  full_name='context.EndPoint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='endpoint_id', full_name='context.EndPoint.endpoint_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_type', full_name='context.EndPoint.endpoint_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='kpi_sample_types', full_name='context.EndPoint.kpi_sample_types', index=2,
-      number=3, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3823,
-  serialized_end=3957,
-)
-
-
-_CONFIGRULE = _descriptor.Descriptor(
-  name='ConfigRule',
-  full_name='context.ConfigRule',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='context.ConfigRule.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_key', full_name='context.ConfigRule.resource_key', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_value', full_name='context.ConfigRule.resource_value', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3959,
-  serialized_end=4060,
-)
-
-
-_CONSTRAINT = _descriptor.Descriptor(
-  name='Constraint',
-  full_name='context.Constraint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='constraint_type', full_name='context.Constraint.constraint_type', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='constraint_value', full_name='context.Constraint.constraint_value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4062,
-  serialized_end=4125,
-)
-
-
-_TERAFLOWCONTROLLER = _descriptor.Descriptor(
-  name='TeraFlowController',
-  full_name='context.TeraFlowController',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TeraFlowController.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_address', full_name='context.TeraFlowController.ip_address', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port', full_name='context.TeraFlowController.port', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4127,
-  serialized_end=4221,
-)
-
-
-_AUTHENTICATIONRESULT = _descriptor.Descriptor(
-  name='AuthenticationResult',
-  full_name='context.AuthenticationResult',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.AuthenticationResult.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='authenticated', full_name='context.AuthenticationResult.authenticated', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4223,
-  serialized_end=4308,
-)
-
-_EVENT.fields_by_name['event_type'].enum_type = _EVENTTYPEENUM
-_CONTEXTID.fields_by_name['context_uuid'].message_type = _UUID
-_CONTEXT.fields_by_name['context_id'].message_type = _CONTEXTID
-_CONTEXT.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_CONTEXT.fields_by_name['service_ids'].message_type = _SERVICEID
-_CONTEXT.fields_by_name['controller'].message_type = _TERAFLOWCONTROLLER
-_CONTEXTIDLIST.fields_by_name['context_ids'].message_type = _CONTEXTID
-_CONTEXTLIST.fields_by_name['contexts'].message_type = _CONTEXT
-_CONTEXTEVENT.fields_by_name['event'].message_type = _EVENT
-_CONTEXTEVENT.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['topology_uuid'].message_type = _UUID
-_TOPOLOGY.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_TOPOLOGY.fields_by_name['device_ids'].message_type = _DEVICEID
-_TOPOLOGY.fields_by_name['link_ids'].message_type = _LINKID
-_TOPOLOGYIDLIST.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_TOPOLOGYLIST.fields_by_name['topologies'].message_type = _TOPOLOGY
-_TOPOLOGYEVENT.fields_by_name['event'].message_type = _EVENT
-_TOPOLOGYEVENT.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_DEVICEID.fields_by_name['device_uuid'].message_type = _UUID
-_DEVICE.fields_by_name['device_id'].message_type = _DEVICEID
-_DEVICE.fields_by_name['device_config'].message_type = _DEVICECONFIG
-_DEVICE.fields_by_name['device_operational_status'].enum_type = _DEVICEOPERATIONALSTATUSENUM
-_DEVICE.fields_by_name['device_drivers'].enum_type = _DEVICEDRIVERENUM
-_DEVICE.fields_by_name['device_endpoints'].message_type = _ENDPOINT
-_DEVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_DEVICEIDLIST.fields_by_name['device_ids'].message_type = _DEVICEID
-_DEVICELIST.fields_by_name['devices'].message_type = _DEVICE
-_DEVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_DEVICEEVENT.fields_by_name['device_id'].message_type = _DEVICEID
-_LINKID.fields_by_name['link_uuid'].message_type = _UUID
-_LINK.fields_by_name['link_id'].message_type = _LINKID
-_LINK.fields_by_name['link_endpoint_ids'].message_type = _ENDPOINTID
-_LINKIDLIST.fields_by_name['link_ids'].message_type = _LINKID
-_LINKLIST.fields_by_name['links'].message_type = _LINK
-_LINKEVENT.fields_by_name['event'].message_type = _EVENT
-_LINKEVENT.fields_by_name['link_id'].message_type = _LINKID
-_SERVICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SERVICEID.fields_by_name['service_uuid'].message_type = _UUID
-_SERVICE.fields_by_name['service_id'].message_type = _SERVICEID
-_SERVICE.fields_by_name['service_type'].enum_type = _SERVICETYPEENUM
-_SERVICE.fields_by_name['service_endpoint_ids'].message_type = _ENDPOINTID
-_SERVICE.fields_by_name['service_constraints'].message_type = _CONSTRAINT
-_SERVICE.fields_by_name['service_status'].message_type = _SERVICESTATUS
-_SERVICE.fields_by_name['service_config'].message_type = _SERVICECONFIG
-_SERVICESTATUS.fields_by_name['service_status'].enum_type = _SERVICESTATUSENUM
-_SERVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_SERVICEIDLIST.fields_by_name['service_ids'].message_type = _SERVICEID
-_SERVICELIST.fields_by_name['services'].message_type = _SERVICE
-_SERVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SERVICEEVENT.fields_by_name['service_id'].message_type = _SERVICEID
-_SLICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SLICEID.fields_by_name['slice_uuid'].message_type = _UUID
-_SLICE.fields_by_name['slice_id'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_endpoint_ids'].message_type = _ENDPOINTID
-_SLICE.fields_by_name['slice_constraints'].message_type = _CONSTRAINT
-_SLICE.fields_by_name['slice_service_ids'].message_type = _SERVICEID
-_SLICE.fields_by_name['slice_subslice_ids'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_status'].message_type = _SLICESTATUS
-_SLICESTATUS.fields_by_name['slice_status'].enum_type = _SLICESTATUSENUM
-_SLICEIDLIST.fields_by_name['slice_ids'].message_type = _SLICEID
-_SLICELIST.fields_by_name['slices'].message_type = _SLICE
-_SLICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SLICEEVENT.fields_by_name['slice_id'].message_type = _SLICEID
-_CONNECTIONID.fields_by_name['connection_uuid'].message_type = _UUID
-_CONNECTION.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_CONNECTION.fields_by_name['service_id'].message_type = _SERVICEID
-_CONNECTION.fields_by_name['path_hops_endpoint_ids'].message_type = _ENDPOINTID
-_CONNECTION.fields_by_name['sub_service_ids'].message_type = _SERVICEID
-_CONNECTIONIDLIST.fields_by_name['connection_ids'].message_type = _CONNECTIONID
-_CONNECTIONLIST.fields_by_name['connections'].message_type = _CONNECTION
-_CONNECTIONEVENT.fields_by_name['event'].message_type = _EVENT
-_CONNECTIONEVENT.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_ENDPOINTID.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_ENDPOINTID.fields_by_name['device_id'].message_type = _DEVICEID
-_ENDPOINTID.fields_by_name['endpoint_uuid'].message_type = _UUID
-_ENDPOINT.fields_by_name['endpoint_id'].message_type = _ENDPOINTID
-_ENDPOINT.fields_by_name['kpi_sample_types'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
-_CONFIGRULE.fields_by_name['action'].enum_type = _CONFIGACTIONENUM
-_TERAFLOWCONTROLLER.fields_by_name['context_id'].message_type = _CONTEXTID
-_AUTHENTICATIONRESULT.fields_by_name['context_id'].message_type = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['Uuid'] = _UUID
-DESCRIPTOR.message_types_by_name['Event'] = _EVENT
-DESCRIPTOR.message_types_by_name['ContextId'] = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Context'] = _CONTEXT
-DESCRIPTOR.message_types_by_name['ContextIdList'] = _CONTEXTIDLIST
-DESCRIPTOR.message_types_by_name['ContextList'] = _CONTEXTLIST
-DESCRIPTOR.message_types_by_name['ContextEvent'] = _CONTEXTEVENT
-DESCRIPTOR.message_types_by_name['TopologyId'] = _TOPOLOGYID
-DESCRIPTOR.message_types_by_name['Topology'] = _TOPOLOGY
-DESCRIPTOR.message_types_by_name['TopologyIdList'] = _TOPOLOGYIDLIST
-DESCRIPTOR.message_types_by_name['TopologyList'] = _TOPOLOGYLIST
-DESCRIPTOR.message_types_by_name['TopologyEvent'] = _TOPOLOGYEVENT
-DESCRIPTOR.message_types_by_name['DeviceId'] = _DEVICEID
-DESCRIPTOR.message_types_by_name['Device'] = _DEVICE
-DESCRIPTOR.message_types_by_name['DeviceConfig'] = _DEVICECONFIG
-DESCRIPTOR.message_types_by_name['DeviceIdList'] = _DEVICEIDLIST
-DESCRIPTOR.message_types_by_name['DeviceList'] = _DEVICELIST
-DESCRIPTOR.message_types_by_name['DeviceEvent'] = _DEVICEEVENT
-DESCRIPTOR.message_types_by_name['LinkId'] = _LINKID
-DESCRIPTOR.message_types_by_name['Link'] = _LINK
-DESCRIPTOR.message_types_by_name['LinkIdList'] = _LINKIDLIST
-DESCRIPTOR.message_types_by_name['LinkList'] = _LINKLIST
-DESCRIPTOR.message_types_by_name['LinkEvent'] = _LINKEVENT
-DESCRIPTOR.message_types_by_name['ServiceId'] = _SERVICEID
-DESCRIPTOR.message_types_by_name['Service'] = _SERVICE
-DESCRIPTOR.message_types_by_name['ServiceStatus'] = _SERVICESTATUS
-DESCRIPTOR.message_types_by_name['ServiceConfig'] = _SERVICECONFIG
-DESCRIPTOR.message_types_by_name['ServiceIdList'] = _SERVICEIDLIST
-DESCRIPTOR.message_types_by_name['ServiceList'] = _SERVICELIST
-DESCRIPTOR.message_types_by_name['ServiceEvent'] = _SERVICEEVENT
-DESCRIPTOR.message_types_by_name['SliceId'] = _SLICEID
-DESCRIPTOR.message_types_by_name['Slice'] = _SLICE
-DESCRIPTOR.message_types_by_name['SliceStatus'] = _SLICESTATUS
-DESCRIPTOR.message_types_by_name['SliceIdList'] = _SLICEIDLIST
-DESCRIPTOR.message_types_by_name['SliceList'] = _SLICELIST
-DESCRIPTOR.message_types_by_name['SliceEvent'] = _SLICEEVENT
-DESCRIPTOR.message_types_by_name['ConnectionId'] = _CONNECTIONID
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionIdList'] = _CONNECTIONIDLIST
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-DESCRIPTOR.message_types_by_name['ConnectionEvent'] = _CONNECTIONEVENT
-DESCRIPTOR.message_types_by_name['EndPointId'] = _ENDPOINTID
-DESCRIPTOR.message_types_by_name['EndPoint'] = _ENDPOINT
-DESCRIPTOR.message_types_by_name['ConfigRule'] = _CONFIGRULE
-DESCRIPTOR.message_types_by_name['Constraint'] = _CONSTRAINT
-DESCRIPTOR.message_types_by_name['TeraFlowController'] = _TERAFLOWCONTROLLER
-DESCRIPTOR.message_types_by_name['AuthenticationResult'] = _AUTHENTICATIONRESULT
-DESCRIPTOR.enum_types_by_name['EventTypeEnum'] = _EVENTTYPEENUM
-DESCRIPTOR.enum_types_by_name['DeviceDriverEnum'] = _DEVICEDRIVERENUM
-DESCRIPTOR.enum_types_by_name['DeviceOperationalStatusEnum'] = _DEVICEOPERATIONALSTATUSENUM
-DESCRIPTOR.enum_types_by_name['ServiceTypeEnum'] = _SERVICETYPEENUM
-DESCRIPTOR.enum_types_by_name['ServiceStatusEnum'] = _SERVICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['SliceStatusEnum'] = _SLICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['ConfigActionEnum'] = _CONFIGACTIONENUM
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), {
-  'DESCRIPTOR' : _UUID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Uuid)
-  })
-_sym_db.RegisterMessage(Uuid)
-
-Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), {
-  'DESCRIPTOR' : _EVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Event)
-  })
-_sym_db.RegisterMessage(Event)
-
-ContextId = _reflection.GeneratedProtocolMessageType('ContextId', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextId)
-  })
-_sym_db.RegisterMessage(ContextId)
-
-Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Context)
-  })
-_sym_db.RegisterMessage(Context)
-
-ContextIdList = _reflection.GeneratedProtocolMessageType('ContextIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextIdList)
-  })
-_sym_db.RegisterMessage(ContextIdList)
-
-ContextList = _reflection.GeneratedProtocolMessageType('ContextList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextList)
-  })
-_sym_db.RegisterMessage(ContextList)
-
-ContextEvent = _reflection.GeneratedProtocolMessageType('ContextEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextEvent)
-  })
-_sym_db.RegisterMessage(ContextEvent)
-
-TopologyId = _reflection.GeneratedProtocolMessageType('TopologyId', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyId)
-  })
-_sym_db.RegisterMessage(TopologyId)
-
-Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Topology)
-  })
-_sym_db.RegisterMessage(Topology)
-
-TopologyIdList = _reflection.GeneratedProtocolMessageType('TopologyIdList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyIdList)
-  })
-_sym_db.RegisterMessage(TopologyIdList)
-
-TopologyList = _reflection.GeneratedProtocolMessageType('TopologyList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyList)
-  })
-_sym_db.RegisterMessage(TopologyList)
-
-TopologyEvent = _reflection.GeneratedProtocolMessageType('TopologyEvent', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyEvent)
-  })
-_sym_db.RegisterMessage(TopologyEvent)
-
-DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceId)
-  })
-_sym_db.RegisterMessage(DeviceId)
-
-Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Device)
-  })
-_sym_db.RegisterMessage(Device)
-
-DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceConfig)
-  })
-_sym_db.RegisterMessage(DeviceConfig)
-
-DeviceIdList = _reflection.GeneratedProtocolMessageType('DeviceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceIdList)
-  })
-_sym_db.RegisterMessage(DeviceIdList)
-
-DeviceList = _reflection.GeneratedProtocolMessageType('DeviceList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceList)
-  })
-_sym_db.RegisterMessage(DeviceList)
-
-DeviceEvent = _reflection.GeneratedProtocolMessageType('DeviceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceEvent)
-  })
-_sym_db.RegisterMessage(DeviceEvent)
-
-LinkId = _reflection.GeneratedProtocolMessageType('LinkId', (_message.Message,), {
-  'DESCRIPTOR' : _LINKID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkId)
-  })
-_sym_db.RegisterMessage(LinkId)
-
-Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), {
-  'DESCRIPTOR' : _LINK,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Link)
-  })
-_sym_db.RegisterMessage(Link)
-
-LinkIdList = _reflection.GeneratedProtocolMessageType('LinkIdList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkIdList)
-  })
-_sym_db.RegisterMessage(LinkIdList)
-
-LinkList = _reflection.GeneratedProtocolMessageType('LinkList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkList)
-  })
-_sym_db.RegisterMessage(LinkList)
-
-LinkEvent = _reflection.GeneratedProtocolMessageType('LinkEvent', (_message.Message,), {
-  'DESCRIPTOR' : _LINKEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkEvent)
-  })
-_sym_db.RegisterMessage(LinkEvent)
-
-ServiceId = _reflection.GeneratedProtocolMessageType('ServiceId', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceId)
-  })
-_sym_db.RegisterMessage(ServiceId)
-
-Service = _reflection.GeneratedProtocolMessageType('Service', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Service)
-  })
-_sym_db.RegisterMessage(Service)
-
-ServiceStatus = _reflection.GeneratedProtocolMessageType('ServiceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceStatus)
-  })
-_sym_db.RegisterMessage(ServiceStatus)
-
-ServiceConfig = _reflection.GeneratedProtocolMessageType('ServiceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceConfig)
-  })
-_sym_db.RegisterMessage(ServiceConfig)
-
-ServiceIdList = _reflection.GeneratedProtocolMessageType('ServiceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceIdList)
-  })
-_sym_db.RegisterMessage(ServiceIdList)
-
-ServiceList = _reflection.GeneratedProtocolMessageType('ServiceList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceList)
-  })
-_sym_db.RegisterMessage(ServiceList)
-
-ServiceEvent = _reflection.GeneratedProtocolMessageType('ServiceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceEvent)
-  })
-_sym_db.RegisterMessage(ServiceEvent)
-
-SliceId = _reflection.GeneratedProtocolMessageType('SliceId', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceId)
-  })
-_sym_db.RegisterMessage(SliceId)
-
-Slice = _reflection.GeneratedProtocolMessageType('Slice', (_message.Message,), {
-  'DESCRIPTOR' : _SLICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Slice)
-  })
-_sym_db.RegisterMessage(Slice)
-
-SliceStatus = _reflection.GeneratedProtocolMessageType('SliceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SLICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceStatus)
-  })
-_sym_db.RegisterMessage(SliceStatus)
-
-SliceIdList = _reflection.GeneratedProtocolMessageType('SliceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceIdList)
-  })
-_sym_db.RegisterMessage(SliceIdList)
-
-SliceList = _reflection.GeneratedProtocolMessageType('SliceList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceList)
-  })
-_sym_db.RegisterMessage(SliceList)
-
-SliceEvent = _reflection.GeneratedProtocolMessageType('SliceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceEvent)
-  })
-_sym_db.RegisterMessage(SliceEvent)
-
-ConnectionId = _reflection.GeneratedProtocolMessageType('ConnectionId', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionId)
-  })
-_sym_db.RegisterMessage(ConnectionId)
-
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTION,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Connection)
-  })
-_sym_db.RegisterMessage(Connection)
-
-ConnectionIdList = _reflection.GeneratedProtocolMessageType('ConnectionIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-  })
-_sym_db.RegisterMessage(ConnectionIdList)
-
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionList)
-  })
-_sym_db.RegisterMessage(ConnectionList)
-
-ConnectionEvent = _reflection.GeneratedProtocolMessageType('ConnectionEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-  })
-_sym_db.RegisterMessage(ConnectionEvent)
-
-EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPointId)
-  })
-_sym_db.RegisterMessage(EndPointId)
-
-EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPoint)
-  })
-_sym_db.RegisterMessage(EndPoint)
-
-ConfigRule = _reflection.GeneratedProtocolMessageType('ConfigRule', (_message.Message,), {
-  'DESCRIPTOR' : _CONFIGRULE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConfigRule)
-  })
-_sym_db.RegisterMessage(ConfigRule)
-
-Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), {
-  'DESCRIPTOR' : _CONSTRAINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Constraint)
-  })
-_sym_db.RegisterMessage(Constraint)
-
-TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), {
-  'DESCRIPTOR' : _TERAFLOWCONTROLLER,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TeraFlowController)
-  })
-_sym_db.RegisterMessage(TeraFlowController)
-
-AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), {
-  'DESCRIPTOR' : _AUTHENTICATIONRESULT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-  })
-_sym_db.RegisterMessage(AuthenticationResult)
-
-
-
-_CONTEXTSERVICE = _descriptor.ServiceDescriptor(
-  name='ContextService',
-  full_name='context.ContextService',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=5273,
-  serialized_end=7688,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ListContextIds',
-    full_name='context.ContextService.ListContextIds',
-    index=0,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListContexts',
-    full_name='context.ContextService.ListContexts',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContext',
-    full_name='context.ContextService.GetContext',
-    index=2,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_CONTEXT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetContext',
-    full_name='context.ContextService.SetContext',
-    index=3,
-    containing_service=None,
-    input_type=_CONTEXT,
-    output_type=_CONTEXTID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveContext',
-    full_name='context.ContextService.RemoveContext',
-    index=4,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContextEvents',
-    full_name='context.ContextService.GetContextEvents',
-    index=5,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologyIds',
-    full_name='context.ContextService.ListTopologyIds',
-    index=6,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologies',
-    full_name='context.ContextService.ListTopologies',
-    index=7,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopology',
-    full_name='context.ContextService.GetTopology',
-    index=8,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_TOPOLOGY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetTopology',
-    full_name='context.ContextService.SetTopology',
-    index=9,
-    containing_service=None,
-    input_type=_TOPOLOGY,
-    output_type=_TOPOLOGYID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveTopology',
-    full_name='context.ContextService.RemoveTopology',
-    index=10,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopologyEvents',
-    full_name='context.ContextService.GetTopologyEvents',
-    index=11,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_TOPOLOGYEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDeviceIds',
-    full_name='context.ContextService.ListDeviceIds',
-    index=12,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDevices',
-    full_name='context.ContextService.ListDevices',
-    index=13,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDevice',
-    full_name='context.ContextService.GetDevice',
-    index=14,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_DEVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetDevice',
-    full_name='context.ContextService.SetDevice',
-    index=15,
-    containing_service=None,
-    input_type=_DEVICE,
-    output_type=_DEVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveDevice',
-    full_name='context.ContextService.RemoveDevice',
-    index=16,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDeviceEvents',
-    full_name='context.ContextService.GetDeviceEvents',
-    index=17,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinkIds',
-    full_name='context.ContextService.ListLinkIds',
-    index=18,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinks',
-    full_name='context.ContextService.ListLinks',
-    index=19,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLink',
-    full_name='context.ContextService.GetLink',
-    index=20,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_LINK,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetLink',
-    full_name='context.ContextService.SetLink',
-    index=21,
-    containing_service=None,
-    input_type=_LINK,
-    output_type=_LINKID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveLink',
-    full_name='context.ContextService.RemoveLink',
-    index=22,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLinkEvents',
-    full_name='context.ContextService.GetLinkEvents',
-    index=23,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServiceIds',
-    full_name='context.ContextService.ListServiceIds',
-    index=24,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServices',
-    full_name='context.ContextService.ListServices',
-    index=25,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetService',
-    full_name='context.ContextService.GetService',
-    index=26,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_SERVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetService',
-    full_name='context.ContextService.SetService',
-    index=27,
-    containing_service=None,
-    input_type=_SERVICE,
-    output_type=_SERVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveService',
-    full_name='context.ContextService.RemoveService',
-    index=28,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetServiceEvents',
-    full_name='context.ContextService.GetServiceEvents',
-    index=29,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SERVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSliceIds',
-    full_name='context.ContextService.ListSliceIds',
-    index=30,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSlices',
-    full_name='context.ContextService.ListSlices',
-    index=31,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSlice',
-    full_name='context.ContextService.GetSlice',
-    index=32,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_SLICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetSlice',
-    full_name='context.ContextService.SetSlice',
-    index=33,
-    containing_service=None,
-    input_type=_SLICE,
-    output_type=_SLICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveSlice',
-    full_name='context.ContextService.RemoveSlice',
-    index=34,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSliceEvents',
-    full_name='context.ContextService.GetSliceEvents',
-    index=35,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SLICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnectionIds',
-    full_name='context.ContextService.ListConnectionIds',
-    index=36,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnections',
-    full_name='context.ContextService.ListConnections',
-    index=37,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnection',
-    full_name='context.ContextService.GetConnection',
-    index=38,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_CONNECTION,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetConnection',
-    full_name='context.ContextService.SetConnection',
-    index=39,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=_CONNECTIONID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveConnection',
-    full_name='context.ContextService.RemoveConnection',
-    index=40,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnectionEvents',
-    full_name='context.ContextService.GetConnectionEvents',
-    index=41,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONNECTIONEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONTEXTSERVICE)
-
-DESCRIPTOR.services_by_name['ContextService'] = _CONTEXTSERVICE
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/kpi_sample_types_pb2.py b/src/l3_centralizedattackdetector/proto/kpi_sample_types_pb2.py
deleted file mode 100644
index ea7fd2f82757d4c3db02d7e2c7817e2787b0b490..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/kpi_sample_types_pb2.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: kpi_sample_types.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='kpi_sample_types.proto',
-  package='kpi_sample_types',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x16kpi_sample_types.proto\x12\x10kpi_sample_types*\xbe\x01\n\rKpiSampleType\x12\x19\n\x15KPISAMPLETYPE_UNKNOWN\x10\x00\x12%\n!KPISAMPLETYPE_PACKETS_TRANSMITTED\x10\x65\x12\"\n\x1eKPISAMPLETYPE_PACKETS_RECEIVED\x10\x66\x12$\n\x1fKPISAMPLETYPE_BYTES_TRANSMITTED\x10\xc9\x01\x12!\n\x1cKPISAMPLETYPE_BYTES_RECEIVED\x10\xca\x01\x62\x06proto3'
-)
-
-_KPISAMPLETYPE = _descriptor.EnumDescriptor(
-  name='KpiSampleType',
-  full_name='kpi_sample_types.KpiSampleType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_TRANSMITTED', index=1, number=101,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_RECEIVED', index=2, number=102,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_TRANSMITTED', index=3, number=201,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_RECEIVED', index=4, number=202,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=45,
-  serialized_end=235,
-)
-_sym_db.RegisterEnumDescriptor(_KPISAMPLETYPE)
-
-KpiSampleType = enum_type_wrapper.EnumTypeWrapper(_KPISAMPLETYPE)
-KPISAMPLETYPE_UNKNOWN = 0
-KPISAMPLETYPE_PACKETS_TRANSMITTED = 101
-KPISAMPLETYPE_PACKETS_RECEIVED = 102
-KPISAMPLETYPE_BYTES_TRANSMITTED = 201
-KPISAMPLETYPE_BYTES_RECEIVED = 202
-
-
-DESCRIPTOR.enum_types_by_name['KpiSampleType'] = _KPISAMPLETYPE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/l3_attackmitigator_pb2.py b/src/l3_centralizedattackdetector/proto/l3_attackmitigator_pb2.py
deleted file mode 100644
index e148d0a2cfda7b7ea00b40218dcfe3dcb70f1f8f..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/l3_attackmitigator_pb2.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_attackmitigator.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import context_pb2 as context__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_attackmitigator.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x18l3_attackmitigator.proto\x1a\rcontext.proto\"\xd5\x01\n\x17L3AttackmitigatorOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x80\x01\n\x11L3Attackmitigator\x12\x38\n\nSendOutput\x12\x18.L3AttackmitigatorOutput\x1a\x0e.context.Empty\"\x00\x12\x31\n\rGetMitigation\x12\x0e.context.Empty\x1a\x0e.context.Empty\"\x00\x62\x06proto3'
-  ,
-  dependencies=[context__pb2.DESCRIPTOR,])
-
-
-
-
-_L3ATTACKMITIGATOROUTPUT = _descriptor.Descriptor(
-  name='L3AttackmitigatorOutput',
-  full_name='L3AttackmitigatorOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3AttackmitigatorOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3AttackmitigatorOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3AttackmitigatorOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3AttackmitigatorOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3AttackmitigatorOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3AttackmitigatorOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3AttackmitigatorOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3AttackmitigatorOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3AttackmitigatorOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3AttackmitigatorOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3AttackmitigatorOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=44,
-  serialized_end=257,
-)
-
-DESCRIPTOR.message_types_by_name['L3AttackmitigatorOutput'] = _L3ATTACKMITIGATOROUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3AttackmitigatorOutput = _reflection.GeneratedProtocolMessageType('L3AttackmitigatorOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3ATTACKMITIGATOROUTPUT,
-  '__module__' : 'l3_attackmitigator_pb2'
-  # @@protoc_insertion_point(class_scope:L3AttackmitigatorOutput)
-  })
-_sym_db.RegisterMessage(L3AttackmitigatorOutput)
-
-
-
-_L3ATTACKMITIGATOR = _descriptor.ServiceDescriptor(
-  name='L3Attackmitigator',
-  full_name='L3Attackmitigator',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=260,
-  serialized_end=388,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendOutput',
-    full_name='L3Attackmitigator.SendOutput',
-    index=0,
-    containing_service=None,
-    input_type=_L3ATTACKMITIGATOROUTPUT,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetMitigation',
-    full_name='L3Attackmitigator.GetMitigation',
-    index=1,
-    containing_service=None,
-    input_type=context__pb2._EMPTY,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3ATTACKMITIGATOR)
-
-DESCRIPTOR.services_by_name['L3Attackmitigator'] = _L3ATTACKMITIGATOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2.py b/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2.py
deleted file mode 100644
index 517fdb84b06c2c15b62a5616f33887ba337abf18..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_centralizedattackdetector.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_centralizedattackdetector.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\"l3_centralizedattackdetector.proto\"\xcb\x03\n\"L3CentralizedattackdetectorMetrics\x12 \n\x18n_packets_server_seconds\x18\x01 \x01(\x02\x12 \n\x18n_packets_client_seconds\x18\x02 \x01(\x02\x12\x1d\n\x15n_bits_server_seconds\x18\x03 \x01(\x02\x12\x1d\n\x15n_bits_client_seconds\x18\x04 \x01(\x02\x12&\n\x1en_bits_server_n_packets_server\x18\x05 \x01(\x02\x12&\n\x1en_bits_client_n_packets_client\x18\x06 \x01(\x02\x12)\n!n_packets_server_n_packets_client\x18\x07 \x01(\x02\x12#\n\x1bn_bits_server_n_bits_client\x18\x08 \x01(\x02\x12\x0c\n\x04ip_o\x18\t \x01(\t\x12\x0e\n\x06port_o\x18\n \x01(\t\x12\x0c\n\x04ip_d\x18\x0b \x01(\t\x12\x0e\n\x06port_d\x18\x0c \x01(\t\x12\x0f\n\x07\x66low_id\x18\r \x01(\t\x12\x10\n\x08protocol\x18\x0e \x01(\t\x12\x12\n\ntime_start\x18\x0f \x01(\x02\x12\x10\n\x08time_end\x18\x10 \x01(\x02\"\x18\n\x05\x45mpty\x12\x0f\n\x07message\x18\x01 \x01(\t\"\xe4\x01\n&L3CentralizedattackdetectorModelOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x99\x01\n\x1bL3Centralizedattackdetector\x12:\n\tSendInput\x12#.L3CentralizedattackdetectorMetrics\x1a\x06.Empty\"\x00\x12>\n\tGetOutput\x12\x06.Empty\x1a\'.L3CentralizedattackdetectorModelOutput\"\x00\x62\x06proto3'
-)
-
-
-
-
-_L3CENTRALIZEDATTACKDETECTORMETRICS = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorMetrics',
-  full_name='L3CentralizedattackdetectorMetrics',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_seconds', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_client_seconds', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_seconds', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_seconds', index=3,
-      number=4, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_packets_server', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_packets_server', index=4,
-      number=5, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_n_packets_client', index=5,
-      number=6, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_n_packets_client', index=6,
-      number=7, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_bits_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_bits_client', index=7,
-      number=8, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorMetrics.ip_o', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_o', full_name='L3CentralizedattackdetectorMetrics.port_o', index=9,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_d', full_name='L3CentralizedattackdetectorMetrics.ip_d', index=10,
-      number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorMetrics.port_d', index=11,
-      number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorMetrics.flow_id', index=12,
-      number=13, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorMetrics.protocol', index=13,
-      number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorMetrics.time_start', index=14,
-      number=15, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorMetrics.time_end', index=15,
-      number=16, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=39,
-  serialized_end=498,
-)
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='message', full_name='Empty.message', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=500,
-  serialized_end=524,
-)
-
-
-_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorModelOutput',
-  full_name='L3CentralizedattackdetectorModelOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3CentralizedattackdetectorModelOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3CentralizedattackdetectorModelOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorModelOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3CentralizedattackdetectorModelOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3CentralizedattackdetectorModelOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorModelOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorModelOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorModelOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3CentralizedattackdetectorModelOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorModelOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorModelOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=527,
-  serialized_end=755,
-)
-
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorMetrics'] = _L3CENTRALIZEDATTACKDETECTORMETRICS
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorModelOutput'] = _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3CentralizedattackdetectorMetrics = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorMetrics', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMETRICS,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorMetrics)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorMetrics)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-L3CentralizedattackdetectorModelOutput = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorModelOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorModelOutput)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorModelOutput)
-
-
-
-_L3CENTRALIZEDATTACKDETECTOR = _descriptor.ServiceDescriptor(
-  name='L3Centralizedattackdetector',
-  full_name='L3Centralizedattackdetector',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=758,
-  serialized_end=911,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendInput',
-    full_name='L3Centralizedattackdetector.SendInput',
-    index=0,
-    containing_service=None,
-    input_type=_L3CENTRALIZEDATTACKDETECTORMETRICS,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetOutput',
-    full_name='L3Centralizedattackdetector.GetOutput',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3CENTRALIZEDATTACKDETECTOR)
-
-DESCRIPTOR.services_by_name['L3Centralizedattackdetector'] = _L3CENTRALIZEDATTACKDETECTOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py b/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
deleted file mode 100644
index 29136b4da95c9fc2ad7d4827521b26e872186dcf..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from . import l3_centralizedattackdetector_pb2 as l3__centralizedattackdetector__pb2
-
-
-class L3CentralizedattackdetectorStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.SendInput = channel.unary_unary(
-                '/L3Centralizedattackdetector/SendInput',
-                request_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                )
-        self.GetOutput = channel.unary_unary(
-                '/L3Centralizedattackdetector/GetOutput',
-                request_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-                )
-
-
-class L3CentralizedattackdetectorServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def SendInput(self, request, context):
-        """Sends a greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetOutput(self, request, context):
-        """Sends another greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_L3CentralizedattackdetectorServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'SendInput': grpc.unary_unary_rpc_method_handler(
-                    servicer.SendInput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            ),
-            'GetOutput': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetOutput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'L3Centralizedattackdetector', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class L3Centralizedattackdetector(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def SendInput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/SendInput',
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-            l3__centralizedattackdetector__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetOutput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/GetOutput',
-            l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/l3_centralizedattackdetector/requirements.in b/src/l3_centralizedattackdetector/requirements.in
index e14d501b5a23d29e4950a56f28ee08fc54568d4d..9e25a1c28fb6c472e92bbb175eaa1c030fffe760 100644
--- a/src/l3_centralizedattackdetector/requirements.in
+++ b/src/l3_centralizedattackdetector/requirements.in
@@ -1,10 +1,3 @@
-grpcio-health-checking
-grpcio
-grpcio-tools
-prometheus-client
-pytest
-pytest-benchmark
-numpy
-scikit-learn
-onnxruntime
-coverage
\ No newline at end of file
+numpy==1.23.*
+onnxruntime==1.12.*
+scikit-learn==1.1.*
diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py
index 0eb101f0e36fc59e5c6e8b1346609693259e0ccf..bad8cee7eadc26ceaf4dddd8a8452b3b8636e1d9 100644
--- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py
+++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py
@@ -18,7 +18,7 @@ from concurrent import futures
 from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH
 from grpc_health.v1.health_pb2 import HealthCheckResponse
 from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     add_L3CentralizedattackdetectorServicer_to_server,
 )
 from l3_centralizedattackdetector.service.l3_centralizedattackdetectorServiceServicerImpl import (
diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
index 18006f5a60de4c6f5596d03e3b9482dc4040014d..ad05b0ee62e87ce9028dc043b693c1b4cae008b3 100644
--- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
+++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
@@ -19,17 +19,17 @@ import grpc
 import numpy as np
 import onnxruntime as rt
 import logging
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     Empty,
 )
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     L3CentralizedattackdetectorServicer,
 )
 
-from l3_centralizedattackdetector.proto.l3_attackmitigator_pb2 import (
-    Output,
+from common.proto.l3_attackmitigator_pb2 import (
+    L3AttackmitigatorOutput,
 )
-from l3_centralizedattackdetector.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     L3AttackmitigatorStub,
 )
 
@@ -88,7 +88,7 @@ class l3_centralizedattackdetectorServiceServicerImpl(L3Centralizedattackdetecto
             output_message["tag_name"] = "Normal"
             output_message["tag"] = 0
 
-        return Output(**output_message)
+        return L3AttackmitigatorOutput(**output_message)
 
     def SendInput(self, request, context):
         # PERFORM INFERENCE WITH SENT INPUTS
diff --git a/src/l3_centralizedattackdetector/tests/test_unitary.py b/src/l3_centralizedattackdetector/tests/test_unitary.py
index c63975cc896373f4d33a7dc8dc4c6d15692c8fe6..a939b9efa11c9ceeb96ccb6d04c9ec929ab55cda 100644
--- a/src/l3_centralizedattackdetector/tests/test_unitary.py
+++ b/src/l3_centralizedattackdetector/tests/test_unitary.py
@@ -17,7 +17,7 @@ import pytest
 from l3_centralizedattackdetector.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
 from l3_centralizedattackdetector.client.l3_centralizedattackdetectorClient import l3_centralizedattackdetectorClient
 from l3_centralizedattackdetector.service.l3_centralizedattackdetectorService import l3_centralizedattackdetectorService
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     ModelInput,
 )
 
diff --git a/src/l3_distributedattackdetector/.gitlab-ci.yml b/src/l3_distributedattackdetector/.gitlab-ci.yml
index 7ced7a62c19c717e2c4091f08c73579a79ad383b..c373d223715f77a833fdb3ea1c090e61f2e2c303 100644
--- a/src/l3_distributedattackdetector/.gitlab-ci.yml
+++ b/src/l3_distributedattackdetector/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag, and push the Docker images to the GitLab Docker registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build l3_distributedattackdetector:
   variables:
     IMAGE_NAME: 'l3_distributedattackdetector' # name of the microservice
@@ -21,22 +21,24 @@ build l3_distributedattackdetector:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
-# Pull, execute, and run unitary tests for the Docker image from the GitLab registry
+# Apply unit test to the component
 unit test l3_distributedattackdetector:
   variables:
     IMAGE_NAME: 'l3_distributedattackdetector' # name of the microservice
@@ -46,7 +48,7 @@ unit test l3_distributedattackdetector:
     - build l3_distributedattackdetector
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi  
+    - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
@@ -62,8 +64,10 @@ unit test l3_distributedattackdetector:
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
diff --git a/src/l3_distributedattackdetector/Dockerfile b/src/l3_distributedattackdetector/Dockerfile
index b0f1714e80055a328e90f070e9f957f8ec99708b..4bdbcf03cebc6f89603cde6d8ea41e28d6bd157c 100644
--- a/src/l3_distributedattackdetector/Dockerfile
+++ b/src/l3_distributedattackdetector/Dockerfile
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:3-slim
+FROM python:3.9-slim
 
 # Install dependencies
 RUN apt-get --yes --quiet --quiet update && \
@@ -28,23 +28,42 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
 
-# Set working directory
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
 WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
 
-# Create module sub-folders
-RUN mkdir -p /var/teraflow/l3_distributedattackdetector
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
 
-# Get Python packages per module
-COPY l3_distributedattackdetector/requirements.in l3_distributedattackdetector/requirements.in
-RUN pip-compile --output-file=l3_distributedattackdetector/requirements.txt l3_distributedattackdetector/requirements.in
-RUN python3 -m pip install -r l3_distributedattackdetector/requirements.in
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/l3_distributedattackdetector
+WORKDIR /var/teraflow/l3_distributedattackdetector
+COPY src/l3_distributedattackdetector/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
 
-# Add files into working directory
-COPY common/. common
-COPY l3_distributedattackdetector/. l3_distributedattackdetector
+# Add component files into working directory
+WORKDIR /var/teraflow
+COPY src/l3_distributedattackdetector/. l3_distributedattackdetector
 
-# Start service service
+# Start the service
 RUN nohup bash -c "service/tstat -l -i lo -s service/piped &" && sleep 5 
 ENTRYPOINT ["python", "-m", "l3_distributedattackdetector.service"]
diff --git a/src/l3_distributedattackdetector/genproto.sh b/src/l3_distributedattackdetector/genproto.sh
deleted file mode 100755
index c1f54c0dc1cdb6ef2681504ec0783f5479084fa8..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/genproto.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash -eu
-#
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Make folder containing the script the root folder for its execution
-cd $(dirname $0)
-
-rm -rf proto/*.py
-rm -rf proto/__pycache__
-tee proto/__init__.py << EOF > /dev/null
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-EOF
-
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_centralizedattackdetector.proto
-
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2_grpc.py
diff --git a/src/l3_distributedattackdetector/proto/__init__.py b/src/l3_distributedattackdetector/proto/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/proto/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
diff --git a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2.py b/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2.py
deleted file mode 100644
index 517fdb84b06c2c15b62a5616f33887ba337abf18..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_centralizedattackdetector.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_centralizedattackdetector.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\"l3_centralizedattackdetector.proto\"\xcb\x03\n\"L3CentralizedattackdetectorMetrics\x12 \n\x18n_packets_server_seconds\x18\x01 \x01(\x02\x12 \n\x18n_packets_client_seconds\x18\x02 \x01(\x02\x12\x1d\n\x15n_bits_server_seconds\x18\x03 \x01(\x02\x12\x1d\n\x15n_bits_client_seconds\x18\x04 \x01(\x02\x12&\n\x1en_bits_server_n_packets_server\x18\x05 \x01(\x02\x12&\n\x1en_bits_client_n_packets_client\x18\x06 \x01(\x02\x12)\n!n_packets_server_n_packets_client\x18\x07 \x01(\x02\x12#\n\x1bn_bits_server_n_bits_client\x18\x08 \x01(\x02\x12\x0c\n\x04ip_o\x18\t \x01(\t\x12\x0e\n\x06port_o\x18\n \x01(\t\x12\x0c\n\x04ip_d\x18\x0b \x01(\t\x12\x0e\n\x06port_d\x18\x0c \x01(\t\x12\x0f\n\x07\x66low_id\x18\r \x01(\t\x12\x10\n\x08protocol\x18\x0e \x01(\t\x12\x12\n\ntime_start\x18\x0f \x01(\x02\x12\x10\n\x08time_end\x18\x10 \x01(\x02\"\x18\n\x05\x45mpty\x12\x0f\n\x07message\x18\x01 \x01(\t\"\xe4\x01\n&L3CentralizedattackdetectorModelOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x99\x01\n\x1bL3Centralizedattackdetector\x12:\n\tSendInput\x12#.L3CentralizedattackdetectorMetrics\x1a\x06.Empty\"\x00\x12>\n\tGetOutput\x12\x06.Empty\x1a\'.L3CentralizedattackdetectorModelOutput\"\x00\x62\x06proto3'
-)
-
-
-
-
-_L3CENTRALIZEDATTACKDETECTORMETRICS = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorMetrics',
-  full_name='L3CentralizedattackdetectorMetrics',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_seconds', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_client_seconds', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_seconds', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_seconds', index=3,
-      number=4, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_packets_server', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_packets_server', index=4,
-      number=5, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_n_packets_client', index=5,
-      number=6, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_n_packets_client', index=6,
-      number=7, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_bits_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_bits_client', index=7,
-      number=8, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorMetrics.ip_o', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_o', full_name='L3CentralizedattackdetectorMetrics.port_o', index=9,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_d', full_name='L3CentralizedattackdetectorMetrics.ip_d', index=10,
-      number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorMetrics.port_d', index=11,
-      number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorMetrics.flow_id', index=12,
-      number=13, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorMetrics.protocol', index=13,
-      number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorMetrics.time_start', index=14,
-      number=15, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorMetrics.time_end', index=15,
-      number=16, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=39,
-  serialized_end=498,
-)
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='message', full_name='Empty.message', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=500,
-  serialized_end=524,
-)
-
-
-_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorModelOutput',
-  full_name='L3CentralizedattackdetectorModelOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3CentralizedattackdetectorModelOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3CentralizedattackdetectorModelOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorModelOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3CentralizedattackdetectorModelOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3CentralizedattackdetectorModelOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorModelOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorModelOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorModelOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3CentralizedattackdetectorModelOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorModelOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorModelOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=527,
-  serialized_end=755,
-)
-
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorMetrics'] = _L3CENTRALIZEDATTACKDETECTORMETRICS
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorModelOutput'] = _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3CentralizedattackdetectorMetrics = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorMetrics', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMETRICS,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorMetrics)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorMetrics)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-L3CentralizedattackdetectorModelOutput = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorModelOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorModelOutput)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorModelOutput)
-
-
-
-_L3CENTRALIZEDATTACKDETECTOR = _descriptor.ServiceDescriptor(
-  name='L3Centralizedattackdetector',
-  full_name='L3Centralizedattackdetector',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=758,
-  serialized_end=911,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendInput',
-    full_name='L3Centralizedattackdetector.SendInput',
-    index=0,
-    containing_service=None,
-    input_type=_L3CENTRALIZEDATTACKDETECTORMETRICS,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetOutput',
-    full_name='L3Centralizedattackdetector.GetOutput',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3CENTRALIZEDATTACKDETECTOR)
-
-DESCRIPTOR.services_by_name['L3Centralizedattackdetector'] = _L3CENTRALIZEDATTACKDETECTOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py b/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
deleted file mode 100644
index 29136b4da95c9fc2ad7d4827521b26e872186dcf..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from . import l3_centralizedattackdetector_pb2 as l3__centralizedattackdetector__pb2
-
-
-class L3CentralizedattackdetectorStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.SendInput = channel.unary_unary(
-                '/L3Centralizedattackdetector/SendInput',
-                request_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                )
-        self.GetOutput = channel.unary_unary(
-                '/L3Centralizedattackdetector/GetOutput',
-                request_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-                )
-
-
-class L3CentralizedattackdetectorServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def SendInput(self, request, context):
-        """Sends a greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetOutput(self, request, context):
-        """Sends another greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_L3CentralizedattackdetectorServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'SendInput': grpc.unary_unary_rpc_method_handler(
-                    servicer.SendInput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            ),
-            'GetOutput': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetOutput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'L3Centralizedattackdetector', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class L3Centralizedattackdetector(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def SendInput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/SendInput',
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-            l3__centralizedattackdetector__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetOutput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/GetOutput',
-            l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/l3_distributedattackdetector/requirements.in b/src/l3_distributedattackdetector/requirements.in
index ede9c839d93cc377e93c525bc1e85243576faa00..772ae923931c8b09917e75a600ce2b5a0d2d4ecf 100644
--- a/src/l3_distributedattackdetector/requirements.in
+++ b/src/l3_distributedattackdetector/requirements.in
@@ -1,9 +1 @@
-grpcio-health-checking
-grpcio
-grpcio-tools
-prometheus-client
-pytest
-pytest-benchmark
-numpy
-scikit-learn
-coverage
\ No newline at end of file
+# no extra dependency
diff --git a/src/l3_distributedattackdetector/service/__main__.py b/src/l3_distributedattackdetector/service/__main__.py
index 29f943ce745bc1355ac063fea83a63b42e19f36b..1ce6831f22e63b482031f919f040ad1182c4e2d4 100644
--- a/src/l3_distributedattackdetector/service/__main__.py
+++ b/src/l3_distributedattackdetector/service/__main__.py
@@ -17,10 +17,10 @@ import sys
 import os 
 import time
 import grpc
-from l3_distributedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     L3CentralizedattackdetectorStub,
 )
-from l3_distributedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     ModelInput,
 )
 
diff --git a/src/monitoring/.gitlab-ci.yml b/src/monitoring/.gitlab-ci.yml
index 31789a0f1ea7914e70a155ac3fa45230679b8317..fac3f967bbf531ef5cc9b67b2a1afe47fb9990d5 100644
--- a/src/monitoring/.gitlab-ci.yml
+++ b/src/monitoring/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build monitoring:
   variables:
     IMAGE_NAME: 'monitoring' # name of the microservice
diff --git a/src/pathcomp/.gitlab-ci.yml b/src/pathcomp/.gitlab-ci.yml
index 2ef7ebf054a39964b18dfd3af1c066623235c30e..2ce57f19cc29f93449ee6eef88a59643ec6a413a 100644
--- a/src/pathcomp/.gitlab-ci.yml
+++ b/src/pathcomp/.gitlab-ci.yml
@@ -12,18 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
-build pathcomp_frontend:
+# Build, tag, and push the Docker image to the GitLab Docker registry
+build pathcomp:
   variables:
-    IMAGE_NAME: 'pathcomp_frontend' # name of the microservice
+    IMAGE_NAME: 'pathcomp' # name of the microservice
     IMAGE_TAG: 'latest' # tag of the container image (production, development, etc)
   stage: build
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/frontend/Dockerfile .
-    - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+    - docker build -t "${IMAGE_NAME}-frontend:$IMAGE_TAG" -f ./src/$IMAGE_NAME/frontend/Dockerfile .
+    - docker build -t "${IMAGE_NAME}-backend:$IMAGE_TAG" -f ./src/$IMAGE_NAME/backend/Dockerfile .
+    - docker tag "${IMAGE_NAME}-frontend:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG"
+    - docker tag "${IMAGE_NAME}-backend:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
+    - docker push "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG"
+    - docker push "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
@@ -32,31 +35,10 @@ build pathcomp_frontend:
     - changes:
       - src/common/**/*.py
       - proto/*.proto
+      - src/$IMAGE_NAME/.gitlab-ci.yml
       - src/$IMAGE_NAME/frontend/**/*.{py,in,yml}
       - src/$IMAGE_NAME/frontend/Dockerfile
       - src/$IMAGE_NAME/frontend/tests/*.py
-      - manifests/${IMAGE_NAME}service.yaml
-      - .gitlab-ci.yml
-
-build pathcomp_backend:
-  variables:
-    IMAGE_NAME: 'pathcomp_backend' # name of the microservice
-    IMAGE_TAG: 'latest' # tag of the container image (production, development, etc)
-  stage: build
-  before_script:
-    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-  script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/backend/Dockerfile .
-    - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-  after_script:
-    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
-  rules:
-    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
-    - changes:
-      - proto/*.proto
-      - src/$IMAGE_NAME/.gitlab-ci.yml
       - src/$IMAGE_NAME/backend/**/*.{c,h,conf}
       - src/$IMAGE_NAME/backend/Makefile
       - src/$IMAGE_NAME/backend/Dockerfile
@@ -74,18 +56,23 @@ unit test pathcomp:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
     - if docker network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; fi
-    - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
+    - if docker container ls | grep ${IMAGE_NAME}-frontend; then docker rm -f ${IMAGE_NAME}-frontend; else echo "${IMAGE_NAME}-frontend image is not in the system"; fi
+    - if docker container ls | grep ${IMAGE_NAME}-backend; then docker rm -f ${IMAGE_NAME}-backend; else echo "${IMAGE_NAME}-backend image is not in the system"; fi
   script:
-    - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker run --name $IMAGE_NAME -d -p 10020:10020 -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker pull "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG"
+    - docker pull "$CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG"
+    - docker run --name ${IMAGE_NAME}-frontend -d -p 10020:10020 -v "$PWD/src/${IMAGE_NAME}-frontend/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/${IMAGE_NAME}-frontend:$IMAGE_TAG
+    - docker run --name ${IMAGE_NAME}-backend -d -p 10020:10020 -v "$PWD/src/${IMAGE_NAME}-backend/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/${IMAGE_NAME}-backend:$IMAGE_TAG
     - sleep 5
     - docker ps -a
-    - docker logs $IMAGE_NAME
-    - docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml"
-    - docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
+    - docker logs ${IMAGE_NAME}-frontend
+    - docker logs ${IMAGE_NAME}-backend
+    #- docker exec -i $IMAGE_NAME bash -c "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}_report.xml"
+    #- docker exec -i $IMAGE_NAME bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
   coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
   after_script:
-    - docker rm -f $IMAGE_NAME
+    - docker rm -f ${IMAGE_NAME}-frontend
+    - docker rm -f ${IMAGE_NAME}-backend
     - docker network rm teraflowbridge
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
@@ -93,16 +80,19 @@ unit test pathcomp:
     - changes:
       - src/common/**/*.py
       - proto/*.proto
-      - src/$IMAGE_NAME/**/*.{py,in,yml}
-      - src/$IMAGE_NAME/Dockerfile
-      - src/$IMAGE_NAME/tests/*.py
-      - src/$IMAGE_NAME/tests/Dockerfile
+      - src/$IMAGE_NAME/.gitlab-ci.yml
+      - src/$IMAGE_NAME/frontend/**/*.{py,in,yml}
+      - src/$IMAGE_NAME/frontend/Dockerfile
+      - src/$IMAGE_NAME/frontend/tests/*.py
+      - src/$IMAGE_NAME/backend/**/*.{c,h,conf}
+      - src/$IMAGE_NAME/backend/Makefile
+      - src/$IMAGE_NAME/backend/Dockerfile
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
-  artifacts:
-      when: always
-      reports:
-        junit: src/$IMAGE_NAME/tests/${IMAGE_NAME}_report.xml
+  #artifacts:
+  #    when: always
+  #    reports:
+  #      junit: src/$IMAGE_NAME/tests/${IMAGE_NAME}_report.xml
 
 # Deployment of the service in Kubernetes Cluster
 deploy pathcomp:
diff --git a/src/policy/pom.xml b/src/policy/pom.xml
index 003c3d48bc6edc8c32f0ad02009dc9eb6577f4cc..531cc7ecf96424b3180c1f4471ae0d002de85acc 100644
--- a/src/policy/pom.xml
+++ b/src/policy/pom.xml
@@ -302,6 +302,7 @@
                         <exclude>monitoring/*</exclude>
                         <exclude>service/*</exclude>
                         <exclude>kpi_sample_types/*</exclude>
+                        <exclude>acl/*</exclude>
                     </excludes>
                 </configuration>
                 <executions>
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
index 642fabcba92c82cab8cc0c43dca805aa95231df6..c76f8c8c402d454af88349ce14ae53f0a0c69f3d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyGatewayImpl.java
@@ -33,32 +33,32 @@ import policy.Policy.RuleState;
 public class PolicyGatewayImpl implements PolicyGateway {
 
     private final PolicyService policyService;
+    private final Serializer serializer;
 
     @Inject
-    public PolicyGatewayImpl(PolicyService policyService) {
+    public PolicyGatewayImpl(PolicyService policyService, Serializer serializer) {
         this.policyService = policyService;
+        this.serializer = serializer;
     }
 
     @Override
     public Uni<PolicyRuleState> policyAddService(PolicyRuleService request) {
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Policy.PolicyRuleState.newBuilder()
-                                        .setPolicyRuleState(
-                                                request.getPolicyRuleBasic().getPolicyRuleState().getPolicyRuleState())
-                                        .build());
+        final var policyRuleService = serializer.deserialize(request);
+
+        return policyService
+                .addPolicyService(policyRuleService)
+                .onItem()
+                .transform(serializer::serialize);
     }
 
     @Override
     public Uni<PolicyRuleState> policyAddDevice(PolicyRuleDevice request) {
-        return Uni.createFrom()
-                .item(
-                        () ->
-                                Policy.PolicyRuleState.newBuilder()
-                                        .setPolicyRuleState(
-                                                request.getPolicyRuleBasic().getPolicyRuleState().getPolicyRuleState())
-                                        .build());
+        final var policyRuleDevice = serializer.deserialize(request);
+
+        return policyService
+                .addPolicyDevice(policyRuleDevice)
+                .onItem()
+                .transform(serializer::serialize);
     }
 
     @Override
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
index 14ffbb41ef60a438990bfe59e1d9539b48b51d75..dcaf43b902c95471cff2c020f0fdc5659c59e6a1 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyService.java
@@ -16,10 +16,10 @@
 
 package eu.teraflow.policy;
 
+import eu.teraflow.policy.model.PolicyRuleDevice;
+import eu.teraflow.policy.model.PolicyRuleService;
 import eu.teraflow.policy.model.PolicyRuleState;
 import io.smallrye.mutiny.Uni;
-import policy.Policy.PolicyRuleDevice;
-import policy.Policy.PolicyRuleService;
 
 public interface PolicyService {
 
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index c9645c5e30b1b4380bb9c0004a8b66f734f279d1..66994625ddb2eb6a52e1d0a99acd52a2cd1cc2f2 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -16,25 +16,48 @@
 
 package eu.teraflow.policy;
 
+import eu.teraflow.policy.context.ContextService;
+import eu.teraflow.policy.model.PolicyRuleDevice;
+import eu.teraflow.policy.model.PolicyRuleService;
 import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.MonitoringService;
+import eu.teraflow.policy.service.ServiceService;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
 import org.jboss.logging.Logger;
-import policy.Policy.PolicyRuleDevice;
-import policy.Policy.PolicyRuleService;
 
 @ApplicationScoped
 public class PolicyServiceImpl implements PolicyService {
 
     private static final Logger LOGGER = Logger.getLogger(PolicyServiceImpl.class);
 
+    private final ContextService contextService;
+    private final MonitoringService monitoringService;
+    private final ServiceService serviceService;
+
+    @Inject
+    public PolicyServiceImpl(
+            ContextService contextService,
+            MonitoringService monitoringService,
+            ServiceService serviceService) {
+        this.contextService = contextService;
+        this.monitoringService = monitoringService;
+        this.serviceService = serviceService;
+    }
+
     @Override
     public Uni<PolicyRuleState> addPolicyService(PolicyRuleService policyRuleService) {
-        return null;
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED);
+
+        return Uni.createFrom().item(policyRuleState);
     }
 
     @Override
     public Uni<PolicyRuleState> addPolicyDevice(PolicyRuleDevice policyRuleDevice) {
-        return null;
+        final var policyRuleState = new PolicyRuleState(RuleState.POLICY_VALIDATED);
+
+        return Uni.createFrom().item(policyRuleState);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..35b6e2fd8cebf544d3f4b0f56fffbf4572f1de2b
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -0,0 +1,2224 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import acl.Acl;
+import context.ContextOuterClass;
+import context.ContextOuterClass.ConfigRule_ACL;
+import context.ContextOuterClass.ConfigRule_Custom;
+import context.ContextOuterClass.ContextId;
+import context.ContextOuterClass.DeviceId;
+import context.ContextOuterClass.DeviceOperationalStatusEnum;
+import context.ContextOuterClass.Location.LocationCase;
+import context.ContextOuterClass.Uuid;
+import eu.teraflow.policy.acl.AclAction;
+import eu.teraflow.policy.acl.AclEntry;
+import eu.teraflow.policy.acl.AclForwardActionEnum;
+import eu.teraflow.policy.acl.AclLogActionEnum;
+import eu.teraflow.policy.acl.AclMatch;
+import eu.teraflow.policy.acl.AclRuleSet;
+import eu.teraflow.policy.acl.AclRuleTypeEnum;
+import eu.teraflow.policy.context.model.ConfigActionEnum;
+import eu.teraflow.policy.context.model.ConfigRule;
+import eu.teraflow.policy.context.model.ConfigRuleAcl;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.Constraint;
+import eu.teraflow.policy.context.model.ConstraintCustom;
+import eu.teraflow.policy.context.model.ConstraintEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintSchedule;
+import eu.teraflow.policy.context.model.ConstraintSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintSlaLatency;
+import eu.teraflow.policy.context.model.ConstraintTypeCustom;
+import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintTypeSchedule;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency;
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.DeviceConfig;
+import eu.teraflow.policy.context.model.DeviceDriverEnum;
+import eu.teraflow.policy.context.model.DeviceOperationalStatus;
+import eu.teraflow.policy.context.model.Empty;
+import eu.teraflow.policy.context.model.EndPoint;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Event;
+import eu.teraflow.policy.context.model.EventTypeEnum;
+import eu.teraflow.policy.context.model.GpsPosition;
+import eu.teraflow.policy.context.model.IsolationLevelEnum;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeGpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceConfig;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.ServiceStatus;
+import eu.teraflow.policy.context.model.ServiceStatusEnum;
+import eu.teraflow.policy.context.model.ServiceTypeEnum;
+import eu.teraflow.policy.context.model.SliceId;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+import eu.teraflow.policy.model.BooleanOperator;
+import eu.teraflow.policy.model.NumericalOperator;
+import eu.teraflow.policy.model.PolicyRuleAction;
+import eu.teraflow.policy.model.PolicyRuleActionEnum;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRuleCondition;
+import eu.teraflow.policy.model.PolicyRuleDevice;
+import eu.teraflow.policy.model.PolicyRuleService;
+import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+import eu.teraflow.policy.monitoring.model.BooleanKpiValue;
+import eu.teraflow.policy.monitoring.model.FloatKpiValue;
+import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
+import eu.teraflow.policy.monitoring.model.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValueRange;
+import eu.teraflow.policy.monitoring.model.StringKpiValue;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.inject.Singleton;
+import kpi_sample_types.KpiSampleTypes;
+import monitoring.Monitoring;
+import monitoring.Monitoring.AlarmID;
+import monitoring.Monitoring.KpiId;
+import monitoring.Monitoring.SubscriptionID;
+import policy.Policy;
+import policy.Policy.PolicyRuleId;
+import policy.PolicyAction;
+import policy.PolicyCondition;
+
+@Singleton
+public class Serializer {
+
+    public DeviceId serializeDeviceId(String expectedDeviceId) {
+        final var builder = DeviceId.newBuilder();
+        final var uuid = serializeUuid(expectedDeviceId);
+
+        builder.setDeviceUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(DeviceId deviceId) {
+        return deviceId.getDeviceUuid().getUuid();
+    }
+
+    public ContextId serializeContextId(String expectedContextId) {
+        final var builder = ContextId.newBuilder();
+        final var uuid = serializeUuid(expectedContextId);
+
+        builder.setContextUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(ContextId contextId) {
+        return contextId.getContextUuid().getUuid();
+    }
+
+    public PolicyRuleId serializePolicyRuleId(String expectedPolicyRuleId) {
+        final var builder = PolicyRuleId.newBuilder();
+        final var uuid = serializeUuid(expectedPolicyRuleId);
+
+        builder.setUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(PolicyRuleId policyRuleId) {
+        return policyRuleId.getUuid().getUuid();
+    }
+
+    public ContextOuterClass.TopologyId serialize(TopologyId topologyId) {
+        final var builder = ContextOuterClass.TopologyId.newBuilder();
+
+        final var topologyIdContextId = topologyId.getContextId();
+        final var topologyIdId = topologyId.getId();
+
+        final var contextId = serializeContextId(topologyIdContextId);
+        final var topologyIdIdUuid = serializeUuid(topologyIdId);
+
+        builder.setContextId(contextId);
+        builder.setTopologyUuid(topologyIdIdUuid);
+
+        return builder.build();
+    }
+
+    public TopologyId deserialize(ContextOuterClass.TopologyId topologyId) {
+        final var topologyIdContextId = deserialize(topologyId.getContextId());
+        final var topologyIdId = deserialize(topologyId.getTopologyUuid());
+
+        return new TopologyId(topologyIdContextId, topologyIdId);
+    }
+
+    public ContextOuterClass.ConfigActionEnum serialize(ConfigActionEnum configActionEnum) {
+        switch (configActionEnum) {
+            case SET:
+                return ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET;
+            case DELETE:
+                return ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE;
+            case UNDEFINED:
+                return ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED;
+            default:
+                return ContextOuterClass.ConfigActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public ConfigActionEnum deserialize(
+            ContextOuterClass.ConfigActionEnum serializedConfigActionEnum) {
+        switch (serializedConfigActionEnum) {
+            case CONFIGACTION_SET:
+                return ConfigActionEnum.SET;
+            case CONFIGACTION_DELETE:
+                return ConfigActionEnum.DELETE;
+            case CONFIGACTION_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return ConfigActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclRuleTypeEnum serialize(AclRuleTypeEnum aclRuleTypeEnum) {
+        switch (aclRuleTypeEnum) {
+            case IPV4:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4;
+            case IPV6:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6;
+            case L2:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_L2;
+            case MPLS:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS;
+            case MIXED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED;
+            case UNDEFINED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED;
+            default:
+                return Acl.AclRuleTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclRuleTypeEnum deserialize(Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        switch (serializedAclRuleTypeEnum) {
+            case ACLRULETYPE_IPV4:
+                return AclRuleTypeEnum.IPV4;
+            case ACLRULETYPE_IPV6:
+                return AclRuleTypeEnum.IPV6;
+            case ACLRULETYPE_L2:
+                return AclRuleTypeEnum.L2;
+            case ACLRULETYPE_MPLS:
+                return AclRuleTypeEnum.MPLS;
+            case ACLRULETYPE_MIXED:
+                return AclRuleTypeEnum.MIXED;
+            case UNRECOGNIZED:
+            default:
+                return AclRuleTypeEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclMatch serialize(AclMatch aclMatch) {
+        final var builder = Acl.AclMatch.newBuilder();
+
+        final var dscp = aclMatch.getDscp();
+        final var protocol = aclMatch.getProtocol();
+        final var srcAddress = aclMatch.getSrcAddress();
+        final var dstAddress = aclMatch.getDstAddress();
+        final var srcPort = aclMatch.getSrcPort();
+        final var dstPort = aclMatch.getDstPort();
+        final var startMplsLabel = aclMatch.getStartMplsLabel();
+        final var endMplsLabel = aclMatch.getEndMplsLabel();
+
+        builder.setDscp(dscp);
+        builder.setProtocol(protocol);
+        builder.setSrcAddress(srcAddress);
+        builder.setDstAddress(dstAddress);
+        builder.setSrcPort(srcPort);
+        builder.setDstPort(dstPort);
+        builder.setStartMplsLabel(startMplsLabel);
+        builder.setEndMplsLabel(endMplsLabel);
+
+        return builder.build();
+    }
+
+    public AclMatch deserialize(Acl.AclMatch serializedAclMatch) {
+        final var dscp = serializedAclMatch.getDscp();
+        final var protocol = serializedAclMatch.getProtocol();
+        final var srcAddress = serializedAclMatch.getSrcAddress();
+        final var dstAddress = serializedAclMatch.getDstAddress();
+        final var srcPort = serializedAclMatch.getSrcPort();
+        final var dstPort = serializedAclMatch.getDstPort();
+        final var startMplsLabel = serializedAclMatch.getStartMplsLabel();
+        final var endMplsLabel = serializedAclMatch.getEndMplsLabel();
+
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    public Acl.AclForwardActionEnum serialize(AclForwardActionEnum aclForwardActionEnum) {
+        switch (aclForwardActionEnum) {
+            case DROP:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP;
+            case ACCEPT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT;
+            case REJECT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT;
+            case UNDEFINED:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED;
+            default:
+                return Acl.AclForwardActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclForwardActionEnum deserialize(Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        switch (serializedAclForwardActionEnum) {
+            case ACLFORWARDINGACTION_DROP:
+                return AclForwardActionEnum.DROP;
+            case ACLFORWARDINGACTION_ACCEPT:
+                return AclForwardActionEnum.ACCEPT;
+            case ACLFORWARDINGACTION_REJECT:
+                return AclForwardActionEnum.REJECT;
+            case UNRECOGNIZED:
+            default:
+                return AclForwardActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclLogActionEnum serialize(AclLogActionEnum aclLogActionEnum) {
+        switch (aclLogActionEnum) {
+            case NO_LOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_NOLOG;
+            case SYSLOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG;
+            case UNDEFINED:
+                return Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED;
+            default:
+                return Acl.AclLogActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclLogActionEnum deserialize(Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        switch (serializedAclLogActionEnum) {
+            case ACLLOGACTION_NOLOG:
+                return AclLogActionEnum.NO_LOG;
+            case ACLLOGACTION_SYSLOG:
+                return AclLogActionEnum.SYSLOG;
+            case UNRECOGNIZED:
+            default:
+                return AclLogActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclAction serialize(AclAction aclAction) {
+        final var builder = Acl.AclAction.newBuilder();
+
+        final var aclForwardActionEnum = aclAction.getAclForwardActionEnum();
+        final var aclLogActionEnum = aclAction.getAclLogActionEnum();
+
+        final var serializedAclForwardActionEnum = serialize(aclForwardActionEnum);
+        final var serializedAclLogActionEnum = serialize(aclLogActionEnum);
+
+        builder.setForwardAction(serializedAclForwardActionEnum);
+        builder.setLogAction(serializedAclLogActionEnum);
+
+        return builder.build();
+    }
+
+    public AclAction deserialize(Acl.AclAction serializedAclAction) {
+        final var serializedAclForwardActionEnum = serializedAclAction.getForwardAction();
+        final var serializedAclLogActionEnum = serializedAclAction.getLogAction();
+
+        final var aclForwardActionEnum = deserialize(serializedAclForwardActionEnum);
+        final var aclLogActionEnum = deserialize(serializedAclLogActionEnum);
+
+        return new AclAction(aclForwardActionEnum, aclLogActionEnum);
+    }
+
+    public Acl.AclEntry serialize(AclEntry aclEntry) {
+        final var builder = Acl.AclEntry.newBuilder();
+
+        final var sequenceId = aclEntry.getSequenceId();
+        final var description = aclEntry.getDescription();
+        final var aclMatch = aclEntry.getMatch();
+        final var aclAction = aclEntry.getAction();
+
+        final var serializedAclMatch = serialize(aclMatch);
+        final var serializedAclAction = serialize(aclAction);
+
+        builder.setSequenceId(sequenceId);
+        builder.setDescription(description);
+        builder.setMatch(serializedAclMatch);
+        builder.setAction(serializedAclAction);
+
+        return builder.build();
+    }
+
+    public AclEntry deserialize(Acl.AclEntry serializedAclEntry) {
+        final var sequenceId = serializedAclEntry.getSequenceId();
+        final var description = serializedAclEntry.getDescription();
+        final var serializedAclMatch = serializedAclEntry.getMatch();
+        final var serializedAclAction = serializedAclEntry.getAction();
+
+        final var aclMatch = deserialize(serializedAclMatch);
+        final var aclAction = deserialize(serializedAclAction);
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
+    public Acl.AclRuleSet serialize(AclRuleSet aclRuleSet) {
+        final var builder = Acl.AclRuleSet.newBuilder();
+
+        final var name = aclRuleSet.getName();
+        final var type = aclRuleSet.getType();
+        final var description = aclRuleSet.getDescription();
+        final var userId = aclRuleSet.getUserId();
+        final var entries = aclRuleSet.getEntries();
+
+        final var serializedType = serialize(type);
+        final var serializedEntries =
+                entries.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setName(name);
+        builder.setType(serializedType);
+        builder.setDescription(description);
+        builder.setUserId(userId);
+        builder.addAllEntries(serializedEntries);
+
+        return builder.build();
+    }
+
+    public AclRuleSet deserialize(Acl.AclRuleSet serializedAclRuleSet) {
+        final var serializedName = serializedAclRuleSet.getName();
+        final var serializedType = serializedAclRuleSet.getType();
+        final var serializedDescription = serializedAclRuleSet.getDescription();
+        final var serializedUserId = serializedAclRuleSet.getUserId();
+        final var serializedEntries = serializedAclRuleSet.getEntriesList();
+
+        final var type = deserialize(serializedType);
+        final var entries =
+                serializedEntries.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new AclRuleSet(serializedName, type, serializedDescription, serializedUserId, entries);
+    }
+
+    public ConfigRule_ACL serialize(ConfigRuleAcl configRuleAcl) {
+        final var builder = ContextOuterClass.ConfigRule_ACL.newBuilder();
+
+        final var endPointId = configRuleAcl.getEndPointId();
+        final var aclRuleSet = configRuleAcl.getRuleSet();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedAclRuleSet = serialize(aclRuleSet);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setRuleSet(serializedAclRuleSet);
+
+        return builder.build();
+    }
+
+    public ConfigRuleAcl deserialize(ConfigRule_ACL serializedConfigRuleAcl) {
+        final var serializedEndPointId = serializedConfigRuleAcl.getEndpointId();
+        final var serializedAclRuleSet = serializedConfigRuleAcl.getRuleSet();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var aclRuleSet = deserialize(serializedAclRuleSet);
+
+        return new ConfigRuleAcl(endPointId, aclRuleSet);
+    }
+
+    public ConfigRule_Custom serialize(ConfigRuleCustom configRuleCustom) {
+        final var builder = ConfigRule_Custom.newBuilder();
+
+        final var resourceKey = configRuleCustom.getResourceKey();
+        final var resourceValue = configRuleCustom.getResourceValue();
+
+        builder.setResourceKey(resourceKey);
+        builder.setResourceValue(resourceValue);
+
+        return builder.build();
+    }
+
+    public ConfigRuleCustom deserialize(ConfigRule_Custom serializedConfigRuleCustom) {
+        final var serializedResourceKey = serializedConfigRuleCustom.getResourceKey();
+        final var serializedResourceValue = serializedConfigRuleCustom.getResourceValue();
+
+        return new ConfigRuleCustom(serializedResourceKey, serializedResourceValue);
+    }
+
+    public ContextOuterClass.ConfigRule serialize(ConfigRule configRule) {
+        final var builder = ContextOuterClass.ConfigRule.newBuilder();
+
+        final var configActionEnum = configRule.getConfigActionEnum();
+        final var configRuleType = configRule.getConfigRuleType();
+        final var configRuleTypeSpecificType = configRuleType.getConfigRuleType();
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleAcl) {
+            final var endPointId = ((ConfigRuleAcl) configRuleTypeSpecificType).getEndPointId();
+            final var aclRuleSet = ((ConfigRuleAcl) configRuleTypeSpecificType).getRuleSet();
+
+            final var serializedEndPointId = serialize(endPointId);
+            final var serializedAclRuleSet = serialize(aclRuleSet);
+
+            final var serializedConfigRuleAcl =
+                    ConfigRule_ACL.newBuilder()
+                            .setEndpointId(serializedEndPointId)
+                            .setRuleSet(serializedAclRuleSet)
+                            .build();
+
+            builder.setAcl(serializedConfigRuleAcl);
+        }
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleCustom) {
+            final var configRuleCustomResourceKey =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceKey();
+            final var configRuleCustomResourceValue =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceValue();
+
+            final var serializedConfigRuleCustom =
+                    ConfigRule_Custom.newBuilder()
+                            .setResourceKey(configRuleCustomResourceKey)
+                            .setResourceValue(configRuleCustomResourceValue)
+                            .build();
+
+            builder.setCustom(serializedConfigRuleCustom);
+        }
+
+        final var serializedConfigActionEnum = serialize(configActionEnum);
+
+        builder.setAction(serializedConfigActionEnum);
+
+        return builder.build();
+    }
+
+    public ConfigRule deserialize(ContextOuterClass.ConfigRule serializedConfigRule) {
+        final var serializedConfigActionEnum = serializedConfigRule.getAction();
+        final var typeOfConfigRule = serializedConfigRule.getConfigRuleCase();
+
+        final var configActionEnum = deserialize(serializedConfigActionEnum);
+
+        switch (typeOfConfigRule) {
+            case ACL:
+                final var serializedConfigRuleAcl = serializedConfigRule.getAcl();
+
+                final var configRuleAcl = deserialize(serializedConfigRuleAcl);
+                final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+                return new ConfigRule(configActionEnum, configRuleTypeAcl);
+            case CUSTOM:
+                final var serializedConfigRuleCustom = serializedConfigRule.getCustom();
+
+                final var configRuleCustom = deserialize(serializedConfigRuleCustom);
+                final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom);
+
+                return new ConfigRule(configActionEnum, configRuleTypeCustom);
+            default:
+            case CONFIGRULE_NOT_SET:
+                throw new IllegalStateException("Config Rule not set");
+        }
+    }
+
+    public ContextOuterClass.Location serialize(Location location) {
+        final var builder = ContextOuterClass.Location.newBuilder();
+
+        final var locationType = location.getLocationType();
+        final var locationTypeSpecificType = locationType.getLocationType();
+
+        if (locationTypeSpecificType instanceof GpsPosition) {
+            final var latitude = ((GpsPosition) locationTypeSpecificType).getLatitude();
+            final var longitude = ((GpsPosition) locationTypeSpecificType).getLongitude();
+
+            final var serializedGpsPosition =
+                    ContextOuterClass.GPS_Position.newBuilder()
+                            .setLatitude(latitude)
+                            .setLongitude(longitude)
+                            .build();
+
+            builder.setGpsPosition(serializedGpsPosition);
+        }
+
+        if (locationTypeSpecificType instanceof String) {
+            final var region = ((String) locationTypeSpecificType);
+
+            builder.setRegion(region);
+        }
+
+        return builder.build();
+    }
+
+    public Location deserialize(ContextOuterClass.Location serializedLocation) {
+        final var typeOfLocation = serializedLocation.getLocationCase();
+
+        switch (typeOfLocation) {
+            case REGION:
+                final var region = serializedLocation.getRegion();
+                final var locationTypeRegion = new LocationTypeRegion(region);
+
+                return new Location(locationTypeRegion);
+            case GPS_POSITION:
+                final var serializedGpsPosition = serializedLocation.getGpsPosition();
+                final var latitude = serializedGpsPosition.getLatitude();
+                final var longitude = serializedGpsPosition.getLongitude();
+
+                final var gpsPosition = new GpsPosition(latitude, longitude);
+                final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+
+                return new Location(locationTypeGpsPosition);
+            default:
+            case LOCATION_NOT_SET:
+                throw new IllegalStateException("Location value not set");
+        }
+    }
+
+    public ContextOuterClass.IsolationLevelEnum serialize(IsolationLevelEnum isolationLevelEnum) {
+        switch (isolationLevelEnum) {
+            case NO_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.NO_ISOLATION;
+            case PHYSICAL_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PHYSICAL_ISOLATION;
+            case LOGICAL_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.LOGICAL_ISOLATION;
+            case PROCESS_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PROCESS_ISOLATION;
+            case PHYSICAL_MEMORY_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION;
+            case PHYSICAL_NETWORK_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION;
+            case VIRTUAL_RESOURCE_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION;
+            case NETWORK_FUNCTIONS_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+            case SERVICE_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.SERVICE_ISOLATION;
+            default:
+                return ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED;
+        }
+    }
+
+    public IsolationLevelEnum deserialize(
+            ContextOuterClass.IsolationLevelEnum serializedIsolationLevelEnum) {
+        switch (serializedIsolationLevelEnum) {
+            case PHYSICAL_ISOLATION:
+                return IsolationLevelEnum.PHYSICAL_ISOLATION;
+            case LOGICAL_ISOLATION:
+                return IsolationLevelEnum.LOGICAL_ISOLATION;
+            case PROCESS_ISOLATION:
+                return IsolationLevelEnum.PROCESS_ISOLATION;
+            case PHYSICAL_MEMORY_ISOLATION:
+                return IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION;
+            case PHYSICAL_NETWORK_ISOLATION:
+                return IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION;
+            case VIRTUAL_RESOURCE_ISOLATION:
+                return IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION;
+            case NETWORK_FUNCTIONS_ISOLATION:
+                return IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+            case SERVICE_ISOLATION:
+                return IsolationLevelEnum.SERVICE_ISOLATION;
+            case UNRECOGNIZED:
+            default:
+                return IsolationLevelEnum.NO_ISOLATION;
+        }
+    }
+
+    public ContextOuterClass.Constraint_Custom serialize(ConstraintCustom constraintCustom) {
+        final var builder = ContextOuterClass.Constraint_Custom.newBuilder();
+
+        final var constraintType = constraintCustom.getConstraintType();
+        final var constraintValue = constraintCustom.getConstraintValue();
+
+        builder.setConstraintType(constraintType);
+        builder.setConstraintValue(constraintValue);
+
+        return builder.build();
+    }
+
+    public ConstraintCustom deserialize(
+            ContextOuterClass.Constraint_Custom serializedConstraintCustom) {
+        final var constraintType = serializedConstraintCustom.getConstraintType();
+        final var constraintValue = serializedConstraintCustom.getConstraintValue();
+
+        return new ConstraintCustom(constraintType, constraintValue);
+    }
+
+    public ContextOuterClass.Constraint_Schedule serialize(ConstraintSchedule constraintSchedule) {
+        final var builder = ContextOuterClass.Constraint_Schedule.newBuilder();
+
+        final var startTimestamp = constraintSchedule.getStartTimestamp();
+        final var durationDays = constraintSchedule.getDurationDays();
+
+        builder.setStartTimestamp(startTimestamp);
+        builder.setDurationDays(durationDays);
+
+        return builder.build();
+    }
+
+    public ConstraintSchedule deserialize(
+            ContextOuterClass.Constraint_Schedule serializedConstraintSchedule) {
+        final var startTimestamp = serializedConstraintSchedule.getStartTimestamp();
+        final var durationDays = serializedConstraintSchedule.getDurationDays();
+
+        return new ConstraintSchedule(startTimestamp, durationDays);
+    }
+
+    public ContextOuterClass.Constraint_EndPointLocation serialize(
+            ConstraintEndPointLocation constraintEndPointLocation) {
+        final var builder = ContextOuterClass.Constraint_EndPointLocation.newBuilder();
+
+        final var endPointId = constraintEndPointLocation.getEndPointId();
+        final var location = constraintEndPointLocation.getLocation();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedLocation = serialize(location);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setLocation(serializedLocation);
+
+        return builder.build();
+    }
+
+    public ConstraintEndPointLocation deserialize(
+            ContextOuterClass.Constraint_EndPointLocation serializedConstraintEndPointLocation) {
+        final var serializedEndPointId = serializedConstraintEndPointLocation.getEndpointId();
+        final var serializedLocation = serializedConstraintEndPointLocation.getLocation();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var location = deserialize(serializedLocation);
+
+        return new ConstraintEndPointLocation(endPointId, location);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Availability serialize(
+            ConstraintSlaAvailability constraintSlaAvailability) {
+        final var builder = ContextOuterClass.Constraint_SLA_Availability.newBuilder();
+
+        final var numDisjointPaths = constraintSlaAvailability.getNumDisjointPaths();
+        final var isAllActive = constraintSlaAvailability.isAllActive();
+
+        builder.setNumDisjointPaths(numDisjointPaths);
+        builder.setAllActive(isAllActive);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaAvailability deserialize(
+            ContextOuterClass.Constraint_SLA_Availability serializedConstraintSlaAvailability) {
+        final var numDisjointPaths = serializedConstraintSlaAvailability.getNumDisjointPaths();
+        final var isAllActive = serializedConstraintSlaAvailability.getAllActive();
+
+        return new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Capacity serialize(
+            ConstraintSlaCapacity constraintSlaCapacity) {
+        final var builder = ContextOuterClass.Constraint_SLA_Capacity.newBuilder();
+
+        final var capacityGbps = constraintSlaCapacity.getCapacityGbps();
+
+        builder.setCapacityGbps(capacityGbps);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaCapacity deserialize(
+            ContextOuterClass.Constraint_SLA_Capacity serializedConstraintSlaCapacity) {
+        final var capacityGbps = serializedConstraintSlaCapacity.getCapacityGbps();
+
+        return new ConstraintSlaCapacity(capacityGbps);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Isolation_level serialize(
+            ConstraintSlaIsolationLevel constraintSlaIsolationLevel) {
+        final var builder = ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder();
+
+        final var isolationLevelEnums = constraintSlaIsolationLevel.getIsolationLevelEnums();
+
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.addAllIsolationLevel(serializedIsolationLevelEnums);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaIsolationLevel deserialize(
+            ContextOuterClass.Constraint_SLA_Isolation_level serializedConstraintIsolationLevel) {
+        final var serializedIsolationLevelEnums =
+                serializedConstraintIsolationLevel.getIsolationLevelList();
+
+        final var isolationLevelEnums =
+                serializedIsolationLevelEnums.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new ConstraintSlaIsolationLevel(isolationLevelEnums);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Latency serialize(
+            ConstraintSlaLatency constraintSlaLatency) {
+        final var builder = ContextOuterClass.Constraint_SLA_Latency.newBuilder();
+
+        final var e2eLatencyMs = constraintSlaLatency.getE2eLatencyMs();
+
+        builder.setE2ELatencyMs(e2eLatencyMs);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaLatency deserialize(
+            ContextOuterClass.Constraint_SLA_Latency serializedConstraintSlaLatency) {
+        final var e2ELatencyMs = serializedConstraintSlaLatency.getE2ELatencyMs();
+
+        return new ConstraintSlaLatency(e2ELatencyMs);
+    }
+
+    public ContextOuterClass.Constraint serialize(Constraint constraint) {
+        final var builder = ContextOuterClass.Constraint.newBuilder();
+
+        final var constraintType = constraint.getConstraintType();
+        final var constraintTypeSpecificType = constraintType.getConstraintType();
+
+        if (constraintTypeSpecificType instanceof ConstraintCustom) {
+            final var constraintCustomType =
+                    ((ConstraintCustom) constraintTypeSpecificType).getConstraintType();
+            final var constraintCustomValue =
+                    ((ConstraintCustom) constraintTypeSpecificType).getConstraintValue();
+
+            final var serializedConstraintCustom =
+                    ContextOuterClass.Constraint_Custom.newBuilder()
+                            .setConstraintType(constraintCustomType)
+                            .setConstraintValue(constraintCustomValue)
+                            .build();
+
+            builder.setCustom(serializedConstraintCustom);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSchedule) {
+            final var startTimestamp =
+                    ((ConstraintSchedule) constraintTypeSpecificType).getStartTimestamp();
+            final var durationDays = ((ConstraintSchedule) constraintTypeSpecificType).getDurationDays();
+
+            final var serializedConstraintSchedule =
+                    ContextOuterClass.Constraint_Schedule.newBuilder()
+                            .setStartTimestamp(startTimestamp)
+                            .setDurationDays(durationDays)
+                            .build();
+
+            builder.setSchedule(serializedConstraintSchedule);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintEndPointLocation) {
+            final var endPointId =
+                    ((ConstraintEndPointLocation) constraintTypeSpecificType).getEndPointId();
+            final var location = ((ConstraintEndPointLocation) constraintTypeSpecificType).getLocation();
+
+            final var serializedEndPointId = serialize(endPointId);
+            final var serializedLocation = serialize(location);
+
+            final var serializedConstraintEndPointLocation =
+                    ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                            .setEndpointId(serializedEndPointId)
+                            .setLocation(serializedLocation)
+                            .build();
+
+            builder.setEndpointLocation(serializedConstraintEndPointLocation);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaAvailability) {
+            final var numDisJointPaths =
+                    ((ConstraintSlaAvailability) constraintTypeSpecificType).getNumDisjointPaths();
+            final var isAllActive =
+                    ((ConstraintSlaAvailability) constraintTypeSpecificType).isAllActive();
+
+            final var serializedConstraintSlaAvailability =
+                    ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                            .setNumDisjointPaths(numDisJointPaths)
+                            .setAllActive(isAllActive)
+                            .build();
+
+            builder.setSlaAvailability(serializedConstraintSlaAvailability);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaCapacity) {
+            final var capacityGbps =
+                    ((ConstraintSlaCapacity) constraintTypeSpecificType).getCapacityGbps();
+
+            final var serializedConstraintSlaCapacity =
+                    ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                            .setCapacityGbps(capacityGbps)
+                            .build();
+
+            builder.setSlaCapacity(serializedConstraintSlaCapacity);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaIsolationLevel) {
+            final var isolationLevelEnums =
+                    ((ConstraintSlaIsolationLevel) constraintTypeSpecificType).getIsolationLevelEnums();
+
+            final var serializedIsolationLevelEnums =
+                    isolationLevelEnums.stream().map(this::serialize).collect(Collectors.toList());
+            final var serializedConstraintSlaIsolationLevel =
+                    ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                            .addAllIsolationLevel(serializedIsolationLevelEnums)
+                            .build();
+
+            builder.setSlaIsolation(serializedConstraintSlaIsolationLevel);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaLatency) {
+            final var e2eLatencyMs =
+                    ((ConstraintSlaLatency) constraintTypeSpecificType).getE2eLatencyMs();
+
+            final var serializedConstraintSlaLatency =
+                    ContextOuterClass.Constraint_SLA_Latency.newBuilder()
+                            .setE2ELatencyMs(e2eLatencyMs)
+                            .build();
+
+            builder.setSlaLatency(serializedConstraintSlaLatency);
+        }
+
+        return builder.build();
+    }
+
+    public Constraint deserialize(ContextOuterClass.Constraint serializedConstraint) {
+        final var typeOfConstraint = serializedConstraint.getConstraintCase();
+
+        switch (typeOfConstraint) {
+            case CUSTOM:
+                final var serializedConstraintCustom = serializedConstraint.getCustom();
+                final var constraintType = serializedConstraintCustom.getConstraintType();
+                final var constraintValue = serializedConstraintCustom.getConstraintValue();
+
+                final var constraintCustom = new ConstraintCustom(constraintType, constraintValue);
+                final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+
+                return new Constraint(constraintTypeCustom);
+            case SCHEDULE:
+                final var serializedConstraintSchedule = serializedConstraint.getSchedule();
+                final var startTimestamp = serializedConstraintSchedule.getStartTimestamp();
+                final var durationDays = serializedConstraintSchedule.getDurationDays();
+
+                final var constraintSchedule = new ConstraintSchedule(startTimestamp, durationDays);
+                final var constraintTypeSchedule = new ConstraintTypeSchedule(constraintSchedule);
+
+                return new Constraint(constraintTypeSchedule);
+            case ENDPOINT_LOCATION:
+                final var serializedConstrainEndPointLocation = serializedConstraint.getEndpointLocation();
+                final var serializedEndPointId = serializedConstrainEndPointLocation.getEndpointId();
+                final var serializedLocation = serializedConstrainEndPointLocation.getLocation();
+
+                final var endPointId = deserialize(serializedEndPointId);
+                final var location = deserialize(serializedLocation);
+                final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location);
+                final var constraintTypeEndPointLocation =
+                        new ConstraintTypeEndPointLocation(constraintEndPointLocation);
+
+                return new Constraint(constraintTypeEndPointLocation);
+            case SLA_CAPACITY:
+                final var serializedConstrainSlaCapacity = serializedConstraint.getSlaCapacity();
+                final var capacityGbps = serializedConstrainSlaCapacity.getCapacityGbps();
+
+                final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+                final var constraintTypeSlaCapacity = new ConstraintTypeSlaCapacity(constraintSlaCapacity);
+
+                return new Constraint(constraintTypeSlaCapacity);
+            case SLA_LATENCY:
+                final var serializedConstrainSlaLatency = serializedConstraint.getSlaLatency();
+                final var e2ELatencyMs = serializedConstrainSlaLatency.getE2ELatencyMs();
+
+                final var constraintSlaLatency = new ConstraintSlaLatency(e2ELatencyMs);
+                final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(constraintSlaLatency);
+
+                return new Constraint(constraintTypeSlaLatency);
+            case SLA_AVAILABILITY:
+                final var serializedConstrainSlaAvailability = serializedConstraint.getSlaAvailability();
+                final var numDisjointPaths = serializedConstrainSlaAvailability.getNumDisjointPaths();
+                final var isAllActive = serializedConstrainSlaAvailability.getAllActive();
+
+                final var constraintSlaAvailability =
+                        new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+                final var constraintTypeSlaAvailability =
+                        new ConstraintTypeSlaAvailability(constraintSlaAvailability);
+
+                return new Constraint(constraintTypeSlaAvailability);
+            case SLA_ISOLATION:
+                final var serializedConstrainSlaIsolation = serializedConstraint.getSlaIsolation();
+                final var serializedIsolationLevelEnums =
+                        serializedConstrainSlaIsolation.getIsolationLevelList();
+
+                final var isolationLevelEnums =
+                        serializedIsolationLevelEnums.stream()
+                                .map(this::deserialize)
+                                .collect(Collectors.toList());
+                final var constraintSlaIsolation = new ConstraintSlaIsolationLevel(isolationLevelEnums);
+                final var constraintTypeSlaIsolation =
+                        new ConstraintTypeSlaIsolationLevel(constraintSlaIsolation);
+
+                return new Constraint(constraintTypeSlaIsolation);
+
+            default:
+            case CONSTRAINT_NOT_SET:
+                throw new IllegalStateException("Constraint value not set");
+        }
+    }
+
+    public ContextOuterClass.EndPointId serialize(EndPointId endPointId) {
+        final var builder = ContextOuterClass.EndPointId.newBuilder();
+
+        final var endPointIdTopologyId = endPointId.getTopologyId();
+        final var endPointIdDeviceId = endPointId.getDeviceId();
+        final var endPointIdId = endPointId.getId();
+
+        final var serializedTopologyId = serialize(endPointIdTopologyId);
+        final var serializedDeviceId = serializeDeviceId(endPointIdDeviceId);
+        final var serializedEndPointIdId = serializeUuid(endPointIdId);
+
+        builder.setTopologyId(serializedTopologyId);
+        builder.setDeviceId(serializedDeviceId);
+        builder.setEndpointUuid(serializedEndPointIdId);
+
+        return builder.build();
+    }
+
+    public EndPointId deserialize(ContextOuterClass.EndPointId serializedEndPointId) {
+        final var serializedTopologyId = serializedEndPointId.getTopologyId();
+        final var serializedDeviceId = serializedEndPointId.getDeviceId();
+        final var serializedId = serializedEndPointId.getEndpointUuid();
+
+        final var topologyId = deserialize(serializedTopologyId);
+        final var deviceId = deserialize(serializedDeviceId);
+        final var id = deserialize(serializedId);
+
+        return new EndPointId(topologyId, deviceId, id);
+    }
+
+    public ContextOuterClass.EventTypeEnum serialize(EventTypeEnum eventTypeEnum) {
+        switch (eventTypeEnum) {
+            case CREATE:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE;
+            case REMOVE:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE;
+            case UPDATE:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_UPDATE;
+            case UNDEFINED:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED;
+            default:
+                return ContextOuterClass.EventTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public EventTypeEnum deserialize(ContextOuterClass.EventTypeEnum serializedEventType) {
+        switch (serializedEventType) {
+            case EVENTTYPE_CREATE:
+                return EventTypeEnum.CREATE;
+            case EVENTTYPE_REMOVE:
+                return EventTypeEnum.REMOVE;
+            case EVENTTYPE_UPDATE:
+                return EventTypeEnum.UPDATE;
+            case EVENTTYPE_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return EventTypeEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.Timestamp serialize(double timestamp) {
+        final var builder = ContextOuterClass.Timestamp.newBuilder();
+
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public double deserialize(ContextOuterClass.Timestamp serializedTimeStamp) {
+
+        return serializedTimeStamp.getTimestamp();
+    }
+
+    public ContextOuterClass.Event serialize(Event event) {
+        final var builder = ContextOuterClass.Event.newBuilder();
+
+        final var eventType = serialize(event.getEventTypeEnum());
+        final var timestamp = serialize(event.getTimestamp());
+        builder.setEventType(eventType);
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public Event deserialize(ContextOuterClass.Event serializedEvent) {
+        final var timestamp = deserialize(serializedEvent.getTimestamp());
+        final var eventType = deserialize(serializedEvent.getEventType());
+
+        return new Event(timestamp, eventType);
+    }
+
+    public ContextOuterClass.ServiceId serialize(ServiceId serviceId) {
+        final var builder = ContextOuterClass.ServiceId.newBuilder();
+
+        final var contextId = serviceId.getContextId();
+        final var id = serviceId.getId();
+
+        final var serializedContextId = serializeContextId(contextId);
+        final var serializedId = serializeUuid(id);
+
+        builder.setContextId(serializedContextId);
+        builder.setServiceUuid(serializedId);
+
+        return builder.build();
+    }
+
+    public ServiceId deserialize(ContextOuterClass.ServiceId serializedServiceId) {
+        final var serializedContextId = serializedServiceId.getContextId();
+        final var serializedId = serializedServiceId.getServiceUuid();
+
+        final var contextId = deserialize(serializedContextId);
+        final var id = deserialize(serializedId);
+
+        return new ServiceId(contextId, id);
+    }
+
+    public ContextOuterClass.SliceId serialize(SliceId sliceId) {
+        final var builder = ContextOuterClass.SliceId.newBuilder();
+
+        final var contextId = sliceId.getContextId();
+        final var id = sliceId.getId();
+
+        final var serializedContextId = serializeContextId(contextId);
+        final var serializedId = serializeUuid(id);
+
+        builder.setContextId(serializedContextId);
+        builder.setSliceUuid(serializedId);
+
+        return builder.build();
+    }
+
+    public SliceId deserialize(ContextOuterClass.SliceId serializedSliceId) {
+        final var serializedContextId = serializedSliceId.getContextId();
+        final var serializedId = serializedSliceId.getSliceUuid();
+
+        final var contextId = deserialize(serializedContextId);
+        final var id = deserialize(serializedId);
+
+        return new SliceId(contextId, id);
+    }
+
+    public ContextOuterClass.ServiceStatusEnum serialize(ServiceStatusEnum serviceStatusEnum) {
+        switch (serviceStatusEnum) {
+            case ACTIVE:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_ACTIVE;
+            case PLANNED:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PLANNED;
+            case PENDING_REMOVAL:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL;
+            case UNDEFINED:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED;
+            default:
+                return ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED;
+        }
+    }
+
+    public ServiceStatusEnum deserialize(
+            ContextOuterClass.ServiceStatusEnum serializedServiceStatusEnum) {
+        switch (serializedServiceStatusEnum) {
+            case SERVICESTATUS_ACTIVE:
+                return ServiceStatusEnum.ACTIVE;
+            case SERVICESTATUS_PLANNED:
+                return ServiceStatusEnum.PLANNED;
+            case SERVICESTATUS_PENDING_REMOVAL:
+                return ServiceStatusEnum.PENDING_REMOVAL;
+            case SERVICESTATUS_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return ServiceStatusEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.ServiceTypeEnum serialize(ServiceTypeEnum serviceTypeEnum) {
+        switch (serviceTypeEnum) {
+            case L2NM:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L2NM;
+            case L3NM:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L3NM;
+            case TAPI_CONNECTIVITY_SERVICE:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE;
+            case UNKNOWN:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN;
+            default:
+                return ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public ServiceTypeEnum deserialize(ContextOuterClass.ServiceTypeEnum serializedServiceTypeEnum) {
+        switch (serializedServiceTypeEnum) {
+            case SERVICETYPE_L2NM:
+                return ServiceTypeEnum.L2NM;
+            case SERVICETYPE_L3NM:
+                return ServiceTypeEnum.L3NM;
+            case SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+                return ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE;
+            case SERVICETYPE_UNKNOWN:
+            case UNRECOGNIZED:
+            default:
+                return ServiceTypeEnum.UNKNOWN;
+        }
+    }
+
+    public ContextOuterClass.ServiceStatus serialize(ServiceStatus serviceStatus) {
+        final var builder = ContextOuterClass.ServiceStatus.newBuilder();
+
+        final var serviceStatusEnum = serviceStatus.getServiceStatus();
+        final var serializedServiceStatusEnum = serialize(serviceStatusEnum);
+
+        builder.setServiceStatus(serializedServiceStatusEnum);
+
+        return builder.build();
+    }
+
+    public ServiceStatus deserialize(ContextOuterClass.ServiceStatus serializedServiceStatus) {
+        final var serializedServiceStatusEnum = serializedServiceStatus.getServiceStatus();
+        final var serviceStatusEnum = deserialize(serializedServiceStatusEnum);
+
+        return new ServiceStatus(serviceStatusEnum);
+    }
+
+    public ContextOuterClass.ServiceConfig serialize(ServiceConfig serviceConfig) {
+        final var builder = ContextOuterClass.ServiceConfig.newBuilder();
+
+        final var serializedConfigRules =
+                serviceConfig.getConfigRules().stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.addAllConfigRules(serializedConfigRules);
+
+        return builder.build();
+    }
+
+    public ServiceConfig deserialize(ContextOuterClass.ServiceConfig serviceConfig) {
+        final var configRules =
+                serviceConfig.getConfigRulesList().stream()
+                        .map(this::deserialize)
+                        .collect(Collectors.toList());
+
+        return new ServiceConfig(configRules);
+    }
+
+    public ContextOuterClass.Service serialize(Service service) {
+        final var builder = ContextOuterClass.Service.newBuilder();
+
+        final var serviceId = service.getServiceId();
+        final var serviceType = service.getServiceType();
+        final var serviceEndPointIds = service.getServiceEndPointIds();
+        final var serviceConstraints = service.getServiceConstraints();
+        final var serviceStatus = service.getServiceStatus();
+        final var serviceConfig = service.getServiceConfig();
+        final var serviceTimestamp = service.getTimestamp();
+
+        final var serializedServiceId = serialize(serviceId);
+        final var serializedServiceType = serialize(serviceType);
+        final var serializedServiceEndPointIds =
+                serviceEndPointIds.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedServiceConstraints =
+                serviceConstraints.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedServiceStatus = serialize(serviceStatus);
+        final var serializedServiceConfig = serialize(serviceConfig);
+        final var serializedTimestamp = serialize(serviceTimestamp);
+
+        builder.setServiceId(serializedServiceId);
+        builder.setServiceType(serializedServiceType);
+        builder.addAllServiceEndpointIds(serializedServiceEndPointIds);
+        builder.addAllServiceConstraints(serializedServiceConstraints);
+        builder.setServiceStatus(serializedServiceStatus);
+        builder.setServiceConfig(serializedServiceConfig);
+        builder.setTimestamp(serializedTimestamp);
+
+        return builder.build();
+    }
+
+    public Service deserialize(ContextOuterClass.Service serializedService) {
+
+        final var serializedServiceId = serializedService.getServiceId();
+        final var serializedServiceType = serializedService.getServiceType();
+        final var serializedServiceEndPointIds = serializedService.getServiceEndpointIdsList();
+        final var serializedServiceConstraints = serializedService.getServiceConstraintsList();
+        final var serializedServiceStatus = serializedService.getServiceStatus();
+        final var serializedServiceConfig = serializedService.getServiceConfig();
+        final var serializedTimestamp = serializedService.getTimestamp();
+
+        final var serviceId = deserialize(serializedServiceId);
+        final var serviceType = deserialize(serializedServiceType);
+        final var serviceEndPointIds =
+                serializedServiceEndPointIds.stream().map(this::deserialize).collect(Collectors.toList());
+        final var serviceConstraints =
+                serializedServiceConstraints.stream().map(this::deserialize).collect(Collectors.toList());
+        final var serviceStatus = deserialize(serializedServiceStatus);
+        final var serviceConfig = deserialize(serializedServiceConfig);
+        final var timestamp = deserialize(serializedTimestamp);
+
+        return new Service(
+                serviceId,
+                serviceType,
+                serviceEndPointIds,
+                serviceConstraints,
+                serviceStatus,
+                serviceConfig,
+                timestamp);
+    }
+
+    public KpiSampleTypes.KpiSampleType serialize(KpiSampleType kpiSampleType) {
+        switch (kpiSampleType) {
+            case PACKETS_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED;
+            case PACKETS_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED;
+            case BYTES_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED;
+            case BYTES_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED;
+            case UNKNOWN:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN;
+            default:
+                return KpiSampleTypes.KpiSampleType.UNRECOGNIZED;
+        }
+    }
+
+    public KpiSampleType deserialize(KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        switch (serializedKpiSampleType) {
+            case KPISAMPLETYPE_PACKETS_TRANSMITTED:
+                return KpiSampleType.PACKETS_TRANSMITTED;
+            case KPISAMPLETYPE_PACKETS_RECEIVED:
+                return KpiSampleType.PACKETS_RECEIVED;
+            case KPISAMPLETYPE_BYTES_TRANSMITTED:
+                return KpiSampleType.BYTES_TRANSMITTED;
+            case KPISAMPLETYPE_BYTES_RECEIVED:
+                return KpiSampleType.BYTES_RECEIVED;
+            case KPISAMPLETYPE_UNKNOWN:
+            default:
+                return KpiSampleType.UNKNOWN;
+        }
+    }
+
+    public Policy.RuleState serialize(RuleState rulestate) {
+        switch (rulestate) {
+            case POLICY_FAILED:
+                return Policy.RuleState.POLICY_FAILED;
+            case POLICY_INSERTED:
+                return Policy.RuleState.POLICY_INSERTED;
+            case POLICY_VALIDATED:
+                return Policy.RuleState.POLICY_VALIDATED;
+            case POLICY_PROVISIONED:
+                return Policy.RuleState.POLICY_PROVISIONED;
+            case POLICY_ACTIVE:
+                return Policy.RuleState.POLICY_ACTIVE;
+            case POLICY_ENFORCED:
+                return Policy.RuleState.POLICY_ENFORCED;
+            case POLICY_INEFFECTIVE:
+                return Policy.RuleState.POLICY_INEFFECTIVE;
+            case POLICY_EFFECTIVE:
+                return Policy.RuleState.POLICY_EFFECTIVE;
+            case POLICY_UPDATED:
+                return Policy.RuleState.POLICY_UPDATED;
+            case POLICY_REMOVED:
+                return Policy.RuleState.POLICY_REMOVED;
+            case POLICY_UNDEFINED:
+                return Policy.RuleState.POLICY_UNDEFINED;
+            default:
+                return Policy.RuleState.UNRECOGNIZED;
+        }
+    }
+
+    public RuleState deserialize(Policy.RuleState serializedRuleState) {
+        switch (serializedRuleState) {
+            case POLICY_INSERTED:
+                return RuleState.POLICY_INSERTED;
+            case POLICY_VALIDATED:
+                return RuleState.POLICY_VALIDATED;
+            case POLICY_PROVISIONED:
+                return RuleState.POLICY_PROVISIONED;
+            case POLICY_ACTIVE:
+                return RuleState.POLICY_ACTIVE;
+            case POLICY_ENFORCED:
+                return RuleState.POLICY_ENFORCED;
+            case POLICY_INEFFECTIVE:
+                return RuleState.POLICY_INEFFECTIVE;
+            case POLICY_EFFECTIVE:
+                return RuleState.POLICY_EFFECTIVE;
+            case POLICY_UPDATED:
+                return RuleState.POLICY_UPDATED;
+            case POLICY_REMOVED:
+                return RuleState.POLICY_REMOVED;
+            case POLICY_FAILED:
+                return RuleState.POLICY_FAILED;
+            case POLICY_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return RuleState.POLICY_UNDEFINED;
+        }
+    }
+
+    public Policy.PolicyRuleState serialize(PolicyRuleState policyRuleState) {
+        final var builder = Policy.PolicyRuleState.newBuilder();
+
+        final var ruleState = policyRuleState.getRuleState();
+
+        final var serializedRuleState = serialize(ruleState);
+
+        builder.setPolicyRuleState(serializedRuleState);
+
+        return builder.build();
+    }
+
+    public PolicyRuleState deserialize(Policy.PolicyRuleState serializedPolicyRuleState) {
+        final var serializedRuleState = serializedPolicyRuleState.getPolicyRuleState();
+
+        final var ruleState = deserialize(serializedRuleState);
+
+        return new PolicyRuleState(ruleState);
+    }
+
+    public PolicyCondition.NumericalOperator serialize(NumericalOperator numericalOperator) {
+        switch (numericalOperator) {
+            case POLICY_RULE_CONDITION_NUMERICAL_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN;
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN;
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED;
+            default:
+                return PolicyCondition.NumericalOperator.UNRECOGNIZED;
+        }
+    }
+
+    public NumericalOperator deserialize(
+            PolicyCondition.NumericalOperator serializedNumericalOperator) {
+        switch (serializedNumericalOperator) {
+            case POLICYRULE_CONDITION_NUMERICAL_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_LESS_THAN:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN;
+            case POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN;
+            case POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED;
+        }
+    }
+
+    public Monitoring.KpiValue serializeStringKpiValue(KpiValue<String> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setStringVal(kpiValue.getValue()).build();
+    }
+
+    public String deserializeStringKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getStringVal();
+    }
+
+    public Monitoring.KpiValue serializeBooleanKpiValue(KpiValue<Boolean> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setBoolVal(kpiValue.getValue()).build();
+    }
+
+    public boolean deserializeBooleanKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getBoolVal();
+    }
+
+    public Monitoring.KpiValue serializeFloatKpiValue(KpiValue<Float> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setFloatVal(kpiValue.getValue()).build();
+    }
+
+    public float deserializeFloatKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getFloatVal();
+    }
+
+    public Monitoring.KpiValue serializeIntegerKpiValue(KpiValue<Integer> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setIntVal(kpiValue.getValue()).build();
+    }
+
+    public int deserializeIntegerKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getIntVal();
+    }
+
+    public Monitoring.KpiValue serialize(KpiValue<?> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        if (kpiValue.getValue() instanceof Integer) {
+            final var serializedIntegerKpiValue = serializeIntegerKpiValue((KpiValue<Integer>) kpiValue);
+            builder.setIntVal(serializedIntegerKpiValue.getIntVal());
+        }
+        if (kpiValue.getValue() instanceof Float) {
+            final var serializedFloatKpiValue = serializeFloatKpiValue((KpiValue<Float>) kpiValue);
+            builder.setFloatVal(serializedFloatKpiValue.getFloatVal());
+        }
+        if (kpiValue.getValue() instanceof String) {
+            final var serializedStringKpiValue = serializeStringKpiValue((KpiValue<String>) kpiValue);
+            builder.setStringVal(serializedStringKpiValue.getStringVal());
+        }
+        if (kpiValue.getValue() instanceof Boolean) {
+            final var serializedBooleanKpiValue = serializeBooleanKpiValue((KpiValue<Boolean>) kpiValue);
+            builder.setBoolVal(serializedBooleanKpiValue.getBoolVal());
+        }
+
+        return builder.build();
+    }
+
+    public KpiValue deserialize(Monitoring.KpiValue serializedKpiValue) {
+
+        final var typeOfKpiValue = serializedKpiValue.getValueCase();
+
+        switch (typeOfKpiValue) {
+            case INTVAL:
+                final var intValue = deserializeIntegerKpiValue(serializedKpiValue);
+                return new IntegerKpiValue(intValue);
+            case BOOLVAL:
+                final var booleanValue = deserializeBooleanKpiValue(serializedKpiValue);
+                return new BooleanKpiValue(booleanValue);
+            case FLOATVAL:
+                final var floatValue = deserializeFloatKpiValue(serializedKpiValue);
+                return new FloatKpiValue(floatValue);
+            case STRINGVAL:
+                final var stringValue = deserializeStringKpiValue(serializedKpiValue);
+                return new StringKpiValue(stringValue);
+            default:
+            case VALUE_NOT_SET:
+                throw new IllegalStateException("Kpi value not set");
+        }
+    }
+
+    public Monitoring.KpiValueRange serialize(KpiValueRange kpiValueRange) {
+        final var builder = Monitoring.KpiValueRange.newBuilder();
+
+        final var kpiValueMin = kpiValueRange.getKpiMinValue();
+        final var kpiValueMax = kpiValueRange.getKpiMaxValue();
+
+        final var serializedKpiValueMin = serialize(kpiValueMin);
+        final var serializedKpiValueMax = serialize(kpiValueMax);
+
+        builder.setKpiMinValue(serializedKpiValueMin);
+        builder.setKpiMaxValue(serializedKpiValueMax);
+
+        return builder.build();
+    }
+
+    public KpiValueRange deserialize(Monitoring.KpiValueRange serializedKpiValueRange) {
+        final var serializedMinKpiValue = serializedKpiValueRange.getKpiMinValue();
+        final var serializedMaxKpiValue = serializedKpiValueRange.getKpiMaxValue();
+
+        final var minKpiValue = deserialize(serializedMinKpiValue);
+        final var maxKpiValue = deserialize(serializedMaxKpiValue);
+
+        return new KpiValueRange(minKpiValue, maxKpiValue);
+    }
+
+    public AlarmID serializeAlarmId(String alarmId) {
+        final var builder = Monitoring.AlarmID.newBuilder();
+
+        final var serializedAlarmIdUuid = serializeUuid(alarmId);
+        builder.setAlarmId(serializedAlarmIdUuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(AlarmID serializedAlarmId) {
+        final var serializedAlarmIdUuid = serializedAlarmId.getAlarmId();
+
+        return deserialize(serializedAlarmIdUuid);
+    }
+
+    public Monitoring.AlarmDescriptor serialize(AlarmDescriptor alarmDescriptor) {
+        final var builder = Monitoring.AlarmDescriptor.newBuilder();
+
+        final var alarmDescription = alarmDescriptor.getAlarmDescription();
+        final var name = alarmDescriptor.getName();
+        final var kpiId = alarmDescriptor.getKpiId();
+        final var kpiValueRange = alarmDescriptor.getKpiValueRange();
+        final var timestamp = alarmDescriptor.getTimestamp();
+
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serialize(kpiValueRange);
+
+        builder.setAlarmDescription(alarmDescription);
+        builder.setName(name);
+        builder.setKpiId(serializedKpiId);
+        builder.setKpiValueRange(serializedKpiValueRange);
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public AlarmDescriptor deserialize(Monitoring.AlarmDescriptor serializedAlarmDescriptor) {
+
+        final var alarmDescription = serializedAlarmDescriptor.getAlarmDescription();
+        final var name = serializedAlarmDescriptor.getName();
+        final var serializedKpiId = serializedAlarmDescriptor.getKpiId();
+        final var serializedKpiValueRange = serializedAlarmDescriptor.getKpiValueRange();
+        final var timestamp = serializedAlarmDescriptor.getTimestamp();
+
+        final var kpiId = deserialize(serializedKpiId);
+        final var kpiValueRange = deserialize(serializedKpiValueRange);
+
+        return new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
+    }
+
+    public Monitoring.AlarmResponse serialize(AlarmResponse alarmResponse) {
+        final var builder = Monitoring.AlarmResponse.newBuilder();
+
+        final var alarmId = alarmResponse.getAlarmId();
+        final var text = alarmResponse.getText();
+        final var kpiValue = alarmResponse.getKpiValue();
+
+        final var serializedAlarmIdUuid = serializeUuid(alarmId);
+        final var serializedAlarmId =
+                Monitoring.AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build();
+        final var serializedKpiValue = serialize(kpiValue);
+
+        builder.setAlarmId(serializedAlarmId);
+        builder.setText(text);
+        builder.setKpiValue(serializedKpiValue);
+
+        return builder.build();
+    }
+
+    public AlarmResponse deserialize(Monitoring.AlarmResponse serializedAlarmResponse) {
+        final var serializedAlarmId = serializedAlarmResponse.getAlarmId().getAlarmId();
+        final var text = serializedAlarmResponse.getText();
+        final var serializedKpiValue = serializedAlarmResponse.getKpiValue();
+
+        final var alarmId = deserialize(serializedAlarmId);
+        final var kpiValue = deserialize(serializedKpiValue);
+
+        return new AlarmResponse(alarmId, text, kpiValue);
+    }
+
+    public Monitoring.SubsDescriptor serialize(SubsDescriptor subDescriptor) {
+        final var builder = Monitoring.SubsDescriptor.newBuilder();
+
+        final var kpiId = subDescriptor.getKpiId();
+        final var samplingDurationS = subDescriptor.getSamplingDurationS();
+        final var samplingIntervalS = subDescriptor.getSamplingIntervalS();
+        final var startDate = subDescriptor.getStartDate();
+        final var endDate = subDescriptor.getEndDate();
+
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        builder.setKpiId(serializedKpiId);
+        builder.setSamplingDurationS(samplingDurationS);
+        builder.setSamplingIntervalS(samplingIntervalS);
+        builder.setStartDate(startDate);
+        builder.setEndDate(endDate);
+
+        return builder.build();
+    }
+
+    public SubsDescriptor deserialize(Monitoring.SubsDescriptor serializedSubDescriptor) {
+        final var serializedKpiId = serializedSubDescriptor.getKpiId();
+        final var samplingDurationS = serializedSubDescriptor.getSamplingDurationS();
+        final var samplingIntervalS = serializedSubDescriptor.getSamplingIntervalS();
+        final var startDate = serializedSubDescriptor.getStartDate();
+        final var endDate = serializedSubDescriptor.getEndDate();
+
+        final var kpiId = deserialize(serializedKpiId);
+
+        return new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+    }
+
+    public SubscriptionID serializeSubscriptionIdId(String subscriptionId) {
+        final var builder = Monitoring.SubscriptionID.newBuilder();
+
+        final var serializedSubscriptionIdUuid = serializeUuid(subscriptionId);
+        builder.setSubsId(serializedSubscriptionIdUuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(SubscriptionID serializedSubscriptionId) {
+        final var serializedSubscriptionIdUuid = serializedSubscriptionId.getSubsId();
+
+        return deserialize(serializedSubscriptionIdUuid);
+    }
+
+    public PolicyCondition.PolicyRuleCondition serialize(PolicyRuleCondition policyRuleCondition) {
+        final var builder = PolicyCondition.PolicyRuleCondition.newBuilder();
+
+        final var policyRuleConditionKpiId = policyRuleCondition.getKpiId();
+        final var numericalOperator = policyRuleCondition.getNumericalOperator();
+        final var policyRuleConditionKpiValue = policyRuleCondition.getKpiValue();
+
+        final var serializedKpiIdUuid = serializeUuid(policyRuleConditionKpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedNumericalOperator = serialize(numericalOperator);
+        final var serializedPolicyRuleConditionKpiValue = serialize(policyRuleConditionKpiValue);
+
+        builder.setKpiId(serializedKpiId);
+        builder.setNumericalOperator(serializedNumericalOperator);
+        builder.setKpiValue(serializedPolicyRuleConditionKpiValue);
+
+        return builder.build();
+    }
+
+    public PolicyRuleCondition deserialize(
+            PolicyCondition.PolicyRuleCondition serializedPolicyRuleCondition) {
+
+        final var serializedPolicyRuleConditionKpiId =
+                serializedPolicyRuleCondition.getKpiId().getKpiId();
+        final var serializedNumericalOperator = serializedPolicyRuleCondition.getNumericalOperator();
+        final var serializedPolicyRuleConditionKpiValue = serializedPolicyRuleCondition.getKpiValue();
+
+        final var policyRuleConditionKpiId = deserialize(serializedPolicyRuleConditionKpiId);
+        final var numericalOperator = deserialize(serializedNumericalOperator);
+        final var policyRuleConditionKpiValue = deserialize(serializedPolicyRuleConditionKpiValue);
+
+        return new PolicyRuleCondition(
+                policyRuleConditionKpiId, numericalOperator, policyRuleConditionKpiValue);
+    }
+
+    public PolicyAction.PolicyRuleActionEnum serialize(PolicyRuleActionEnum policyRuleActionEnum) {
+        switch (policyRuleActionEnum) {
+            case POLICY_RULE_ACTION_SET_DEVICE_STATUS:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_SET_DEVICE_STATUS;
+            case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE;
+            case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT;
+            case POLICY_RULE_ACTION_NO_ACTION:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION;
+            default:
+                return PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public PolicyRuleActionEnum deserialize(
+            PolicyAction.PolicyRuleActionEnum serializePolicyRuleActionEnum) {
+        switch (serializePolicyRuleActionEnum) {
+            case POLICYRULE_ACTION_SET_DEVICE_STATUS:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS;
+            case POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE;
+            case POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT;
+            case POLICYRULE_ACTION_NO_ACTION:
+            case UNRECOGNIZED:
+            default:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION;
+        }
+    }
+
+    public PolicyAction.PolicyRuleAction serialize(PolicyRuleAction policyRuleAction) {
+        final var builder = PolicyAction.PolicyRuleAction.newBuilder();
+
+        final var policyRuleActionEnum = policyRuleAction.getPolicyRuleActionEnum();
+        final var policyRuleActionParameters = policyRuleAction.getPolicyRuleActionParameters();
+
+        final var serializedPolicyRuleActionEnum = serialize(policyRuleActionEnum);
+
+        builder.setAction(serializedPolicyRuleActionEnum);
+        builder.addAllParameters(policyRuleActionParameters);
+
+        return builder.build();
+    }
+
+    public PolicyRuleAction deserialize(PolicyAction.PolicyRuleAction serializedPolicyRuleAction) {
+        final var serializedPolicyRuleActionEnum = serializedPolicyRuleAction.getAction();
+        final var policyRuleActionParameters = serializedPolicyRuleAction.getParametersList();
+
+        final var policyRuleActionEnum = deserialize(serializedPolicyRuleActionEnum);
+
+        return new PolicyRuleAction(policyRuleActionEnum, policyRuleActionParameters);
+    }
+
+    public PolicyCondition.BooleanOperator serialize(BooleanOperator booleanOperator) {
+        switch (booleanOperator) {
+            case POLICYRULE_CONDITION_BOOLEAN_AND:
+                return PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND;
+            case POLICYRULE_CONDITION_BOOLEAN_OR:
+                return PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR;
+            case POLICYRULE_CONDITION_BOOLEAN_UNDEFINED:
+                return PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+            default:
+                return PolicyCondition.BooleanOperator.UNRECOGNIZED;
+        }
+    }
+
+    public BooleanOperator deserialize(PolicyCondition.BooleanOperator serializedBooleanOperator) {
+        switch (serializedBooleanOperator) {
+            case POLICYRULE_CONDITION_BOOLEAN_OR:
+                return BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR;
+            case POLICYRULE_CONDITION_BOOLEAN_AND:
+                return BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND;
+            case POLICYRULE_CONDITION_BOOLEAN_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+        }
+    }
+
+    public Policy.PolicyRuleBasic serialize(PolicyRuleBasic policyRuleBasic) {
+        final var builder = Policy.PolicyRuleBasic.newBuilder();
+
+        final var policyRuleId = policyRuleBasic.getPolicyRuleId();
+        final var policyRuleState = policyRuleBasic.getPolicyRuleState();
+        final var priority = policyRuleBasic.getPriority();
+        final var policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
+        final var booleanOperator = policyRuleBasic.getBooleanOperator();
+        final var policyRuleActions = policyRuleBasic.getPolicyRuleActions();
+
+        final var serializedPolicyRuleId = serializePolicyRuleId(policyRuleId);
+        final var serializedPolicyRuleState = serialize(policyRuleState);
+        final var serializedPolicyRuleConditions =
+                policyRuleConditions.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedBooleanOperator = serialize(booleanOperator);
+        final var serializedPolicyRuleActions =
+                policyRuleActions.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setPolicyRuleId(serializedPolicyRuleId);
+        builder.setPolicyRuleState(serializedPolicyRuleState);
+        builder.setPriority(priority);
+        builder.addAllConditionList(serializedPolicyRuleConditions);
+        builder.setBooleanOperator(serializedBooleanOperator);
+        builder.addAllActionList(serializedPolicyRuleActions);
+
+        return builder.build();
+    }
+
+    public PolicyRuleBasic deserialize(Policy.PolicyRuleBasic serializedPolicyRuleBasic) {
+        final var serializedPolicyRuleId = serializedPolicyRuleBasic.getPolicyRuleId();
+        final var serializedPolicyRuleState = serializedPolicyRuleBasic.getPolicyRuleState();
+        final var priority = serializedPolicyRuleBasic.getPriority();
+        final var serializedPolicyRuleConditions = serializedPolicyRuleBasic.getConditionListList();
+        final var serializedBooleanOperator = serializedPolicyRuleBasic.getBooleanOperator();
+        final var serializedPolicyRuleActions = serializedPolicyRuleBasic.getActionListList();
+
+        final var policyRuleId = deserialize(serializedPolicyRuleId);
+        final var policyRuleState = deserialize(serializedPolicyRuleState);
+        final var policyRuleConditions =
+                serializedPolicyRuleConditions.stream().map(this::deserialize).collect(Collectors.toList());
+        final var booleanOperator = deserialize(serializedBooleanOperator);
+        final var policyRuleActions =
+                serializedPolicyRuleActions.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new PolicyRuleBasic(
+                policyRuleId,
+                policyRuleState,
+                priority,
+                policyRuleConditions,
+                booleanOperator,
+                policyRuleActions);
+    }
+
+    public Policy.PolicyRuleService serialize(PolicyRuleService policyRuleService) {
+        final var builder = Policy.PolicyRuleService.newBuilder();
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        final var policyRuleServiceId = policyRuleService.getServiceId();
+        final var policyRuleDeviceIds = policyRuleService.getDeviceIds();
+
+        final var serializedPolicyRuleBasic = serialize(policyRuleBasic);
+        final var serializedPolicyRuleServiceId = serialize(policyRuleServiceId);
+        final var serializedPolicyRuleDeviceIds =
+                policyRuleDeviceIds.stream().map(this::serializeDeviceId).collect(Collectors.toList());
+
+        builder.setPolicyRuleBasic(serializedPolicyRuleBasic);
+        builder.setServiceId(serializedPolicyRuleServiceId);
+        builder.addAllDeviceList(serializedPolicyRuleDeviceIds);
+
+        return builder.build();
+    }
+
+    public PolicyRuleService deserialize(Policy.PolicyRuleService serializedPolicyRuleService) {
+        final var serializedPolicyRuleBasic = serializedPolicyRuleService.getPolicyRuleBasic();
+        final var serializedPolicyRuleServiceId = serializedPolicyRuleService.getServiceId();
+        final var serializedPolicyRuleDeviceIds = serializedPolicyRuleService.getDeviceListList();
+
+        final var policyRuleBasic = deserialize(serializedPolicyRuleBasic);
+        final var policyRuleServiceId = deserialize(serializedPolicyRuleServiceId);
+        final var policyRuleDeviceIds =
+                serializedPolicyRuleDeviceIds.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new PolicyRuleService(policyRuleBasic, policyRuleServiceId, policyRuleDeviceIds);
+    }
+
+    public Policy.PolicyRuleDevice serialize(PolicyRuleDevice policyRuleDevice) {
+        final var builder = Policy.PolicyRuleDevice.newBuilder();
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        final var policyRuleDeviceIds = policyRuleDevice.getDeviceIds();
+
+        final var serializedPolicyRuleBasic = serialize(policyRuleBasic);
+        final var serializedPolicyRuleDeviceIds =
+                policyRuleDeviceIds.stream().map(this::serializeDeviceId).collect(Collectors.toList());
+
+        builder.setPolicyRuleBasic(serializedPolicyRuleBasic);
+        builder.addAllDeviceList(serializedPolicyRuleDeviceIds);
+
+        return builder.build();
+    }
+
+    public PolicyRuleDevice deserialize(Policy.PolicyRuleDevice serializedPolicyRuleDevice) {
+        final var serializedPolicyRuleBasic = serializedPolicyRuleDevice.getPolicyRuleBasic();
+        final var serializedPolicyRuleDeviceIds = serializedPolicyRuleDevice.getDeviceListList();
+
+        final var policyRuleBasic = deserialize(serializedPolicyRuleBasic);
+        final var policyRuleDeviceIds =
+                serializedPolicyRuleDeviceIds.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new PolicyRuleDevice(policyRuleBasic, policyRuleDeviceIds);
+    }
+
+    public KpiId serializeKpiId(String kpiId) {
+        final var builder = Monitoring.KpiId.newBuilder();
+
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        builder.setKpiId(serializedKpiIdUuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(KpiId serializedKpiId) {
+        final var serializedKpiIdUuid = serializedKpiId.getKpiId();
+
+        return deserialize(serializedKpiIdUuid);
+    }
+
+    public Monitoring.Kpi serialize(Kpi kpi) {
+        final var builder = Monitoring.Kpi.newBuilder();
+
+        final var kpiId = kpi.getKpiId();
+        final var timestamp = kpi.getTimestamp();
+        final var kpiValue = kpi.getKpiValue();
+
+        final var serializedKpiId = serializeKpiId(kpiId);
+        final var serializedKpiValue = serialize(kpiValue);
+
+        builder.setKpiId(serializedKpiId);
+        builder.setTimestamp(timestamp);
+        builder.setKpiValue(serializedKpiValue);
+
+        return builder.build();
+    }
+
+    public Kpi deserialize(Monitoring.Kpi serializedKpi) {
+
+        final var serializedKpiId = serializedKpi.getKpiId();
+        final var timestamp = serializedKpi.getTimestamp();
+        final var serializedKpiValue = serializedKpi.getKpiValue();
+
+        final var kpiId = deserialize(serializedKpiId);
+        final var kpiValue = deserialize(serializedKpiValue);
+
+        return new Kpi(kpiId, timestamp, kpiValue);
+    }
+
+    public List<Monitoring.Kpi> serialize(List<Kpi> kpis) {
+        List<Monitoring.Kpi> serializedKpis = new ArrayList<>();
+
+        for (Kpi kpi : kpis) {
+            final var serializedKpi = serialize(kpi);
+
+            serializedKpis.add(serializedKpi);
+        }
+        return serializedKpis;
+    }
+
+    public List<Kpi> deserialize(List<Monitoring.Kpi> serializedKpis) {
+        List<Kpi> kpis = new ArrayList<>();
+
+        for (Monitoring.Kpi serializedKpi : serializedKpis) {
+            final var kpi = deserialize(serializedKpi);
+
+            kpis.add(kpi);
+        }
+        return kpis;
+    }
+
+    public Monitoring.KpiDescriptor serialize(KpiDescriptor kpiDescriptor) {
+        final var builder = Monitoring.KpiDescriptor.newBuilder();
+
+        final var kpiDescriptorDescription = kpiDescriptor.getKpiDescription();
+        final var kpiDescriptorKpiSampleType = kpiDescriptor.getKpiSampleType();
+        final var kpiDescriptorDeviceId = kpiDescriptor.getDeviceId();
+        final var kpiDescriptorEndPointId = kpiDescriptor.getEndPointId();
+        final var kpiDescriptorServiceId = kpiDescriptor.getServiceId();
+        final var kpiDescriptorSliceId = kpiDescriptor.getSliceId();
+
+        final var serializedKpiDescriptorKpiSampleType = serialize(kpiDescriptorKpiSampleType);
+        final var serializedKpiDescriptorDeviceId = serializeDeviceId(kpiDescriptorDeviceId);
+        final var serializedKpiDescriptorEndPointId = serialize(kpiDescriptorEndPointId);
+        final var serializedKpiDescriptorServiceId = serialize(kpiDescriptorServiceId);
+        final var serializedKpiDescriptorSliceId = serialize(kpiDescriptorSliceId);
+
+        builder.setKpiDescription(kpiDescriptorDescription);
+        builder.setKpiSampleType(serializedKpiDescriptorKpiSampleType);
+        builder.setDeviceId(serializedKpiDescriptorDeviceId);
+        builder.setEndpointId(serializedKpiDescriptorEndPointId);
+        builder.setServiceId(serializedKpiDescriptorServiceId);
+        builder.setSliceId(serializedKpiDescriptorSliceId);
+
+        return builder.build();
+    }
+
+    public KpiDescriptor deserialize(Monitoring.KpiDescriptor serializedKpiDescriptor) {
+
+        final var serializedKpiDescriptorDescription = serializedKpiDescriptor.getKpiDescription();
+        final var serializedKpiDescriptorKpiSampleType = serializedKpiDescriptor.getKpiSampleType();
+        final var serializedKpiDescriptorDeviceId = serializedKpiDescriptor.getDeviceId();
+        final var serializedKpiDescriptorEndPointId = serializedKpiDescriptor.getEndpointId();
+        final var serializedKpiDescriptorServiceId = serializedKpiDescriptor.getServiceId();
+        final var serializedKpiDescriptorSLiceId = serializedKpiDescriptor.getSliceId();
+
+        final var kpiSampleType = deserialize(serializedKpiDescriptorKpiSampleType);
+        final var deviceId = deserialize(serializedKpiDescriptorDeviceId);
+        final var endPointId = deserialize(serializedKpiDescriptorEndPointId);
+        final var serviceId = deserialize(serializedKpiDescriptorServiceId);
+        final var sliceId = deserialize(serializedKpiDescriptorSLiceId);
+
+        return new KpiDescriptor(
+                serializedKpiDescriptorDescription,
+                kpiSampleType,
+                deviceId,
+                endPointId,
+                serviceId,
+                sliceId);
+    }
+
+    public ContextOuterClass.DeviceConfig serialize(DeviceConfig deviceConfig) {
+        final var builder = ContextOuterClass.DeviceConfig.newBuilder();
+
+        final var serializedConfigRules =
+                deviceConfig.getConfigRules().stream().map(this::serialize).collect(Collectors.toList());
+        builder.addAllConfigRules(serializedConfigRules);
+
+        return builder.build();
+    }
+
+    public DeviceConfig deserialize(ContextOuterClass.DeviceConfig deviceConfig) {
+        final var configRules =
+                deviceConfig.getConfigRulesList().stream()
+                        .map(this::deserialize)
+                        .collect(Collectors.toList());
+
+        return new DeviceConfig(configRules);
+    }
+
+    public ContextOuterClass.DeviceOperationalStatusEnum serialize(DeviceOperationalStatus opStatus) {
+        switch (opStatus) {
+            case ENABLED:
+                return DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED;
+            case DISABLED:
+                return DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED;
+            case UNDEFINED:
+            default:
+                return DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED;
+        }
+    }
+
+    public DeviceOperationalStatus deserialize(
+            ContextOuterClass.DeviceOperationalStatusEnum opStatus) {
+        switch (opStatus) {
+            case DEVICEOPERATIONALSTATUS_ENABLED:
+                return DeviceOperationalStatus.ENABLED;
+            case DEVICEOPERATIONALSTATUS_DISABLED:
+                return DeviceOperationalStatus.DISABLED;
+            case DEVICEOPERATIONALSTATUS_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceOperationalStatus.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.DeviceDriverEnum serialize(DeviceDriverEnum deviceDriverEnum) {
+        switch (deviceDriverEnum) {
+            case OPENCONFIG:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG;
+            case TRANSPORT_API:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API;
+            case P4:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4;
+            case IETF_NETWORK_TOPOLOGY:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
+            case ONF_TR_352:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352;
+            case UNDEFINED:
+            default:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED;
+        }
+    }
+
+    public DeviceDriverEnum deserialize(
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        switch (serializedDeviceDriverEnum) {
+            case DEVICEDRIVER_OPENCONFIG:
+                return DeviceDriverEnum.OPENCONFIG;
+            case DEVICEDRIVER_TRANSPORT_API:
+                return DeviceDriverEnum.TRANSPORT_API;
+            case DEVICEDRIVER_P4:
+                return DeviceDriverEnum.P4;
+            case DEVICEDRIVER_IETF_NETWORK_TOPOLOGY:
+                return DeviceDriverEnum.IETF_NETWORK_TOPOLOGY;
+            case DEVICEDRIVER_ONF_TR_352:
+                return DeviceDriverEnum.ONF_TR_352;
+            case DEVICEDRIVER_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceDriverEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.EndPoint serialize(EndPoint endPoint) {
+        final var builder = ContextOuterClass.EndPoint.newBuilder();
+
+        final var endPointId = endPoint.getEndPointId();
+        final var endPointType = endPoint.getEndPointType();
+        final var kpiSampleTypes = endPoint.getKpiSampleTypes();
+        final var endPointLocation = endPoint.getEndPointLocation();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
+        if (endPointLocation != null) {
+            final var serializedEndPointLocation = serialize(endPointLocation);
+            builder.setEndpointLocation(serializedEndPointLocation);
+        }
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setEndpointType(endPointType);
+        builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
+
+        return builder.build();
+    }
+
+    public EndPoint deserialize(ContextOuterClass.EndPoint serializedEndPoint) {
+        final var serializedEndPointId = serializedEndPoint.getEndpointId();
+        final var endPointType = serializedEndPoint.getEndpointType();
+        final var serializedKpiSampleTypes = serializedEndPoint.getKpiSampleTypesList();
+        final var serializedEndPointLocation = serializedEndPoint.getEndpointLocation();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var kpiSampleTypes =
+                serializedKpiSampleTypes.stream().map(this::deserialize).collect(Collectors.toList());
+
+        if (serializedEndPointLocation.getLocationCase() != LocationCase.LOCATION_NOT_SET) {
+            final var endPointLocation = deserialize(serializedEndPointLocation);
+            return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes)
+                    .location(endPointLocation)
+                    .build();
+        }
+
+        return new EndPoint.EndPointBuilder(endPointId, endPointType, kpiSampleTypes).build();
+    }
+
+    public ContextOuterClass.Device serialize(Device device) {
+        final var builder = ContextOuterClass.Device.newBuilder();
+
+        final var deviceIdUuid = serializeUuid(device.getDeviceId());
+        final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid);
+        final var deviceType = device.getDeviceType();
+        final var deviceConfig = device.getDeviceConfig();
+        final var deviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var deviceDrivers = device.getDeviceDrivers();
+        final var deviceEndPoints = device.getEndPoints();
+
+        final var serializedDeviceConfig = serialize(deviceConfig);
+        final var serializedDeviceOperationalStatus = serialize(deviceOperationalStatus);
+        final var serializedDeviceDrivers =
+                deviceDrivers.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedDeviceEndPoints =
+                deviceEndPoints.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setDeviceId(deviceId);
+        builder.setDeviceType(deviceType);
+        builder.setDeviceConfig(serializedDeviceConfig);
+        builder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        builder.addAllDeviceDrivers(serializedDeviceDrivers);
+        builder.addAllDeviceEndpoints(serializedDeviceEndPoints);
+
+        return builder.build();
+    }
+
+    public Device deserialize(ContextOuterClass.Device device) {
+
+        final var serializedDeviceId = device.getDeviceId();
+        final var deviceType = device.getDeviceType();
+        final var serializedDeviceConfig = device.getDeviceConfig();
+        final var serializedDeviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var serializedDeviceDrivers = device.getDeviceDriversList();
+        final var serializedDeviceEndPoints = device.getDeviceEndpointsList();
+
+        final var deviceId = deserialize(serializedDeviceId);
+        final var deviceConfig = deserialize(serializedDeviceConfig);
+        final var deviceOperationalStatus = deserialize(serializedDeviceOperationalStatus);
+        final var deviceDrivers =
+                serializedDeviceDrivers.stream().map(this::deserialize).collect(Collectors.toList());
+        final var deviceEndPoints =
+                serializedDeviceEndPoints.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new Device(
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus,
+                deviceDrivers,
+                deviceEndPoints);
+    }
+
+    public ContextOuterClass.Empty serializeEmpty(Empty empty) {
+
+        final var builder = ContextOuterClass.Empty.newBuilder();
+
+        return builder.build();
+    }
+
+    public Empty deserializeEmpty(ContextOuterClass.Empty serializedEmpty) {
+        return new Empty();
+    }
+
+    public Uuid serializeUuid(String uuid) {
+        return Uuid.newBuilder().setUuid(uuid).build();
+    }
+
+    public String deserialize(Uuid uuid) {
+        return uuid.getUuid();
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclAction.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..66771968ceb5525558bebfd95c3e13af24b4d2dd
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclAction.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+public class AclAction {
+
+    private final AclForwardActionEnum aclForwardActionEnum;
+    private final AclLogActionEnum aclLogActionEnum;
+
+    public AclAction(AclForwardActionEnum aclForwardActionEnum, AclLogActionEnum aclLogActionEnum) {
+        this.aclForwardActionEnum = aclForwardActionEnum;
+        this.aclLogActionEnum = aclLogActionEnum;
+    }
+
+    public AclForwardActionEnum getAclForwardActionEnum() {
+        return aclForwardActionEnum;
+    }
+
+    public AclLogActionEnum getAclLogActionEnum() {
+        return aclLogActionEnum;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{aclForwardActionEnum:\"%s\", aclLogActionEnum:\"%s\"}",
+                getClass().getSimpleName(), aclForwardActionEnum.toString(), aclLogActionEnum.toString());
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclEntry.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclEntry.java
new file mode 100644
index 0000000000000000000000000000000000000000..a85aff9e6c28b1a63e28d62de22e01e354b47ce3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclEntry.java
@@ -0,0 +1,55 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+public class AclEntry {
+
+    private final int sequenceId;
+    private final String description;
+    private final AclMatch match;
+    private final AclAction action;
+
+    public AclEntry(int sequenceId, String description, AclMatch match, AclAction action) {
+        this.sequenceId = sequenceId;
+        this.description = description;
+        this.match = match;
+        this.action = action;
+    }
+
+    public int getSequenceId() {
+        return sequenceId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public AclMatch getMatch() {
+        return match;
+    }
+
+    public AclAction getAction() {
+        return action;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{sequenceId:\"%d\", description:\"%s\", %s, %s}",
+                getClass().getSimpleName(), sequenceId, description, match, action);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclForwardActionEnum.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclForwardActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..be2a896b48a77543232bdd41685d9d0ed8290711
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclForwardActionEnum.java
@@ -0,0 +1,24 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+public enum AclForwardActionEnum {
+    UNDEFINED,
+    DROP,
+    ACCEPT,
+    REJECT,
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclLogActionEnum.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclLogActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0ff362e7154307f934ed0afbfcfa77adcd49acb
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclLogActionEnum.java
@@ -0,0 +1,23 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+public enum AclLogActionEnum {
+    UNDEFINED,
+    NO_LOG,
+    SYSLOG
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclMatch.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclMatch.java
new file mode 100644
index 0000000000000000000000000000000000000000..89528a58dde8d39c6bc777fe9220dce85c855a65
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclMatch.java
@@ -0,0 +1,95 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+public class AclMatch {
+
+    private final int dscp;
+    private final int protocol;
+    private final String srcAddress;
+    private final String dstAddress;
+    private final int srcPort;
+    private final int dstPort;
+    private final int startMplsLabel;
+    private final int endMplsLabel;
+
+    public AclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        this.dscp = dscp;
+        this.protocol = protocol;
+        this.srcAddress = srcAddress;
+        this.dstAddress = dstAddress;
+        this.srcPort = srcPort;
+        this.dstPort = dstPort;
+        this.startMplsLabel = startMplsLabel;
+        this.endMplsLabel = endMplsLabel;
+    }
+
+    public int getDscp() {
+        return dscp;
+    }
+
+    public int getProtocol() {
+        return protocol;
+    }
+
+    public String getSrcAddress() {
+        return srcAddress;
+    }
+
+    public String getDstAddress() {
+        return dstAddress;
+    }
+
+    public int getSrcPort() {
+        return srcPort;
+    }
+
+    public int getDstPort() {
+        return dstPort;
+    }
+
+    public int getStartMplsLabel() {
+        return startMplsLabel;
+    }
+
+    public int getEndMplsLabel() {
+        return endMplsLabel;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{dscp:\"%d\", protocol:\"%d\", srcAddress:\"%s\", dstAddress:\"%s\", srcPort:\"%d\", dstPort:\"%d\", startMplsLabel:\"%d\", endMplsLabel:\"%d\"}",
+                getClass().getSimpleName(),
+                dscp,
+                protocol,
+                srcAddress,
+                dstAddress,
+                srcPort,
+                dstPort,
+                startMplsLabel,
+                endMplsLabel);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleSet.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..4eec8e7a31fb8bad151f6ad9f7704a8246d78d1e
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleSet.java
@@ -0,0 +1,74 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
+
+public class AclRuleSet {
+
+    private final String name;
+    private final AclRuleTypeEnum type;
+    private final String description;
+    private final String userId;
+    private final List<AclEntry> entries;
+
+    public AclRuleSet(
+            String name,
+            AclRuleTypeEnum type,
+            String description,
+            String userId,
+            List<AclEntry> entries) {
+        this.name = name;
+        this.type = type;
+        this.description = description;
+        this.userId = userId;
+        this.entries = entries;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public AclRuleTypeEnum getType() {
+        return type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public List<AclEntry> getEntries() {
+        return entries;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{name:\"%s\", type:\"%s\", description:\"%s\", userId:\"%s\", [%s]}",
+                getClass().getSimpleName(),
+                name,
+                type.toString(),
+                description,
+                userId,
+                Util.toString(entries));
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleTypeEnum.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleTypeEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..0dc11277140d5d092cbc3d4dd0b23f21ce855e65
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleTypeEnum.java
@@ -0,0 +1,26 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.acl;
+
+public enum AclRuleTypeEnum {
+    UNDEFINED,
+    IPV4,
+    IPV6,
+    L2,
+    MPLS,
+    MIXED
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f1c2446aeeec7e2dc62d8732187255df8c477a1
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
@@ -0,0 +1,38 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context;
+
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.smallrye.mutiny.Uni;
+
+public interface ContextGateway {
+
+    // Context related methods
+    Uni<Service> getService(ServiceId serviceId);
+
+    Uni<ServiceId> setService(Service service);
+
+    Uni<Device> getDevice(String deviceId);
+
+    // Context-policy related methods
+    Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId);
+
+    Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..6185b4e9a334f5b5c24faec348877c352e945511
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
@@ -0,0 +1,99 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context;
+
+import context.MutinyContextServiceGrpc.MutinyContextServiceStub;
+import context_policy.MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub;
+import eu.teraflow.policy.Serializer;
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.quarkus.grpc.GrpcClient;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class ContextGatewayImpl implements ContextGateway {
+
+    @GrpcClient("context")
+    MutinyContextServiceStub streamingDelegateContext;
+
+    // TODO remove client when RPCs declared in context_policy.proto are moved in context.proto
+    //  and use streamingDelegateContext for all methods
+    @GrpcClient("context_policy")
+    MutinyContextPolicyServiceStub streamingDelegateContextPolicy;
+
+    private final Serializer serializer;
+
+    @Inject
+    public ContextGatewayImpl(Serializer serializer) {
+        this.serializer = serializer;
+    }
+
+    @Override
+    public Uni<Service> getService(ServiceId serviceId) {
+
+        final var serializedServiceId = serializer.serialize(serviceId);
+
+        return streamingDelegateContext
+                .getService(serializedServiceId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<ServiceId> setService(Service service) {
+        final var serializedService = serializer.serialize(service);
+
+        return streamingDelegateContext
+                .setService(serializedService)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<Device> getDevice(String deviceId) {
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceId);
+
+        return streamingDelegateContext
+                .getDevice(serializedDeviceId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId) {
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId);
+
+        return streamingDelegateContextPolicy
+                .getPolicyRule(serializedPolicyRuleId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic) {
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+
+        return streamingDelegateContextPolicy
+                .setPolicyRule(serializedPolicyRuleBasic)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
index 4d2b317cb3e76b043f919fa7112147a6bda8697e..133318a05bad7f8a2fd4b7d2ae423e1375d34287 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
@@ -16,4 +16,21 @@
 
 package eu.teraflow.policy.context;
 
-public interface ContextService {}
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.smallrye.mutiny.Uni;
+
+public interface ContextService {
+
+    Uni<Service> getService(ServiceId serviceId);
+
+    Uni<ServiceId> setService(Service service);
+
+    Uni<Device> getDevice(String deviceId);
+
+    Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId);
+
+    Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb5c8d61bd5f73375b531f43bcfb744dc5bf2c20
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
@@ -0,0 +1,61 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context;
+
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class ContextServiceImpl implements ContextService {
+
+    private final ContextGateway contextGateway;
+
+    @Inject
+    public ContextServiceImpl(ContextGateway contextGateway) {
+        this.contextGateway = contextGateway;
+    }
+
+    @Override
+    public Uni<Service> getService(ServiceId serviceId) {
+        return contextGateway.getService(serviceId);
+    }
+
+    @Override
+    public Uni<ServiceId> setService(Service service) {
+        return contextGateway.setService(service);
+    }
+
+    @Override
+    public Uni<Device> getDevice(String deviceId) {
+        return contextGateway.getDevice(deviceId);
+    }
+
+    @Override
+    public Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId) {
+        return contextGateway.getPolicyRule(policyRuleId);
+    }
+
+    @Override
+    public Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic) {
+        return contextGateway.setPolicyRule(policyRuleBasic);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java
index 906acf1a3ff121584321551de6baf260f0bb7cf3..38b2aa29bba6e43c736f0d9abd9b3243c5470d56 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java
@@ -18,32 +18,26 @@ package eu.teraflow.policy.context.model;
 
 public class ConfigRule {
 
-    private final ConfigActionEnum action;
-    private final String resourceKey;
-    private final String resourceValue;
+    private final ConfigActionEnum configActionEnum;
+    private final ConfigRuleType<?> configRuleType;
 
-    public ConfigRule(ConfigActionEnum action, String resourceKey, String resourceValue) {
-        this.action = action;
-        this.resourceKey = resourceKey;
-        this.resourceValue = resourceValue;
+    public ConfigRule(ConfigActionEnum configActionEnum, ConfigRuleType<?> configRuleType) {
+        this.configActionEnum = configActionEnum;
+        this.configRuleType = configRuleType;
     }
 
-    public ConfigActionEnum getAction() {
-        return action;
+    public ConfigActionEnum getConfigActionEnum() {
+        return configActionEnum;
     }
 
-    public String getResourceKey() {
-        return resourceKey;
-    }
-
-    public String getResourceValue() {
-        return resourceValue;
+    public ConfigRuleType getConfigRuleType() {
+        return configRuleType;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{action:\"%s\", resourceKey:\"%s\", resourceValue:\"%s\"}",
-                getClass().getSimpleName(), action.toString(), resourceKey, resourceValue);
+                "%s:{configActionEnum:\"%s\", %s}",
+                getClass().getSimpleName(), configActionEnum.toString(), configRuleType);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleAcl.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab05331c76f7daa178bd748cfb62dd1b7c3e915a
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleAcl.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+import eu.teraflow.policy.acl.AclRuleSet;
+
+public class ConfigRuleAcl {
+
+    private final EndPointId endPointId;
+    private final AclRuleSet ruleSet;
+
+    public ConfigRuleAcl(EndPointId endPointId, AclRuleSet ruleSet) {
+        this.endPointId = endPointId;
+        this.ruleSet = ruleSet;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public AclRuleSet getRuleSet() {
+        return ruleSet;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), endPointId, ruleSet);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleCustom.java
similarity index 68%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java
rename to src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleCustom.java
index d307463d135a95ba65939f6b550bd0f2d9de9dac..0046286179c4c20425bd028ede2465d2604d534f 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleCustom.java
@@ -14,24 +14,18 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.policy.context.model;
 
-public class ConfigRule {
+public class ConfigRuleCustom {
 
-    private final ConfigActionEnum configActionEnum;
     private final String resourceKey;
     private final String resourceValue;
 
-    public ConfigRule(ConfigActionEnum configActionEnum, String resourceKey, String resourceValue) {
-        this.configActionEnum = configActionEnum;
+    public ConfigRuleCustom(String resourceKey, String resourceValue) {
         this.resourceKey = resourceKey;
         this.resourceValue = resourceValue;
     }
 
-    public ConfigActionEnum getConfigActionEnum() {
-        return configActionEnum;
-    }
-
     public String getResourceKey() {
         return resourceKey;
     }
@@ -43,6 +37,7 @@ public class ConfigRule {
     @Override
     public String toString() {
         return String.format(
-                "%s<%s, %s,%s>", getClass().getSimpleName(), configActionEnum, resourceKey, resourceValue);
+                "%s:{resourceKey:\"%s\", resourceValue:\"%s\"}",
+                getClass().getSimpleName(), resourceKey, resourceValue);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleType.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b7daa12893fc75fdb797ec5e20e2300850ec146
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleType.java
@@ -0,0 +1,22 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public interface ConfigRuleType<T> {
+
+    public T getConfigRuleType();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeAcl.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3a93cc7f33f1e60f9d36b6fae333556339298207
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeAcl.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConfigRuleTypeAcl implements ConfigRuleType<ConfigRuleAcl> {
+
+    private final ConfigRuleAcl configRuleAcl;
+
+    public ConfigRuleTypeAcl(ConfigRuleAcl configRuleAcl) {
+        this.configRuleAcl = configRuleAcl;
+    }
+
+    @Override
+    public ConfigRuleAcl getConfigRuleType() {
+        return this.configRuleAcl;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), configRuleAcl);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeCustom.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..c98df91c4027f9ea0089261504ffeeda23d56aea
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeCustom.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConfigRuleTypeCustom implements ConfigRuleType<ConfigRuleCustom> {
+
+    private final ConfigRuleCustom configRuleCustom;
+
+    public ConfigRuleTypeCustom(ConfigRuleCustom configRuleCustom) {
+        this.configRuleCustom = configRuleCustom;
+    }
+
+    @Override
+    public ConfigRuleCustom getConfigRuleType() {
+        return this.configRuleCustom;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), configRuleCustom);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java
index edc5c0df7b789f97475d934bacb87b47792d2b01..a7097bc0bfe9ac72e1dd74ed272559ad8bc3e231 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java
@@ -18,26 +18,18 @@ package eu.teraflow.policy.context.model;
 
 public class Constraint {
 
-    private final String constraintType;
-    private final String constraintValue;
+    private final ConstraintType<?> constraintType;
 
-    public Constraint(String constraintType, String constraintValue) {
+    public Constraint(ConstraintType<?> constraintType) {
         this.constraintType = constraintType;
-        this.constraintValue = constraintValue;
     }
 
-    public String getConstraintType() {
+    public ConstraintType getConstraintType() {
         return constraintType;
     }
 
-    public String getConstraintValue() {
-        return constraintValue;
-    }
-
     @Override
     public String toString() {
-        return String.format(
-                "%s:{constraintType:\"%s\", constraintValue:\"%s\"}",
-                getClass().getSimpleName(), constraintType, constraintValue);
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintType);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintCustom.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fe3443cca7315613784781040d4be7a988daa54
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintCustom.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintCustom {
+
+    private final String constraintType;
+    private final String constraintValue;
+
+    public ConstraintCustom(String constraintType, String constraintValue) {
+        this.constraintType = constraintType;
+        this.constraintValue = constraintValue;
+    }
+
+    public String getConstraintType() {
+        return constraintType;
+    }
+
+    public String getConstraintValue() {
+        return constraintValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{constraintType:\"%s\", constraintValue:\"%s\"}",
+                getClass().getSimpleName(), constraintType, constraintValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintEndPointLocation.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintEndPointLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..12e6ec41c3095529f9807b5449309d966814e3c1
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintEndPointLocation.java
@@ -0,0 +1,41 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintEndPointLocation {
+
+    private final EndPointId endPointId;
+    private final Location location;
+
+    public ConstraintEndPointLocation(EndPointId endPointId, Location location) {
+        this.endPointId = endPointId;
+        this.location = location;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public Location getLocation() {
+        return location;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), endPointId, location);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSchedule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSchedule.java
new file mode 100644
index 0000000000000000000000000000000000000000..b374c022cf85c27f191e3d2607ed13b8078241ba
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSchedule.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintSchedule {
+
+    private final float startTimestamp;
+    private final float durationDays;
+
+    public ConstraintSchedule(float startTimestamp, float durationDays) {
+        this.startTimestamp = startTimestamp;
+        this.durationDays = durationDays;
+    }
+
+    public float getStartTimestamp() {
+        return startTimestamp;
+    }
+
+    public float getDurationDays() {
+        return durationDays;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{startTimestamp:\"%f\", durationDays:\"%f\"}",
+                getClass().getSimpleName(), startTimestamp, durationDays);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaAvailability.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaAvailability.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8a69f3120eb183f5d0b34c73d9653afe1bd7ce3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaAvailability.java
@@ -0,0 +1,43 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintSlaAvailability {
+
+    private final int numDisjointPaths;
+    private final boolean allActive;
+
+    public ConstraintSlaAvailability(int numDisjointPaths, boolean allActive) {
+        this.numDisjointPaths = numDisjointPaths;
+        this.allActive = allActive;
+    }
+
+    public int getNumDisjointPaths() {
+        return numDisjointPaths;
+    }
+
+    public boolean isAllActive() {
+        return allActive;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{numDisjointPaths:%d, allActive:%b}",
+                getClass().getSimpleName(), numDisjointPaths, allActive);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaCapacity.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaCapacity.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d3f9a25b6dd7eae7dd27a846549b325b72b6cd2
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaCapacity.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintSlaCapacity {
+
+    private final float capacityGbps;
+
+    public ConstraintSlaCapacity(float capacityGbps) {
+        this.capacityGbps = capacityGbps;
+    }
+
+    public float getCapacityGbps() {
+        return capacityGbps;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{capacityGbps:\"%f\"}", getClass().getSimpleName(), capacityGbps);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java
new file mode 100644
index 0000000000000000000000000000000000000000..d965e2f420479f6a0922a13f04c67db724b53924
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java
@@ -0,0 +1,40 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
+
+public class ConstraintSlaIsolationLevel {
+
+    private final List<IsolationLevelEnum> isolationLevelEnums;
+
+    public ConstraintSlaIsolationLevel(List<IsolationLevelEnum> isolationLevelEnums) {
+        this.isolationLevelEnums = isolationLevelEnums;
+    }
+
+    public List<IsolationLevelEnum> getIsolationLevelEnums() {
+        return isolationLevelEnums;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{isolationLevelEnums:\"%s\"}",
+                getClass().getSimpleName(), Util.toString(isolationLevelEnums));
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaLatency.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaLatency.java
new file mode 100644
index 0000000000000000000000000000000000000000..0f0c8fe20816394b450bdcd092206b3d7c257b89
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaLatency.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintSlaLatency {
+
+    private final float e2eLatencyMs;
+
+    public ConstraintSlaLatency(float e2eLatencyMs) {
+        this.e2eLatencyMs = e2eLatencyMs;
+    }
+
+    public float getE2eLatencyMs() {
+        return e2eLatencyMs;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{e2eLatencyMs:\"%f\"}", getClass().getSimpleName(), e2eLatencyMs);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintType.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e582859e6858a531e3a2c918deaed4d12d8618e4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintType.java
@@ -0,0 +1,22 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public interface ConstraintType<T> {
+
+    public T getConstraintType();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeCustom.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..94d0052a9ee4faef3c65856f59c5d1b7e8448b99
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeCustom.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeCustom implements ConstraintType<ConstraintCustom> {
+
+    private final ConstraintCustom constraintCustom;
+
+    public ConstraintTypeCustom(ConstraintCustom constraintCustom) {
+        this.constraintCustom = constraintCustom;
+    }
+
+    @Override
+    public ConstraintCustom getConstraintType() {
+        return this.constraintCustom;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintCustom);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeEndPointLocation.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeEndPointLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..197bea58a6c9471a0ff1d50815cbb5ca75db9392
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeEndPointLocation.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeEndPointLocation implements ConstraintType<ConstraintEndPointLocation> {
+    private final ConstraintEndPointLocation constraintEndPointLocation;
+
+    public ConstraintTypeEndPointLocation(ConstraintEndPointLocation constraintEndPointLocation) {
+        this.constraintEndPointLocation = constraintEndPointLocation;
+    }
+
+    @Override
+    public ConstraintEndPointLocation getConstraintType() {
+        return this.constraintEndPointLocation;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintEndPointLocation);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSchedule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSchedule.java
new file mode 100644
index 0000000000000000000000000000000000000000..20169427ac81d5d631cf92faf33b13f06947468c
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSchedule.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeSchedule implements ConstraintType<ConstraintSchedule> {
+    private final ConstraintSchedule constraintSchedule;
+
+    public ConstraintTypeSchedule(ConstraintSchedule constraintSchedule) {
+        this.constraintSchedule = constraintSchedule;
+    }
+
+    @Override
+    public ConstraintSchedule getConstraintType() {
+        return this.constraintSchedule;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSchedule);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaAvailability.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaAvailability.java
new file mode 100644
index 0000000000000000000000000000000000000000..10a60e8dce42a3031cac0a666ee1f4decc9814c8
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaAvailability.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeSlaAvailability implements ConstraintType<ConstraintSlaAvailability> {
+
+    private final ConstraintSlaAvailability constraintSlaAvailability;
+
+    public ConstraintTypeSlaAvailability(ConstraintSlaAvailability constraintSlaAvailability) {
+        this.constraintSlaAvailability = constraintSlaAvailability;
+    }
+
+    @Override
+    public ConstraintSlaAvailability getConstraintType() {
+        return this.constraintSlaAvailability;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaAvailability);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaCapacity.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaCapacity.java
new file mode 100644
index 0000000000000000000000000000000000000000..c43cc5948c31317226cd3233b5c63ab7716222ed
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaCapacity.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeSlaCapacity implements ConstraintType<ConstraintSlaCapacity> {
+
+    private final ConstraintSlaCapacity constraintSlaCapacity;
+
+    public ConstraintTypeSlaCapacity(ConstraintSlaCapacity constraintSlaCapacity) {
+        this.constraintSlaCapacity = constraintSlaCapacity;
+    }
+
+    @Override
+    public ConstraintSlaCapacity getConstraintType() {
+        return this.constraintSlaCapacity;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaCapacity);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaIsolationLevel.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaIsolationLevel.java
new file mode 100644
index 0000000000000000000000000000000000000000..572df6e45a11ccb4f9a6ef55bad26ec512e0e8f3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaIsolationLevel.java
@@ -0,0 +1,37 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeSlaIsolationLevel
+        implements ConstraintType<ConstraintSlaIsolationLevel> {
+
+    private final ConstraintSlaIsolationLevel constraintSlaIsolationLevel;
+
+    public ConstraintTypeSlaIsolationLevel(ConstraintSlaIsolationLevel constraintSlaIsolationLevel) {
+        this.constraintSlaIsolationLevel = constraintSlaIsolationLevel;
+    }
+
+    @Override
+    public ConstraintSlaIsolationLevel getConstraintType() {
+        return this.constraintSlaIsolationLevel;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaIsolationLevel);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaLatency.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaLatency.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ff80daa53283e0ed3f80095d61c55626093fb64
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaLatency.java
@@ -0,0 +1,36 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeSlaLatency implements ConstraintType<ConstraintSlaLatency> {
+
+    private final ConstraintSlaLatency constraintSlaLatency;
+
+    public ConstraintTypeSlaLatency(ConstraintSlaLatency constraintSlaLatency) {
+        this.constraintSlaLatency = constraintSlaLatency;
+    }
+
+    @Override
+    public ConstraintSlaLatency getConstraintType() {
+        return this.constraintSlaLatency;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaLatency);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/Device.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java
similarity index 61%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/Device.java
rename to src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java
index b5dbae62627ca6c9f9dedbeffb6f72fdce0fb74e..b00fd235cbcd2c65606d357646fa41bd10716569 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/Device.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java
@@ -14,7 +14,10 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.policy.context.model;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
 
 public class Device {
 
@@ -22,32 +25,23 @@ public class Device {
     private final String deviceType;
     private DeviceConfig deviceConfig;
     private DeviceOperationalStatus deviceOperationalStatus;
+    private List<DeviceDriverEnum> deviceDrivers;
+    private List<EndPoint> endPoints;
 
     public Device(
             String deviceId,
             String deviceType,
             DeviceConfig deviceConfig,
-            DeviceOperationalStatus deviceOperationalStatus) {
+            DeviceOperationalStatus deviceOperationalStatus,
+            List<DeviceDriverEnum> deviceDrivers,
+            List<EndPoint> endPoints) {
 
         this.deviceId = deviceId;
         this.deviceType = deviceType;
         this.deviceConfig = deviceConfig;
         this.deviceOperationalStatus = deviceOperationalStatus;
-    }
-
-    public Device(
-            String deviceId, String deviceType, DeviceOperationalStatus deviceOperationalStatus) {
-        this.deviceId = deviceId;
-        this.deviceType = deviceType;
-        this.deviceOperationalStatus = deviceOperationalStatus;
-    }
-
-    public boolean isEnabled() {
-        return deviceOperationalStatus == DeviceOperationalStatus.ENABLED;
-    }
-
-    public void enableDevice() {
-        this.deviceOperationalStatus = DeviceOperationalStatus.ENABLED;
+        this.deviceDrivers = deviceDrivers;
+        this.endPoints = endPoints;
     }
 
     public String getDeviceId() {
@@ -66,14 +60,24 @@ public class Device {
         return deviceOperationalStatus;
     }
 
-    public void setDeviceConfiguration(DeviceConfig deviceConfig) {
-        this.deviceConfig = deviceConfig;
+    public List<DeviceDriverEnum> getDeviceDrivers() {
+        return deviceDrivers;
+    }
+
+    public List<EndPoint> getEndPoints() {
+        return endPoints;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s{id=\"%s\", type=\"%s\", operationalStatus=\"%s\", config=%s",
-                getClass().getSimpleName(), deviceId, deviceType, deviceOperationalStatus, deviceConfig);
+                "%s:{deviceId:\"%s\", deviceType:\"%s\", %s, deviceOperationalStatus=\"%s\", [%s], [%s]}",
+                getClass().getSimpleName(),
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus.toString(),
+                Util.toString(deviceDrivers),
+                Util.toString(endPoints));
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceConfig.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6fa702dd66c9ee315856f08cb85910b4da78ce1
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceConfig.java
@@ -0,0 +1,39 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
+
+public class DeviceConfig {
+
+    private final List<ConfigRule> configRules;
+
+    public DeviceConfig(List<ConfigRule> configRules) {
+
+        this.configRules = configRules;
+    }
+
+    public List<ConfigRule> getConfigRules() {
+        return configRules;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{[%s]}", getClass().getSimpleName(), Util.toString(configRules));
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..c98fc1fce545974a8067db2667ec1e519a058ae2
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
@@ -0,0 +1,26 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public enum DeviceDriverEnum {
+    UNDEFINED,
+    OPENCONFIG,
+    TRANSPORT_API,
+    P4,
+    IETF_NETWORK_TOPOLOGY,
+    ONF_TR_352
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceOperationalStatus.java
similarity index 94%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java
rename to src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceOperationalStatus.java
index 163b34704e6629a0df70e4801ad1f4e665bafc19..2efe9052ec96decc74bd1f5a254fd32bca88a9e8 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceOperationalStatus.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.policy.context.model;
 
 public enum DeviceOperationalStatus {
     UNDEFINED,
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java
new file mode 100644
index 0000000000000000000000000000000000000000..d19dd9776e9688999007761e969e5c1b53d37176
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Empty.java
@@ -0,0 +1,24 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class Empty {
+
+    public Empty() {
+        // Empty constructor to represent the Empty rpc message of context service
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java
new file mode 100644
index 0000000000000000000000000000000000000000..b40952b85a39226738e03261be0084acd0155b22
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java
@@ -0,0 +1,105 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+import eu.teraflow.policy.common.Util;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+import java.util.List;
+
+public class EndPoint {
+    private final EndPointId endPointId;
+    private final String endPointType;
+    private final List<KpiSampleType> kpiSampleTypes;
+    private final Location endPointLocation;
+
+    EndPoint(EndPointBuilder builder) {
+        this.endPointId = builder.endPointId;
+        this.endPointType = builder.endPointType;
+        this.kpiSampleTypes = builder.kpiSampleTypes;
+        this.endPointLocation = builder.endPointLocation;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public String getEndPointType() {
+        return endPointType;
+    }
+
+    public List<KpiSampleType> getKpiSampleTypes() {
+        return kpiSampleTypes;
+    }
+
+    public Location getEndPointLocation() {
+        return endPointLocation;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, endPointType:\"%s\", [%s], %s}",
+                getClass().getSimpleName(),
+                endPointId,
+                endPointType,
+                Util.toString(kpiSampleTypes),
+                endPointLocation);
+    }
+
+    public static class EndPointBuilder {
+        private final EndPointId endPointId;
+        private final String endPointType;
+        private final List<KpiSampleType> kpiSampleTypes;
+        private Location endPointLocation;
+
+        public EndPointBuilder(
+                EndPointId endPointId, String endPointType, List<KpiSampleType> kpiSampleTypes) {
+            this.endPointId = endPointId;
+            this.endPointType = endPointType;
+            this.kpiSampleTypes = kpiSampleTypes;
+        }
+
+        public EndPointBuilder location(Location endPointLocation) {
+            this.endPointLocation = endPointLocation;
+            return this;
+        }
+
+        public EndPoint build() {
+            EndPoint endPoint = new EndPoint(this);
+            validateEndPointObject(endPoint);
+            return endPoint;
+        }
+
+        private void validateEndPointObject(EndPoint endPoint) {
+            final var validatedEndPointId = endPoint.getEndPointId();
+            final var validatedEndPointType = endPoint.getEndPointType();
+            final var validatedKpiSampleTypes = endPoint.getKpiSampleTypes();
+
+            if (validatedEndPointId == null) {
+                throw new IllegalStateException("EndPoint ID cannot be null");
+            }
+
+            if (validatedEndPointType == null) {
+                throw new IllegalStateException("EndPoint type cannot be null");
+            }
+
+            if (validatedKpiSampleTypes == null) {
+                throw new IllegalStateException("Kpi sample types cannot be null");
+            }
+        }
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/GpsPosition.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/GpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..f5d7b488490c08a2c049ef301b3ecb3290da4ccc
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/GpsPosition.java
@@ -0,0 +1,42 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class GpsPosition {
+
+    private final float latitude;
+    private final float longitude;
+
+    public GpsPosition(float latitude, float longitude) {
+        this.latitude = latitude;
+        this.longitude = longitude;
+    }
+
+    public float getLatitude() {
+        return latitude;
+    }
+
+    public float getLongitude() {
+        return longitude;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{latitude:\"%f\", longitude:\"%f\"}", getClass().getSimpleName(), latitude, longitude);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/IsolationLevelEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/IsolationLevelEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7c3a12673ea1e12d2a82e3ddf3c6f8f916ee0db
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/IsolationLevelEnum.java
@@ -0,0 +1,29 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public enum IsolationLevelEnum {
+    NO_ISOLATION,
+    PHYSICAL_ISOLATION,
+    LOGICAL_ISOLATION,
+    PROCESS_ISOLATION,
+    PHYSICAL_MEMORY_ISOLATION,
+    PHYSICAL_NETWORK_ISOLATION,
+    VIRTUAL_RESOURCE_ISOLATION,
+    NETWORK_FUNCTIONS_ISOLATION,
+    SERVICE_ISOLATION
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Location.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Location.java
new file mode 100644
index 0000000000000000000000000000000000000000..692e1f01b71d6205d2b6eb9d78dad2b0d3e1bcf4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Location.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class Location {
+
+    private final LocationType<?> locationType;
+
+    public Location(LocationType<?> locationType) {
+        this.locationType = locationType;
+    }
+
+    public LocationType getLocationType() {
+        return locationType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), locationType);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationType.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..49bf9e9af37eff86a1a6717d0bbd8924f01e2d31
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationType.java
@@ -0,0 +1,22 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public interface LocationType<T> {
+
+    public T getLocationType();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeGpsPosition.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeGpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bc44cc4e8c098e1347f43f38f6eafae325da1ee
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeGpsPosition.java
@@ -0,0 +1,19 @@
+package eu.teraflow.policy.context.model;
+
+public class LocationTypeGpsPosition implements LocationType<GpsPosition> {
+    private final GpsPosition gpsPosition;
+
+    public LocationTypeGpsPosition(GpsPosition gpsPosition) {
+        this.gpsPosition = gpsPosition;
+    }
+
+    @Override
+    public GpsPosition getLocationType() {
+        return this.gpsPosition;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), gpsPosition);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeRegion.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeRegion.java
new file mode 100644
index 0000000000000000000000000000000000000000..f857aa507439465dc3c3d7b3e514b8ed1185b532
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeRegion.java
@@ -0,0 +1,35 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class LocationTypeRegion implements LocationType<String> {
+    private final String region;
+
+    public LocationTypeRegion(String region) {
+        this.region = region;
+    }
+
+    @Override
+    public String getLocationType() {
+        return this.region;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{region:\"%s\"}", getClass().getSimpleName(), region);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java
index bbe684e1c79b67559ad0aa1e97059ef2852bbecf..e61179bcfa1dcc1736d81362f434fda01003696a 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java
@@ -27,6 +27,7 @@ public class Service {
     private final List<Constraint> serviceConstraints;
     private final ServiceStatus serviceStatus;
     private final ServiceConfig serviceConfig;
+    private final double timestamp;
 
     public Service(
             ServiceId serviceId,
@@ -34,13 +35,15 @@ public class Service {
             List<EndPointId> serviceEndPointIds,
             List<Constraint> serviceConstraints,
             ServiceStatus serviceStatus,
-            ServiceConfig serviceConfig) {
+            ServiceConfig serviceConfig,
+            double timestamp) {
         this.serviceId = serviceId;
         this.serviceType = serviceType;
         this.serviceEndPointIds = serviceEndPointIds;
         this.serviceConstraints = serviceConstraints;
         this.serviceStatus = serviceStatus;
         this.serviceConfig = serviceConfig;
+        this.timestamp = timestamp;
     }
 
     public ServiceId getServiceId() {
@@ -67,16 +70,21 @@ public class Service {
         return serviceConfig;
     }
 
+    public double getTimestamp() {
+        return timestamp;
+    }
+
     @Override
     public String toString() {
         return String.format(
-                "%s:{%s, serviceType:\"%s\", [%s], [%s], %s, %s}",
+                "%s:{%s, serviceType:\"%s\", [%s], [%s], %s, %s, timestamp:\"%f\"}",
                 getClass().getSimpleName(),
                 serviceId,
                 serviceType.toString(),
                 Util.toString(serviceEndPointIds),
                 Util.toString(serviceConstraints),
                 serviceStatus,
-                serviceConfig);
+                serviceConfig,
+                timestamp);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/SliceId.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/SliceId.java
new file mode 100644
index 0000000000000000000000000000000000000000..57dbe5ff9fac4e88560f8d1ccecf4b2113705afc
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/SliceId.java
@@ -0,0 +1,41 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class SliceId {
+    private final String contextId;
+    private final String id;
+
+    public SliceId(String contextId, String id) {
+        this.contextId = contextId;
+        this.id = id;
+    }
+
+    public String getContextId() {
+        return contextId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{contextId:\"%s\", id:\"%s\"}", getClass().getSimpleName(), contextId, id);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
index 714cc5582cce4ce3e606851acb2f2f2b62614e29..df92c5c1af8a5bf47df980dcea4db1d2309351b4 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/model/PolicyRuleCondition.java
@@ -24,7 +24,8 @@ public class PolicyRuleCondition {
     private final NumericalOperator numericalOperator;
     private final KpiValue<?> kpiValue;
 
-    public PolicyRuleCondition(String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) {
+    public PolicyRuleCondition(
+            String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
         this.kpiId = kpiId;
         this.numericalOperator = numericalOperator;
         this.kpiValue = kpiValue;
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b9849a7649894cb4109fb458dac611e834bd916
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGateway.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring;
+
+import eu.teraflow.policy.context.model.Empty;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+import eu.teraflow.policy.monitoring.model.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+
+public interface MonitoringGateway {
+
+    Uni<String> createKpi(KpiDescriptor kpiDescriptor);
+
+    Uni<KpiDescriptor> getKpiDescriptor(String kpiId);
+
+    Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor);
+
+    Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId);
+
+    Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor);
+
+    Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor);
+
+    Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor);
+
+    Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId);
+
+    Multi<AlarmResponse> getAlarmResponseStream(String alarmId);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0b4e088a9e23387f56d956bed5f6e104a68ea56
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringGatewayImpl.java
@@ -0,0 +1,136 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring;
+
+import eu.teraflow.policy.Serializer;
+import eu.teraflow.policy.context.model.Empty;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+import eu.teraflow.policy.monitoring.model.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import io.quarkus.grpc.GrpcClient;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import monitoring.MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub;
+
+@ApplicationScoped
+public class MonitoringGatewayImpl implements MonitoringGateway {
+
+    @GrpcClient("monitoring")
+    MutinyMonitoringServiceStub streamingDelegateMonitoring;
+
+    private final Serializer serializer;
+
+    @Inject
+    public MonitoringGatewayImpl(Serializer serializer) {
+        this.serializer = serializer;
+    }
+
+    @Override
+    public Uni<String> createKpi(KpiDescriptor kpiDescriptor) {
+        final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor);
+
+        return streamingDelegateMonitoring
+                .createKpi(serializedKpiDescriptor)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<KpiDescriptor> getKpiDescriptor(String kpiId) {
+        final var serializedKpiId = serializer.serializeKpiId(kpiId);
+
+        return streamingDelegateMonitoring
+                .getKpiDescriptor(serializedKpiId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) {
+        final var serializedSubsDescriptor = serializer.serialize(subsDescriptor);
+
+        return streamingDelegateMonitoring
+                .subscribeKpi(serializedSubsDescriptor)
+                .onItem()
+                .transform(kpiList -> serializer.deserialize(kpiList.getKpiListList()));
+    }
+
+    @Override
+    public Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId) {
+        final var serializedSubscriptionId = serializer.serializeSubscriptionIdId(subscriptionId);
+
+        return streamingDelegateMonitoring
+                .getSubsDescriptor(serializedSubscriptionId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor) {
+        final var serializedSubsDescriptor = serializer.serialize(subsDescriptor);
+
+        return streamingDelegateMonitoring
+                .editKpiSubscription(serializedSubsDescriptor)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
+
+    @Override
+    public Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
+
+        return streamingDelegateMonitoring
+                .createKpiAlarm(serializedAlarmDescriptor)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
+
+        return streamingDelegateMonitoring
+                .editKpiAlarm(serializedAlarmDescriptor)
+                .onItem()
+                .transform(serializer::deserializeEmpty);
+    }
+
+    @Override
+    public Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId) {
+        final var serializedAlarmId = serializer.serializeAlarmId(alarmId);
+
+        return streamingDelegateMonitoring
+                .getAlarmDescriptor(serializedAlarmId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) {
+        final var serializedAlarmId = serializer.serializeAlarmId(alarmId);
+
+        return streamingDelegateMonitoring
+                .getAlarmResponseStream(serializedAlarmId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
new file mode 100644
index 0000000000000000000000000000000000000000..276a9d3632655cf684ae4dff0469d477ff15a88e
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringService.java
@@ -0,0 +1,48 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring;
+
+import eu.teraflow.policy.context.model.Empty;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+import eu.teraflow.policy.monitoring.model.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+
+public interface MonitoringService {
+
+    Uni<String> createKpi(KpiDescriptor kpiDescriptor);
+
+    Uni<KpiDescriptor> getKpiDescriptor(String kpiId);
+
+    Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor);
+
+    Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId);
+
+    Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor);
+
+    Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor);
+
+    Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor);
+
+    Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId);
+
+    Multi<AlarmResponse> getAlarmResponseStream(String alarmId);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1e79af757b9866360040b785fd41dd1f0c70cd4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/MonitoringServiceImpl.java
@@ -0,0 +1,85 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring;
+
+import eu.teraflow.policy.context.model.Empty;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+import eu.teraflow.policy.monitoring.model.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import io.smallrye.mutiny.Multi;
+import io.smallrye.mutiny.Uni;
+import java.util.List;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class MonitoringServiceImpl implements MonitoringService {
+
+    private final MonitoringGateway monitoringGateway;
+
+    @Inject
+    public MonitoringServiceImpl(MonitoringGateway monitoringGateway) {
+        this.monitoringGateway = monitoringGateway;
+    }
+
+    @Override
+    public Uni<String> createKpi(KpiDescriptor kpiDescriptor) {
+        return monitoringGateway.createKpi(kpiDescriptor);
+    }
+
+    @Override
+    public Uni<KpiDescriptor> getKpiDescriptor(String kpiId) {
+        return monitoringGateway.getKpiDescriptor(kpiId);
+    }
+
+    @Override
+    public Multi<List<Kpi>> subscribeKpi(SubsDescriptor subsDescriptor) {
+        return monitoringGateway.subscribeKpi(subsDescriptor);
+    }
+
+    @Override
+    public Uni<SubsDescriptor> getSubsDescriptor(String subscriptionId) {
+        return monitoringGateway.getSubsDescriptor(subscriptionId);
+    }
+
+    @Override
+    public Uni<Empty> editKpiSubscription(SubsDescriptor subsDescriptor) {
+        return monitoringGateway.editKpiSubscription(subsDescriptor);
+    }
+
+    @Override
+    public Uni<String> createKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        return monitoringGateway.createKpiAlarm(alarmDescriptor);
+    }
+
+    @Override
+    public Uni<Empty> editKpiAlarm(AlarmDescriptor alarmDescriptor) {
+        return monitoringGateway.editKpiAlarm(alarmDescriptor);
+    }
+
+    @Override
+    public Uni<AlarmDescriptor> getAlarmDescriptor(String alarmId) {
+        return monitoringGateway.getAlarmDescriptor(alarmId);
+    }
+
+    @Override
+    public Multi<AlarmResponse> getAlarmResponseStream(String alarmId) {
+        return monitoringGateway.getAlarmResponseStream(alarmId);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac216ee7cec55efbd7f169679b4e0eebad0f3950
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
@@ -0,0 +1,65 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class AlarmDescriptor {
+    private final String alarmDescription;
+    private final String name;
+    private final String kpiId;
+    private final KpiValueRange kpiValueRange;
+    private final String timestamp;
+
+    public AlarmDescriptor(
+            String alarmDescription,
+            String name,
+            String kpiId,
+            KpiValueRange kpiValueRange,
+            String timestamp) {
+        this.alarmDescription = alarmDescription;
+        this.name = name;
+        this.kpiId = kpiId;
+        this.kpiValueRange = kpiValueRange;
+        this.timestamp = timestamp;
+    }
+
+    public String getAlarmDescription() {
+        return alarmDescription;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getKpiId() {
+        return kpiId;
+    }
+
+    public KpiValueRange getKpiValueRange() {
+        return kpiValueRange;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{alarmDescription:\"%s\", name:\"%s\", kpiId:\"%s\", %s, timestamp:\"%s\"}",
+                getClass().getSimpleName(), alarmDescription, name, kpiId, kpiValueRange, timestamp);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..4730c18d068e2372dffee9507d0d74f9208abae9
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class AlarmResponse {
+
+    private final String alarmId;
+    private final String text;
+    private final KpiValue<?> kpiValue;
+
+    public AlarmResponse(String alarmId, String text, KpiValue<?> kpiValue) {
+        this.alarmId = alarmId;
+        this.text = text;
+        this.kpiValue = kpiValue;
+    }
+
+    public String getAlarmId() {
+        return alarmId;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public KpiValue getKpiValue() {
+        return kpiValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{alarmId:\"%s\", text:\"%s\", %s}",
+                getClass().getSimpleName(), alarmId, text, kpiValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
index 4d84c29d4f32cd2605cf2d20a67b0fa41f801ab1..c042240298fdea49ca1509ac2563e849b16575c5 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
@@ -20,9 +20,9 @@ public class Kpi {
 
     private final String kpiId;
     private final String timestamp;
-    private final String kpiValue;
+    private final KpiValue<?> kpiValue;
 
-    public Kpi(String kpiId, String timestamp, String kpiValue) {
+    public Kpi(String kpiId, String timestamp, KpiValue<?> kpiValue) {
         this.kpiId = kpiId;
         this.timestamp = timestamp;
         this.kpiValue = kpiValue;
@@ -36,14 +36,14 @@ public class Kpi {
         return timestamp;
     }
 
-    public String getKpiValue() {
+    public KpiValue getKpiValue() {
         return kpiValue;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiId:\"%s\", timeStamp:\"%s\", kpiValue:\"%s\"}",
+                "%s:{kpiId:\"%s\", timeStamp:\"%s\", %s}",
                 getClass().getSimpleName(), kpiId, timestamp, kpiValue);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
index 85e09ce2e6f7ac297657e59c7868fbbd750675b8..107c1033549facafc843e182090c0d8cd95e51e5 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
@@ -18,6 +18,7 @@ package eu.teraflow.policy.monitoring.model;
 
 import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.SliceId;
 import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
 
 public class KpiDescriptor {
@@ -27,18 +28,21 @@ public class KpiDescriptor {
     private final String deviceId;
     private final EndPointId endPointId;
     private final ServiceId serviceId;
+    private final SliceId sliceId;
 
     public KpiDescriptor(
             String kpiDescription,
             KpiSampleType kpiSampleType,
             String deviceId,
             EndPointId endPointId,
-            ServiceId serviceId) {
+            ServiceId serviceId,
+            SliceId sliceId) {
         this.kpiDescription = kpiDescription;
         this.kpiSampleType = kpiSampleType;
         this.deviceId = deviceId;
         this.endPointId = endPointId;
         this.serviceId = serviceId;
+        this.sliceId = sliceId;
     }
 
     public String getKpiDescription() {
@@ -61,15 +65,20 @@ public class KpiDescriptor {
         return serviceId;
     }
 
+    public SliceId getSliceId() {
+        return sliceId;
+    }
+
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiDescription:\"%s\", kpiSampleType:\"%s\", deviceId:\"%s\", %s, %s}",
+                "%s:{kpiDescription:\"%s\", kpiSampleType:\"%s\", deviceId:\"%s\", %s, %s, %s}",
                 getClass().getSimpleName(),
                 kpiDescription,
                 kpiSampleType.toString(),
                 deviceId,
                 endPointId,
-                serviceId);
+                serviceId,
+                sliceId);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
new file mode 100644
index 0000000000000000000000000000000000000000..baa7c32c4e59afc47f3c91c8c65691457b4c6df4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
@@ -0,0 +1,41 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class KpiValueRange {
+
+    private final KpiValue<?> kpiMinValue;
+    private final KpiValue<?> kpiMaxValue;
+
+    public KpiValueRange(KpiValue<?> kpiMinValue, KpiValue<?> kpiMaxValue) {
+        this.kpiMinValue = kpiMinValue;
+        this.kpiMaxValue = kpiMaxValue;
+    }
+
+    public KpiValue getKpiMinValue() {
+        return kpiMinValue;
+    }
+
+    public KpiValue getKpiMaxValue() {
+        return kpiMaxValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), kpiMinValue, kpiMaxValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..ced38b3f9f76239ee83687f14587da168dc7c320
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
@@ -0,0 +1,70 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.monitoring.model;
+
+public class SubsDescriptor {
+    private final String kpiId;
+    private final float samplingDurationS;
+    private final float samplingIntervalS;
+    private final String startDate;
+    private final String endDate;
+
+    public SubsDescriptor(
+            String kpiId,
+            float samplingDurationS,
+            float samplingIntervalS,
+            String startDate,
+            String endDate) {
+        this.kpiId = kpiId;
+        this.samplingDurationS = samplingDurationS;
+        this.samplingIntervalS = samplingIntervalS;
+        this.startDate = startDate;
+        this.endDate = endDate;
+    }
+
+    public String getKpiId() {
+        return kpiId;
+    }
+
+    public float getSamplingDurationS() {
+        return samplingDurationS;
+    }
+
+    public float getSamplingIntervalS() {
+        return samplingIntervalS;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startDate:\"%s\", endDate:\"%s\"}",
+                getClass().getSimpleName(),
+                kpiId,
+                samplingDurationS,
+                samplingIntervalS,
+                startDate,
+                endDate);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8b338f4fb8f12bd77749529a92f920c525af5b7
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGateway.java
@@ -0,0 +1,26 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.service;
+
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import io.smallrye.mutiny.Uni;
+
+public interface ServiceGateway {
+
+    Uni<ServiceId> updateService(Service service);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..b69994ce42c81a0b52bec02b34ac5a4572bfe800
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceGatewayImpl.java
@@ -0,0 +1,50 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.service;
+
+import eu.teraflow.policy.Serializer;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import io.quarkus.grpc.GrpcClient;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import service.MutinyServiceServiceGrpc.MutinyServiceServiceStub;
+
+@ApplicationScoped
+public class ServiceGatewayImpl implements ServiceGateway {
+
+    @GrpcClient("service")
+    MutinyServiceServiceStub streamingDelegateService;
+
+    private final Serializer serializer;
+
+    @Inject
+    public ServiceGatewayImpl(Serializer serializer) {
+        this.serializer = serializer;
+    }
+
+    @Override
+    public Uni<ServiceId> updateService(Service service) {
+        final var serializedService = serializer.serialize(service);
+
+        return streamingDelegateService
+                .updateService(serializedService)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6ab0871f0e5f7d8392cc6a3358b584e11911a6a
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceService.java
@@ -0,0 +1,26 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.service;
+
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import io.smallrye.mutiny.Uni;
+
+public interface ServiceService {
+
+    Uni<ServiceId> updateService(Service service);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..921560e0f3d1805d9307d73fa7942ceeb451fb1d
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/service/ServiceServiceImpl.java
@@ -0,0 +1,39 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy.service;
+
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class ServiceServiceImpl implements ServiceService {
+
+    private final ServiceGateway serviceGateway;
+
+    @Inject
+    public ServiceServiceImpl(ServiceGateway serviceGateway) {
+        this.serviceGateway = serviceGateway;
+    }
+
+    @Override
+    public Uni<ServiceId> updateService(Service service) {
+        return serviceGateway.updateService(service);
+    }
+}
diff --git a/src/policy/src/main/proto/context_policy.proto b/src/policy/src/main/proto/context_policy.proto
new file mode 120000
index 0000000000000000000000000000000000000000..d41593ddeb8b8b89878587e4fb389c94394ab340
--- /dev/null
+++ b/src/policy/src/main/proto/context_policy.proto
@@ -0,0 +1 @@
+../../../../../proto/context_policy.proto
\ No newline at end of file
diff --git a/src/policy/src/main/proto/policy-action.proto b/src/policy/src/main/proto/policy-action.proto
deleted file mode 120000
index bb1531bd6607ff005fdaae9d0be27ee65e3515ca..0000000000000000000000000000000000000000
--- a/src/policy/src/main/proto/policy-action.proto
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../proto/policy-action.proto
\ No newline at end of file
diff --git a/src/policy/src/main/proto/policy-condition.proto b/src/policy/src/main/proto/policy-condition.proto
deleted file mode 120000
index f847d8b602252979135ead0876c50a161f049a72..0000000000000000000000000000000000000000
--- a/src/policy/src/main/proto/policy-condition.proto
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../proto/policy-condition.proto
\ No newline at end of file
diff --git a/src/policy/src/main/proto/policy_action.proto b/src/policy/src/main/proto/policy_action.proto
new file mode 120000
index 0000000000000000000000000000000000000000..63dcef3d2c6753f9b732dc7491baa5f449e55eff
--- /dev/null
+++ b/src/policy/src/main/proto/policy_action.proto
@@ -0,0 +1 @@
+../../../../../proto/policy_action.proto
\ No newline at end of file
diff --git a/src/policy/src/main/proto/policy_condition.proto b/src/policy/src/main/proto/policy_condition.proto
new file mode 120000
index 0000000000000000000000000000000000000000..31f7d9d10539de8c0a1bf06cf6393b86ab223c16
--- /dev/null
+++ b/src/policy/src/main/proto/policy_condition.proto
@@ -0,0 +1 @@
+../../../../../proto/policy_condition.proto
\ No newline at end of file
diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..faaa49c3488cfa7e81f696637a8a7a4393d8f824
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java
@@ -0,0 +1,90 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import eu.teraflow.policy.acl.AclAction;
+import eu.teraflow.policy.acl.AclEntry;
+import eu.teraflow.policy.acl.AclForwardActionEnum;
+import eu.teraflow.policy.acl.AclLogActionEnum;
+import eu.teraflow.policy.acl.AclMatch;
+import eu.teraflow.policy.acl.AclRuleSet;
+import eu.teraflow.policy.acl.AclRuleTypeEnum;
+import eu.teraflow.policy.context.model.ConfigRuleAcl;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.TopologyId;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class ConfigRuleTypeTest {
+
+    private AclMatch createAclMatch() {
+
+        return new AclMatch(1, 2, "192.168.3.52", "192.168.4.192", 3224, 3845, 5, 10);
+    }
+
+    private AclAction createAclAction() {
+
+        return new AclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+    }
+
+    private AclEntry createAclEntry(AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+    }
+
+    @Test
+    void shouldExtractConfigRuleCustomFromConfigRuleTypeCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom);
+
+        assertThat(configRuleTypeCustom.getConfigRuleType()).isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldExtractConfigRuleAclFromConfigRuleTypeAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var aclMatch = createAclMatch();
+        final var aclAction = createAclAction();
+        final var aclEntry = createAclEntry(aclMatch, aclAction);
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(expectedConfigRuleAcl);
+
+        assertThat(configRuleTypeAcl.getConfigRuleType()).isEqualTo(expectedConfigRuleAcl);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6389a359974c0accf6b248de5a43367a553c13d9
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
@@ -0,0 +1,136 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import eu.teraflow.policy.context.model.ConstraintCustom;
+import eu.teraflow.policy.context.model.ConstraintEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintSchedule;
+import eu.teraflow.policy.context.model.ConstraintSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintSlaLatency;
+import eu.teraflow.policy.context.model.ConstraintTypeCustom;
+import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintTypeSchedule;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.IsolationLevelEnum;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.TopologyId;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class ConstraintTypeTest {
+
+    @Test
+    void shouldExtractConstraintCustomFromConstraintTypeCustom() {
+        final var constraintType = "constraintType";
+        final var constraintValue = "constraintValue";
+
+        final var expectedConstraintCustom = new ConstraintCustom(constraintType, constraintValue);
+        final var constraintTypeCustom = new ConstraintTypeCustom(expectedConstraintCustom);
+
+        assertThat(constraintTypeCustom.getConstraintType()).isEqualTo(expectedConstraintCustom);
+    }
+
+    @Test
+    void shouldExtractConstraintEndPointLocationFromConstraintTypeEndPointLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var expectedConstraintEndPointLocation =
+                new ConstraintEndPointLocation(endPointId, location);
+        final var constraintTypeEndPointLocation =
+                new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation);
+
+        assertThat(constraintTypeEndPointLocation.getConstraintType())
+                .isEqualTo(expectedConstraintEndPointLocation);
+    }
+
+    @Test
+    void shouldExtractConstraintScheduleFromConstraintTypeSchedule() {
+        final var startTimestamp = 4.7f;
+        final var durationDays = 97.4f;
+
+        final var expectedConstraintSchedule = new ConstraintSchedule(startTimestamp, durationDays);
+        final var constraintTypeSchedule = new ConstraintTypeSchedule(expectedConstraintSchedule);
+
+        assertThat(constraintTypeSchedule.getConstraintType()).isEqualTo(expectedConstraintSchedule);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaAvailabilityFromConstraintTypeSlaAvailability() {
+        final var numDisjointPaths = 88;
+        final var allActive = false;
+
+        final var expectedConstraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisjointPaths, allActive);
+        final var constraintTypeSlaAvailability =
+                new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability);
+
+        assertThat(constraintTypeSlaAvailability.getConstraintType())
+                .isEqualTo(expectedConstraintSlaAvailability);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaCapacityFromConstraintTypeSlaCapacity() {
+        final var capacityGbps = 0.2f;
+
+        final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+        final var constraintTypeSlaCapacity =
+                new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity);
+
+        assertThat(constraintTypeSlaCapacity.getConstraintType())
+                .isEqualTo(expectedConstraintSlaCapacity);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaIsolationLevelFromConstraintTypeSlaIsolationLevel() {
+        final var expectedConstraintSlaIsolationLevel =
+                new ConstraintSlaIsolationLevel(
+                        List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.LOGICAL_ISOLATION));
+        final var constraintTypeSlaIsolationLevel =
+                new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel);
+
+        assertThat(constraintTypeSlaIsolationLevel.getConstraintType())
+                .isEqualTo(expectedConstraintSlaIsolationLevel);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaLatencyFromConstraintTypeSlaLatency() {
+        final var capacityGbps = 0.2f;
+
+        final var expectedConstraintSlaLatency = new ConstraintSlaLatency(capacityGbps);
+        final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(expectedConstraintSlaLatency);
+
+        assertThat(constraintTypeSlaLatency.getConstraintType())
+                .isEqualTo(expectedConstraintSlaLatency);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..4c113dc95fda5160959505bfc90c02c4bd39acf7
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/EndPointCreationTest.java
@@ -0,0 +1,124 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import eu.teraflow.policy.context.model.EndPoint;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class EndPointCreationTest {
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllAvailableFields() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedLocationType = new LocationTypeRegion("ATH");
+        final var expectedEndPointLocation = new Location(expectedLocationType);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .location(expectedEndPointLocation)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+        assertThat(expectedEndPoint.getEndPointLocation()).isEqualTo(expectedEndPointLocation);
+    }
+
+    @Test
+    void shouldCreateEndPointObjectGivenAllFieldsExceptFromLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedEndPoint =
+                new EndPoint.EndPointBuilder(
+                                expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .build();
+
+        assertThat(expectedEndPoint.getEndPointId()).isEqualTo(expectedEndPointId);
+        assertThat(expectedEndPoint.getEndPointType()).isEqualTo(expectedEndPointType);
+        assertThat(expectedEndPoint.getKpiSampleTypes()).isEqualTo(expectedKpiSampleTypes);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointId() {
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(null, expectedEndPointType, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingEndPointType() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, null, expectedKpiSampleTypes);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringCreationOfEndPointObjectUponMissingKpiSampleTypes() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+
+        final var endPoint =
+                new EndPoint.EndPointBuilder(expectedEndPointId, expectedEndPointType, null);
+
+        assertThatExceptionOfType(IllegalStateException.class).isThrownBy(endPoint::build);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d89d62c63486cf571f2606786b805abdc066204c
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java
@@ -0,0 +1,49 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import eu.teraflow.policy.context.model.GpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeGpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class LocationTypeTest {
+
+    @Test
+    void shouldExtractRegionFromLocationTypeRegion() {
+        final var expectedRegion = "ATH";
+
+        final var locationTypeRegion = new LocationTypeRegion(expectedRegion);
+
+        assertThat(locationTypeRegion.getLocationType()).isEqualTo(expectedRegion);
+    }
+
+    @Test
+    void shouldExtractLocationGpsPositionFromLocationTypeGpsPosition() {
+        final var latitude = 3.99f;
+        final var longitude = 77.32f;
+
+        final var expectedLocationGpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(expectedLocationGpsPosition);
+
+        assertThat(locationTypeGpsPosition.getLocationType()).isEqualTo(expectedLocationGpsPosition);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
index bf1af532f06accf9c0410548ad7f4aa85757dbb1..7e3044c1d2212d6bf8726c55673ff84e5d174f4f 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/PolicyServiceTest.java
@@ -19,18 +19,30 @@ package eu.teraflow.policy;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import context.ContextOuterClass;
+import context.ContextOuterClass.Uuid;
+import eu.teraflow.policy.monitoring.model.FloatKpiValue;
+import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
 import io.quarkus.grpc.GrpcClient;
 import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import javax.inject.Inject;
+import monitoring.Monitoring.KpiId;
 import org.jboss.logging.Logger;
 import org.junit.jupiter.api.Test;
 import policy.Policy;
 import policy.Policy.PolicyRuleBasic;
 import policy.Policy.RuleState;
+import policy.PolicyAction;
+import policy.PolicyAction.PolicyRuleActionEnum;
+import policy.PolicyCondition;
+import policy.PolicyCondition.BooleanOperator;
+import policy.PolicyCondition.NumericalOperator;
+import policy.PolicyCondition.PolicyRuleCondition;
 import policy.PolicyService;
 
 @QuarkusTest
@@ -38,16 +50,84 @@ class PolicyServiceTest {
     private static final Logger LOGGER = Logger.getLogger(PolicyServiceTest.class);
 
     @GrpcClient PolicyService client;
+    private final Serializer serializer;
+
+    @Inject
+    PolicyServiceTest(Serializer serializer) {
+        this.serializer = serializer;
+    }
+
+    private PolicyRuleBasic createPolicyRuleBasic() {
+        final var expectedPolicyRuleIdUuid =
+                serializer.serializeUuid("571eabc1-0f59-48da-b608-c45876c3fa8a");
+
+        final var expectedPolicyRuleId =
+                Policy.PolicyRuleId.newBuilder().setUuid(expectedPolicyRuleIdUuid).build();
+
+        final var expectedPolicyRuleState =
+                Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_VALIDATED).build();
+
+        final var expectedFirstKpiValue = new IntegerKpiValue(22);
+        final var expectedSecondKpiValue = new FloatKpiValue(69.1f);
+
+        final var serializedExpectedFirstKpiValue = serializer.serialize(expectedFirstKpiValue);
+        final var serializedExpectedSecondKpiValue = serializer.serialize(expectedSecondKpiValue);
+
+        final var firstExpectedPolicyRuleCondition =
+                PolicyRuleCondition.newBuilder()
+                        .setKpiId(
+                                KpiId.newBuilder()
+                                        .setKpiId(
+                                                Uuid.newBuilder().setUuid("79e49ba3-a7b4-4b4b-8aaa-28b05c6f888e").build()))
+                        .setNumericalOperator(NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL)
+                        .setKpiValue(serializedExpectedFirstKpiValue)
+                        .build();
+
+        final var secondExpectedPolicyRuleCondition =
+                PolicyCondition.PolicyRuleCondition.newBuilder()
+                        .setKpiId(
+                                KpiId.newBuilder()
+                                        .setKpiId(
+                                                Uuid.newBuilder().setUuid("eae900e5-2703-467d-82f2-97aae8b55c15").build()))
+                        .setNumericalOperator(NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN)
+                        .setKpiValue(serializedExpectedSecondKpiValue)
+                        .build();
+
+        final var expectedPolicyRuleConditions =
+                List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition);
+
+        final var firstExpectedPolicyRuleAction =
+                PolicyAction.PolicyRuleAction.newBuilder()
+                        .setAction(PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE)
+                        .addAllParameters(List.of("parameter1", "parameter2"))
+                        .build();
+
+        final var secondExpectedPolicyRuleAction =
+                PolicyAction.PolicyRuleAction.newBuilder()
+                        .setAction(PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT)
+                        .addAllParameters(List.of("parameter3", "parameter4"))
+                        .build();
+
+        final var expectedPolicyRuleActions =
+                List.of(firstExpectedPolicyRuleAction, secondExpectedPolicyRuleAction);
+
+        return PolicyRuleBasic.newBuilder()
+                .setPolicyRuleId(expectedPolicyRuleId)
+                .setPolicyRuleState(expectedPolicyRuleState)
+                .addAllConditionList(expectedPolicyRuleConditions)
+                .setBooleanOperator(BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR)
+                .addAllActionList(expectedPolicyRuleActions)
+                .build();
+    }
 
     @Test
     void shouldAddPolicyService() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
 
-        final var expectedPolicyRuleState =
-                Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_ACTIVE).build();
+        final var policyRuleBasic = createPolicyRuleBasic();
+
+        final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
 
-        final var policyRuleBasic =
-                PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build();
         final var policyRuleService =
                 Policy.PolicyRuleService.newBuilder().setPolicyRuleBasic(policyRuleBasic).build();
 
@@ -64,11 +144,9 @@ class PolicyServiceTest {
     void shouldAddPolicyDevice() throws ExecutionException, InterruptedException, TimeoutException {
         CompletableFuture<String> message = new CompletableFuture<>();
 
-        final var expectedPolicyRuleState =
-                Policy.PolicyRuleState.newBuilder().setPolicyRuleState(RuleState.POLICY_EFFECTIVE).build();
+        final var policyRuleBasic = createPolicyRuleBasic();
+        final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
 
-        final var policyRuleBasic =
-                PolicyRuleBasic.newBuilder().setPolicyRuleState(expectedPolicyRuleState).build();
         final var policyRuleDevice =
                 Policy.PolicyRuleDevice.newBuilder().setPolicyRuleBasic(policyRuleBasic).build();
 
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..755dc08d8ad93319a96022809af3ca780adf22f7
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -0,0 +1,3789 @@
+/*
+* Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*provideKpiValueRanges
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package eu.teraflow.policy;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
+import acl.Acl;
+import context.ContextOuterClass;
+import context.ContextOuterClass.ContextId;
+import context.ContextOuterClass.DeviceId;
+import context.ContextOuterClass.DeviceOperationalStatusEnum;
+import context.ContextOuterClass.Uuid;
+import eu.teraflow.policy.acl.AclAction;
+import eu.teraflow.policy.acl.AclEntry;
+import eu.teraflow.policy.acl.AclForwardActionEnum;
+import eu.teraflow.policy.acl.AclLogActionEnum;
+import eu.teraflow.policy.acl.AclMatch;
+import eu.teraflow.policy.acl.AclRuleSet;
+import eu.teraflow.policy.acl.AclRuleTypeEnum;
+import eu.teraflow.policy.context.model.ConfigActionEnum;
+import eu.teraflow.policy.context.model.ConfigRule;
+import eu.teraflow.policy.context.model.ConfigRuleAcl;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.Constraint;
+import eu.teraflow.policy.context.model.ConstraintCustom;
+import eu.teraflow.policy.context.model.ConstraintEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintSchedule;
+import eu.teraflow.policy.context.model.ConstraintSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintSlaLatency;
+import eu.teraflow.policy.context.model.ConstraintTypeCustom;
+import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintTypeSchedule;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency;
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.DeviceConfig;
+import eu.teraflow.policy.context.model.DeviceDriverEnum;
+import eu.teraflow.policy.context.model.DeviceOperationalStatus;
+import eu.teraflow.policy.context.model.Empty;
+import eu.teraflow.policy.context.model.EndPoint.EndPointBuilder;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Event;
+import eu.teraflow.policy.context.model.EventTypeEnum;
+import eu.teraflow.policy.context.model.GpsPosition;
+import eu.teraflow.policy.context.model.IsolationLevelEnum;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeGpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceConfig;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.ServiceStatus;
+import eu.teraflow.policy.context.model.ServiceStatusEnum;
+import eu.teraflow.policy.context.model.ServiceTypeEnum;
+import eu.teraflow.policy.context.model.SliceId;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+import eu.teraflow.policy.model.BooleanOperator;
+import eu.teraflow.policy.model.NumericalOperator;
+import eu.teraflow.policy.model.PolicyRuleAction;
+import eu.teraflow.policy.model.PolicyRuleActionEnum;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import eu.teraflow.policy.model.PolicyRuleCondition;
+import eu.teraflow.policy.model.PolicyRuleDevice;
+import eu.teraflow.policy.model.PolicyRuleService;
+import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+import eu.teraflow.policy.monitoring.model.BooleanKpiValue;
+import eu.teraflow.policy.monitoring.model.FloatKpiValue;
+import eu.teraflow.policy.monitoring.model.IntegerKpiValue;
+import eu.teraflow.policy.monitoring.model.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValueRange;
+import eu.teraflow.policy.monitoring.model.StringKpiValue;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.inject.Inject;
+import kpi_sample_types.KpiSampleTypes;
+import monitoring.Monitoring;
+import monitoring.Monitoring.AlarmID;
+import monitoring.Monitoring.KpiId;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import policy.Policy;
+import policy.Policy.PolicyRuleId;
+import policy.PolicyAction;
+import policy.PolicyCondition;
+
+@QuarkusTest
+class SerializerTest {
+    @Inject Serializer serializer;
+
+    private AclMatch createAclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    private AclAction createAclAction(
+            AclForwardActionEnum forwardActionEnum, AclLogActionEnum logActionEnum) {
+
+        return new AclAction(forwardActionEnum, logActionEnum);
+    }
+
+    private AclEntry createAclEntry(
+            int sequenceId, String description, AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
+    private PolicyRuleBasic createPolicyRuleBasic() {
+        final var expectedPolicyRuleId = "expectedPolicyRuleId";
+        final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+        final var expectedPriority = 3;
+
+        final var firstKpiValue = new IntegerKpiValue(22);
+        final var secondKpiValue = new FloatKpiValue(69.1f);
+
+        final var firstExpectedPolicyRuleCondition =
+                new PolicyRuleCondition(
+                        "firstExpectedPolicyRuleConditionVariable",
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                        firstKpiValue);
+        final var secondExpectedPolicyRuleCondition =
+                new PolicyRuleCondition(
+                        "secondExpectedPolicyRuleConditionVariable",
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL,
+                        secondKpiValue);
+
+        final var expectedPolicyRuleConditions =
+                List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition);
+
+        final var expectedBooleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR;
+
+        final var firstExpectedPolicyRuleAction =
+                new PolicyRuleAction(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
+                        List.of("parameter1", "parameter2"));
+
+        final var secondExpectedPolicyRuleAction =
+                new PolicyRuleAction(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
+                        List.of("parameter3", "parameter4"));
+
+        final var expectedPolicyRuleActions =
+                List.of(firstExpectedPolicyRuleAction, secondExpectedPolicyRuleAction);
+
+        return new PolicyRuleBasic(
+                expectedPolicyRuleId,
+                expectedPolicyRuleState,
+                expectedPriority,
+                expectedPolicyRuleConditions,
+                expectedBooleanOperator,
+                expectedPolicyRuleActions);
+    }
+
+    private ConfigRule createConfigRule() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+        return new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl);
+    }
+
+    @Test
+    void shouldSerializeDeviceId() {
+        final var deviceId = "deviceId";
+
+        final var deviceIdUuid = serializer.serializeUuid(deviceId);
+        final var expectedDeviceId =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceId);
+
+        assertThat(serializedDeviceId).usingRecursiveComparison().isEqualTo(expectedDeviceId);
+    }
+
+    @Test
+    void shouldDeserializeDeviceId() {
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var serializedDeviceIdUuid = serializer.serializeUuid(expectedDeviceId);
+        final var serializedDeviceId =
+                DeviceId.newBuilder().setDeviceUuid(serializedDeviceIdUuid).build();
+
+        final var deviceId = serializer.deserialize(serializedDeviceId);
+
+        assertThat(deviceId).isEqualTo(expectedDeviceId);
+    }
+
+    @Test
+    void shouldSerializeContextId() {
+        final var contextId = "contextId";
+
+        final var contextIdUuid = serializer.serializeUuid(contextId);
+
+        final var expectedContextId =
+                ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build();
+
+        final var serializedContextId = serializer.serializeContextId(contextId);
+
+        assertThat(serializedContextId).usingRecursiveComparison().isEqualTo(expectedContextId);
+    }
+
+    @Test
+    void shouldDeserializeContextId() {
+        final var expectedContextId = "expectedContextId";
+
+        final var serializedContextIdUuid = serializer.serializeUuid(expectedContextId);
+        final var serializedContextId =
+                ContextId.newBuilder().setContextUuid(serializedContextIdUuid).build();
+
+        final var contextId = serializer.deserialize(serializedContextId);
+
+        assertThat(contextId).isEqualTo(expectedContextId);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleId() {
+        final var policyRuleId = "policyRuleId";
+
+        final var policyRuleIdUuid = serializer.serializeUuid(policyRuleId);
+        final var expectedPolicyRuleId =
+                Policy.PolicyRuleId.newBuilder().setUuid(policyRuleIdUuid).build();
+
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId);
+
+        assertThat(serializedPolicyRuleId).usingRecursiveComparison().isEqualTo(expectedPolicyRuleId);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleId() {
+        final var expectedPolicyRuleId = "expectedPolicyRuleId";
+
+        final var serializedPolicyRuleIdUuid = serializer.serializeUuid(expectedPolicyRuleId);
+        final var serializedPolicyRuleId =
+                PolicyRuleId.newBuilder().setUuid(serializedPolicyRuleIdUuid).build();
+
+        final var policyRuleId = serializer.deserialize(serializedPolicyRuleId);
+
+        assertThat(policyRuleId).isEqualTo(expectedPolicyRuleId);
+    }
+
+    @Test
+    void shouldSerializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+        final var topologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedContextId = serializer.serializeContextId(expectedContextId);
+        final var serializedIdUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedIdUuid)
+                        .build();
+
+        final var serializedTopologyId = serializer.serialize(topologyId);
+
+        assertThat(serializedTopologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    @Test
+    void shouldDeserializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+
+        final var expectedTopologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var topologyId = serializer.deserialize(serializedTopologyId);
+
+        assertThat(topologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    private static Stream<Arguments> provideConfigActionEnum() {
+        return Stream.of(
+                Arguments.of(ConfigActionEnum.SET, ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET),
+                Arguments.of(
+                        ConfigActionEnum.DELETE, ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE),
+                Arguments.of(
+                        ConfigActionEnum.UNDEFINED, ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideConfigActionEnum")
+    void shouldSerializeConfigActionEnum(
+            ConfigActionEnum configActionEnum,
+            ContextOuterClass.ConfigActionEnum expectedConfigActionEnum) {
+        final var serializedType = serializer.serialize(configActionEnum);
+        assertThat(serializedType.getNumber()).isEqualTo(expectedConfigActionEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideConfigActionEnum")
+    void shouldDeserializeConfigActionEnum(
+            ConfigActionEnum expectedConfigActionEnum,
+            ContextOuterClass.ConfigActionEnum serializedConfigActionEnum) {
+
+        final var configActionEnum = serializer.deserialize(serializedConfigActionEnum);
+
+        assertThat(configActionEnum).isEqualTo(expectedConfigActionEnum);
+    }
+
+    private static Stream<Arguments> provideAclRuleTypeEnum() {
+        return Stream.of(
+                Arguments.of(AclRuleTypeEnum.IPV4, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4),
+                Arguments.of(AclRuleTypeEnum.IPV6, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6),
+                Arguments.of(AclRuleTypeEnum.L2, Acl.AclRuleTypeEnum.ACLRULETYPE_L2),
+                Arguments.of(AclRuleTypeEnum.MPLS, Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS),
+                Arguments.of(AclRuleTypeEnum.MIXED, Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED),
+                Arguments.of(AclRuleTypeEnum.UNDEFINED, Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldSerializeAclRuleTypeEnum(
+            AclRuleTypeEnum aclRuleTypeEnum, Acl.AclRuleTypeEnum expectedAclRuleTypeEnum) {
+        final var serializedAclRuleTypeEnum = serializer.serialize(aclRuleTypeEnum);
+        assertThat(serializedAclRuleTypeEnum.getNumber())
+                .isEqualTo(expectedAclRuleTypeEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldDeserializeAclRuleTypeEnum(
+            AclRuleTypeEnum expectedAclRuleTypeEnum, Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        final var aclRuleTypeEnum = serializer.deserialize(serializedAclRuleTypeEnum);
+        assertThat(aclRuleTypeEnum).isEqualTo(expectedAclRuleTypeEnum);
+    }
+
+    private static Stream<Arguments> provideAclForwardActionEnum() {
+        return Stream.of(
+                Arguments.of(AclForwardActionEnum.DROP, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP),
+                Arguments.of(
+                        AclForwardActionEnum.ACCEPT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT),
+                Arguments.of(
+                        AclForwardActionEnum.REJECT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT),
+                Arguments.of(
+                        AclForwardActionEnum.UNDEFINED,
+                        Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldSerializeAclForwardActionEnum(
+            AclForwardActionEnum aclForwardActionEnum,
+            Acl.AclForwardActionEnum expectedAclForwardActionEnum) {
+        final var serializedAclForwardActionEnum = serializer.serialize(aclForwardActionEnum);
+        assertThat(serializedAclForwardActionEnum.getNumber())
+                .isEqualTo(expectedAclForwardActionEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldDeserializeAclForwardActionEnum(
+            AclForwardActionEnum expectedAclForwardActionEnum,
+            Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        final var aclForwardActionEnum = serializer.deserialize(serializedAclForwardActionEnum);
+        assertThat(aclForwardActionEnum).isEqualTo(expectedAclForwardActionEnum);
+    }
+
+    private static Stream<Arguments> provideAclLogActionEnum() {
+        return Stream.of(
+                Arguments.of(AclLogActionEnum.NO_LOG, Acl.AclLogActionEnum.ACLLOGACTION_NOLOG),
+                Arguments.of(AclLogActionEnum.SYSLOG, Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG),
+                Arguments.of(AclLogActionEnum.UNDEFINED, Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldSerializeAclLogActionEnum(
+            AclLogActionEnum aclLogActionEnum, Acl.AclLogActionEnum expectedAclLogActionEnum) {
+        final var serializedAclLogActionEnum = serializer.serialize(aclLogActionEnum);
+        assertThat(serializedAclLogActionEnum.getNumber())
+                .isEqualTo(expectedAclLogActionEnum.getNumber());
+    }
+
+    @Test
+    void shouldSerializeAclAction() {
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        assertThat(serializedAclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldDeserializeAclAction() {
+        final var expectedAclAction =
+                createAclAction(AclForwardActionEnum.DROP, AclLogActionEnum.NO_LOG);
+
+        final var serializedAclAction = serializer.serialize(expectedAclAction);
+        final var aclAction = serializer.deserialize(serializedAclAction);
+
+        assertThat(aclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldSerializeAclMatch() {
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+
+        assertThat(serializedAclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldDeserializeAclMatch() {
+        final var expectedAclMatch = createAclMatch(7, 2, "127.0.0.5", "127.0.0.6", 32456, 3123, 5, 10);
+
+        final var serializedAclMatch = serializer.serialize(expectedAclMatch);
+        final var aclMatch = serializer.deserialize(serializedAclMatch);
+
+        assertThat(aclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldSerializeAclEntry() {
+        final var sequenceId = 1;
+        final var description = "aclEntryDescription";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        final var expectedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(sequenceId)
+                        .setDescription(description)
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+
+        assertThat(serializedAclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldDeserializeAclEntry() {
+        final var sequenceId = 7;
+        final var description = "aclEntryDescriptor";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var expectedAclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclEntry = serializer.serialize(expectedAclEntry);
+        final var aclEntry = serializer.deserialize(serializedAclEntry);
+
+        assertThat(aclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldSerializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+        final var serializedAclEntries = List.of(serializedAclEntry);
+
+        final var expectedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName(aclRuleSetName)
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED)
+                        .setDescription(aclRuleSetDescription)
+                        .setUserId(aclRuleSetUserId)
+                        .addAllEntries(serializedAclEntries)
+                        .build();
+
+        final var serializedAclRuleset = serializer.serialize(aclRuleSet);
+
+        assertThat(serializedAclRuleset).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @Test
+    void shouldDeserializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var expectedAclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet = serializer.serialize(expectedAclRuleSet);
+        final var aclRuleSet = serializer.deserialize(serializedAclRuleSet);
+
+        assertThat(aclRuleSet).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldDeserializeAclLogActionEnum(
+            AclLogActionEnum expectedAclLogActionEnum, Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        final var aclLogActionEnum = serializer.deserialize(serializedAclLogActionEnum);
+        assertThat(aclLogActionEnum).isEqualTo(expectedAclLogActionEnum);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedAclRuleSet = serializer.serialize(aclRuleSet);
+
+        final var expectedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
+
+        final var serializedConfigRuleAcl = serializer.serialize(configRuleAcl);
+
+        assertThat(serializedConfigRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedConfigRuleAcl = serializer.serialize(expectedConfigRuleAcl);
+        final var configRuleAcl = serializer.deserialize(serializedConfigRuleAcl);
+
+        assertThat(configRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var configRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey(resourceKey)
+                        .setResourceValue(resourceValue)
+                        .build();
+
+        final var serializedConfigRuleCustom = serializer.serialize(configRuleCustom);
+
+        assertThat(serializedConfigRuleCustom)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var serializedConfigRuleCustom = serializer.serialize(expectedConfigRuleCustom);
+        final var configRuleCustom = serializer.deserialize(serializedConfigRuleCustom);
+
+        assertThat(configRuleCustom).usingRecursiveComparison().isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleofTypeConfigRuleAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var expectedSerializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var expectedSerializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var expectedSerializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var expectedSerializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var expectedSerializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(expectedSerializedContextId)
+                        .setTopologyUuid(expectedSerializedTopologyIdUuid)
+                        .build();
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+
+        final var expectedSerializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(expectedSerializedTopologyId)
+                        .setDeviceId(expectedSerializedDeviceId)
+                        .setEndpointUuid(expectedSerializedEndPointIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var expectedSerializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedSerializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedSerializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(expectedSerializedAclMatch)
+                        .setAction(expectedSerializedAclAction)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var expectedSerializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(expectedSerializedAclEntry)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var expectedSerializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(expectedSerializedEndPointId)
+                        .setRuleSet(expectedSerializedAclRuleSet)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var expectedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setAcl(expectedSerializedConfigRuleAcl)
+                        .build();
+
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl);
+        final var serializedConfigRule = serializer.serialize(configRule);
+
+        assertThat(serializedConfigRule).isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleOfTypeConfigRuleAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var serializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var serializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var serializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var serializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedTopologyIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+        final var serializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointIdUuid)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var serializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(2)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(5)
+                        .setEndMplsLabel(10)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var serializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var serializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName",
+                        eu.teraflow.policy.acl.AclRuleTypeEnum.IPV4,
+                        "AclRuleDescription",
+                        "userId",
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(serializedAclEntry)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+        final var expectedConfigRule = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeAcl);
+
+        final var serializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
+
+        final var serializedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setAcl(serializedConfigRuleAcl)
+                        .build();
+
+        final var configRule = serializer.deserialize(serializedConfigRule);
+
+        assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleOfTypeConfigRuleCustom() {
+        final var expectedSerializedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKey")
+                        .setResourceValue("resourceValue")
+                        .build();
+
+        final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+
+        final var expectedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedSerializedConfigRuleCustom)
+                        .build();
+
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom);
+        final var serializedConfigRule = serializer.serialize(configRule);
+
+        assertThat(serializedConfigRule).isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleOfTypeConfigRuleCustom() {
+        final var serializedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKey")
+                        .setResourceValue("resourceValue")
+                        .build();
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom);
+        final var expectedConfigRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom);
+
+        final var serializedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(serializedConfigRuleCustom)
+                        .build();
+
+        final var configRule = serializer.deserialize(serializedConfigRule);
+
+        assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConfigRule() {
+        final var serializedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedConfigRule));
+    }
+
+    @Test
+    void shouldSerializeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+
+        final var constraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+
+        final var expectedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var serializedConstraintCustom = serializer.serialize(constraintCustom);
+
+        assertThat(serializedConstraintCustom)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintCustom);
+    }
+
+    @Test
+    void shouldDeserializeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+        final var expectedConstraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+
+        final var serializedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var constraintCustom = serializer.deserialize(serializedConstraintCustom);
+
+        assertThat(constraintCustom).usingRecursiveComparison().isEqualTo(expectedConstraintCustom);
+    }
+
+    @Test
+    void shouldSerializeConstraintSchedule() {
+        final var expectedStartTimestamp = 10;
+        final var expectedDurationDays = 2.2f;
+
+        final var constraintSchedule =
+                new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays);
+
+        final var expectedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(expectedStartTimestamp)
+                        .setDurationDays(expectedDurationDays)
+                        .build();
+
+        final var serializedConstraintSchedule = serializer.serialize(constraintSchedule);
+
+        assertThat(serializedConstraintSchedule)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSchedule);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSchedule() {
+        final var expectedStartTimestamp = 10;
+        final var expectedDurationDays = 2.2f;
+
+        final var expectedConstraintSchedule =
+                new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays);
+
+        final var serializedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(expectedStartTimestamp)
+                        .setDurationDays(expectedDurationDays)
+                        .build();
+
+        final var constraintSchedule = serializer.deserialize(serializedConstraintSchedule);
+
+        assertThat(constraintSchedule).usingRecursiveComparison().isEqualTo(expectedConstraintSchedule);
+    }
+
+    @Test
+    void shouldSerializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var location = new Location(locationTypeRegion);
+
+        final var expectedLocation = ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var expectedLocation = new Location(locationTypeRegion);
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldSerializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var location = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var expectedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var expectedLocation = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedLocation() {
+        final var serializedLocation = ContextOuterClass.Location.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedLocation));
+    }
+
+    private static Stream<Arguments> provideIsolationLevelEnum() {
+        return Stream.of(
+                Arguments.of(
+                        IsolationLevelEnum.NO_ISOLATION, ContextOuterClass.IsolationLevelEnum.NO_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PHYSICAL_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PHYSICAL_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.LOGICAL_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.LOGICAL_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PROCESS_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PROCESS_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.SERVICE_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.SERVICE_ISOLATION));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideIsolationLevelEnum")
+    void shouldSerializeIsolationLevelEnum(
+            IsolationLevelEnum isolationLevelEnum,
+            ContextOuterClass.IsolationLevelEnum expectedIsolationLevelEnum) {
+        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+
+        assertThat(serializedIsolationLevelEnum.getNumber())
+                .isEqualTo(expectedIsolationLevelEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideIsolationLevelEnum")
+    void shouldDeserializeIsolationLevelEnum(
+            IsolationLevelEnum expectedIsolationLevelEnum,
+            ContextOuterClass.IsolationLevelEnum serializedIsolationLevelEnum) {
+        final var isolationLevelEnum = serializer.deserialize(serializedIsolationLevelEnum);
+
+        assertThat(isolationLevelEnum).isEqualTo(expectedIsolationLevelEnum);
+    }
+
+    @Test
+    void shouldSerializeConstraintEndPointLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var expectedConstraintEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var serializedConstraintEndPointLocation =
+                serializer.serialize(constraintEndPointLocation);
+
+        assertThat(serializedConstraintEndPointLocation)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintEndPointLocation);
+    }
+
+    @Test
+    void shouldDeserializeConstraintEndPointLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var latitude = 54.6f;
+        final var longitude = 123.7f;
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+
+        final var locationType = new LocationTypeGpsPosition(gpsPosition);
+        final var location = new Location(locationType);
+
+        final var expectedConstraintEndPointLocation =
+                new ConstraintEndPointLocation(endPointId, location);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var serializedConstraintEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var constraintEndPointLocation =
+                serializer.deserialize(serializedConstraintEndPointLocation);
+
+        assertThat(constraintEndPointLocation)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintEndPointLocation);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaAvailability() {
+        final var numDisJointPaths = 2;
+        final var isAllActive = true;
+
+        final var constraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisJointPaths, isAllActive);
+
+        final var expectedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisJointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var serializedConstraintSlaAvailability = serializer.serialize(constraintSlaAvailability);
+
+        assertThat(serializedConstraintSlaAvailability)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaAvailability);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaAvailability() {
+        final var numDisJointPaths = 2;
+        final var isAllActive = true;
+
+        final var expectedConstraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisJointPaths, isAllActive);
+
+        final var serializedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisJointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var constraintSlaAvailability =
+                serializer.deserialize(serializedConstraintSlaAvailability);
+
+        assertThat(constraintSlaAvailability)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaAvailability);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaCapacity() {
+        final var capacityGbps = 5;
+
+        final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+
+        final var expectedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var serializedConstraintSlaCapacity = serializer.serialize(constraintSlaCapacity);
+
+        assertThat(serializedConstraintSlaCapacity)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaCapacity);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaCapacity() {
+        final var capacityGbps = 5;
+
+        final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+
+        final var serializedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var constraintSlaCapacity = serializer.deserialize(serializedConstraintSlaCapacity);
+
+        assertThat(constraintSlaCapacity)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaCapacity);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnums =
+                List.of(
+                        IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION,
+                        IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION);
+
+        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums);
+
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
+        final var expectedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
+                        .build();
+
+        final var serializedConstraintSlaIsolationLevel =
+                serializer.serialize(constraintSlaIsolationLevel);
+
+        assertThat(serializedConstraintSlaIsolationLevel)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaIsolationLevel);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnums =
+                List.of(IsolationLevelEnum.PROCESS_ISOLATION, IsolationLevelEnum.SERVICE_ISOLATION);
+
+        final var expectedConstraintSlaIsolationLevel =
+                new ConstraintSlaIsolationLevel(isolationLevelEnums);
+
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
+        final var serializedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
+                        .build();
+
+        final var constraintSlaIsolationLevel =
+                serializer.deserialize(serializedConstraintSlaIsolationLevel);
+
+        assertThat(constraintSlaIsolationLevel)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaIsolationLevel);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaLatency() {
+        final var e2eLatencyMs = 5.7f;
+
+        final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+
+        final var expectedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var serializedConstraintSlaLatency = serializer.serialize(constraintSlaLatency);
+
+        assertThat(serializedConstraintSlaLatency)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaLatency);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaLatency() {
+        final var e2eLatencyMs = 5.7f;
+
+        final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+
+        final var serializedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var constraintSlaLatency = serializer.deserialize(serializedConstraintSlaLatency);
+
+        assertThat(constraintSlaLatency)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaLatency);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+
+        final var constraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+        final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+        final var constraint = new Constraint(constraintTypeCustom);
+
+        final var expectedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setCustom(expectedConstraintCustom).build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+
+        final var constraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+        final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+        final var expectedConstraint = new Constraint(constraintTypeCustom);
+
+        final var serializedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setCustom(serializedConstraintCustom).build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSchedule() {
+        final var startTimeSTamp = 2.2f;
+        final var durationDays = 5.73f;
+
+        final var constraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays);
+        final var constraintTypeSchedule = new ConstraintTypeSchedule(constraintSchedule);
+        final var constraint = new Constraint(constraintTypeSchedule);
+
+        final var expectedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(startTimeSTamp)
+                        .setDurationDays(durationDays)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setSchedule(expectedConstraintSchedule).build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSchedule() {
+        final var startTimeSTamp = 2.2f;
+        final var durationDays = 5.73f;
+
+        final var expectedConstraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays);
+        final var expectedConstraintTypeSchedule =
+                new ConstraintTypeSchedule(expectedConstraintSchedule);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSchedule);
+
+        final var serializedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(startTimeSTamp)
+                        .setDurationDays(durationDays)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setSchedule(serializedConstraintSchedule).build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintEndPointLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location);
+        final var constraintTypeEndPointLocation =
+                new ConstraintTypeEndPointLocation(constraintEndPointLocation);
+        final var constraint = new Constraint(constraintTypeEndPointLocation);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var expectedConstraintEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setEndpointLocation(expectedConstraintEndPointLocation)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintEndPointLocation() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var expectedConstraintEndPointLocation =
+                new ConstraintEndPointLocation(endPointId, location);
+        final var expectedConstraintTypeEndPointLocation =
+                new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeEndPointLocation);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var serializedEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setEndpointLocation(serializedEndPointLocation)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaAvailability() {
+        final var numDisjointPaths = 2;
+        final var isAllActive = true;
+
+        final var constraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+        final var constraintTypeSlaAvailability =
+                new ConstraintTypeSlaAvailability(constraintSlaAvailability);
+        final var constraint = new Constraint(constraintTypeSlaAvailability);
+
+        final var expectedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisjointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaAvailability(expectedConstraintSlaAvailability)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaAvailability() {
+        final var numDisjointPaths = 2;
+        final var isAllActive = true;
+
+        final var expectedConstraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+        final var expectedConstraintTypeSlaAvailability =
+                new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaAvailability);
+
+        final var serializedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisjointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaAvailability(serializedConstraintSlaAvailability)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaCapacity() {
+        final var capacityGbps = 77.3f;
+
+        final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+        final var constraintTypeSlaCapacity = new ConstraintTypeSlaCapacity(constraintSlaCapacity);
+        final var constraint = new Constraint(constraintTypeSlaCapacity);
+
+        final var expectedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaCapacity(expectedConstraintSlaCapacity)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaCapacity() {
+        final var capacityGbps = 77.3f;
+
+        final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+        final var expectedConstraintTypeSlaCapacity =
+                new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaCapacity);
+
+        final var serializedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaCapacity(serializedConstraintSlaCapacity)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnums =
+                List.of(IsolationLevelEnum.PHYSICAL_ISOLATION, IsolationLevelEnum.NO_ISOLATION);
+
+        final var expectedConstraintSlaIsolationLevel =
+                new ConstraintSlaIsolationLevel(isolationLevelEnums);
+        final var expectedConstraintTypeSlaIsolationLevel =
+                new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaIsolationLevel);
+
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaIsolation(serializedConstraintSlaIsolationLevel)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnums =
+                List.of(
+                        IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION,
+                        IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION);
+
+        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnums);
+        final var constraintTypeSlaIsolationLevel =
+                new ConstraintTypeSlaIsolationLevel(constraintSlaIsolationLevel);
+        final var constraint = new Constraint(constraintTypeSlaIsolationLevel);
+
+        final var serializedIsolationLevelEnums =
+                isolationLevelEnums.stream()
+                        .map(isolationLevelEnum -> serializer.serialize(isolationLevelEnum))
+                        .collect(Collectors.toList());
+
+        final var expectedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .addAllIsolationLevel(serializedIsolationLevelEnums)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaIsolation(expectedConstraintSlaIsolationLevel)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaLatency() {
+        final var e2eLatencyMs = 45.32f;
+
+        final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+        final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(constraintSlaLatency);
+        final var constraint = new Constraint(constraintTypeSlaLatency);
+
+        final var expectedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaLatency(expectedConstraintSlaLatency)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaLatency() {
+        final var e2eLatencyMs = 45.32f;
+
+        final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+        final var expectedConstraintTypeSlaLatency =
+                new ConstraintTypeSlaLatency(expectedConstraintSlaLatency);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaLatency);
+
+        final var serializedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaLatency(serializedConstraintSlaLatency)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConstraint() {
+        final var serializedKpiValue = ContextOuterClass.Constraint.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedKpiValue));
+    }
+
+    @Test
+    void shouldSerializeEndPointId() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointUuid)
+                        .build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+
+        assertThat(serializedEndPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    @Test
+    void shouldDeserializeEndPointId() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var endPointId = serializer.deserialize(serializedEndPointId);
+
+        assertThat(endPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    private static Stream<Arguments> provideEventTypeEnum() {
+        return Stream.of(
+                Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE),
+                Arguments.of(EventTypeEnum.REMOVE, ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE),
+                Arguments.of(EventTypeEnum.UNDEFINED, ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED),
+                Arguments.of(EventTypeEnum.UPDATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_UPDATE));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideEventTypeEnum")
+    void shouldSerializeEventType(
+            EventTypeEnum eventType, ContextOuterClass.EventTypeEnum expectedSerializedType) {
+        final var serializedType = serializer.serialize(eventType);
+
+        assertThat(serializedType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideEventTypeEnum")
+    void shouldDeserializeEventType(
+            EventTypeEnum expectedEventType, ContextOuterClass.EventTypeEnum serializedEventType) {
+        final var eventType = serializer.deserialize(serializedEventType);
+
+        assertThat(eventType).isEqualTo(expectedEventType);
+    }
+
+    @Test
+    void shouldSerializeEvent() {
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
+        final var expectedEvent =
+                ContextOuterClass.Event.newBuilder()
+                        .setTimestamp(timestamp)
+                        .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
+                        .build();
+
+        final var event = new Event(1, EventTypeEnum.CREATE);
+        final var serializedEvent = serializer.serialize(event);
+
+        assertThat(serializedEvent).usingRecursiveComparison().isEqualTo(expectedEvent);
+    }
+
+    @Test
+    void shouldDeserializeEvent() {
+        final var expectedEvent = new Event(1, EventTypeEnum.CREATE);
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
+        final var serializedEvent =
+                ContextOuterClass.Event.newBuilder()
+                        .setTimestamp(timestamp)
+                        .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
+                        .build();
+        final var event = serializer.deserialize(serializedEvent);
+
+        assertThat(event).usingRecursiveComparison().isEqualTo(expectedEvent);
+    }
+
+    @Test
+    void shouldSerializeServiceId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+        final var serviceId = new ServiceId(expectedContextId, expectedId);
+
+        final var serializedContextId = serializer.serializeContextId(expectedContextId);
+        final var serializedIdUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedServiceId =
+                ContextOuterClass.ServiceId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setServiceUuid(serializedIdUuid)
+                        .build();
+
+        final var serializedServiceId = serializer.serialize(serviceId);
+
+        assertThat(serializedServiceId).usingRecursiveComparison().isEqualTo(expectedServiceId);
+    }
+
+    @Test
+    void shouldDeserializeServiceId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+
+        final var expectedServiceId = new ServiceId(expectedContextId, expectedId);
+
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+
+        final var serviceId = serializer.deserialize(serializedServiceId);
+
+        assertThat(serviceId).usingRecursiveComparison().isEqualTo(expectedServiceId);
+    }
+
+    private static Stream<Arguments> provideServiceStatusEnum() {
+        return Stream.of(
+                Arguments.of(
+                        ServiceStatusEnum.ACTIVE, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_ACTIVE),
+                Arguments.of(
+                        ServiceStatusEnum.PLANNED, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PLANNED),
+                Arguments.of(
+                        ServiceStatusEnum.PENDING_REMOVAL,
+                        ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL),
+                Arguments.of(
+                        ServiceStatusEnum.UNDEFINED,
+                        ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceStatusEnum")
+    void shouldSerializeServiceStatusEnum(
+            ServiceStatusEnum serviceStatusEnum,
+            ContextOuterClass.ServiceStatusEnum expectedSerializedType) {
+        final var serializedServiceStatusEnum = serializer.serialize(serviceStatusEnum);
+
+        assertThat(serializedServiceStatusEnum.getNumber())
+                .isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceStatusEnum")
+    void shouldDeserializeServiceStatusEnum(
+            ServiceStatusEnum expectedServiceStatusEnum,
+            ContextOuterClass.ServiceStatusEnum serializedServiceStatusEnum) {
+        final var serviceStatusEnum = serializer.deserialize(serializedServiceStatusEnum);
+
+        assertThat(serviceStatusEnum).isEqualTo(expectedServiceStatusEnum);
+    }
+
+    private static Stream<Arguments> provideServiceTypeEnum() {
+        return Stream.of(
+                Arguments.of(ServiceTypeEnum.L2NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L2NM),
+                Arguments.of(ServiceTypeEnum.L3NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L3NM),
+                Arguments.of(
+                        ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE,
+                        ContextOuterClass.ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE),
+                Arguments.of(
+                        ServiceTypeEnum.UNKNOWN, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceTypeEnum")
+    void shouldSerializeServiceTypeEnum(
+            ServiceTypeEnum serviceTypeEnum, ContextOuterClass.ServiceTypeEnum expectedSerializedType) {
+        final var serializedServiceTypeEnum = serializer.serialize(serviceTypeEnum);
+
+        assertThat(serializedServiceTypeEnum.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceTypeEnum")
+    void shouldDeserializeServiceTypeEnum(
+            ServiceTypeEnum expectedServiceTypeEnum,
+            ContextOuterClass.ServiceTypeEnum serializedServiceTypeEnum) {
+        final var serviceTypeEnum = serializer.deserialize(serializedServiceTypeEnum);
+
+        assertThat(serviceTypeEnum).isEqualTo(expectedServiceTypeEnum);
+    }
+
+    @Test
+    void shouldSerializeServiceStatus() {
+        final var expectedServiceStatusEnum = ServiceStatusEnum.ACTIVE;
+        final var serviceStatus = new ServiceStatus(expectedServiceStatusEnum);
+
+        final var serializedServiceStatusEnum = serializer.serialize(expectedServiceStatusEnum);
+
+        final var expectedServiceStatus =
+                ContextOuterClass.ServiceStatus.newBuilder()
+                        .setServiceStatus(serializedServiceStatusEnum)
+                        .build();
+
+        final var serializedServiceStatus = serializer.serialize(serviceStatus);
+
+        assertThat(serializedServiceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus);
+    }
+
+    @Test
+    void shouldDeserializeServiceStatus() {
+        final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PENDING_REMOVAL);
+
+        final var serializedServiceStatus = serializer.serialize(expectedServiceStatus);
+        final var serviceStatus = serializer.deserialize(serializedServiceStatus);
+
+        assertThat(serviceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus);
+    }
+
+    @Test
+    void shouldSerializeServiceConfig() {
+        final var configRuleA = createConfigRule();
+        final var configRuleB = createConfigRule();
+        final var serviceConfig = new ServiceConfig(List.of(configRuleA, configRuleB));
+
+        final var expectedConfigRuleA = serializer.serialize(configRuleA);
+        final var expectedConfigRuleB = serializer.serialize(configRuleB);
+
+        final var expectedServiceConfig =
+                ContextOuterClass.ServiceConfig.newBuilder()
+                        .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB))
+                        .build();
+
+        final var serializedServiceConfig = serializer.serialize(serviceConfig);
+
+        assertThat(serializedServiceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig);
+    }
+
+    @Test
+    void shouldDeserializeServiceConfig() {
+        final var expectedConfigRuleA = createConfigRule();
+        final var expectedConfigRuleB = createConfigRule();
+        final var expectedServiceConfig =
+                new ServiceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB));
+
+        final var configRuleA = serializer.serialize(expectedConfigRuleA);
+        final var configRuleB = serializer.serialize(expectedConfigRuleB);
+        final var serializedServiceConfig =
+                ContextOuterClass.ServiceConfig.newBuilder()
+                        .addAllConfigRules(List.of(configRuleA, configRuleB))
+                        .build();
+
+        final var serviceConfig = serializer.deserialize(serializedServiceConfig);
+
+        assertThat(serviceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig);
+    }
+
+    @Test
+    void shouldSerializeService() {
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE;
+        final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId");
+        final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId");
+
+        final var firstExpectedEndPointId =
+                new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var secondExpectedEndPointId =
+                new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var expectedServiceEndPointIds =
+                List.of(firstExpectedEndPointId, secondExpectedEndPointId);
+
+        final var expectedConstraintTypeA = "constraintTypeA";
+        final var expectedConstraintValueA = "constraintValueA";
+
+        final var constraintCustomA =
+                new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA);
+        final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA);
+        final var firstExpectedConstraint = new Constraint(constraintTypeCustomA);
+
+        final var expectedConstraintTypeB = "constraintTypeB";
+        final var expectedConstraintValueB = "constraintValueB";
+
+        final var constraintCustomB =
+                new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB);
+        final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB);
+        final var secondExpectedConstraint = new Constraint(constraintTypeCustomB);
+
+        final var expectedServiceConstraints =
+                List.of(firstExpectedConstraint, secondExpectedConstraint);
+
+        final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED);
+
+        final var expectedConfigRuleA = createConfigRule();
+        final var expectedConfigRuleB = createConfigRule();
+
+        final var expectedConfigRules = List.of(expectedConfigRuleA, expectedConfigRuleB);
+
+        final var expectedServiceConfig = new ServiceConfig(expectedConfigRules);
+
+        final var expectedTimestamp = 2.3;
+
+        final var service =
+                new Service(
+                        expectedServiceId,
+                        expectedServiceTypeEnum,
+                        expectedServiceEndPointIds,
+                        expectedServiceConstraints,
+                        expectedServiceStatus,
+                        expectedServiceConfig,
+                        expectedTimestamp);
+
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum);
+        final var serializedServiceEndPointIds =
+                expectedServiceEndPointIds.stream()
+                        .map(endPointId -> serializer.serialize(endPointId))
+                        .collect(Collectors.toList());
+        final var serializedServiceConstraints =
+                expectedServiceConstraints.stream()
+                        .map(constraint -> serializer.serialize(constraint))
+                        .collect(Collectors.toList());
+        final var serializedServiceStatus = serializer.serialize(expectedServiceStatus);
+        final var serializedServiceConfig = serializer.serialize(expectedServiceConfig);
+        final var serializedTimestamp = serializer.serialize(expectedTimestamp);
+
+        final var expectedService =
+                ContextOuterClass.Service.newBuilder()
+                        .setServiceId(serializedServiceId)
+                        .setServiceType(serializedServiceType)
+                        .addAllServiceEndpointIds(serializedServiceEndPointIds)
+                        .addAllServiceConstraints(serializedServiceConstraints)
+                        .setServiceStatus(serializedServiceStatus)
+                        .setServiceConfig(serializedServiceConfig)
+                        .setTimestamp(serializedTimestamp)
+                        .build();
+
+        final var serializedService = serializer.serialize(service);
+
+        assertThat(serializedService).isEqualTo(expectedService);
+    }
+
+    @Test
+    void shouldDeserializeService() {
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE;
+        final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId");
+        final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId");
+
+        final var firstExpectedEndPointId =
+                new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var secondExpectedEndPointId =
+                new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var expectedServiceEndPointIds =
+                List.of(firstExpectedEndPointId, secondExpectedEndPointId);
+
+        final var expectedConstraintTypeA = "constraintTypeA";
+        final var expectedConstraintValueA = "constraintValueA";
+
+        final var constraintCustomA =
+                new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA);
+        final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA);
+        final var firstExpectedConstraint = new Constraint(constraintTypeCustomA);
+
+        final var expectedConstraintTypeB = "constraintTypeB";
+        final var expectedConstraintValueB = "constraintValueB";
+
+        final var constraintCustomB =
+                new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB);
+        final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB);
+        final var secondExpectedConstraint = new Constraint(constraintTypeCustomB);
+
+        final var expectedServiceConstraints =
+                List.of(firstExpectedConstraint, secondExpectedConstraint);
+
+        final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED);
+
+        final var firstExpectedConfigRuleA = createConfigRule();
+        final var secondExpectedConfigRuleB = createConfigRule();
+
+        final var expectedConfigRules = List.of(firstExpectedConfigRuleA, secondExpectedConfigRuleB);
+
+        final var expectedServiceConfig = new ServiceConfig(expectedConfigRules);
+
+        final var expectedTimestamp = 7.8;
+
+        final var expectedService =
+                new Service(
+                        expectedServiceId,
+                        expectedServiceTypeEnum,
+                        expectedServiceEndPointIds,
+                        expectedServiceConstraints,
+                        expectedServiceStatus,
+                        expectedServiceConfig,
+                        expectedTimestamp);
+
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum);
+        final var serializedServiceEndPointIds =
+                expectedServiceEndPointIds.stream()
+                        .map(endPointId -> serializer.serialize(endPointId))
+                        .collect(Collectors.toList());
+        final var serializedServiceConstraints =
+                expectedServiceConstraints.stream()
+                        .map(constraint -> serializer.serialize(constraint))
+                        .collect(Collectors.toList());
+        final var serializedServiceStatus = serializer.serialize(expectedServiceStatus);
+        final var serializedServiceConfig = serializer.serialize(expectedServiceConfig);
+        final var serializedTimestamp = serializer.serialize(expectedTimestamp);
+
+        final var serializedService =
+                ContextOuterClass.Service.newBuilder()
+                        .setServiceId(serializedServiceId)
+                        .setServiceType(serializedServiceType)
+                        .addAllServiceEndpointIds(serializedServiceEndPointIds)
+                        .addAllServiceConstraints(serializedServiceConstraints)
+                        .setServiceStatus(serializedServiceStatus)
+                        .setServiceConfig(serializedServiceConfig)
+                        .setTimestamp(serializedTimestamp)
+                        .build();
+
+        final var service = serializer.deserialize(serializedService);
+
+        assertThat(service).usingRecursiveComparison().isEqualTo(expectedService);
+    }
+
+    private static Stream<Arguments> provideKpiSampleType() {
+        return Stream.of(
+                Arguments.of(
+                        KpiSampleType.PACKETS_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.PACKETS_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED),
+                Arguments.of(
+                        KpiSampleType.BYTES_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.BYTES_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED),
+                Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldSerializeKpiSampleType(
+            KpiSampleType kpiSampleType, KpiSampleTypes.KpiSampleType expectedSerializedType) {
+        final var serializedKpiSampleType = serializer.serialize(kpiSampleType);
+
+        assertThat(serializedKpiSampleType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldDeserializeKpiSampleType(
+            KpiSampleType expectedKpiSampleType, KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        final var kpiSampleType = serializer.deserialize(serializedKpiSampleType);
+
+        assertThat(kpiSampleType).isEqualTo(expectedKpiSampleType);
+    }
+
+    private static Stream<Arguments> provideRuleState() {
+        return Stream.of(
+                Arguments.of(RuleState.POLICY_UNDEFINED, Policy.RuleState.POLICY_UNDEFINED),
+                Arguments.of(RuleState.POLICY_FAILED, Policy.RuleState.POLICY_FAILED),
+                Arguments.of(RuleState.POLICY_INSERTED, Policy.RuleState.POLICY_INSERTED),
+                Arguments.of(RuleState.POLICY_VALIDATED, Policy.RuleState.POLICY_VALIDATED),
+                Arguments.of(RuleState.POLICY_PROVISIONED, Policy.RuleState.POLICY_PROVISIONED),
+                Arguments.of(RuleState.POLICY_ACTIVE, Policy.RuleState.POLICY_ACTIVE),
+                Arguments.of(RuleState.POLICY_ENFORCED, Policy.RuleState.POLICY_ENFORCED),
+                Arguments.of(RuleState.POLICY_INEFFECTIVE, Policy.RuleState.POLICY_INEFFECTIVE),
+                Arguments.of(RuleState.POLICY_EFFECTIVE, Policy.RuleState.POLICY_EFFECTIVE),
+                Arguments.of(RuleState.POLICY_UPDATED, Policy.RuleState.POLICY_UPDATED),
+                Arguments.of(RuleState.POLICY_REMOVED, Policy.RuleState.POLICY_REMOVED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideRuleState")
+    void shouldSerializeRuleState(RuleState ruleState, Policy.RuleState expectedSerializedType) {
+        final var serializedRuleState = serializer.serialize(ruleState);
+
+        assertThat(serializedRuleState.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideRuleState")
+    void shouldDeserializeRuleState(
+            RuleState expectedRuleState, Policy.RuleState serializedRuleState) {
+        final var ruleState = serializer.deserialize(serializedRuleState);
+
+        assertThat(ruleState).isEqualTo(expectedRuleState);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleState() {
+        final var expectedRuleState = RuleState.POLICY_ACTIVE;
+        final var policyRuleState = new PolicyRuleState(expectedRuleState);
+
+        final var serializedRuleState = serializer.serialize(expectedRuleState);
+
+        final var expectedPolicyRuleState =
+                Policy.PolicyRuleState.newBuilder().setPolicyRuleState(serializedRuleState).build();
+
+        final var serializedPolicyRuleState = serializer.serialize(policyRuleState);
+
+        assertThat(serializedPolicyRuleState)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleState);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleState() {
+        final var expectedRuleState = RuleState.POLICY_ENFORCED;
+        final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState);
+
+        final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
+
+        final var policyRuleState = serializer.deserialize(serializedPolicyRuleState);
+
+        assertThat(policyRuleState).usingRecursiveComparison().isEqualTo(expectedPolicyRuleState);
+    }
+
+    private static Stream<Arguments> provideNumericalOperator() {
+        return Stream.of(
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideNumericalOperator")
+    void shouldSerializeNumericalOperator(
+            NumericalOperator numericalOperator,
+            PolicyCondition.NumericalOperator expectedNumericalOperator) {
+        final var serializedNumericalOperator = serializer.serialize(numericalOperator);
+
+        assertThat(serializedNumericalOperator).isEqualTo(expectedNumericalOperator);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideNumericalOperator")
+    void shouldDeserializeNumericalOperator(
+            NumericalOperator expectedNumericalOperator,
+            PolicyCondition.NumericalOperator serializedNumericalOperator) {
+        final var numericalOperator = serializer.deserialize(serializedNumericalOperator);
+
+        assertThat(numericalOperator).isEqualTo(expectedNumericalOperator);
+    }
+
+    @Test
+    void shouldSerializeSubscriptionId() {
+        final var subscriptionId = "subscriptionId";
+
+        final var subscriptionIdUuid = serializer.serializeUuid(subscriptionId);
+
+        final var expectedSubscriptionId =
+                Monitoring.SubscriptionID.newBuilder().setSubsId(subscriptionIdUuid).build();
+
+        final var serializedSubscriptionId = serializer.serializeSubscriptionIdId(subscriptionId);
+
+        assertThat(serializedSubscriptionId)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedSubscriptionId);
+    }
+
+    @Test
+    void shouldDeserializeSubscriptionId() {
+        final var expectedSubscriptionId = "expectedSubscriptionId";
+
+        final var serializedSubscriptionIdUuid = serializer.serializeUuid(expectedSubscriptionId);
+        final var serializedSubscriptionId =
+                Monitoring.SubscriptionID.newBuilder().setSubsId(serializedSubscriptionIdUuid).build();
+
+        final var subscriptionId = serializer.deserialize(serializedSubscriptionId);
+
+        assertThat(subscriptionId).isEqualTo(expectedSubscriptionId);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideNumericalOperator")
+    void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators(
+            NumericalOperator expectedNumericalOperator) {
+        final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId";
+        final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34);
+
+        final var policyRuleCondition =
+                new PolicyRuleCondition(
+                        expectedPolicyRuleConditionKpiId,
+                        expectedNumericalOperator,
+                        expectedPolicyRuleConditionKpiValue);
+
+        final var serializedPolicyRuleConditionKpiIdUuid =
+                serializer.serializeUuid(expectedPolicyRuleConditionKpiId);
+        final var serializedPolicyRuleConditionKpiId =
+                KpiId.newBuilder().setKpiId(serializedPolicyRuleConditionKpiIdUuid).build();
+        final var serializedNumericalOperator = serializer.serialize(expectedNumericalOperator);
+        final var serializedPolicyRuleConditionKpiValue =
+                serializer.serializeIntegerKpiValue(expectedPolicyRuleConditionKpiValue);
+
+        final var expectedPolicyRuleCondition =
+                PolicyCondition.PolicyRuleCondition.newBuilder()
+                        .setKpiId(serializedPolicyRuleConditionKpiId)
+                        .setNumericalOperator(serializedNumericalOperator)
+                        .setKpiValue(serializedPolicyRuleConditionKpiValue)
+                        .build();
+
+        final var serializedPolicyRuleCondition = serializer.serialize(policyRuleCondition);
+
+        assertThat(serializedPolicyRuleCondition)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleCondition);
+    }
+
+    private static Stream<Arguments> provideKpiValues() {
+        return Stream.of(
+                Arguments.of(
+                        new StringKpiValue("stringKpiValue"),
+                        Monitoring.KpiValue.newBuilder().setStringVal("stringKpiValue").build()),
+                Arguments.of(
+                        new BooleanKpiValue(true), Monitoring.KpiValue.newBuilder().setBoolVal(true).build()),
+                Arguments.of(
+                        new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setIntVal(44).build()),
+                Arguments.of(
+                        new FloatKpiValue(12.3f), Monitoring.KpiValue.newBuilder().setFloatVal(12.3f).build()));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldSerializeKpiValues(KpiValue<?> kpiValue, Monitoring.KpiValue expectedKpiValue) {
+        final var serializedKpiValue = serializer.serialize(kpiValue);
+
+        assertThat(serializedKpiValue).isEqualTo(expectedKpiValue);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldDeserializeKpiValues(
+            KpiValue<?> expectedKpiValue, Monitoring.KpiValue serializedKpiValue) {
+        final var kpiValue = serializer.deserialize(serializedKpiValue);
+
+        assertThat(kpiValue).usingRecursiveComparison().isEqualTo(expectedKpiValue);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedKpiValue() {
+        final var serializedKpiValue = Monitoring.KpiValue.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedKpiValue));
+    }
+
+    @Test
+    void shouldDeserializeIntegerKpiValue() {
+        final var expectedKpiValue = new IntegerKpiValue(66);
+
+        final var intValue = serializer.serializeIntegerKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeIntegerKpiValue(intValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    @Test
+    void shouldDeserializeStringKpiValue() {
+        final var expectedKpiValue = new StringKpiValue("StringKpiValue");
+
+        final var stringValue = serializer.serializeStringKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeStringKpiValue(stringValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    @Test
+    void shouldDeserializeFloatKpiValue() {
+        final var expectedKpiValue = new FloatKpiValue(2.2f);
+
+        final var floatValue = serializer.serializeFloatKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeFloatKpiValue(floatValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    @Test
+    void shouldDeserializeBooleanKpiValue() {
+        final var expectedKpiValue = new BooleanKpiValue(true);
+
+        final var booleanValue = serializer.serializeBooleanKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeBooleanKpiValue(booleanValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    private static Stream<Arguments> provideKpiValueRanges() {
+        return Stream.of(
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(true), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(false), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(true), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(false), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValueRanges")
+    void shouldSerializeKpiValueRange(
+            KpiValueRange kpiValueRange, Monitoring.KpiValueRange expectedKpiValueRange) {
+        final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
+
+        assertThat(serializedKpiValueRange.getKpiMinValue())
+                .isEqualTo(expectedKpiValueRange.getKpiMinValue());
+        assertThat(serializedKpiValueRange.getKpiMaxValue())
+                .isEqualTo(expectedKpiValueRange.getKpiMaxValue());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValueRanges")
+    void shouldDeserializeKpiValueRange(
+            KpiValueRange expectedKpiValueRange, Monitoring.KpiValueRange serializedKpiValueRange) {
+        final var kpiValueRange = serializer.deserialize(serializedKpiValueRange);
+
+        assertThat(kpiValueRange.getKpiMinValue())
+                .usingRecursiveComparison()
+                .isEqualTo(expectedKpiValueRange.getKpiMinValue());
+        assertThat(kpiValueRange.getKpiMaxValue())
+                .usingRecursiveComparison()
+                .isEqualTo(expectedKpiValueRange.getKpiMaxValue());
+    }
+
+    @Test
+    void shouldSerializeAlarmId() {
+        final var alarmId = "alarmId";
+
+        final var alarmIdUuid = serializer.serializeUuid(alarmId);
+
+        final var expectedAlarmId = Monitoring.AlarmID.newBuilder().setAlarmId(alarmIdUuid).build();
+
+        final var serializedAlarmId = serializer.serializeAlarmId(alarmId);
+
+        assertThat(serializedAlarmId).usingRecursiveComparison().isEqualTo(expectedAlarmId);
+    }
+
+    @Test
+    void shouldDeserializeAlarmId() {
+        final var expectedAlarmId = "expectedAlarmId";
+
+        final var serializedAlarmIdUuid = serializer.serializeUuid(expectedAlarmId);
+        final var serializedAlarmId =
+                Monitoring.KpiId.newBuilder().setKpiId(serializedAlarmIdUuid).build();
+
+        final var alarmId = serializer.deserialize(serializedAlarmId);
+
+        assertThat(alarmId).isEqualTo(expectedAlarmId);
+    }
+
+    @Test
+    void shouldSerializeAlarmDescriptor() {
+        final var alarmDescription = "alarmDescription";
+        final var name = "name";
+        final var kpiId = "kpiId";
+        final var timestamp = "timestamp";
+
+        final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800));
+        final var alarmDescriptor =
+                new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
+
+        final var expectedAlarmDescriptor =
+                Monitoring.AlarmDescriptor.newBuilder()
+                        .setAlarmDescription(alarmDescription)
+                        .setName(name)
+                        .setKpiId(serializedKpiId)
+                        .setKpiValueRange(serializedKpiValueRange)
+                        .setTimestamp(timestamp)
+                        .build();
+
+        final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
+
+        assertThat(serializedAlarmDescriptor).isEqualTo(expectedAlarmDescriptor);
+    }
+
+    @Test
+    void shouldDeserializeAlarmDescriptor() {
+        final var alarmDescription = "alarmDescription";
+        final var name = "name";
+        final var kpiId = "kpiId";
+        final var timestamp = "timestamp";
+
+        final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800));
+        final var expectedAlarmDescriptor =
+                new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
+
+        final var serializedAlarmDescriptor =
+                Monitoring.AlarmDescriptor.newBuilder()
+                        .setAlarmDescription(alarmDescription)
+                        .setName(name)
+                        .setKpiId(serializedKpiId)
+                        .setKpiValueRange(serializedKpiValueRange)
+                        .setTimestamp(timestamp)
+                        .build();
+
+        final var alarmDescriptor = serializer.deserialize(serializedAlarmDescriptor);
+
+        assertThat(alarmDescriptor).usingRecursiveComparison().isEqualTo(expectedAlarmDescriptor);
+    }
+
+    @Test
+    void shouldSerializeAlarmResponse() {
+        final var alarmId = "alarmId";
+        final var text = "text";
+        final var kpiValue = new IntegerKpiValue(12);
+
+        final var alarmResponse = new AlarmResponse(alarmId, text, kpiValue);
+
+        final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId);
+        final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build();
+        final var serializedKpiValue = serializer.serialize(kpiValue);
+
+        final var expectedAlarmResponse =
+                Monitoring.AlarmResponse.newBuilder()
+                        .setAlarmId(serializedAlarmId)
+                        .setText(text)
+                        .setKpiValue(serializedKpiValue)
+                        .build();
+
+        final var serializedAlarmResponse = serializer.serialize(alarmResponse);
+
+        assertThat(serializedAlarmResponse).isEqualTo(expectedAlarmResponse);
+    }
+
+    @Test
+    void shouldDeserializeAlarmResponse() {
+        final var alarmId = "alarmId";
+        final var text = "text";
+        final var kpiValue = new IntegerKpiValue(12);
+
+        final var expectedAlarmResponse = new AlarmResponse(alarmId, text, kpiValue);
+
+        final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId);
+        final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build();
+        final var serializedKpiValue = serializer.serialize(kpiValue);
+
+        final var serializedAlarmResponse =
+                Monitoring.AlarmResponse.newBuilder()
+                        .setAlarmId(serializedAlarmId)
+                        .setText(text)
+                        .setKpiValue(serializedKpiValue)
+                        .build();
+
+        final var alarmResponse = serializer.deserialize(serializedAlarmResponse);
+
+        assertThat(alarmResponse).usingRecursiveComparison().isEqualTo(expectedAlarmResponse);
+    }
+
+    @Test
+    void shouldSerializeSubDescriptor() {
+        final var kpiId = "kpiId";
+        final var samplingDurationS = 10f;
+        final var samplingIntervalS = 45f;
+        final var startDate = "01/07/2022";
+        final var endDate = "02/07/2022";
+
+        final var subDescriptor =
+                new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        final var expectedSubDescriptor =
+                Monitoring.SubsDescriptor.newBuilder()
+                        .setKpiId(serializedKpiId)
+                        .setSamplingDurationS(samplingDurationS)
+                        .setSamplingIntervalS(samplingIntervalS)
+                        .setStartDate(startDate)
+                        .setEndDate(endDate)
+                        .build();
+
+        final var serializedSubDescriptor = serializer.serialize(subDescriptor);
+
+        assertThat(serializedSubDescriptor).isEqualTo(expectedSubDescriptor);
+    }
+
+    @Test
+    void shouldDeserializeSubDescriptor() {
+        final var kpiId = "kpiId";
+        final var samplingDurationS = 10f;
+        final var samplingIntervalS = 45f;
+        final var startDate = "01/07/2022";
+        final var endDate = "02/07/2022";
+
+        final var expectedSubDescriptor =
+                new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        final var serializedSubDescriptor =
+                Monitoring.SubsDescriptor.newBuilder()
+                        .setKpiId(serializedKpiId)
+                        .setSamplingDurationS(samplingDurationS)
+                        .setSamplingIntervalS(samplingIntervalS)
+                        .setStartDate(startDate)
+                        .setEndDate(endDate)
+                        .build();
+
+        final var subDescriptor = serializer.deserialize(serializedSubDescriptor);
+
+        assertThat(subDescriptor).usingRecursiveComparison().isEqualTo(expectedSubDescriptor);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleCondition() {
+        final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId";
+        final var expectedPolicyRuleConditionNumericalOperator =
+                NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN;
+        final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34);
+
+        final var expectedPolicyRuleCondition =
+                new PolicyRuleCondition(
+                        expectedPolicyRuleConditionKpiId,
+                        expectedPolicyRuleConditionNumericalOperator,
+                        expectedPolicyRuleConditionKpiValue);
+
+        final var serializedPolicyRuleCondition = serializer.serialize(expectedPolicyRuleCondition);
+
+        final var policyRuleCondition = serializer.deserialize(serializedPolicyRuleCondition);
+
+        assertThat(policyRuleCondition)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleCondition);
+    }
+
+    private static Stream<Arguments> provideBooleanOperators() {
+        return Stream.of(
+                Arguments.of(
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND,
+                        PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND),
+                Arguments.of(
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR,
+                        PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR),
+                Arguments.of(
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED,
+                        PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideBooleanOperators")
+    void shouldSerializeBooleanOperator(
+            BooleanOperator booleanOperator, PolicyCondition.BooleanOperator expectedBooleanOperator) {
+        final var serializedBooleanOperator = serializer.serialize(booleanOperator);
+
+        assertThat(serializedBooleanOperator).isEqualTo(expectedBooleanOperator);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideBooleanOperators")
+    void shouldDeserializeBooleanOperator(
+            BooleanOperator expectedBooleanOperator,
+            PolicyCondition.BooleanOperator serializedBooleanOperator) {
+        final var booleanOperator = serializer.deserialize(serializedBooleanOperator);
+
+        assertThat(booleanOperator).isEqualTo(expectedBooleanOperator);
+    }
+
+    private static Stream<Arguments> providePolicyRuleActionEnum() {
+        return Stream.of(
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_SET_DEVICE_STATUS),
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE),
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT),
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION));
+    }
+
+    @ParameterizedTest
+    @MethodSource("providePolicyRuleActionEnum")
+    void shouldSerializePolicyRuleActionEnum(
+            PolicyRuleActionEnum policyRuleActionEnum,
+            PolicyAction.PolicyRuleActionEnum expectedPolicyRuleActionEnum) {
+        final var serializedPolicyRuleActionEnum = serializer.serialize(policyRuleActionEnum);
+
+        assertThat(serializedPolicyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum);
+    }
+
+    @ParameterizedTest
+    @MethodSource("providePolicyRuleActionEnum")
+    void shouldDeserializePolicyRuleActionEnum(
+            PolicyRuleActionEnum expectedPolicyRuleActionEnum,
+            PolicyAction.PolicyRuleActionEnum serializedPolicyRuleActionEnum) {
+        final var policyRuleActionEnum = serializer.deserialize(serializedPolicyRuleActionEnum);
+
+        assertThat(policyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleAction() {
+        final var expectedPolicyRuleActionEnum =
+                PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT;
+        final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2");
+        final var policyRuleAction =
+                new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters);
+
+        final var serializedPolicyRuleActionEnum = serializer.serialize(expectedPolicyRuleActionEnum);
+
+        final var expectedPolicyRuleAction =
+                PolicyAction.PolicyRuleAction.newBuilder()
+                        .setAction(serializedPolicyRuleActionEnum)
+                        .addAllParameters(expectedPolicyRuleActionParameters)
+                        .build();
+
+        final var serializedPolicyRuleAction = serializer.serialize(policyRuleAction);
+
+        assertThat(serializedPolicyRuleAction)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleAction);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleAction() {
+        final var expectedPolicyRuleActionEnum = PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION;
+        final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2");
+        final var expectedPolicyRuleAction =
+                new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters);
+
+        final var serializedPolicyRuleAction = serializer.serialize(expectedPolicyRuleAction);
+
+        final var policyRuleAction = serializer.deserialize(serializedPolicyRuleAction);
+
+        assertThat(policyRuleAction).usingRecursiveComparison().isEqualTo(expectedPolicyRuleAction);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleBasic() {
+        final var policyRuleBasic = createPolicyRuleBasic();
+
+        final var expectedPolicyRuleId = policyRuleBasic.getPolicyRuleId();
+        final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
+        final var expectedPriority = policyRuleBasic.getPriority();
+        final var expectedPolicyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
+        final var expectedBooleanOperator = policyRuleBasic.getBooleanOperator();
+        final var expectedPolicyRuleActions = policyRuleBasic.getPolicyRuleActions();
+
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId);
+        final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
+        final var serializedPolicyRuleConditions =
+                expectedPolicyRuleConditions.stream()
+                        .map(policyRuleCondition -> serializer.serialize(policyRuleCondition))
+                        .collect(Collectors.toList());
+        final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator);
+        final var serializedPolicyRuleActions =
+                expectedPolicyRuleActions.stream()
+                        .map(policyRuleAction -> serializer.serialize(policyRuleAction))
+                        .collect(Collectors.toList());
+
+        final var expectedPolicyRuleBasic =
+                Policy.PolicyRuleBasic.newBuilder()
+                        .setPolicyRuleId(serializedPolicyRuleId)
+                        .setPolicyRuleState(serializedPolicyRuleState)
+                        .setPriority(expectedPriority)
+                        .addAllConditionList(serializedPolicyRuleConditions)
+                        .setBooleanOperator(serializedBooleanOperator)
+                        .addAllActionList(serializedPolicyRuleActions)
+                        .build();
+
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+
+        assertThat(serializedPolicyRuleBasic)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleBasic);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleBasic() {
+        final var expectedPolicyRuleBasic = createPolicyRuleBasic();
+
+        final var expectedPolicyRuleId = expectedPolicyRuleBasic.getPolicyRuleId();
+        final var expectedPolicyRuleState = expectedPolicyRuleBasic.getPolicyRuleState();
+        final var expectedPriority = expectedPolicyRuleBasic.getPriority();
+        final var expectedPolicyRuleConditions = expectedPolicyRuleBasic.getPolicyRuleConditions();
+        final var expectedBooleanOperator = expectedPolicyRuleBasic.getBooleanOperator();
+        final var expectedPolicyRuleActions = expectedPolicyRuleBasic.getPolicyRuleActions();
+
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId);
+        final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
+        final var serializedPolicyRuleConditions =
+                expectedPolicyRuleConditions.stream()
+                        .map(policyRuleCondition -> serializer.serialize(policyRuleCondition))
+                        .collect(Collectors.toList());
+        final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator);
+        final var serializedPolicyRuleActions =
+                expectedPolicyRuleActions.stream()
+                        .map(policyRuleAction -> serializer.serialize(policyRuleAction))
+                        .collect(Collectors.toList());
+
+        final var serializedPolicyRuleBasic =
+                Policy.PolicyRuleBasic.newBuilder()
+                        .setPolicyRuleId(serializedPolicyRuleId)
+                        .setPolicyRuleState(serializedPolicyRuleState)
+                        .setPriority(expectedPriority)
+                        .addAllConditionList(serializedPolicyRuleConditions)
+                        .setBooleanOperator(serializedBooleanOperator)
+                        .addAllActionList(serializedPolicyRuleActions)
+                        .build();
+
+        final var policyRuleBasic = serializer.deserialize(serializedPolicyRuleBasic);
+
+        assertThat(policyRuleBasic).usingRecursiveComparison().isEqualTo(expectedPolicyRuleBasic);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleService() {
+        final var policyRuleBasic = createPolicyRuleBasic();
+        final var serviceId = new ServiceId("contextId", "serviceId");
+        final var deviceIds = List.of("deviceId1", "deviceId2");
+
+        final var policyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+        final var serializedPolicyRuleServiceId = serializer.serialize(serviceId);
+        final var serializedPolicyRuleDeviceIds =
+                deviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var expectedPolicyRuleService =
+                Policy.PolicyRuleService.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .setServiceId(serializedPolicyRuleServiceId)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var serializedPolicyRuleService = serializer.serialize(policyRuleService);
+
+        assertThat(serializedPolicyRuleService)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleService);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleService() {
+        final var expectedPolicyRuleBasic = createPolicyRuleBasic();
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedDeviceIds = List.of("deviceId1", "deviceId2");
+        final var expectedPolicyRuleService =
+                new PolicyRuleService(expectedPolicyRuleBasic, expectedServiceId, expectedDeviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic);
+        final var serializedPolicyRuleServiceId = serializer.serialize(expectedServiceId);
+        final var serializedPolicyRuleDeviceIds =
+                expectedDeviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var serializedPolicyRuleService =
+                Policy.PolicyRuleService.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .setServiceId(serializedPolicyRuleServiceId)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var policyRuleService = serializer.deserialize(serializedPolicyRuleService);
+
+        assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleDevice() {
+        final var policyRuleBasic = createPolicyRuleBasic();
+        final var deviceIds = List.of("deviceId1", "deviceId2");
+
+        final var policyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+        final var serializedPolicyRuleDeviceIds =
+                deviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var expectedPolicyRuleDevice =
+                Policy.PolicyRuleDevice.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var serializedPolicyRuleDevice = serializer.serialize(policyRuleDevice);
+
+        assertThat(serializedPolicyRuleDevice)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleDevice);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleDevice() {
+        final var expectedPolicyRuleBasic = createPolicyRuleBasic();
+        final var expectedDeviceIds = List.of("deviceId1", "deviceId2");
+        final var expectedPolicyRuleDevice =
+                new PolicyRuleDevice(expectedPolicyRuleBasic, expectedDeviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic);
+        final var serializedPolicyRuleDeviceIds =
+                expectedDeviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var serializedPolicyRuleDevice =
+                Policy.PolicyRuleDevice.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var policyRuleDevice = serializer.deserialize(serializedPolicyRuleDevice);
+
+        assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice);
+    }
+
+    @Test
+    void shouldSerializeKpiId() {
+        final var kpiId = "kpiId";
+
+        final var kpiIdUuid = serializer.serializeUuid(kpiId);
+
+        final var expectedKpiId = Monitoring.KpiId.newBuilder().setKpiId(kpiIdUuid).build();
+
+        final var serializedKpiId = serializer.serializeKpiId(kpiId);
+
+        assertThat(serializedKpiId).usingRecursiveComparison().isEqualTo(expectedKpiId);
+    }
+
+    @Test
+    void shouldDeserializeKpiId() {
+        final var expectedKpiId = "expectedKpiId";
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(expectedKpiId);
+        final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        final var kpiId = serializer.deserialize(serializedKpiId);
+
+        assertThat(kpiId).isEqualTo(expectedKpiId);
+    }
+
+    @Test
+    void shouldSerializeKpi() {
+        final var expectedKpiId = "expectedKpiId";
+        final var expectedTimestamp = "expectedTimestamp";
+        final var expectedKpiValue = new FloatKpiValue(643.45f);
+
+        final var kpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue);
+
+        final var serializedKpiId = serializer.serializeKpiId(expectedKpiId);
+        final var serializedKpiValue = serializer.serialize(expectedKpiValue);
+
+        final var expectedKpi =
+                Monitoring.Kpi.newBuilder()
+                        .setKpiId(serializedKpiId)
+                        .setTimestamp(expectedTimestamp)
+                        .setKpiValue(serializedKpiValue)
+                        .build();
+
+        final var serializedKpi = serializer.serialize(kpi);
+
+        assertThat(serializedKpi).usingRecursiveComparison().isEqualTo(expectedKpi);
+    }
+
+    @Test
+    void shouldDeserializeKpi() {
+        final var expectedKpiId = "expectedKpiId";
+        final var expectedTimestamp = "expectedTimestamp";
+        final var expectedKpiValue = new BooleanKpiValue(true);
+        final var expectedKpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue);
+
+        final var serializedKpi = serializer.serialize(expectedKpi);
+
+        final var kpi = serializer.deserialize(serializedKpi);
+
+        assertThat(kpi).usingRecursiveComparison().isEqualTo(expectedKpi);
+    }
+
+    @Test
+    void shouldSerializeKpisList() {
+        final var expectedKpiIdA = "expectedKpiIdA";
+        final var expectedTimestampA = "expectedTimestampA";
+        final var expectedKpiValueA = new FloatKpiValue(643.45f);
+        final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA);
+        final var serializedKpiValueA = serializer.serialize(expectedKpiValueA);
+        final var kpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA);
+
+        final var expectedKpiIdB = "expectedKpiIdB";
+        final var expectedTimestampB = "expectedTimestampB";
+        final var expectedKpiValueB = new IntegerKpiValue(32);
+        final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB);
+        final var serializedKpiValueB = serializer.serialize(expectedKpiValueB);
+        final var kpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB);
+
+        final var kpis = List.of(kpiA, kpiB);
+
+        final var expectedKpiA =
+                Monitoring.Kpi.newBuilder()
+                        .setKpiId(serializedKpiIdA)
+                        .setTimestamp(expectedTimestampA)
+                        .setKpiValue(serializedKpiValueA)
+                        .build();
+
+        final var expectedKpiB =
+                Monitoring.Kpi.newBuilder()
+                        .setKpiId(serializedKpiIdB)
+                        .setTimestamp(expectedTimestampB)
+                        .setKpiValue(serializedKpiValueB)
+                        .build();
+
+        final var expectedKpis = List.of(expectedKpiA, expectedKpiB);
+
+        final var serializedKpis = serializer.serialize(kpis);
+
+        assertThat(serializedKpis).usingRecursiveComparison().isEqualTo(expectedKpis);
+    }
+
+    @Test
+    void shouldDeserializeKpisList() {
+        final var expectedKpiIdA = "expectedKpiIdA";
+        final var expectedTimestampA = "expectedTimestampA";
+        final var expectedKpiValueA = new FloatKpiValue(643.45f);
+        final var serializedKpiIdA = serializer.serializeKpiId(expectedKpiIdA);
+        final var serializedKpiValueA = serializer.serialize(expectedKpiValueA);
+        final var expectedKpiA = new Kpi(expectedKpiIdA, expectedTimestampA, expectedKpiValueA);
+
+        final var expectedKpiIdB = "expectedKpiIdB";
+        final var expectedTimestampB = "expectedTimestampB";
+        final var expectedKpiValueB = new IntegerKpiValue(32);
+        final var serializedKpiIdB = serializer.serializeKpiId(expectedKpiIdB);
+        final var serializedKpiValueB = serializer.serialize(expectedKpiValueB);
+        final var expectedKpiB = new Kpi(expectedKpiIdB, expectedTimestampB, expectedKpiValueB);
+
+        final var expectedKpis = List.of(expectedKpiA, expectedKpiB);
+
+        final var serializedKpiA =
+                Monitoring.Kpi.newBuilder()
+                        .setKpiId(serializedKpiIdA)
+                        .setTimestamp(expectedTimestampA)
+                        .setKpiValue(serializedKpiValueA)
+                        .build();
+
+        final var serializedKpiB =
+                Monitoring.Kpi.newBuilder()
+                        .setKpiId(serializedKpiIdB)
+                        .setTimestamp(expectedTimestampB)
+                        .setKpiValue(serializedKpiValueB)
+                        .build();
+
+        final var serializedKpis = List.of(serializedKpiA, serializedKpiB);
+
+        final var kpis = serializer.deserialize(serializedKpis);
+
+        assertThat(kpis).usingRecursiveComparison().isEqualTo(expectedKpis);
+    }
+
+    @Test
+    void shouldSerializeKpiDescriptor() {
+        final var expectedKpiDescription = "expectedKpiDescription";
+        final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED;
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var expectedTopologyId = new TopologyId("contextId", "topologyId");
+        final var expectedEndPointId =
+                new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId");
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedSliceId = new SliceId("contextId", "sliceId");
+
+        final var kpiDescriptor =
+                new KpiDescriptor(
+                        expectedKpiDescription,
+                        expectedKpiSampleType,
+                        expectedDeviceId,
+                        expectedEndPointId,
+                        expectedServiceId,
+                        expectedSliceId);
+
+        final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedSliceId = serializer.serialize(expectedSliceId);
+
+        final var expectedKpiDescriptor =
+                Monitoring.KpiDescriptor.newBuilder()
+                        .setKpiDescription(expectedKpiDescription)
+                        .setKpiSampleType(serializedKpiSampleType)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointId(serializedEndPointId)
+                        .setServiceId(serializedServiceId)
+                        .setSliceId(serializedSliceId)
+                        .build();
+
+        final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor);
+
+        assertThat(serializedKpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor);
+    }
+
+    @Test
+    void shouldDeserializeKpiDescriptor() {
+        final var expectedKpiDescription = "expectedKpiDescription";
+        final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED;
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var expectedTopologyId = new TopologyId("contextId", "topologyId");
+        final var expectedEndPointId =
+                new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId");
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedSliceId = new SliceId("contextId", "sliceId");
+
+        final var expectedKpiDescriptor =
+                new KpiDescriptor(
+                        expectedKpiDescription,
+                        expectedKpiSampleType,
+                        expectedDeviceId,
+                        expectedEndPointId,
+                        expectedServiceId,
+                        expectedSliceId);
+
+        final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedSliceId = serializer.serialize(expectedSliceId);
+
+        final var serializedKpiDescriptor =
+                Monitoring.KpiDescriptor.newBuilder()
+                        .setKpiDescription(expectedKpiDescription)
+                        .setKpiSampleType(serializedKpiSampleType)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointId(serializedEndPointId)
+                        .setServiceId(serializedServiceId)
+                        .setSliceId(serializedSliceId)
+                        .build();
+
+        final var kpiDescriptor = serializer.deserialize(serializedKpiDescriptor);
+
+        assertThat(kpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor);
+    }
+
+    @Test
+    void shouldSerializeDeviceConfig() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
+        final var expectedConfigRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
+        final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleA =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedConfigRuleCustomA)
+                        .build();
+        final var expectedConfigRuleB =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setCustom(expectedConfigRuleCustomB)
+                        .build();
+
+        final var expectedDeviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder()
+                        .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB))
+                        .build();
+
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB);
+
+        final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA);
+        final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB);
+
+        final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB));
+        final var serializedDeviceConfig = serializer.serialize(deviceConfig);
+
+        assertThat(serializedDeviceConfig).isEqualTo(expectedDeviceConfig);
+    }
+
+    @Test
+    void shouldDeserializeDeviceConfig() {
+        final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA);
+        final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB);
+
+        final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA);
+        final var expectedConfigRuleB =
+                new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB);
+
+        final var expectedDeviceConfig =
+                new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB));
+
+        final var configRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+
+        final var configRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
+        final var configRuleA =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(configRuleCustomA)
+                        .build();
+        final var configRuleB =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setCustom(configRuleCustomB)
+                        .build();
+        final var serializedDeviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder()
+                        .addAllConfigRules(List.of(configRuleA, configRuleB))
+                        .build();
+        final var deviceConfig = serializer.deserialize(serializedDeviceConfig);
+
+        assertThat(deviceConfig).usingRecursiveComparison().isEqualTo(expectedDeviceConfig);
+    }
+
+    private static Stream<Arguments> provideOperationalStatusEnum() {
+        return Stream.of(
+                Arguments.of(
+                        DeviceOperationalStatus.ENABLED,
+                        DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED),
+                Arguments.of(
+                        DeviceOperationalStatus.DISABLED,
+                        DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED),
+                Arguments.of(
+                        DeviceOperationalStatus.UNDEFINED,
+                        DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideOperationalStatusEnum")
+    void shouldSerializeOperationalStatusEnum(
+            DeviceOperationalStatus opStatus,
+            ContextOuterClass.DeviceOperationalStatusEnum expectedOpStatus) {
+        final var serializedOpStatus = serializer.serialize(opStatus);
+        assertThat(serializedOpStatus.getNumber()).isEqualTo(expectedOpStatus.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideOperationalStatusEnum")
+    void shouldDeserializeOperationalStatusEnum(
+            DeviceOperationalStatus expectedOpStatus,
+            ContextOuterClass.DeviceOperationalStatusEnum serializedOpStatus) {
+        final var operationalStatus = serializer.deserialize(serializedOpStatus);
+        assertThat(operationalStatus).isEqualTo(expectedOpStatus);
+    }
+
+    private static Stream<Arguments> provideDeviceDriverEnum() {
+        return Stream.of(
+                Arguments.of(
+                        DeviceDriverEnum.OPENCONFIG,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG),
+                Arguments.of(
+                        DeviceDriverEnum.TRANSPORT_API,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API),
+                Arguments.of(DeviceDriverEnum.P4, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4),
+                Arguments.of(
+                        DeviceDriverEnum.IETF_NETWORK_TOPOLOGY,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY),
+                Arguments.of(
+                        DeviceDriverEnum.ONF_TR_352,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
+                Arguments.of(
+                        DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldSerializeDeviceDriverEnum(
+            DeviceDriverEnum deviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum expectedDeviceDriverEnum) {
+        final var serializedDeviceDriverEnum = serializer.serialize(deviceDriverEnum);
+
+        assertThat(serializedDeviceDriverEnum.getNumber())
+                .isEqualTo(expectedDeviceDriverEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldDeserializeDeviceDriverEnum(
+            DeviceDriverEnum expectedDeviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        final var deviceDriverEnum = serializer.deserialize(serializedDeviceDriverEnum);
+
+        assertThat(deviceDriverEnum).isEqualTo(expectedDeviceDriverEnum);
+    }
+
+    @Test
+    void shouldSerializeEndPoint() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var endPointType = "endPointType";
+        final var kpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var locationTypeRegion = new LocationTypeRegion("ATH");
+        final var location = new Location(locationTypeRegion);
+        final var endPoint =
+                new EndPointBuilder(endPointId, endPointType, kpiSampleTypes).location(location).build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream()
+                        .map(kpiSampleType -> serializer.serialize(kpiSampleType))
+                        .collect(Collectors.toList());
+        final var serializedLocation = serializer.serialize(location);
+
+        final var expectedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedLocation)
+                        .build();
+
+        final var serializedEndPoint = serializer.serialize(endPoint);
+
+        assertThat(serializedEndPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldDeserializeEndPoint() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+        final var expectedEndPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+        final var expectedEndPointType = "expectedEndPointType";
+        final var expectedKpiSampleTypes =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+
+        final var expectedLocationTypeRegion = new LocationTypeRegion("ATH");
+        final var expectedLocation = new Location(expectedLocationTypeRegion);
+
+        final var expectedEndPoint =
+                new EndPointBuilder(expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes)
+                        .location(expectedLocation)
+                        .build();
+
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var serializedKpiSampleTypes =
+                expectedKpiSampleTypes.stream()
+                        .map(kpiSampleType -> serializer.serialize(kpiSampleType))
+                        .collect(Collectors.toList());
+        final var serializedLocation = serializer.serialize(expectedLocation);
+
+        final var serializedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(expectedEndPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedLocation)
+                        .build();
+
+        final var endPoint = serializer.deserialize(serializedEndPoint);
+
+        assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldSerializeDevice() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
+        final var expectedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedConfigRuleCustomA)
+                        .build();
+
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        final var expectedDeviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
+
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
+
+        deviceBuilder.setDeviceId(serializedDeviceId);
+        deviceBuilder.setDeviceType("deviceType");
+        deviceBuilder.setDeviceConfig(expectedDeviceConfig);
+        deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
+        final var expectedDevice = deviceBuilder.build();
+
+        final var device =
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        deviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
+        final var serializedDevice = serializer.serialize(device);
+
+        assertThat(serializedDevice).isEqualTo(expectedDevice);
+    }
+
+    @Test
+    void shouldDeserializeDevice() {
+        final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+
+        final var expectedConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.DELETE, configRuleType)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        final var endPointTypeA = "endPointTypeA";
+        final var kpiSampleTypesA =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionA = new LocationTypeRegion("ATH");
+        final var locationA = new Location(locationTypeRegionA);
+        final var endPointA =
+                new EndPointBuilder(endPointIdA, endPointTypeA, kpiSampleTypesA)
+                        .location(locationA)
+                        .build();
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        final var endPointTypeB = "endPointTypeB";
+        final var kpiSampleTypesB =
+                List.of(KpiSampleType.BYTES_RECEIVED, KpiSampleType.BYTES_TRANSMITTED);
+        final var locationTypeRegionB = new LocationTypeRegion("ATH");
+        final var locationB = new Location(locationTypeRegionB);
+        final var endPointB =
+                new EndPointBuilder(endPointIdB, endPointTypeB, kpiSampleTypesB)
+                        .location(locationB)
+                        .build();
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        final var expectedDevice =
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        expectedConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
+
+        final var configRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setCustom(expectedConfigRuleCustom)
+                        .build();
+        final var deviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDeviceOperationalStatus =
+                serializer.serialize(DeviceOperationalStatus.ENABLED);
+
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
+
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
+        deviceBuilder.setDeviceId(serializedDeviceId);
+        deviceBuilder.setDeviceType("deviceType");
+        deviceBuilder.setDeviceConfig(deviceConfig);
+        deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
+        final var serializedDevice = deviceBuilder.build();
+        final var device = serializer.deserialize(serializedDevice);
+
+        assertThat(device).usingRecursiveComparison().isEqualTo(expectedDevice);
+    }
+
+    @Test
+    void shouldSerializeEmpty() {
+        final var empty = new Empty();
+        final var expectedEmpty = ContextOuterClass.Empty.newBuilder().build();
+
+        final var serializeEmpty = serializer.serializeEmpty(empty);
+
+        assertThat(serializeEmpty).isEqualTo(expectedEmpty);
+    }
+
+    @Test
+    void shouldDeserializeEmpty() {
+        final var expectedEmpty = new Empty();
+
+        final var serializedEmpty = serializer.serializeEmpty(expectedEmpty);
+
+        final var empty = serializer.deserializeEmpty(serializedEmpty);
+
+        assertThat(empty).usingRecursiveComparison().isEqualTo(expectedEmpty);
+    }
+
+    @Test
+    void shouldSerializeUuid() {
+        final var expectedUuid = "uuid";
+
+        final var serializeUuid = serializer.serializeUuid(expectedUuid);
+
+        assertThat(serializeUuid.getUuid()).isEqualTo(expectedUuid);
+    }
+
+    @Test
+    void shouldDeserializeUuid() {
+        final var expectedUuid = "uuid";
+
+        final var uuid = serializer.deserialize(Uuid.newBuilder().setUuid(expectedUuid).build());
+
+        assertThat(uuid).isEqualTo(expectedUuid);
+    }
+}
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index 09db33413e7785bb484fdd992f81894ac2dcafbf..45a64fabb43bab645e97e9d80bc1825242006dce 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -29764,32 +29764,47 @@ public final class ContextOuterClass {
     context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
 
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    boolean hasSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    context.ContextOuterClass.SliceConfig getSliceConfig();
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder();
+
+    /**
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return Whether the sliceOwner field is set.
      */
     boolean hasSliceOwner();
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return The sliceOwner.
      */
     context.ContextOuterClass.SliceOwner getSliceOwner();
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
     context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
 
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return Whether the timestamp field is set.
      */
     boolean hasTimestamp();
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return The timestamp.
      */
     context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      */
     context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
@@ -29906,6 +29921,19 @@ public final class ContextOuterClass {
               break;
             }
             case 58: {
+              context.ContextOuterClass.SliceConfig.Builder subBuilder = null;
+              if (sliceConfig_ != null) {
+                subBuilder = sliceConfig_.toBuilder();
+              }
+              sliceConfig_ = input.readMessage(context.ContextOuterClass.SliceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceConfig_);
+                sliceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
               context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
               if (sliceOwner_ != null) {
                 subBuilder = sliceOwner_.toBuilder();
@@ -29918,7 +29946,7 @@ public final class ContextOuterClass {
 
               break;
             }
-            case 66: {
+            case 74: {
               context.ContextOuterClass.Timestamp.Builder subBuilder = null;
               if (timestamp_ != null) {
                 subBuilder = timestamp_.toBuilder();
@@ -30187,10 +30215,36 @@ public final class ContextOuterClass {
       return getSliceStatus();
     }
 
-    public static final int SLICE_OWNER_FIELD_NUMBER = 7;
+    public static final int SLICE_CONFIG_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceConfig sliceConfig_;
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return Whether the sliceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceConfig() {
+      return sliceConfig_ != null;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     * @return The sliceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfig getSliceConfig() {
+      return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+    }
+    /**
+     * <code>.context.SliceConfig slice_config = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+      return getSliceConfig();
+    }
+
+    public static final int SLICE_OWNER_FIELD_NUMBER = 8;
     private context.ContextOuterClass.SliceOwner sliceOwner_;
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return Whether the sliceOwner field is set.
      */
     @java.lang.Override
@@ -30198,7 +30252,7 @@ public final class ContextOuterClass {
       return sliceOwner_ != null;
     }
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      * @return The sliceOwner.
      */
     @java.lang.Override
@@ -30206,17 +30260,17 @@ public final class ContextOuterClass {
       return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
     }
     /**
-     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * <code>.context.SliceOwner slice_owner = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
       return getSliceOwner();
     }
 
-    public static final int TIMESTAMP_FIELD_NUMBER = 8;
+    public static final int TIMESTAMP_FIELD_NUMBER = 9;
     private context.ContextOuterClass.Timestamp timestamp_;
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return Whether the timestamp field is set.
      */
     @java.lang.Override
@@ -30224,7 +30278,7 @@ public final class ContextOuterClass {
       return timestamp_ != null;
     }
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      * @return The timestamp.
      */
     @java.lang.Override
@@ -30232,7 +30286,7 @@ public final class ContextOuterClass {
       return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
     }
     /**
-     * <code>.context.Timestamp timestamp = 8;</code>
+     * <code>.context.Timestamp timestamp = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
@@ -30271,11 +30325,14 @@ public final class ContextOuterClass {
       if (sliceStatus_ != null) {
         output.writeMessage(6, getSliceStatus());
       }
+      if (sliceConfig_ != null) {
+        output.writeMessage(7, getSliceConfig());
+      }
       if (sliceOwner_ != null) {
-        output.writeMessage(7, getSliceOwner());
+        output.writeMessage(8, getSliceOwner());
       }
       if (timestamp_ != null) {
-        output.writeMessage(8, getTimestamp());
+        output.writeMessage(9, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -30310,13 +30367,17 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(6, getSliceStatus());
       }
+      if (sliceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceConfig());
+      }
       if (sliceOwner_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, getSliceOwner());
+          .computeMessageSize(8, getSliceOwner());
       }
       if (timestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, getTimestamp());
+          .computeMessageSize(9, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -30351,6 +30412,11 @@ public final class ContextOuterClass {
         if (!getSliceStatus()
             .equals(other.getSliceStatus())) return false;
       }
+      if (hasSliceConfig() != other.hasSliceConfig()) return false;
+      if (hasSliceConfig()) {
+        if (!getSliceConfig()
+            .equals(other.getSliceConfig())) return false;
+      }
       if (hasSliceOwner() != other.hasSliceOwner()) return false;
       if (hasSliceOwner()) {
         if (!getSliceOwner()
@@ -30396,6 +30462,10 @@ public final class ContextOuterClass {
         hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
         hash = (53 * hash) + getSliceStatus().hashCode();
       }
+      if (hasSliceConfig()) {
+        hash = (37 * hash) + SLICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConfig().hashCode();
+      }
       if (hasSliceOwner()) {
         hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
         hash = (53 * hash) + getSliceOwner().hashCode();
@@ -30577,6 +30647,12 @@ public final class ContextOuterClass {
           sliceStatus_ = null;
           sliceStatusBuilder_ = null;
         }
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
         if (sliceOwnerBuilder_ == null) {
           sliceOwner_ = null;
         } else {
@@ -30662,6 +30738,11 @@ public final class ContextOuterClass {
         } else {
           result.sliceStatus_ = sliceStatusBuilder_.build();
         }
+        if (sliceConfigBuilder_ == null) {
+          result.sliceConfig_ = sliceConfig_;
+        } else {
+          result.sliceConfig_ = sliceConfigBuilder_.build();
+        }
         if (sliceOwnerBuilder_ == null) {
           result.sliceOwner_ = sliceOwner_;
         } else {
@@ -30830,6 +30911,9 @@ public final class ContextOuterClass {
         if (other.hasSliceStatus()) {
           mergeSliceStatus(other.getSliceStatus());
         }
+        if (other.hasSliceConfig()) {
+          mergeSliceConfig(other.getSliceConfig());
+        }
         if (other.hasSliceOwner()) {
           mergeSliceOwner(other.getSliceOwner());
         }
@@ -32064,18 +32148,137 @@ public final class ContextOuterClass {
         return sliceStatusBuilder_;
       }
 
+      private context.ContextOuterClass.SliceConfig sliceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> sliceConfigBuilder_;
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return Whether the sliceConfig field is set.
+       */
+      public boolean hasSliceConfig() {
+        return sliceConfigBuilder_ != null || sliceConfig_ != null;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       * @return The sliceConfig.
+       */
+      public context.ContextOuterClass.SliceConfig getSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          return sliceConfig_ == null ? context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        } else {
+          return sliceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder setSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceConfig_ = value;
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder setSliceConfig(
+          context.ContextOuterClass.SliceConfig.Builder builderForValue) {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder mergeSliceConfig(context.ContextOuterClass.SliceConfig value) {
+        if (sliceConfigBuilder_ == null) {
+          if (sliceConfig_ != null) {
+            sliceConfig_ =
+              context.ContextOuterClass.SliceConfig.newBuilder(sliceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            sliceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          sliceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public Builder clearSliceConfig() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfig_ = null;
+          onChanged();
+        } else {
+          sliceConfig_ = null;
+          sliceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfig.Builder getSliceConfigBuilder() {
+        
+        onChanged();
+        return getSliceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      public context.ContextOuterClass.SliceConfigOrBuilder getSliceConfigOrBuilder() {
+        if (sliceConfigBuilder_ != null) {
+          return sliceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceConfig_ == null ?
+              context.ContextOuterClass.SliceConfig.getDefaultInstance() : sliceConfig_;
+        }
+      }
+      /**
+       * <code>.context.SliceConfig slice_config = 7;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder> 
+          getSliceConfigFieldBuilder() {
+        if (sliceConfigBuilder_ == null) {
+          sliceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceConfig, context.ContextOuterClass.SliceConfig.Builder, context.ContextOuterClass.SliceConfigOrBuilder>(
+                  getSliceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          sliceConfig_ = null;
+        }
+        return sliceConfigBuilder_;
+      }
+
       private context.ContextOuterClass.SliceOwner sliceOwner_;
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> sliceOwnerBuilder_;
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        * @return Whether the sliceOwner field is set.
        */
       public boolean hasSliceOwner() {
         return sliceOwnerBuilder_ != null || sliceOwner_ != null;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        * @return The sliceOwner.
        */
       public context.ContextOuterClass.SliceOwner getSliceOwner() {
@@ -32086,7 +32289,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
         if (sliceOwnerBuilder_ == null) {
@@ -32102,7 +32305,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder setSliceOwner(
           context.ContextOuterClass.SliceOwner.Builder builderForValue) {
@@ -32116,7 +32319,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
         if (sliceOwnerBuilder_ == null) {
@@ -32134,7 +32337,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public Builder clearSliceOwner() {
         if (sliceOwnerBuilder_ == null) {
@@ -32148,7 +32351,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
         
@@ -32156,7 +32359,7 @@ public final class ContextOuterClass {
         return getSliceOwnerFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
         if (sliceOwnerBuilder_ != null) {
@@ -32167,7 +32370,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * <code>.context.SliceOwner slice_owner = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
@@ -32187,14 +32390,14 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        * @return Whether the timestamp field is set.
        */
       public boolean hasTimestamp() {
         return timestampBuilder_ != null || timestamp_ != null;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        * @return The timestamp.
        */
       public context.ContextOuterClass.Timestamp getTimestamp() {
@@ -32205,7 +32408,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
         if (timestampBuilder_ == null) {
@@ -32221,7 +32424,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder setTimestamp(
           context.ContextOuterClass.Timestamp.Builder builderForValue) {
@@ -32235,7 +32438,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
         if (timestampBuilder_ == null) {
@@ -32253,7 +32456,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public Builder clearTimestamp() {
         if (timestampBuilder_ == null) {
@@ -32267,7 +32470,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
         
@@ -32275,7 +32478,7 @@ public final class ContextOuterClass {
         return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
         if (timestampBuilder_ != null) {
@@ -32286,7 +32489,7 @@ public final class ContextOuterClass {
         }
       }
       /**
-       * <code>.context.Timestamp timestamp = 8;</code>
+       * <code>.context.Timestamp timestamp = 9;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> 
@@ -33650,55 +33853,55 @@ public final class ContextOuterClass {
 
   }
 
-  public interface SliceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+  public interface SliceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceIdsList();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.SliceId getSliceIds(int index);
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    int getSliceIdsCount();
+    int getConfigRulesCount();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.SliceIdList}
+   * Protobuf type {@code context.SliceConfig}
    */
-  public static final class SliceIdList extends
+  public static final class SliceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceIdList)
-      SliceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceConfig)
+      SliceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceIdList.newBuilder() to construct.
-    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceConfig.newBuilder() to construct.
+    private SliceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceIdList() {
-      sliceIds_ = java.util.Collections.emptyList();
+    private SliceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceIdList();
+      return new SliceConfig();
     }
 
     @java.lang.Override
@@ -33706,7 +33909,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceIdList(
+    private SliceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33727,11 +33930,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              sliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -33750,7 +33953,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -33758,55 +33961,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+              context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
     }
 
-    public static final int SLICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-      return sliceIds_;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList() {
-      return sliceIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public int getSliceIdsCount() {
-      return sliceIds_.size();
+    public int getConfigRulesCount() {
+      return configRules_.size();
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceIds(int index) {
-      return sliceIds_.get(index);
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
         int index) {
-      return sliceIds_.get(index);
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33823,8 +34026,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < sliceIds_.size(); i++) {
-        output.writeMessage(1, sliceIds_.get(i));
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -33835,9 +34038,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < sliceIds_.size(); i++) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sliceIds_.get(i));
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33849,13 +34052,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+      context.ContextOuterClass.SliceConfig other = (context.ContextOuterClass.SliceConfig) obj;
 
-      if (!getSliceIdsList()
-          .equals(other.getSliceIdsList())) return false;
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -33867,78 +34070,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceIdsList().hashCode();
+      if (getConfigRulesCount() > 0) {
+        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
+        hash = (53 * hash) + getConfigRulesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.SliceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33951,7 +34154,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33967,26 +34170,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceIdList}
+     * Protobuf type {@code context.SliceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
-        context.ContextOuterClass.SliceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceConfig)
+        context.ContextOuterClass.SliceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+                context.ContextOuterClass.SliceConfig.class, context.ContextOuterClass.SliceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33999,17 +34202,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceIdsFieldBuilder();
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -34017,17 +34220,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
+      public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList build() {
-        context.ContextOuterClass.SliceIdList result = buildPartial();
+      public context.ContextOuterClass.SliceConfig build() {
+        context.ContextOuterClass.SliceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34035,17 +34238,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList buildPartial() {
-        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
+      public context.ContextOuterClass.SliceConfig buildPartial() {
+        context.ContextOuterClass.SliceConfig result = new context.ContextOuterClass.SliceConfig(this);
         int from_bitField0_ = bitField0_;
-        if (sliceIdsBuilder_ == null) {
+        if (configRulesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.sliceIds_ = sliceIds_;
+          result.configRules_ = configRules_;
         } else {
-          result.sliceIds_ = sliceIdsBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34085,39 +34288,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceIdList) {
-          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
+        if (other instanceof context.ContextOuterClass.SliceConfig) {
+          return mergeFrom((context.ContextOuterClass.SliceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
-        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
-        if (sliceIdsBuilder_ == null) {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIds_.isEmpty()) {
-              sliceIds_ = other.sliceIds_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceConfig other) {
+        if (other == context.ContextOuterClass.SliceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureSliceIdsIsMutable();
-              sliceIds_.addAll(other.sliceIds_);
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
             }
             onChanged();
           }
         } else {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIdsBuilder_.isEmpty()) {
-              sliceIdsBuilder_.dispose();
-              sliceIdsBuilder_ = null;
-              sliceIds_ = other.sliceIds_;
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              sliceIdsBuilder_ = 
+              configRulesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceIdsFieldBuilder() : null;
+                   getConfigRulesFieldBuilder() : null;
             } else {
-              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
+              configRulesBuilder_.addAllMessages(other.configRules_);
             }
           }
         }
@@ -34136,11 +34339,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceIdList parsedMessage = null;
+        context.ContextOuterClass.SliceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34151,244 +34354,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
         java.util.Collections.emptyList();
-      private void ensureSliceIdsIsMutable() {
+      private void ensureConfigRulesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-        if (sliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
         } else {
-          return sliceIdsBuilder_.getMessageList();
+          return configRulesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public int getSliceIdsCount() {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.size();
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return sliceIdsBuilder_.getCount();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
         } else {
-          return sliceIdsBuilder_.getMessage(index);
+          return configRulesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, value);
+          configRulesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, builderForValue.build());
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.setMessage(index, builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(value);
+          configRulesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, value);
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(index, value);
+          configRulesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(builderForValue.build());
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(builderForValue.build());
+          configRulesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, builderForValue.build());
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
           onChanged();
         } else {
-          sliceIdsBuilder_.addMessage(index, builderForValue.build());
+          configRulesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder addAllSliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceIds_);
+              values, configRules_);
           onChanged();
         } else {
-          sliceIdsBuilder_.addAllMessages(values);
+          configRulesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearSliceIds() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdsBuilder_.clear();
+          configRulesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder removeSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.remove(index);
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          sliceIdsBuilder_.remove(index);
+          configRulesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
           int index) {
-        return getSliceIdsFieldBuilder().getBuilder(index);
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
           int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);  } else {
-          return sliceIdsBuilder_.getMessageOrBuilder(index);
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceIdsOrBuilderList() {
-        if (sliceIdsBuilder_ != null) {
-          return sliceIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
-        return getSliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
           int index) {
-        return getSliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceIdsBuilderList() {
-        return getSliceIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdsFieldBuilder() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceIds_,
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> 
+          getConfigRulesFieldBuilder() {
+        if (configRulesBuilder_ == null) {
+          configRulesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder>(
+                  configRules_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceIds_ = null;
+          configRules_ = null;
         }
-        return sliceIdsBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34403,95 +34606,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
+      // @@protoc_insertion_point(builder_scope:context.SliceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceIdList)
-    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceConfig)
+    private static final context.ContextOuterClass.SliceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceConfig();
     }
 
-    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
+    private static final com.google.protobuf.Parser<SliceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<SliceConfig>() {
       @java.lang.Override
-      public SliceIdList parsePartialFrom(
+      public SliceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceIdList(input, extensionRegistry);
+        return new SliceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceIdList> parser() {
+    public static com.google.protobuf.Parser<SliceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
+    public com.google.protobuf.Parser<SliceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceList)
+  public interface SliceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Slice> 
-        getSlicesList();
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.Slice getSlices(int index);
+    context.ContextOuterClass.SliceId getSliceIds(int index);
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    int getSlicesCount();
+    int getSliceIdsCount();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.SliceList}
+   * Protobuf type {@code context.SliceIdList}
    */
-  public static final class SliceList extends
+  public static final class SliceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceList)
-      SliceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceIdList)
+      SliceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceList.newBuilder() to construct.
-    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceIdList.newBuilder() to construct.
+    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceList() {
-      slices_ = java.util.Collections.emptyList();
+    private SliceIdList() {
+      sliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceList();
+      return new SliceIdList();
     }
 
     @java.lang.Override
@@ -34499,7 +34702,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceList(
+    private SliceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34520,11 +34723,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              slices_.add(
-                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -34543,7 +34746,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          slices_ = java.util.Collections.unmodifiableList(slices_);
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -34551,55 +34754,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
     }
 
-    public static final int SLICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Slice> slices_;
+    public static final int SLICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-      return slices_;
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList() {
-      return slices_;
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public int getSlicesCount() {
-      return slices_.size();
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Slice getSlices(int index) {
-      return slices_.get(index);
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
         int index) {
-      return slices_.get(index);
+      return sliceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34616,8 +34819,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < slices_.size(); i++) {
-        output.writeMessage(1, slices_.get(i));
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(1, sliceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -34628,9 +34831,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < slices_.size(); i++) {
+      for (int i = 0; i < sliceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, slices_.get(i));
+          .computeMessageSize(1, sliceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34642,13 +34845,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
+      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
 
-      if (!getSlicesList()
-          .equals(other.getSlicesList())) return false;
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34660,78 +34863,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getSlicesCount() > 0) {
-        hash = (37 * hash) + SLICES_FIELD_NUMBER;
-        hash = (53 * hash) + getSlicesList().hashCode();
+      if (getSliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceIdList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceList parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -34744,7 +34947,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -34760,26 +34963,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceList}
+     * Protobuf type {@code context.SliceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceList)
-        context.ContextOuterClass.SliceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceIdList)
+        context.ContextOuterClass.SliceIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -34792,17 +34995,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSlicesFieldBuilder();
+          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          slicesBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
@@ -34810,17 +35013,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceList.getDefaultInstance();
+      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList build() {
-        context.ContextOuterClass.SliceList result = buildPartial();
+      public context.ContextOuterClass.SliceIdList build() {
+        context.ContextOuterClass.SliceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34828,17 +35031,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList buildPartial() {
-        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+      public context.ContextOuterClass.SliceIdList buildPartial() {
+        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
         int from_bitField0_ = bitField0_;
-        if (slicesBuilder_ == null) {
+        if (sliceIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            slices_ = java.util.Collections.unmodifiableList(slices_);
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.slices_ = slices_;
+          result.sliceIds_ = sliceIds_;
         } else {
-          result.slices_ = slicesBuilder_.build();
+          result.sliceIds_ = sliceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -34878,39 +35081,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceList) {
-          return mergeFrom((context.ContextOuterClass.SliceList)other);
+        if (other instanceof context.ContextOuterClass.SliceIdList) {
+          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
-        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
-        if (slicesBuilder_ == null) {
-          if (!other.slices_.isEmpty()) {
-            if (slices_.isEmpty()) {
-              slices_ = other.slices_;
+      public Builder mergeFrom(context.ContextOuterClass.SliceIdList other) {
+        if (other == context.ContextOuterClass.SliceIdList.getDefaultInstance()) return this;
+        if (sliceIdsBuilder_ == null) {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIds_.isEmpty()) {
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureSlicesIsMutable();
-              slices_.addAll(other.slices_);
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.slices_.isEmpty()) {
-            if (slicesBuilder_.isEmpty()) {
-              slicesBuilder_.dispose();
-              slicesBuilder_ = null;
-              slices_ = other.slices_;
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              slicesBuilder_ = 
+              sliceIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSlicesFieldBuilder() : null;
+                   getSliceIdsFieldBuilder() : null;
             } else {
-              slicesBuilder_.addAllMessages(other.slices_);
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
             }
           }
         }
@@ -34929,11 +35132,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceList parsedMessage = null;
+        context.ContextOuterClass.SliceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34944,244 +35147,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
         java.util.Collections.emptyList();
-      private void ensureSlicesIsMutable() {
+      private void ensureSliceIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
 
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-        if (slicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(slices_);
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
         } else {
-          return slicesBuilder_.getMessageList();
+          return sliceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public int getSlicesCount() {
-        if (slicesBuilder_ == null) {
-          return slices_.size();
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
         } else {
-          return slicesBuilder_.getCount();
+          return sliceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice getSlices(int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
         } else {
-          return slicesBuilder_.getMessage(index);
+          return sliceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.set(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, value);
+          sliceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.set(index, builderForValue.build());
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.setMessage(index, builderForValue.build());
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.add(value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(value);
+          sliceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSlicesIsMutable();
-          slices_.add(index, value);
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, value);
+          sliceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(builderForValue.build());
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.addMessage(builderForValue.build());
+          sliceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(index, builderForValue.build());
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          slicesBuilder_.addMessage(index, builderForValue.build());
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder addAllSlices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, slices_);
+              values, sliceIds_);
           onChanged();
         } else {
-          slicesBuilder_.addAllMessages(values);
+          sliceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearSlices() {
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          slicesBuilder_.clear();
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder removeSlices(int index) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.remove(index);
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
           onChanged();
         } else {
-          slicesBuilder_.remove(index);
+          sliceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
           int index) {
-        return getSlicesFieldBuilder().getBuilder(index);
+        return getSliceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
           int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);  } else {
-          return slicesBuilder_.getMessageOrBuilder(index);
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-           getSlicesOrBuilderList() {
-        if (slicesBuilder_ != null) {
-          return slicesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(slices_);
+          return java.util.Collections.unmodifiableList(sliceIds_);
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
-        return getSlicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Slice.getDefaultInstance());
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
           int index) {
-        return getSlicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Slice.getDefaultInstance());
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Slice.Builder> 
-           getSlicesBuilderList() {
-        return getSlicesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
-          getSlicesFieldBuilder() {
-        if (slicesBuilder_ == null) {
-          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
-                  slices_,
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdsFieldBuilder() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          slices_ = null;
+          sliceIds_ = null;
         }
-        return slicesBuilder_;
+        return sliceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -35196,100 +35399,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceList)
+      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceList)
-    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceIdList)
+    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
     }
 
-    public static context.ContextOuterClass.SliceList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceList>
-        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
+    private static final com.google.protobuf.Parser<SliceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
       @java.lang.Override
-      public SliceList parsePartialFrom(
+      public SliceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceList(input, extensionRegistry);
+        return new SliceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceList> parser() {
+    public static com.google.protobuf.Parser<SliceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceList> getParserForType() {
+    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+  public interface SliceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasEvent();
+    java.util.List<context.ContextOuterClass.Slice> 
+        getSlicesList();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.Slice getSlices(int index);
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    int getSlicesCount();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasSliceId();
+    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.SliceEvent}
+   * Protobuf type {@code context.SliceList}
    */
-  public static final class SliceEvent extends
+  public static final class SliceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceEvent)
-      SliceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceList)
+      SliceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceEvent.newBuilder() to construct.
-    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceList.newBuilder() to construct.
+    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceEvent() {
+    private SliceList() {
+      slices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceEvent();
+      return new SliceList();
     }
 
     @java.lang.Override
@@ -35297,7 +35495,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceEvent(
+    private SliceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -35305,6 +35503,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -35316,29 +35515,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
-              }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
-              }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              slices_.add(
+                  input.readMessage(context.ContextOuterClass.Slice.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -35356,73 +35538,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          slices_ = java.util.Collections.unmodifiableList(slices_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
-    }
+    public static final int SLICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Slice> slices_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+      return slices_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList() {
+      return slices_;
     }
-
-    public static final int SLICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public int getSlicesCount() {
+      return slices_.size();
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public context.ContextOuterClass.Slice getSlices(int index) {
+      return slices_.get(index);
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index) {
+      return slices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -35439,11 +35612,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
-      }
-      if (sliceId_ != null) {
-        output.writeMessage(2, getSliceId());
+      for (int i = 0; i < slices_.size(); i++) {
+        output.writeMessage(1, slices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -35454,13 +35624,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (sliceId_ != null) {
+      for (int i = 0; i < slices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceId());
+          .computeMessageSize(1, slices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -35472,21 +35638,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
+      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
+      if (!getSlicesList()
+          .equals(other.getSlicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -35498,82 +35656,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
-      }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
+      if (getSlicesCount() > 0) {
+        hash = (37 * hash) + SLICES_FIELD_NUMBER;
+        hash = (53 * hash) + getSlicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.SliceEvent parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35586,7 +35740,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -35602,26 +35756,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceEvent}
+     * Protobuf type {@code context.SliceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
-        context.ContextOuterClass.SliceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceList)
+        context.ContextOuterClass.SliceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.SliceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -35634,22 +35788,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          slicesBuilder_.clear();
         }
         return this;
       }
@@ -35657,17 +35806,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
+      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent build() {
-        context.ContextOuterClass.SliceEvent result = buildPartial();
+      public context.ContextOuterClass.SliceList build() {
+        context.ContextOuterClass.SliceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -35675,17 +35824,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent buildPartial() {
-        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
+      public context.ContextOuterClass.SliceList buildPartial() {
+        context.ContextOuterClass.SliceList result = new context.ContextOuterClass.SliceList(this);
+        int from_bitField0_ = bitField0_;
+        if (slicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            slices_ = java.util.Collections.unmodifiableList(slices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.slices_ = slices_;
         } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+          result.slices_ = slicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -35725,25 +35874,45 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceEvent) {
-          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
+        if (other instanceof context.ContextOuterClass.SliceList) {
+          return mergeFrom((context.ContextOuterClass.SliceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
-        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+      public Builder mergeFrom(context.ContextOuterClass.SliceList other) {
+        if (other == context.ContextOuterClass.SliceList.getDefaultInstance()) return this;
+        if (slicesBuilder_ == null) {
+          if (!other.slices_.isEmpty()) {
+            if (slices_.isEmpty()) {
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSlicesIsMutable();
+              slices_.addAll(other.slices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.slices_.isEmpty()) {
+            if (slicesBuilder_.isEmpty()) {
+              slicesBuilder_.dispose();
+              slicesBuilder_ = null;
+              slices_ = other.slices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              slicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSlicesFieldBuilder() : null;
+            } else {
+              slicesBuilder_.addAllMessages(other.slices_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
 
       @java.lang.Override
@@ -35756,11 +35925,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.SliceEvent parsedMessage = null;
+        context.ContextOuterClass.SliceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -35769,243 +35938,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Slice> slices_ =
+        java.util.Collections.emptyList();
+      private void ensureSlicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          slices_ = new java.util.ArrayList<context.ContextOuterClass.Slice>(slices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> slicesBuilder_;
 
-      private context.ContextOuterClass.Event event_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+        if (slicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(slices_);
+        } else {
+          return slicesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getSlicesCount() {
+        if (slicesBuilder_ == null) {
+          return slices_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return slicesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.Slice getSlices(int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);
+        } else {
+          return slicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureSlicesIsMutable();
+          slices_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          slicesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
-          } else {
-            event_ = value;
+      public Builder addSlices(context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSlicesIsMutable();
+          slices_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          slicesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSlicesIsMutable();
+          slices_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          slicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
-        
-        onChanged();
-        return getEventFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addSlices(
+          context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          slicesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
-                  getParentForChildren(),
-                  isClean());
-          event_ = null;
+      public Builder addSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          slicesBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.SliceId sliceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
-      /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return The sliceId.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      public Builder addAllSlices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Slice> values) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, slices_);
+          onChanged();
         } else {
-          return sliceIdBuilder_.getMessage();
+          slicesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
+      public Builder clearSlices() {
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          slicesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder removeSlices(int index) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.remove(index);
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (sliceId_ != null) {
-            sliceId_ =
-              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
-          } else {
-            sliceId_ = value;
-          }
-          onChanged();
-        } else {
-          sliceIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.Slice.Builder getSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Slice slices = 1;</code>
+       */
+      public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+          int index) {
+        if (slicesBuilder_ == null) {
+          return slices_.get(index);  } else {
+          return slicesBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+           getSlicesOrBuilderList() {
+        if (slicesBuilder_ != null) {
+          return slicesBuilder_.getMessageOrBuilderList();
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(slices_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
+        return getSlicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceIdFieldBuilder() {
-        if (sliceIdBuilder_ == null) {
-          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  getSliceId(),
+      public java.util.List<context.ContextOuterClass.Slice.Builder> 
+           getSlicesBuilderList() {
+        return getSlicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder> 
+          getSlicesFieldBuilder() {
+        if (slicesBuilder_ == null) {
+          slicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Slice, context.ContextOuterClass.Slice.Builder, context.ContextOuterClass.SliceOrBuilder>(
+                  slices_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          sliceId_ = null;
+          slices_ = null;
         }
-        return sliceIdBuilder_;
+        return slicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -36020,89 +36192,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
+      // @@protoc_insertion_point(builder_scope:context.SliceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceEvent)
-    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceList)
+    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
     }
 
-    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.SliceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
+    private static final com.google.protobuf.Parser<SliceList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
       @java.lang.Override
-      public SliceEvent parsePartialFrom(
+      public SliceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceEvent(input, extensionRegistry);
+        return new SliceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceEvent> parser() {
+    public static com.google.protobuf.Parser<SliceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+    public com.google.protobuf.Parser<SliceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface SliceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasConnectionUuid();
+    boolean hasEvent();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.SliceEvent}
    */
-  public static final class ConnectionId extends
+  public static final class SliceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceEvent)
+      SliceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceEvent.newBuilder() to construct.
+    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private SliceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new SliceEvent();
     }
 
     @java.lang.Override
@@ -36110,7 +36293,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private SliceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36129,14 +36312,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
+              }
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -36162,41 +36358,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
     }
 
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -36213,8 +36435,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionUuid_ != null) {
-        output.writeMessage(1, getConnectionUuid());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(2, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -36225,13 +36450,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionUuid_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+          .computeMessageSize(1, getEvent());
       }
-      size += unknownFields.getSerializedSize();
-      memoizedSize = size;
-      return size;
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
     }
 
     @java.lang.Override
@@ -36239,15 +36468,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -36260,78 +36494,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionUuid()) {
-        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionUuid().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasSliceId()) {
+        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionId parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36344,7 +36582,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36360,30 +36598,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ConnectionId}
+     * Protobuf type {@code context.SliceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
-        context.ContextOuterClass.ConnectionIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceEvent)
+        context.ContextOuterClass.SliceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36401,11 +36635,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
         return this;
       }
@@ -36413,17 +36653,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
+      public context.ContextOuterClass.SliceEvent build() {
+        context.ContextOuterClass.SliceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36431,12 +36671,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId buildPartial() {
-        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
-        if (connectionUuidBuilder_ == null) {
-          result.connectionUuid_ = connectionUuid_;
+      public context.ContextOuterClass.SliceEvent buildPartial() {
+        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -36476,18 +36721,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionId) {
-          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
+        if (other instanceof context.ContextOuterClass.SliceEvent) {
+          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
-        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
-        if (other.hasConnectionUuid()) {
-          mergeConnectionUuid(other.getConnectionUuid());
+      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
+        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -36504,11 +36752,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        context.ContextOuterClass.SliceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36518,214 +36766,339 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid connectionUuid_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return connectionUuidBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionUuid_ = value;
+          event_ = value;
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnectionUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
-          if (connectionUuid_ != null) {
-            connectionUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            connectionUuid_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getConnectionUuidFieldBuilder() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getConnectionUuid(),
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
                   getParentForChildren(),
                   isClean());
-          connectionUuid_ = null;
+          event_ = null;
         }
-        return connectionUuidBuilder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
+        return eventBuilder_;
       }
 
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
+      private context.ContextOuterClass.SliceId sliceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return The sliceId.
+       */
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        } else {
+          return sliceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(value);
+        }
 
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          sliceIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
+          } else {
+            sliceId_ = value;
+          }
+          onChanged();
+        } else {
+          sliceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+        }
+      }
+      /**
+       * <code>.context.SliceId slice_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceIdFieldBuilder() {
+        if (sliceIdBuilder_ == null) {
+          sliceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  getSliceId(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceEvent)
+    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionId>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+    private static final com.google.protobuf.Parser<SliceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public SliceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new SliceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<SliceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L0OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
-    java.lang.String getLspSymbolicName();
+    boolean hasConnectionUuid();
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
-    com.google.protobuf.ByteString
-        getLspSymbolicNameBytes();
+    context.ContextOuterClass.Uuid getConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L0}
+   * <pre>
+   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ConnectionId}
    */
-  public static final class ConnectionSettings_L0 extends
+  public static final class ConnectionId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
-      ConnectionSettings_L0OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L0.newBuilder() to construct.
-    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L0() {
-      lspSymbolicName_ = "";
+    private ConnectionId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L0();
+      return new ConnectionId();
     }
 
     @java.lang.Override
@@ -36733,7 +37106,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L0(
+    private ConnectionId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36752,9 +37125,16 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
+              }
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = subBuilder.buildPartial();
+              }
 
-              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -36778,57 +37158,45 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
     }
 
-    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
-    private volatile java.lang.Object lspSymbolicName_;
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
      */
     @java.lang.Override
-    public java.lang.String getLspSymbolicName() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        lspSymbolicName_ = s;
-        return s;
-      }
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
     }
     /**
-     * <code>string lsp_symbolic_name = 1;</code>
-     * @return The bytes for lspSymbolicName.
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getLspSymbolicNameBytes() {
-      java.lang.Object ref = lspSymbolicName_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        lspSymbolicName_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
     }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+      return getConnectionUuid();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
     public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
@@ -36841,8 +37209,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
+      if (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -36853,8 +37221,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getLspSymbolicNameBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
+      if (connectionUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -36866,13 +37235,16 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
 
-      if (!getLspSymbolicName()
-          .equals(other.getLspSymbolicName())) return false;
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -36884,76 +37256,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
-      hash = (53 * hash) + getLspSymbolicName().hashCode();
+      if (hasConnectionUuid()) {
+        hash = (37 * hash) + CONNECTION_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionUuid().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
+    public static context.ContextOuterClass.ConnectionId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36966,7 +37340,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36982,26 +37356,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L0}
+     * <pre>
+     * ----- Connection ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ConnectionId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
-        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37019,25 +37397,29 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        lspSymbolicName_ = "";
-
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 build() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37045,9 +37427,13 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
-        result.lspSymbolicName_ = lspSymbolicName_;
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
+        } else {
+          result.connectionUuid_ = connectionUuidBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -37086,19 +37472,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
-        if (!other.getLspSymbolicName().isEmpty()) {
-          lspSymbolicName_ = other.lspSymbolicName_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionId other) {
+        if (other == context.ContextOuterClass.ConnectionId.getDefaultInstance()) return this;
+        if (other.hasConnectionUuid()) {
+          mergeConnectionUuid(other.getConnectionUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -37115,11 +37500,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37129,208 +37514,214 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object lspSymbolicName_ = "";
+      private context.ContextOuterClass.Uuid connectionUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The lspSymbolicName.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public java.lang.String getLspSymbolicName() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          lspSymbolicName_ = s;
-          return s;
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
+       */
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return (java.lang.String) ref;
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return The bytes for lspSymbolicName.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getLspSymbolicNameBytes() {
-        java.lang.Object ref = lspSymbolicName_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          lspSymbolicName_ = b;
-          return b;
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionUuid_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          connectionUuidBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The lspSymbolicName to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setLspSymbolicName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        lspSymbolicName_ = value;
-        onChanged();
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder clearLspSymbolicName() {
-        
-        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
-        onChanged();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+          } else {
+            connectionUuid_ = value;
+          }
+          onChanged();
+        } else {
+          connectionUuidBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string lsp_symbolic_name = 1;</code>
-       * @param value The bytes for lspSymbolicName to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setLspSymbolicNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        lspSymbolicName_ = value;
-        onChanged();
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+          onChanged();
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+
         return this;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+        
+        onChanged();
+        return getConnectionUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
+                  getParentForChildren(),
+                  isClean());
+          connectionUuid_ = null;
+        }
+        return connectionUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
-    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public ConnectionSettings_L0 parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L0(input, extensionRegistry);
+        return new ConnectionId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L2OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
+  public interface ConnectionSettings_L0OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
-     */
-    java.lang.String getSrcMacAddress();
-    /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
-     */
-    com.google.protobuf.ByteString
-        getSrcMacAddressBytes();
-
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    java.lang.String getDstMacAddress();
+    java.lang.String getLspSymbolicName();
     /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     com.google.protobuf.ByteString
-        getDstMacAddressBytes();
-
-    /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
-     */
-    int getEtherType();
-
-    /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
-     */
-    int getVlanId();
-
-    /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
-     */
-    int getMplsLabel();
-
-    /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
-     */
-    int getMplsTrafficClass();
+        getLspSymbolicNameBytes();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L2}
+   * Protobuf type {@code context.ConnectionSettings_L0}
    */
-  public static final class ConnectionSettings_L2 extends
+  public static final class ConnectionSettings_L0 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
-      ConnectionSettings_L2OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
+      ConnectionSettings_L0OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L2.newBuilder() to construct.
-    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L0.newBuilder() to construct.
+    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L2() {
-      srcMacAddress_ = "";
-      dstMacAddress_ = "";
+    private ConnectionSettings_L0() {
+      lspSymbolicName_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L2();
+      return new ConnectionSettings_L0();
     }
 
     @java.lang.Override
@@ -37338,7 +37729,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L2(
+    private ConnectionSettings_L0(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37359,33 +37750,7 @@ public final class ContextOuterClass {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              srcMacAddress_ = s;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              dstMacAddress_ = s;
-              break;
-            }
-            case 24: {
-
-              etherType_ = input.readUInt32();
-              break;
-            }
-            case 32: {
-
-              vlanId_ = input.readUInt32();
-              break;
-            }
-            case 40: {
-
-              mplsLabel_ = input.readUInt32();
-              break;
-            }
-            case 48: {
-
-              mplsTrafficClass_ = input.readUInt32();
+              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -37409,199 +37774,83 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
     }
 
-    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcMacAddress_;
+    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object lspSymbolicName_;
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The srcMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
     @java.lang.Override
-    public java.lang.String getSrcMacAddress() {
-      java.lang.Object ref = srcMacAddress_;
+    public java.lang.String getLspSymbolicName() {
+      java.lang.Object ref = lspSymbolicName_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        srcMacAddress_ = s;
+        lspSymbolicName_ = s;
         return s;
       }
     }
     /**
-     * <code>string src_mac_address = 1;</code>
-     * @return The bytes for srcMacAddress.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getSrcMacAddressBytes() {
-      java.lang.Object ref = srcMacAddress_;
+        getLspSymbolicNameBytes() {
+      java.lang.Object ref = lspSymbolicName_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        srcMacAddress_ = b;
+        lspSymbolicName_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstMacAddress_;
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The dstMacAddress.
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public java.lang.String getDstMacAddress() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        dstMacAddress_ = s;
-        return s;
-      }
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>string dst_mac_address = 2;</code>
-     * @return The bytes for dstMacAddress.
-     */
+
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDstMacAddressBytes() {
-      java.lang.Object ref = dstMacAddress_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        dstMacAddress_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
       }
+      unknownFields.writeTo(output);
     }
 
-    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
-    private int etherType_;
-    /**
-     * <code>uint32 ether_type = 3;</code>
-     * @return The etherType.
-     */
     @java.lang.Override
-    public int getEtherType() {
-      return etherType_;
-    }
-
-    public static final int VLAN_ID_FIELD_NUMBER = 4;
-    private int vlanId_;
-    /**
-     * <code>uint32 vlan_id = 4;</code>
-     * @return The vlanId.
-     */
-    @java.lang.Override
-    public int getVlanId() {
-      return vlanId_;
-    }
-
-    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
-    private int mplsLabel_;
-    /**
-     * <code>uint32 mpls_label = 5;</code>
-     * @return The mplsLabel.
-     */
-    @java.lang.Override
-    public int getMplsLabel() {
-      return mplsLabel_;
-    }
-
-    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
-    private int mplsTrafficClass_;
-    /**
-     * <code>uint32 mpls_traffic_class = 6;</code>
-     * @return The mplsTrafficClass.
-     */
-    @java.lang.Override
-    public int getMplsTrafficClass() {
-      return mplsTrafficClass_;
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        output.writeUInt32(3, etherType_);
-      }
-      if (vlanId_ != 0) {
-        output.writeUInt32(4, vlanId_);
-      }
-      if (mplsLabel_ != 0) {
-        output.writeUInt32(5, mplsLabel_);
-      }
-      if (mplsTrafficClass_ != 0) {
-        output.writeUInt32(6, mplsTrafficClass_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
       size = 0;
-      if (!getSrcMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
-      }
-      if (!getDstMacAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
-      }
-      if (etherType_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, etherType_);
-      }
-      if (vlanId_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, vlanId_);
-      }
-      if (mplsLabel_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, mplsLabel_);
-      }
-      if (mplsTrafficClass_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(6, mplsTrafficClass_);
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37613,23 +37862,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
+      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
 
-      if (!getSrcMacAddress()
-          .equals(other.getSrcMacAddress())) return false;
-      if (!getDstMacAddress()
-          .equals(other.getDstMacAddress())) return false;
-      if (getEtherType()
-          != other.getEtherType()) return false;
-      if (getVlanId()
-          != other.getVlanId()) return false;
-      if (getMplsLabel()
-          != other.getMplsLabel()) return false;
-      if (getMplsTrafficClass()
-          != other.getMplsTrafficClass()) return false;
+      if (!getLspSymbolicName()
+          .equals(other.getLspSymbolicName())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37641,86 +37880,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcMacAddress().hashCode();
-      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstMacAddress().hashCode();
-      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEtherType();
-      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
-      hash = (53 * hash) + getVlanId();
-      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsLabel();
-      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
-      hash = (53 * hash) + getMplsTrafficClass();
+      hash = (37 * hash) + LSP_SYMBOLIC_NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getLspSymbolicName().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -37733,7 +37962,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -37749,26 +37978,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L2}
+     * Protobuf type {@code context.ConnectionSettings_L0}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
-        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L0)
+        context.ContextOuterClass.ConnectionSettings_L0OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37786,17 +38015,7 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcMacAddress_ = "";
-
-        dstMacAddress_ = "";
-
-        etherType_ = 0;
-
-        vlanId_ = 0;
-
-        mplsLabel_ = 0;
-
-        mplsTrafficClass_ = 0;
+        lspSymbolicName_ = "";
 
         return this;
       }
@@ -37804,17 +38023,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 build() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L0 build() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37822,14 +38041,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
-        result.srcMacAddress_ = srcMacAddress_;
-        result.dstMacAddress_ = dstMacAddress_;
-        result.etherType_ = etherType_;
-        result.vlanId_ = vlanId_;
-        result.mplsLabel_ = mplsLabel_;
-        result.mplsTrafficClass_ = mplsTrafficClass_;
+      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
+        result.lspSymbolicName_ = lspSymbolicName_;
         onBuilt();
         return result;
       }
@@ -37868,36 +38082,20 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L0) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L0)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
-        if (!other.getSrcMacAddress().isEmpty()) {
-          srcMacAddress_ = other.srcMacAddress_;
-          onChanged();
-        }
-        if (!other.getDstMacAddress().isEmpty()) {
-          dstMacAddress_ = other.dstMacAddress_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L0 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance()) return this;
+        if (!other.getLspSymbolicName().isEmpty()) {
+          lspSymbolicName_ = other.lspSymbolicName_;
           onChanged();
         }
-        if (other.getEtherType() != 0) {
-          setEtherType(other.getEtherType());
-        }
-        if (other.getVlanId() != 0) {
-          setVlanId(other.getVlanId());
-        }
-        if (other.getMplsLabel() != 0) {
-          setMplsLabel(other.getMplsLabel());
-        }
-        if (other.getMplsTrafficClass() != 0) {
-          setMplsTrafficClass(other.getMplsTrafficClass());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -37913,11 +38111,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37927,278 +38125,78 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcMacAddress_ = "";
+      private java.lang.Object lspSymbolicName_ = "";
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The srcMacAddress.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The lspSymbolicName.
        */
-      public java.lang.String getSrcMacAddress() {
-        java.lang.Object ref = srcMacAddress_;
+      public java.lang.String getLspSymbolicName() {
+        java.lang.Object ref = lspSymbolicName_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          srcMacAddress_ = s;
+          lspSymbolicName_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @return The bytes for srcMacAddress.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The bytes for lspSymbolicName.
        */
       public com.google.protobuf.ByteString
-          getSrcMacAddressBytes() {
-        java.lang.Object ref = srcMacAddress_;
+          getLspSymbolicNameBytes() {
+        java.lang.Object ref = lspSymbolicName_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          srcMacAddress_ = b;
+          lspSymbolicName_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The srcMacAddress to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcMacAddress(
+      public Builder setLspSymbolicName(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        srcMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_mac_address = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearSrcMacAddress() {
-        
-        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string src_mac_address = 1;</code>
-       * @param value The bytes for srcMacAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setSrcMacAddressBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        srcMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object dstMacAddress_ = "";
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The dstMacAddress.
-       */
-      public java.lang.String getDstMacAddress() {
-        java.lang.Object ref = dstMacAddress_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          dstMacAddress_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @return The bytes for dstMacAddress.
-       */
-      public com.google.protobuf.ByteString
-          getDstMacAddressBytes() {
-        java.lang.Object ref = dstMacAddress_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          dstMacAddress_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The dstMacAddress to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDstMacAddress(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        dstMacAddress_ = value;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstMacAddress() {
+      public Builder clearLspSymbolicName() {
         
-        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_mac_address = 2;</code>
-       * @param value The bytes for dstMacAddress to set.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The bytes for lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder setDstMacAddressBytes(
+      public Builder setLspSymbolicNameBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        dstMacAddress_ = value;
-        onChanged();
-        return this;
-      }
-
-      private int etherType_ ;
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return The etherType.
-       */
-      @java.lang.Override
-      public int getEtherType() {
-        return etherType_;
-      }
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @param value The etherType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEtherType(int value) {
-        
-        etherType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 ether_type = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEtherType() {
-        
-        etherType_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int vlanId_ ;
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return The vlanId.
-       */
-      @java.lang.Override
-      public int getVlanId() {
-        return vlanId_;
-      }
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @param value The vlanId to set.
-       * @return This builder for chaining.
-       */
-      public Builder setVlanId(int value) {
-        
-        vlanId_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 vlan_id = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearVlanId() {
-        
-        vlanId_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int mplsLabel_ ;
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return The mplsLabel.
-       */
-      @java.lang.Override
-      public int getMplsLabel() {
-        return mplsLabel_;
-      }
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @param value The mplsLabel to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMplsLabel(int value) {
-        
-        mplsLabel_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 mpls_label = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMplsLabel() {
-        
-        mplsLabel_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private int mplsTrafficClass_ ;
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return The mplsTrafficClass.
-       */
-      @java.lang.Override
-      public int getMplsTrafficClass() {
-        return mplsTrafficClass_;
-      }
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @param value The mplsTrafficClass to set.
-       * @return This builder for chaining.
-       */
-      public Builder setMplsTrafficClass(int value) {
-        
-        mplsTrafficClass_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>uint32 mpls_traffic_class = 6;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearMplsTrafficClass() {
-        
-        mplsTrafficClass_ = 0;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
@@ -38215,114 +38213,120 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
-    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L0)
+    private static final context.ContextOuterClass.ConnectionSettings_L0 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
       @java.lang.Override
-      public ConnectionSettings_L2 parsePartialFrom(
+      public ConnectionSettings_L0 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L2(input, extensionRegistry);
+        return new ConnectionSettings_L0(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L3OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
+  public interface ConnectionSettings_L2OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
-    java.lang.String getSrcIpAddress();
+    java.lang.String getSrcMacAddress();
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     com.google.protobuf.ByteString
-        getSrcIpAddressBytes();
+        getSrcMacAddressBytes();
 
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
-    java.lang.String getDstIpAddress();
+    java.lang.String getDstMacAddress();
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     com.google.protobuf.ByteString
-        getDstIpAddressBytes();
+        getDstMacAddressBytes();
 
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
-    int getDscp();
+    int getEtherType();
 
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
-    int getProtocol();
+    int getVlanId();
 
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
-    int getTtl();
+    int getMplsLabel();
+
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    int getMplsTrafficClass();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L3}
+   * Protobuf type {@code context.ConnectionSettings_L2}
    */
-  public static final class ConnectionSettings_L3 extends
+  public static final class ConnectionSettings_L2 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
-      ConnectionSettings_L3OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
+      ConnectionSettings_L2OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L3.newBuilder() to construct.
-    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L2.newBuilder() to construct.
+    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L3() {
-      srcIpAddress_ = "";
-      dstIpAddress_ = "";
+    private ConnectionSettings_L2() {
+      srcMacAddress_ = "";
+      dstMacAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L3();
+      return new ConnectionSettings_L2();
     }
 
     @java.lang.Override
@@ -38330,7 +38334,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L3(
+    private ConnectionSettings_L2(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -38351,28 +38355,33 @@ public final class ContextOuterClass {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              srcIpAddress_ = s;
+              srcMacAddress_ = s;
               break;
             }
             case 18: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              dstIpAddress_ = s;
+              dstMacAddress_ = s;
               break;
             }
             case 24: {
 
-              dscp_ = input.readUInt32();
+              etherType_ = input.readUInt32();
               break;
             }
             case 32: {
 
-              protocol_ = input.readUInt32();
+              vlanId_ = input.readUInt32();
               break;
             }
             case 40: {
 
-              ttl_ = input.readUInt32();
+              mplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              mplsTrafficClass_ = input.readUInt32();
               break;
             }
             default: {
@@ -38396,124 +38405,135 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
     }
 
-    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
-    private volatile java.lang.Object srcIpAddress_;
+    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcMacAddress_;
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
     @java.lang.Override
-    public java.lang.String getSrcIpAddress() {
-      java.lang.Object ref = srcIpAddress_;
+    public java.lang.String getSrcMacAddress() {
+      java.lang.Object ref = srcMacAddress_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        srcIpAddress_ = s;
+        srcMacAddress_ = s;
         return s;
       }
     }
     /**
-     * <code>string src_ip_address = 1;</code>
-     * @return The bytes for srcIpAddress.
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getSrcIpAddressBytes() {
-      java.lang.Object ref = srcIpAddress_;
+        getSrcMacAddressBytes() {
+      java.lang.Object ref = srcMacAddress_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        srcIpAddress_ = b;
+        srcMacAddress_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
-    private volatile java.lang.Object dstIpAddress_;
+    public static final int DST_MAC_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstMacAddress_;
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
     @java.lang.Override
-    public java.lang.String getDstIpAddress() {
-      java.lang.Object ref = dstIpAddress_;
+    public java.lang.String getDstMacAddress() {
+      java.lang.Object ref = dstMacAddress_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        dstIpAddress_ = s;
+        dstMacAddress_ = s;
         return s;
       }
     }
     /**
-     * <code>string dst_ip_address = 2;</code>
-     * @return The bytes for dstIpAddress.
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getDstIpAddressBytes() {
-      java.lang.Object ref = dstIpAddress_;
+        getDstMacAddressBytes() {
+      java.lang.Object ref = dstMacAddress_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        dstIpAddress_ = b;
+        dstMacAddress_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int DSCP_FIELD_NUMBER = 3;
-    private int dscp_;
+    public static final int ETHER_TYPE_FIELD_NUMBER = 3;
+    private int etherType_;
     /**
-     * <code>uint32 dscp = 3;</code>
-     * @return The dscp.
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
     @java.lang.Override
-    public int getDscp() {
-      return dscp_;
+    public int getEtherType() {
+      return etherType_;
     }
 
-    public static final int PROTOCOL_FIELD_NUMBER = 4;
-    private int protocol_;
+    public static final int VLAN_ID_FIELD_NUMBER = 4;
+    private int vlanId_;
     /**
-     * <code>uint32 protocol = 4;</code>
-     * @return The protocol.
+     * <code>uint32 vlan_id = 4;</code>
+     * @return The vlanId.
      */
     @java.lang.Override
-    public int getProtocol() {
-      return protocol_;
+    public int getVlanId() {
+      return vlanId_;
     }
 
-    public static final int TTL_FIELD_NUMBER = 5;
-    private int ttl_;
+    public static final int MPLS_LABEL_FIELD_NUMBER = 5;
+    private int mplsLabel_;
     /**
-     * <code>uint32 ttl = 5;</code>
-     * @return The ttl.
+     * <code>uint32 mpls_label = 5;</code>
+     * @return The mplsLabel.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public int getMplsLabel() {
+      return mplsLabel_;
+    }
+
+    public static final int MPLS_TRAFFIC_CLASS_FIELD_NUMBER = 6;
+    private int mplsTrafficClass_;
+    /**
+     * <code>uint32 mpls_traffic_class = 6;</code>
+     * @return The mplsTrafficClass.
+     */
+    @java.lang.Override
+    public int getMplsTrafficClass() {
+      return mplsTrafficClass_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38530,20 +38550,23 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcMacAddress_);
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      if (!getDstMacAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstMacAddress_);
       }
-      if (dscp_ != 0) {
-        output.writeUInt32(3, dscp_);
+      if (etherType_ != 0) {
+        output.writeUInt32(3, etherType_);
       }
-      if (protocol_ != 0) {
-        output.writeUInt32(4, protocol_);
+      if (vlanId_ != 0) {
+        output.writeUInt32(4, vlanId_);
       }
-      if (ttl_ != 0) {
-        output.writeUInt32(5, ttl_);
+      if (mplsLabel_ != 0) {
+        output.writeUInt32(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        output.writeUInt32(6, mplsTrafficClass_);
       }
       unknownFields.writeTo(output);
     }
@@ -38554,23 +38577,27 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getSrcIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      if (!getSrcMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcMacAddress_);
       }
-      if (!getDstIpAddressBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      if (!getDstMacAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstMacAddress_);
       }
-      if (dscp_ != 0) {
+      if (etherType_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, dscp_);
+          .computeUInt32Size(3, etherType_);
       }
-      if (protocol_ != 0) {
+      if (vlanId_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, protocol_);
+          .computeUInt32Size(4, vlanId_);
       }
-      if (ttl_ != 0) {
+      if (mplsLabel_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(5, ttl_);
+          .computeUInt32Size(5, mplsLabel_);
+      }
+      if (mplsTrafficClass_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, mplsTrafficClass_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38582,21 +38609,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
+      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) obj;
 
-      if (!getSrcIpAddress()
-          .equals(other.getSrcIpAddress())) return false;
-      if (!getDstIpAddress()
-          .equals(other.getDstIpAddress())) return false;
-      if (getDscp()
-          != other.getDscp()) return false;
-      if (getProtocol()
-          != other.getProtocol()) return false;
-      if (getTtl()
-          != other.getTtl()) return false;
+      if (!getSrcMacAddress()
+          .equals(other.getSrcMacAddress())) return false;
+      if (!getDstMacAddress()
+          .equals(other.getDstMacAddress())) return false;
+      if (getEtherType()
+          != other.getEtherType()) return false;
+      if (getVlanId()
+          != other.getVlanId()) return false;
+      if (getMplsLabel()
+          != other.getMplsLabel()) return false;
+      if (getMplsTrafficClass()
+          != other.getMplsTrafficClass()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38608,84 +38637,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcIpAddress().hashCode();
-      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
-      hash = (53 * hash) + getDstIpAddress().hashCode();
-      hash = (37 * hash) + DSCP_FIELD_NUMBER;
-      hash = (53 * hash) + getDscp();
-      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
-      hash = (53 * hash) + getProtocol();
-      hash = (37 * hash) + TTL_FIELD_NUMBER;
-      hash = (53 * hash) + getTtl();
+      hash = (37 * hash) + SRC_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcMacAddress().hashCode();
+      hash = (37 * hash) + DST_MAC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstMacAddress().hashCode();
+      hash = (37 * hash) + ETHER_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEtherType();
+      hash = (37 * hash) + VLAN_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getVlanId();
+      hash = (37 * hash) + MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsLabel();
+      hash = (37 * hash) + MPLS_TRAFFIC_CLASS_FIELD_NUMBER;
+      hash = (53 * hash) + getMplsTrafficClass();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38698,7 +38729,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38714,26 +38745,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L3}
+     * Protobuf type {@code context.ConnectionSettings_L2}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
-        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L2)
+        context.ContextOuterClass.ConnectionSettings_L2OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38751,15 +38782,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcIpAddress_ = "";
+        srcMacAddress_ = "";
 
-        dstIpAddress_ = "";
+        dstMacAddress_ = "";
 
-        dscp_ = 0;
+        etherType_ = 0;
 
-        protocol_ = 0;
+        vlanId_ = 0;
 
-        ttl_ = 0;
+        mplsLabel_ = 0;
+
+        mplsTrafficClass_ = 0;
 
         return this;
       }
@@ -38767,17 +38800,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 build() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L2 build() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -38785,13 +38818,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
-        result.srcIpAddress_ = srcIpAddress_;
-        result.dstIpAddress_ = dstIpAddress_;
-        result.dscp_ = dscp_;
-        result.protocol_ = protocol_;
-        result.ttl_ = ttl_;
+      public context.ContextOuterClass.ConnectionSettings_L2 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = new context.ContextOuterClass.ConnectionSettings_L2(this);
+        result.srcMacAddress_ = srcMacAddress_;
+        result.dstMacAddress_ = dstMacAddress_;
+        result.etherType_ = etherType_;
+        result.vlanId_ = vlanId_;
+        result.mplsLabel_ = mplsLabel_;
+        result.mplsTrafficClass_ = mplsTrafficClass_;
         onBuilt();
         return result;
       }
@@ -38830,32 +38864,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L2) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L2)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
-        if (!other.getSrcIpAddress().isEmpty()) {
-          srcIpAddress_ = other.srcIpAddress_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L2 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance()) return this;
+        if (!other.getSrcMacAddress().isEmpty()) {
+          srcMacAddress_ = other.srcMacAddress_;
           onChanged();
         }
-        if (!other.getDstIpAddress().isEmpty()) {
-          dstIpAddress_ = other.dstIpAddress_;
+        if (!other.getDstMacAddress().isEmpty()) {
+          dstMacAddress_ = other.dstMacAddress_;
           onChanged();
         }
-        if (other.getDscp() != 0) {
-          setDscp(other.getDscp());
+        if (other.getEtherType() != 0) {
+          setEtherType(other.getEtherType());
         }
-        if (other.getProtocol() != 0) {
-          setProtocol(other.getProtocol());
+        if (other.getVlanId() != 0) {
+          setVlanId(other.getVlanId());
         }
-        if (other.getTtl() != 0) {
-          setTtl(other.getTtl());
+        if (other.getMplsLabel() != 0) {
+          setMplsLabel(other.getMplsLabel());
+        }
+        if (other.getMplsTrafficClass() != 0) {
+          setMplsTrafficClass(other.getMplsTrafficClass());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -38872,11 +38909,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -38886,247 +38923,278 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object srcIpAddress_ = "";
+      private java.lang.Object srcMacAddress_ = "";
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The srcIpAddress.
+       * <code>string src_mac_address = 1;</code>
+       * @return The srcMacAddress.
        */
-      public java.lang.String getSrcIpAddress() {
-        java.lang.Object ref = srcIpAddress_;
+      public java.lang.String getSrcMacAddress() {
+        java.lang.Object ref = srcMacAddress_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          srcIpAddress_ = s;
+          srcMacAddress_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @return The bytes for srcIpAddress.
+       * <code>string src_mac_address = 1;</code>
+       * @return The bytes for srcMacAddress.
        */
       public com.google.protobuf.ByteString
-          getSrcIpAddressBytes() {
-        java.lang.Object ref = srcIpAddress_;
+          getSrcMacAddressBytes() {
+        java.lang.Object ref = srcMacAddress_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          srcIpAddress_ = b;
+          srcMacAddress_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The srcIpAddress to set.
+       * <code>string src_mac_address = 1;</code>
+       * @param value The srcMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcIpAddress(
+      public Builder setSrcMacAddress(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        srcIpAddress_ = value;
+        srcMacAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string src_ip_address = 1;</code>
+       * <code>string src_mac_address = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSrcIpAddress() {
+      public Builder clearSrcMacAddress() {
         
-        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        srcMacAddress_ = getDefaultInstance().getSrcMacAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>string src_ip_address = 1;</code>
-       * @param value The bytes for srcIpAddress to set.
+       * <code>string src_mac_address = 1;</code>
+       * @param value The bytes for srcMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcIpAddressBytes(
+      public Builder setSrcMacAddressBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        srcIpAddress_ = value;
+        srcMacAddress_ = value;
         onChanged();
         return this;
       }
 
-      private java.lang.Object dstIpAddress_ = "";
+      private java.lang.Object dstMacAddress_ = "";
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The dstIpAddress.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The dstMacAddress.
        */
-      public java.lang.String getDstIpAddress() {
-        java.lang.Object ref = dstIpAddress_;
+      public java.lang.String getDstMacAddress() {
+        java.lang.Object ref = dstMacAddress_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          dstIpAddress_ = s;
+          dstMacAddress_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @return The bytes for dstIpAddress.
+       * <code>string dst_mac_address = 2;</code>
+       * @return The bytes for dstMacAddress.
        */
       public com.google.protobuf.ByteString
-          getDstIpAddressBytes() {
-        java.lang.Object ref = dstIpAddress_;
+          getDstMacAddressBytes() {
+        java.lang.Object ref = dstMacAddress_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          dstIpAddress_ = b;
+          dstMacAddress_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The dstIpAddress to set.
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The dstMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setDstIpAddress(
+      public Builder setDstMacAddress(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        dstIpAddress_ = value;
+        dstMacAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
+       * <code>string dst_mac_address = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstIpAddress() {
+      public Builder clearDstMacAddress() {
         
-        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
         onChanged();
         return this;
       }
       /**
-       * <code>string dst_ip_address = 2;</code>
-       * @param value The bytes for dstIpAddress to set.
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The bytes for dstMacAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setDstIpAddressBytes(
+      public Builder setDstMacAddressBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        dstIpAddress_ = value;
+        dstMacAddress_ = value;
         onChanged();
         return this;
       }
 
-      private int dscp_ ;
+      private int etherType_ ;
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @return The dscp.
+       * <code>uint32 ether_type = 3;</code>
+       * @return The etherType.
        */
       @java.lang.Override
-      public int getDscp() {
-        return dscp_;
+      public int getEtherType() {
+        return etherType_;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
-       * @param value The dscp to set.
+       * <code>uint32 ether_type = 3;</code>
+       * @param value The etherType to set.
        * @return This builder for chaining.
        */
-      public Builder setDscp(int value) {
+      public Builder setEtherType(int value) {
         
-        dscp_ = value;
+        etherType_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 dscp = 3;</code>
+       * <code>uint32 ether_type = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDscp() {
+      public Builder clearEtherType() {
         
-        dscp_ = 0;
+        etherType_ = 0;
         onChanged();
         return this;
       }
 
-      private int protocol_ ;
+      private int vlanId_ ;
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @return The protocol.
+       * <code>uint32 vlan_id = 4;</code>
+       * @return The vlanId.
        */
       @java.lang.Override
-      public int getProtocol() {
-        return protocol_;
+      public int getVlanId() {
+        return vlanId_;
       }
       /**
-       * <code>uint32 protocol = 4;</code>
-       * @param value The protocol to set.
+       * <code>uint32 vlan_id = 4;</code>
+       * @param value The vlanId to set.
        * @return This builder for chaining.
        */
-      public Builder setProtocol(int value) {
+      public Builder setVlanId(int value) {
         
-        protocol_ = value;
+        vlanId_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 protocol = 4;</code>
+       * <code>uint32 vlan_id = 4;</code>
        * @return This builder for chaining.
        */
-      public Builder clearProtocol() {
+      public Builder clearVlanId() {
         
-        protocol_ = 0;
+        vlanId_ = 0;
         onChanged();
         return this;
       }
 
-      private int ttl_ ;
+      private int mplsLabel_ ;
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @return The ttl.
+       * <code>uint32 mpls_label = 5;</code>
+       * @return The mplsLabel.
        */
       @java.lang.Override
-      public int getTtl() {
-        return ttl_;
+      public int getMplsLabel() {
+        return mplsLabel_;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
-       * @param value The ttl to set.
+       * <code>uint32 mpls_label = 5;</code>
+       * @param value The mplsLabel to set.
        * @return This builder for chaining.
        */
-      public Builder setTtl(int value) {
+      public Builder setMplsLabel(int value) {
         
-        ttl_ = value;
+        mplsLabel_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 ttl = 5;</code>
+       * <code>uint32 mpls_label = 5;</code>
        * @return This builder for chaining.
        */
-      public Builder clearTtl() {
+      public Builder clearMplsLabel() {
         
-        ttl_ = 0;
+        mplsLabel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int mplsTrafficClass_ ;
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return The mplsTrafficClass.
+       */
+      @java.lang.Override
+      public int getMplsTrafficClass() {
+        return mplsTrafficClass_;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @param value The mplsTrafficClass to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMplsTrafficClass(int value) {
+        
+        mplsTrafficClass_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMplsTrafficClass() {
+        
+        mplsTrafficClass_ = 0;
         onChanged();
         return this;
       }
@@ -39143,94 +39211,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
-    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L2)
+    private static final context.ContextOuterClass.ConnectionSettings_L2 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
       @java.lang.Override
-      public ConnectionSettings_L3 parsePartialFrom(
+      public ConnectionSettings_L2 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L3(input, extensionRegistry);
+        return new ConnectionSettings_L2(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettings_L4OrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
+  public interface ConnectionSettings_L3OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    int getSrcPort();
+    java.lang.String getSrcIpAddress();
+    /**
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getSrcIpAddressBytes();
 
     /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
-    int getDstPort();
+    java.lang.String getDstIpAddress();
+    /**
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstIpAddressBytes();
 
     /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
      */
-    int getTcpFlags();
+    int getDscp();
 
     /**
-     * <code>uint32 ttl = 4;</code>
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>uint32 ttl = 5;</code>
      * @return The ttl.
      */
     int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings_L4}
+   * Protobuf type {@code context.ConnectionSettings_L3}
    */
-  public static final class ConnectionSettings_L4 extends
+  public static final class ConnectionSettings_L3 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
-      ConnectionSettings_L4OrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
+      ConnectionSettings_L3OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings_L4.newBuilder() to construct.
-    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L3.newBuilder() to construct.
+    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings_L4() {
+    private ConnectionSettings_L3() {
+      srcIpAddress_ = "";
+      dstIpAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings_L4();
+      return new ConnectionSettings_L3();
     }
 
     @java.lang.Override
@@ -39238,7 +39326,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings_L4(
+    private ConnectionSettings_L3(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39256,23 +39344,30 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              srcPort_ = input.readUInt32();
+              srcIpAddress_ = s;
               break;
             }
-            case 16: {
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              dstPort_ = input.readUInt32();
+              dstIpAddress_ = s;
               break;
             }
             case 24: {
 
-              tcpFlags_ = input.readUInt32();
+              dscp_ = input.readUInt32();
               break;
             }
             case 32: {
 
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
               ttl_ = input.readUInt32();
               break;
             }
@@ -39297,64 +39392,129 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
     }
 
-    public static final int SRC_PORT_FIELD_NUMBER = 1;
-    private int srcPort_;
+    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcIpAddress_;
     /**
-     * <code>uint32 src_port = 1;</code>
-     * @return The srcPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
     @java.lang.Override
-    public int getSrcPort() {
-      return srcPort_;
+    public java.lang.String getSrcIpAddress() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        srcIpAddress_ = s;
+        return s;
+      }
     }
-
-    public static final int DST_PORT_FIELD_NUMBER = 2;
-    private int dstPort_;
     /**
-     * <code>uint32 dst_port = 2;</code>
-     * @return The dstPort.
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
     @java.lang.Override
-    public int getDstPort() {
-      return dstPort_;
+    public com.google.protobuf.ByteString
+        getSrcIpAddressBytes() {
+      java.lang.Object ref = srcIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
-    private int tcpFlags_;
+    public static final int DST_IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstIpAddress_;
     /**
-     * <code>uint32 tcp_flags = 3;</code>
-     * @return The tcpFlags.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
     @java.lang.Override
-    public int getTcpFlags() {
-      return tcpFlags_;
+    public java.lang.String getDstIpAddress() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        dstIpAddress_ = s;
+        return s;
+      }
     }
-
-    public static final int TTL_FIELD_NUMBER = 4;
-    private int ttl_;
     /**
-     * <code>uint32 ttl = 4;</code>
-     * @return The ttl.
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
      */
     @java.lang.Override
-    public int getTtl() {
-      return ttl_;
+    public com.google.protobuf.ByteString
+        getDstIpAddressBytes() {
+      java.lang.Object ref = dstIpAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstIpAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
+    public static final int DSCP_FIELD_NUMBER = 3;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 4;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int TTL_FIELD_NUMBER = 5;
+    private int ttl_;
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    @java.lang.Override
+    public int getTtl() {
+      return ttl_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
       byte isInitialized = memoizedIsInitialized;
       if (isInitialized == 1) return true;
       if (isInitialized == 0) return false;
@@ -39366,17 +39526,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (srcPort_ != 0) {
-        output.writeUInt32(1, srcPort_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
       }
-      if (dstPort_ != 0) {
-        output.writeUInt32(2, dstPort_);
+      if (!getDstIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
       }
-      if (tcpFlags_ != 0) {
-        output.writeUInt32(3, tcpFlags_);
+      if (dscp_ != 0) {
+        output.writeUInt32(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(4, protocol_);
       }
       if (ttl_ != 0) {
-        output.writeUInt32(4, ttl_);
+        output.writeUInt32(5, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -39387,21 +39550,23 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (srcPort_ != 0) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(1, srcPort_);
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
       }
-      if (dstPort_ != 0) {
+      if (!getDstIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(2, dstPort_);
+          .computeUInt32Size(3, dscp_);
       }
-      if (tcpFlags_ != 0) {
+      if (protocol_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, tcpFlags_);
+          .computeUInt32Size(4, protocol_);
       }
       if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(4, ttl_);
+          .computeUInt32Size(5, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -39413,17 +39578,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
+      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) obj;
 
-      if (getSrcPort()
-          != other.getSrcPort()) return false;
-      if (getDstPort()
-          != other.getDstPort()) return false;
-      if (getTcpFlags()
-          != other.getTcpFlags()) return false;
+      if (!getSrcIpAddress()
+          .equals(other.getSrcIpAddress())) return false;
+      if (!getDstIpAddress()
+          .equals(other.getDstIpAddress())) return false;
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
       if (getTtl()
           != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -39437,12 +39604,14 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getSrcPort();
-      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
-      hash = (53 * hash) + getDstPort();
-      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
-      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + SRC_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcIpAddress().hashCode();
+      hash = (37 * hash) + DST_IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstIpAddress().hashCode();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
       hash = (37 * hash) + TTL_FIELD_NUMBER;
       hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
@@ -39450,69 +39619,69 @@ public final class ContextOuterClass {
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -39525,7 +39694,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -39541,26 +39710,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings_L4}
+     * Protobuf type {@code context.ConnectionSettings_L3}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
-        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L3)
+        context.ContextOuterClass.ConnectionSettings_L3OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -39578,11 +39747,13 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        srcPort_ = 0;
+        srcIpAddress_ = "";
 
-        dstPort_ = 0;
+        dstIpAddress_ = "";
 
-        tcpFlags_ = 0;
+        dscp_ = 0;
+
+        protocol_ = 0;
 
         ttl_ = 0;
 
@@ -39592,17 +39763,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 build() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L3 build() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -39610,11 +39781,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
-        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
-        result.srcPort_ = srcPort_;
-        result.dstPort_ = dstPort_;
-        result.tcpFlags_ = tcpFlags_;
+      public context.ContextOuterClass.ConnectionSettings_L3 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = new context.ContextOuterClass.ConnectionSettings_L3(this);
+        result.srcIpAddress_ = srcIpAddress_;
+        result.dstIpAddress_ = dstIpAddress_;
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
         result.ttl_ = ttl_;
         onBuilt();
         return result;
@@ -39654,24 +39826,29 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L3) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L3)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
-        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
-        if (other.getSrcPort() != 0) {
-          setSrcPort(other.getSrcPort());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L3 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance()) return this;
+        if (!other.getSrcIpAddress().isEmpty()) {
+          srcIpAddress_ = other.srcIpAddress_;
+          onChanged();
         }
-        if (other.getDstPort() != 0) {
-          setDstPort(other.getDstPort());
+        if (!other.getDstIpAddress().isEmpty()) {
+          dstIpAddress_ = other.dstIpAddress_;
+          onChanged();
         }
-        if (other.getTcpFlags() != 0) {
-          setTcpFlags(other.getTcpFlags());
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
         }
         if (other.getTtl() != 0) {
           setTtl(other.getTtl());
@@ -39691,11 +39868,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -39705,102 +39882,223 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int srcPort_ ;
+      private java.lang.Object srcIpAddress_ = "";
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @return The srcPort.
+       * <code>string src_ip_address = 1;</code>
+       * @return The srcIpAddress.
        */
-      @java.lang.Override
-      public int getSrcPort() {
-        return srcPort_;
+      public java.lang.String getSrcIpAddress() {
+        java.lang.Object ref = srcIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>uint32 src_port = 1;</code>
-       * @param value The srcPort to set.
+       * <code>string src_ip_address = 1;</code>
+       * @return The bytes for srcIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getSrcIpAddressBytes() {
+        java.lang.Object ref = srcIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The srcIpAddress to set.
        * @return This builder for chaining.
        */
-      public Builder setSrcPort(int value) {
-        
-        srcPort_ = value;
+      public Builder setSrcIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 src_port = 1;</code>
+       * <code>string src_ip_address = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearSrcPort() {
+      public Builder clearSrcIpAddress() {
         
-        srcPort_ = 0;
+        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_ip_address = 1;</code>
+       * @param value The bytes for srcIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcIpAddress_ = value;
         onChanged();
         return this;
       }
 
-      private int dstPort_ ;
+      private java.lang.Object dstIpAddress_ = "";
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @return The dstPort.
+       * <code>string dst_ip_address = 2;</code>
+       * @return The dstIpAddress.
+       */
+      public java.lang.String getDstIpAddress() {
+        java.lang.Object ref = dstIpAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstIpAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return The bytes for dstIpAddress.
+       */
+      public com.google.protobuf.ByteString
+          getDstIpAddressBytes() {
+        java.lang.Object ref = dstIpAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstIpAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstIpAddress() {
+        
+        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The bytes for dstIpAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstIpAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @return The dscp.
        */
       @java.lang.Override
-      public int getDstPort() {
-        return dstPort_;
+      public int getDscp() {
+        return dscp_;
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
-       * @param value The dstPort to set.
+       * <code>uint32 dscp = 3;</code>
+       * @param value The dscp to set.
        * @return This builder for chaining.
        */
-      public Builder setDstPort(int value) {
+      public Builder setDscp(int value) {
         
-        dstPort_ = value;
+        dscp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 dst_port = 2;</code>
+       * <code>uint32 dscp = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDstPort() {
+      public Builder clearDscp() {
         
-        dstPort_ = 0;
+        dscp_ = 0;
         onChanged();
         return this;
       }
 
-      private int tcpFlags_ ;
+      private int protocol_ ;
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @return The tcpFlags.
+       * <code>uint32 protocol = 4;</code>
+       * @return The protocol.
        */
       @java.lang.Override
-      public int getTcpFlags() {
-        return tcpFlags_;
+      public int getProtocol() {
+        return protocol_;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
-       * @param value The tcpFlags to set.
+       * <code>uint32 protocol = 4;</code>
+       * @param value The protocol to set.
        * @return This builder for chaining.
        */
-      public Builder setTcpFlags(int value) {
+      public Builder setProtocol(int value) {
         
-        tcpFlags_ = value;
+        protocol_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 tcp_flags = 3;</code>
+       * <code>uint32 protocol = 4;</code>
        * @return This builder for chaining.
        */
-      public Builder clearTcpFlags() {
+      public Builder clearProtocol() {
         
-        tcpFlags_ = 0;
+        protocol_ = 0;
         onChanged();
         return this;
       }
 
       private int ttl_ ;
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @return The ttl.
        */
       @java.lang.Override
@@ -39808,7 +40106,7 @@ public final class ContextOuterClass {
         return ttl_;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @param value The ttl to set.
        * @return This builder for chaining.
        */
@@ -39819,7 +40117,7 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>uint32 ttl = 4;</code>
+       * <code>uint32 ttl = 5;</code>
        * @return This builder for chaining.
        */
       public Builder clearTtl() {
@@ -39841,130 +40139,94 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
-    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L3)
+    private static final context.ContextOuterClass.ConnectionSettings_L3 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
     }
 
-    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
       @java.lang.Override
-      public ConnectionSettings_L4 parsePartialFrom(
+      public ConnectionSettings_L3 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings_L4(input, extensionRegistry);
+        return new ConnectionSettings_L3(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionSettingsOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
+  public interface ConnectionSettings_L4OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    boolean hasL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    context.ContextOuterClass.ConnectionSettings_L0 getL0();
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
-    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
+    int getSrcPort();
 
     /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    boolean hasL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    context.ContextOuterClass.ConnectionSettings_L2 getL2();
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
-    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
+    int getDstPort();
 
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    boolean hasL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
-     */
-    context.ContextOuterClass.ConnectionSettings_L3 getL3();
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
-    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
+    int getTcpFlags();
 
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
-     */
-    boolean hasL4();
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
-     */
-    context.ContextOuterClass.ConnectionSettings_L4 getL4();
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
-    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ConnectionSettings}
+   * Protobuf type {@code context.ConnectionSettings_L4}
    */
-  public static final class ConnectionSettings extends
+  public static final class ConnectionSettings_L4 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
-      ConnectionSettingsOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
+      ConnectionSettings_L4OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionSettings.newBuilder() to construct.
-    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L4.newBuilder() to construct.
+    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionSettings() {
+    private ConnectionSettings_L4() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionSettings();
+      return new ConnectionSettings_L4();
     }
 
     @java.lang.Override
@@ -39972,7 +40234,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionSettings(
+    private ConnectionSettings_L4(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39990,56 +40252,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
-              if (l0_ != null) {
-                subBuilder = l0_.toBuilder();
-              }
-              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l0_);
-                l0_ = subBuilder.buildPartial();
-              }
+            case 8: {
 
+              srcPort_ = input.readUInt32();
               break;
             }
-            case 18: {
-              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
-              if (l2_ != null) {
-                subBuilder = l2_.toBuilder();
-              }
-              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l2_);
-                l2_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              dstPort_ = input.readUInt32();
               break;
             }
-            case 26: {
-              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
-              if (l3_ != null) {
-                subBuilder = l3_.toBuilder();
-              }
-              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l3_);
-                l3_ = subBuilder.buildPartial();
-              }
+            case 24: {
 
+              tcpFlags_ = input.readUInt32();
               break;
             }
-            case 34: {
-              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
-              if (l4_ != null) {
-                subBuilder = l4_.toBuilder();
-              }
-              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(l4_);
-                l4_ = subBuilder.buildPartial();
-              }
+            case 32: {
 
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -40063,119 +40293,59 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
     }
 
-    public static final int L0_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return Whether the l0 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL0() {
-      return l0_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-     * @return The l0.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-    }
+    public static final int SRC_PORT_FIELD_NUMBER = 1;
+    private int srcPort_;
     /**
-     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-      return getL0();
+    public int getSrcPort() {
+      return srcPort_;
     }
 
-    public static final int L2_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return Whether the l2 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL2() {
-      return l2_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-     * @return The l2.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-    }
+    public static final int DST_PORT_FIELD_NUMBER = 2;
+    private int dstPort_;
     /**
-     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-      return getL2();
+    public int getDstPort() {
+      return dstPort_;
     }
 
-    public static final int L3_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return Whether the l3 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL3() {
-      return l3_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-     * @return The l3.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-    }
+    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
+    private int tcpFlags_;
     /**
-     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-      return getL3();
+    public int getTcpFlags() {
+      return tcpFlags_;
     }
 
-    public static final int L4_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return Whether the l4 field is set.
-     */
-    @java.lang.Override
-    public boolean hasL4() {
-      return l4_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-     * @return The l4.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-    }
+    public static final int TTL_FIELD_NUMBER = 4;
+    private int ttl_;
     /**
-     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-      return getL4();
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -40192,17 +40362,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (l0_ != null) {
-        output.writeMessage(1, getL0());
+      if (srcPort_ != 0) {
+        output.writeUInt32(1, srcPort_);
       }
-      if (l2_ != null) {
-        output.writeMessage(2, getL2());
+      if (dstPort_ != 0) {
+        output.writeUInt32(2, dstPort_);
       }
-      if (l3_ != null) {
-        output.writeMessage(3, getL3());
+      if (tcpFlags_ != 0) {
+        output.writeUInt32(3, tcpFlags_);
       }
-      if (l4_ != null) {
-        output.writeMessage(4, getL4());
+      if (ttl_ != 0) {
+        output.writeUInt32(4, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -40213,21 +40383,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (l0_ != null) {
+      if (srcPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getL0());
+          .computeUInt32Size(1, srcPort_);
       }
-      if (l2_ != null) {
+      if (dstPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getL2());
+          .computeUInt32Size(2, dstPort_);
       }
-      if (l3_ != null) {
+      if (tcpFlags_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getL3());
+          .computeUInt32Size(3, tcpFlags_);
       }
-      if (l4_ != null) {
+      if (ttl_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getL4());
+          .computeUInt32Size(4, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -40239,31 +40409,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
+      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
 
-      if (hasL0() != other.hasL0()) return false;
-      if (hasL0()) {
-        if (!getL0()
-            .equals(other.getL0())) return false;
-      }
-      if (hasL2() != other.hasL2()) return false;
-      if (hasL2()) {
-        if (!getL2()
-            .equals(other.getL2())) return false;
-      }
-      if (hasL3() != other.hasL3()) return false;
-      if (hasL3()) {
-        if (!getL3()
-            .equals(other.getL3())) return false;
-      }
-      if (hasL4() != other.hasL4()) return false;
-      if (hasL4()) {
-        if (!getL4()
-            .equals(other.getL4())) return false;
-      }
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getTcpFlags()
+          != other.getTcpFlags()) return false;
+      if (getTtl()
+          != other.getTtl()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -40275,90 +40433,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasL0()) {
-        hash = (37 * hash) + L0_FIELD_NUMBER;
-        hash = (53 * hash) + getL0().hashCode();
-      }
-      if (hasL2()) {
-        hash = (37 * hash) + L2_FIELD_NUMBER;
-        hash = (53 * hash) + getL2().hashCode();
-      }
-      if (hasL3()) {
-        hash = (37 * hash) + L3_FIELD_NUMBER;
-        hash = (53 * hash) + getL3().hashCode();
-      }
-      if (hasL4()) {
-        hash = (37 * hash) + L4_FIELD_NUMBER;
-        hash = (53 * hash) + getL4().hashCode();
-      }
+      hash = (37 * hash) + SRC_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcPort();
+      hash = (37 * hash) + DST_PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getDstPort();
+      hash = (37 * hash) + TCP_FLAGS_FIELD_NUMBER;
+      hash = (53 * hash) + getTcpFlags();
+      hash = (37 * hash) + TTL_FIELD_NUMBER;
+      hash = (53 * hash) + getTtl();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionSettings parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40371,7 +40521,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40387,26 +40537,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionSettings}
+     * Protobuf type {@code context.ConnectionSettings_L4}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
-        context.ContextOuterClass.ConnectionSettingsOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings_L4)
+        context.ContextOuterClass.ConnectionSettings_L4OrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -40424,47 +40574,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (l0Builder_ == null) {
-          l0_ = null;
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-        if (l2Builder_ == null) {
-          l2_ = null;
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-        if (l3Builder_ == null) {
-          l3_ = null;
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
-        if (l4Builder_ == null) {
-          l4_ = null;
-        } else {
-          l4_ = null;
-          l4Builder_ = null;
-        }
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        tcpFlags_ = 0;
+
+        ttl_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings build() {
-        context.ContextOuterClass.ConnectionSettings result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L4 build() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -40472,28 +40606,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionSettings buildPartial() {
-        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
-        if (l0Builder_ == null) {
-          result.l0_ = l0_;
-        } else {
-          result.l0_ = l0Builder_.build();
-        }
-        if (l2Builder_ == null) {
-          result.l2_ = l2_;
-        } else {
-          result.l2_ = l2Builder_.build();
-        }
-        if (l3Builder_ == null) {
-          result.l3_ = l3_;
-        } else {
-          result.l3_ = l3Builder_.build();
-        }
-        if (l4Builder_ == null) {
-          result.l4_ = l4_;
-        } else {
-          result.l4_ = l4Builder_.build();
-        }
+      public context.ContextOuterClass.ConnectionSettings_L4 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = new context.ContextOuterClass.ConnectionSettings_L4(this);
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.tcpFlags_ = tcpFlags_;
+        result.ttl_ = ttl_;
         onBuilt();
         return result;
       }
@@ -40532,27 +40650,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
-          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings_L4) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings_L4)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
-        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
-        if (other.hasL0()) {
-          mergeL0(other.getL0());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
         }
-        if (other.hasL2()) {
-          mergeL2(other.getL2());
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
         }
-        if (other.hasL3()) {
-          mergeL3(other.getL3());
+        if (other.getTcpFlags() != 0) {
+          setTcpFlags(other.getTcpFlags());
         }
-        if (other.hasL4()) {
-          mergeL4(other.getL4());
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -40569,11 +40687,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L4 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -40583,653 +40701,266 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return Whether the l0 field is set.
-       */
-      public boolean hasL0() {
-        return l0Builder_ != null || l0_ != null;
-      }
+      private int srcPort_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
-       * @return The l0.
+       * <code>uint32 src_port = 1;</code>
+       * @return The srcPort.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
-        if (l0Builder_ == null) {
-          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        } else {
-          return l0Builder_.getMessage();
-        }
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
        */
-      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l0_ = value;
-          onChanged();
-        } else {
-          l0Builder_.setMessage(value);
-        }
-
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setL0(
-          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
-        if (l0Builder_ == null) {
-          l0_ = builderForValue.build();
-          onChanged();
-        } else {
-          l0Builder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
         return this;
       }
+
+      private int dstPort_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return The dstPort.
        */
-      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
-        if (l0Builder_ == null) {
-          if (l0_ != null) {
-            l0_ =
-              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
-          } else {
-            l0_ = value;
-          }
-          onChanged();
-        } else {
-          l0Builder_.mergeFrom(value);
-        }
-
-        return this;
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
        */
-      public Builder clearL0() {
-        if (l0Builder_ == null) {
-          l0_ = null;
-          onChanged();
-        } else {
-          l0_ = null;
-          l0Builder_ = null;
-        }
-
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+      public Builder clearDstPort() {
         
+        dstPort_ = 0;
         onChanged();
-        return getL0FieldBuilder().getBuilder();
+        return this;
       }
+
+      private int tcpFlags_ ;
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return The tcpFlags.
        */
-      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
-        if (l0Builder_ != null) {
-          return l0Builder_.getMessageOrBuilder();
-        } else {
-          return l0_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
-        }
+      @java.lang.Override
+      public int getTcpFlags() {
+        return tcpFlags_;
       }
       /**
-       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @param value The tcpFlags to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
-          getL0FieldBuilder() {
-        if (l0Builder_ == null) {
-          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
-                  getL0(),
-                  getParentForChildren(),
-                  isClean());
-          l0_ = null;
-        }
-        return l0Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return Whether the l2 field is set.
-       */
-      public boolean hasL2() {
-        return l2Builder_ != null || l2_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       * @return The l2.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
-        if (l2Builder_ == null) {
-          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        } else {
-          return l2Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l2_ = value;
-          onChanged();
-        } else {
-          l2Builder_.setMessage(value);
-        }
-
+      public Builder setTcpFlags(int value) {
+        
+        tcpFlags_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder setL2(
-          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
-        if (l2Builder_ == null) {
-          l2_ = builderForValue.build();
-          onChanged();
-        } else {
-          l2Builder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearTcpFlags() {
+        
+        tcpFlags_ = 0;
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
-        if (l2Builder_ == null) {
-          if (l2_ != null) {
-            l2_ =
-              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
-          } else {
-            l2_ = value;
-          }
-          onChanged();
-        } else {
-          l2Builder_.mergeFrom(value);
-        }
 
-        return this;
-      }
+      private int ttl_ ;
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return The ttl.
        */
-      public Builder clearL2() {
-        if (l2Builder_ == null) {
-          l2_ = null;
-          onChanged();
-        } else {
-          l2_ = null;
-          l2Builder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
+      public Builder setTtl(int value) {
         
+        ttl_ = value;
         onChanged();
-        return getL2FieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
-        if (l2Builder_ != null) {
-          return l2Builder_.getMessageOrBuilder();
-        } else {
-          return l2_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
-        }
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
-      /**
-       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
-          getL2FieldBuilder() {
-        if (l2Builder_ == null) {
-          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
-                  getL2(),
-                  getParentForChildren(),
-                  isClean());
-          l2_ = null;
-        }
-        return l2Builder_;
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return Whether the l3 field is set.
-       */
-      public boolean hasL3() {
-        return l3Builder_ != null || l3_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       * @return The l3.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
-        if (l3Builder_ == null) {
-          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        } else {
-          return l3Builder_.getMessage();
-        }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l3_ = value;
-          onChanged();
-        } else {
-          l3Builder_.setMessage(value);
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder setL3(
-          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
-        if (l3Builder_ == null) {
-          l3_ = builderForValue.build();
-          onChanged();
-        } else {
-          l3Builder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
-        if (l3Builder_ == null) {
-          if (l3_ != null) {
-            l3_ =
-              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
-          } else {
-            l3_ = value;
-          }
-          onChanged();
-        } else {
-          l3Builder_.mergeFrom(value);
-        }
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public Builder clearL3() {
-        if (l3Builder_ == null) {
-          l3_ = null;
-          onChanged();
-        } else {
-          l3_ = null;
-          l3Builder_ = null;
-        }
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
+    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
-        
-        onChanged();
-        return getL3FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
-        if (l3Builder_ != null) {
-          return l3Builder_.getMessageOrBuilder();
-        } else {
-          return l3_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
-          getL3FieldBuilder() {
-        if (l3Builder_ == null) {
-          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
-                  getL3(),
-                  getParentForChildren(),
-                  isClean());
-          l3_ = null;
-        }
-        return l3Builder_;
-      }
-
-      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return Whether the l4 field is set.
-       */
-      public boolean hasL4() {
-        return l4Builder_ != null || l4_ != null;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       * @return The l4.
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
-        if (l4Builder_ == null) {
-          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        } else {
-          return l4Builder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          l4_ = value;
-          onChanged();
-        } else {
-          l4Builder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder setL4(
-          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
-        if (l4Builder_ == null) {
-          l4_ = builderForValue.build();
-          onChanged();
-        } else {
-          l4Builder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
-        if (l4Builder_ == null) {
-          if (l4_ != null) {
-            l4_ =
-              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
-          } else {
-            l4_ = value;
-          }
-          onChanged();
-        } else {
-          l4Builder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public Builder clearL4() {
-        if (l4Builder_ == null) {
-          l4_ = null;
-          onChanged();
-        } else {
-          l4_ = null;
-          l4Builder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
-        
-        onChanged();
-        return getL4FieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
-        if (l4Builder_ != null) {
-          return l4Builder_.getMessageOrBuilder();
-        } else {
-          return l4_ == null ?
-              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
-        }
-      }
-      /**
-       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
-          getL4FieldBuilder() {
-        if (l4Builder_ == null) {
-          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
-                  getL4(),
-                  getParentForChildren(),
-                  isClean());
-          l4_ = null;
-        }
-        return l4Builder_;
-      }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
-
-      @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
-      }
-
-
-      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
-    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
-    }
-
-    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<ConnectionSettings>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
-      @java.lang.Override
-      public ConnectionSettings parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionSettings(input, extensionRegistry);
+    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
+      @java.lang.Override
+      public ConnectionSettings_L4 parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings_L4(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
+  public interface ConnectionSettingsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
-    boolean hasConnectionId();
+    boolean hasL0();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.ConnectionSettings_L0 getL0();
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder();
 
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
-    boolean hasServiceId();
+    boolean hasL2();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
-    context.ContextOuterClass.ServiceId getServiceId();
+    context.ContextOuterClass.ConnectionSettings_L2 getL2();
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder();
 
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getPathHopsEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
-    int getPathHopsEndpointIdsCount();
+    boolean hasL3();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList();
+    context.ContextOuterClass.ConnectionSettings_L3 getL3();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
 
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSubServiceIdsList();
+    boolean hasL4();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
-    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    context.ContextOuterClass.ConnectionSettings_L4 getL4();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    int getSubServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    boolean hasSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    context.ContextOuterClass.ConnectionSettings getSettings();
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
-    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
+    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * Protobuf type {@code context.ConnectionSettings}
    */
-  public static final class Connection extends
+  public static final class ConnectionSettings extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
+      ConnectionSettingsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings.newBuilder() to construct.
+    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      pathHopsEndpointIds_ = java.util.Collections.emptyList();
-      subServiceIds_ = java.util.Collections.emptyList();
+    private ConnectionSettings() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new ConnectionSettings();
     }
 
     @java.lang.Override
@@ -41237,7 +40968,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private ConnectionSettings(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -41245,7 +40976,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -41257,58 +40987,53 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
+              if (l0_ != null) {
+                subBuilder = l0_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l0_);
+                l0_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
-              if (serviceId_ != null) {
-                subBuilder = serviceId_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L2.Builder subBuilder = null;
+              if (l2_ != null) {
+                subBuilder = l2_.toBuilder();
               }
-              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              l2_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L2.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceId_);
-                serviceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l2_);
+                l2_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.ConnectionSettings_L3.Builder subBuilder = null;
+              if (l3_ != null) {
+                subBuilder = l3_.toBuilder();
               }
-              pathHopsEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
+              l3_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L3.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(l3_);
+                l3_ = subBuilder.buildPartial();
               }
-              subServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+
               break;
             }
-            case 42: {
-              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
-              if (settings_ != null) {
-                subBuilder = settings_.toBuilder();
+            case 34: {
+              context.ContextOuterClass.ConnectionSettings_L4.Builder subBuilder = null;
+              if (l4_ != null) {
+                subBuilder = l4_.toBuilder();
               }
-              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              l4_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L4.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(settings_);
-                settings_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(l4_);
+                l4_ = subBuilder.buildPartial();
               }
 
               break;
@@ -41328,215 +41053,152 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int L0_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasL0() {
+      return l0_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
-     * @return The connectionId.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+      return getL0();
     }
 
-    public static final int SERVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ServiceId serviceId_;
+    public static final int L2_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionSettings_L2 l2_;
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return Whether the serviceId field is set.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return Whether the l2 field is set.
      */
     @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
+    public boolean hasL2() {
+      return l2_ != null;
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
-     * @return The serviceId.
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+     * @return The l2.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceId() {
-      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+      return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
     }
     /**
-     * <code>.context.ServiceId service_id = 2;</code>
+     * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
+    public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+      return getL2();
     }
 
-    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-      return pathHopsEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList() {
-      return pathHopsEndpointIds_;
-    }
+    public static final int L3_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.ConnectionSettings_L3 l3_;
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return Whether the l3 field is set.
      */
     @java.lang.Override
-    public int getPathHopsEndpointIdsCount() {
-      return pathHopsEndpointIds_.size();
+    public boolean hasL3() {
+      return l3_ != null;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     * @return The l3.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-      return pathHopsEndpointIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+      return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
     }
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index) {
-      return pathHopsEndpointIds_.get(index);
+    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+      return getL3();
     }
 
-    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    public static final int L4_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.ConnectionSettings_L4 l4_;
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return Whether the l4 field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-      return subServiceIds_;
+    public boolean hasL4() {
+      return l4_ != null;
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     * @return The l4.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList() {
-      return subServiceIds_;
+    public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+      return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
     }
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
      */
     @java.lang.Override
-    public int getSubServiceIdsCount() {
-      return subServiceIds_.size();
+    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+      return getL4();
     }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
+
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-      return subServiceIds_.get(index);
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index) {
-      return subServiceIds_.get(index);
-    }
-
-    public static final int SETTINGS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ConnectionSettings settings_;
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return Whether the settings field is set.
-     */
-    @java.lang.Override
-    public boolean hasSettings() {
-      return settings_ != null;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     * @return The settings.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettings getSettings() {
-      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
-    }
-    /**
-     * <code>.context.ConnectionSettings settings = 5;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-      return getSettings();
-    }
-
-    private byte memoizedIsInitialized = -1;
-    @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
+
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (connectionId_ != null) {
-        output.writeMessage(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
+      if (l0_ != null) {
+        output.writeMessage(1, getL0());
       }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
-        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      if (l2_ != null) {
+        output.writeMessage(2, getL2());
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        output.writeMessage(4, subServiceIds_.get(i));
+      if (l3_ != null) {
+        output.writeMessage(3, getL3());
       }
-      if (settings_ != null) {
-        output.writeMessage(5, getSettings());
+      if (l4_ != null) {
+        output.writeMessage(4, getL4());
       }
       unknownFields.writeTo(output);
     }
@@ -41547,25 +41209,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionId());
-      }
-      if (serviceId_ != null) {
+      if (l0_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
+          .computeMessageSize(1, getL0());
       }
-      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+      if (l2_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+          .computeMessageSize(2, getL2());
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
+      if (l3_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, subServiceIds_.get(i));
+          .computeMessageSize(3, getL3());
       }
-      if (settings_ != null) {
+      if (l4_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getSettings());
+          .computeMessageSize(4, getL4());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -41577,29 +41235,30 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
 
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasL0() != other.hasL0()) return false;
+      if (hasL0()) {
+        if (!getL0()
+            .equals(other.getL0())) return false;
       }
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
+      if (hasL2() != other.hasL2()) return false;
+      if (hasL2()) {
+        if (!getL2()
+            .equals(other.getL2())) return false;
       }
-      if (!getPathHopsEndpointIdsList()
-          .equals(other.getPathHopsEndpointIdsList())) return false;
-      if (!getSubServiceIdsList()
-          .equals(other.getSubServiceIdsList())) return false;
-      if (hasSettings() != other.hasSettings()) return false;
-      if (hasSettings()) {
-        if (!getSettings()
-            .equals(other.getSettings())) return false;
+      if (hasL3() != other.hasL3()) return false;
+      if (hasL3()) {
+        if (!getL3()
+            .equals(other.getL3())) return false;
+      }
+      if (hasL4() != other.hasL4()) return false;
+      if (hasL4()) {
+        if (!getL4()
+            .equals(other.getL4())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -41612,94 +41271,90 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
-      }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
+      if (hasL0()) {
+        hash = (37 * hash) + L0_FIELD_NUMBER;
+        hash = (53 * hash) + getL0().hashCode();
       }
-      if (getPathHopsEndpointIdsCount() > 0) {
-        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      if (hasL2()) {
+        hash = (37 * hash) + L2_FIELD_NUMBER;
+        hash = (53 * hash) + getL2().hashCode();
       }
-      if (getSubServiceIdsCount() > 0) {
-        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      if (hasL3()) {
+        hash = (37 * hash) + L3_FIELD_NUMBER;
+        hash = (53 * hash) + getL3().hashCode();
       }
-      if (hasSettings()) {
-        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
-        hash = (53 * hash) + getSettings().hashCode();
+      if (hasL4()) {
+        hash = (37 * hash) + L4_FIELD_NUMBER;
+        hash = (53 * hash) + getL4().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Connection parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -41712,7 +41367,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -41728,26 +41383,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Connection}
+     * Protobuf type {@code context.ConnectionSettings}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Connection)
-        context.ContextOuterClass.ConnectionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionSettings)
+        context.ContextOuterClass.ConnectionSettingsOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -41760,42 +41415,34 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPathHopsEndpointIdsFieldBuilder();
-          getSubServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
-        } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
-        }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+        if (l0Builder_ == null) {
+          l0_ = null;
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (l2Builder_ == null) {
+          l2_ = null;
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          l2_ = null;
+          l2Builder_ = null;
         }
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (l3Builder_ == null) {
+          l3_ = null;
         } else {
-          subServiceIdsBuilder_.clear();
+          l3_ = null;
+          l3Builder_ = null;
         }
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+        if (l4Builder_ == null) {
+          l4_ = null;
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          l4_ = null;
+          l4Builder_ = null;
         }
         return this;
       }
@@ -41803,17 +41450,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
-        return context.ContextOuterClass.Connection.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection build() {
-        context.ContextOuterClass.Connection result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings build() {
+        context.ContextOuterClass.ConnectionSettings result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -41821,41 +41468,27 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Connection buildPartial() {
-        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+      public context.ContextOuterClass.ConnectionSettings buildPartial() {
+        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
+        if (l0Builder_ == null) {
+          result.l0_ = l0_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.l0_ = l0Builder_.build();
         }
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
+        if (l2Builder_ == null) {
+          result.l2_ = l2_;
         } else {
-          result.serviceId_ = serviceIdBuilder_.build();
+          result.l2_ = l2Builder_.build();
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
-        } else {
-          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
-        }
-        if (subServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.subServiceIds_ = subServiceIds_;
+        if (l3Builder_ == null) {
+          result.l3_ = l3_;
         } else {
-          result.subServiceIds_ = subServiceIdsBuilder_.build();
+          result.l3_ = l3Builder_.build();
         }
-        if (settingsBuilder_ == null) {
-          result.settings_ = settings_;
+        if (l4Builder_ == null) {
+          result.l4_ = l4_;
         } else {
-          result.settings_ = settingsBuilder_.build();
+          result.l4_ = l4Builder_.build();
         }
         onBuilt();
         return result;
@@ -41895,76 +41528,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Connection) {
-          return mergeFrom((context.ContextOuterClass.Connection)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
-        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
         }
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIds_.isEmpty()) {
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensurePathHopsEndpointIdsIsMutable();
-              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.pathHopsEndpointIds_.isEmpty()) {
-            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
-              pathHopsEndpointIdsBuilder_.dispose();
-              pathHopsEndpointIdsBuilder_ = null;
-              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              pathHopsEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPathHopsEndpointIdsFieldBuilder() : null;
-            } else {
-              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
-            }
-          }
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
         }
-        if (subServiceIdsBuilder_ == null) {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIds_.isEmpty()) {
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSubServiceIdsIsMutable();
-              subServiceIds_.addAll(other.subServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.subServiceIds_.isEmpty()) {
-            if (subServiceIdsBuilder_.isEmpty()) {
-              subServiceIdsBuilder_.dispose();
-              subServiceIdsBuilder_ = null;
-              subServiceIds_ = other.subServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              subServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSubServiceIdsFieldBuilder() : null;
-            } else {
-              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
-            }
-          }
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
         }
-        if (other.hasSettings()) {
-          mergeSettings(other.getSettings());
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -41981,11 +41565,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Connection parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -41994,843 +41578,3048 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.ConnectionSettings_L0 l0_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> l0Builder_;
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return Whether the l0 field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasL0() {
+        return l0Builder_ != null || l0_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
-       * @return The connectionId.
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return l0Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          l0_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          l0Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          l0Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+      public Builder mergeL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (l0_ != null) {
+            l0_ =
+              context.ContextOuterClass.ConnectionSettings_L0.newBuilder(l0_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            l0_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          l0Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getL0FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 1;</code>
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
+          context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder> 
+          getL0FieldBuilder() {
+        if (l0Builder_ == null) {
+          l0Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L0, context.ContextOuterClass.ConnectionSettings_L0.Builder, context.ContextOuterClass.ConnectionSettings_L0OrBuilder>(
+                  getL0(),
                   getParentForChildren(),
                   isClean());
-          connectionId_ = null;
+          l0_ = null;
         }
-        return connectionIdBuilder_;
+        return l0Builder_;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
+      private context.ContextOuterClass.ConnectionSettings_L2 l2_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> l2Builder_;
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return Whether the l2 field is set.
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      public boolean hasL2() {
+        return l2Builder_ != null || l2_ != null;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       * @return The l2.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public context.ContextOuterClass.ConnectionSettings_L2 getL2() {
+        if (l2Builder_ == null) {
+          return l2_ == null ? context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         } else {
-          return serviceIdBuilder_.getMessage();
+          return l2Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
+      public Builder setL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceId_ = value;
+          l2_ = value;
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          l2Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setL2(
+          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
+        if (l2Builder_ == null) {
+          l2_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          l2Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
-          if (serviceId_ != null) {
-            serviceId_ =
-              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+      public Builder mergeL2(context.ContextOuterClass.ConnectionSettings_L2 value) {
+        if (l2Builder_ == null) {
+          if (l2_ != null) {
+            l2_ =
+              context.ContextOuterClass.ConnectionSettings_L2.newBuilder(l2_).mergeFrom(value).buildPartial();
           } else {
-            serviceId_ = value;
+            l2_ = value;
           }
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          l2Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder clearL2() {
+        if (l2Builder_ == null) {
+          l2_ = null;
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l2_ = null;
+          l2Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
         
         onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+        return getL2FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+        if (l2Builder_ != null) {
+          return l2Builder_.getMessageOrBuilder();
         } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+          return l2_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdFieldBuilder() {
-        if (serviceIdBuilder_ == null) {
-          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  getServiceId(),
+          context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder> 
+          getL2FieldBuilder() {
+        if (l2Builder_ == null) {
+          l2Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L2, context.ContextOuterClass.ConnectionSettings_L2.Builder, context.ContextOuterClass.ConnectionSettings_L2OrBuilder>(
+                  getL2(),
                   getParentForChildren(),
                   isClean());
-          serviceId_ = null;
+          l2_ = null;
         }
-        return serviceIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensurePathHopsEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
+        return l2Builder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
-        } else {
-          return pathHopsEndpointIdsBuilder_.getMessageList();
-        }
-      }
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return Whether the l3 field is set.
        */
-      public int getPathHopsEndpointIdsCount() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.size();
-        } else {
-          return pathHopsEndpointIdsBuilder_.getCount();
-        }
+      public boolean hasL3() {
+        return l3Builder_ != null || l3_ != null;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return The l3.
        */
-      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);
+      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+        if (l3Builder_ == null) {
+          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         } else {
-          return pathHopsEndpointIdsBuilder_.getMessage(index);
+          return l3Builder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
+      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, value);
+          l3_ = value;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+          l3Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.set(index, builderForValue.build());
+      public Builder setL3(
+          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
+        if (l3Builder_ == null) {
+          l3_ = builderForValue.build();
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          l3Builder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (l3_ != null) {
+            l3_ =
+              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
+          } else {
+            l3_ = value;
           }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(value);
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(value);
+          l3Builder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, value);
+      public Builder clearL3() {
+        if (l3Builder_ == null) {
+          l3_ = null;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+          l3_ = null;
+          l3Builder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
+        
+        onChanged();
+        return getL3FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addPathHopsEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.add(index, builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+        if (l3Builder_ != null) {
+          return l3Builder_.getMessageOrBuilder();
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+          return l3_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder addAllPathHopsEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, pathHopsEndpointIds_);
-          onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> 
+          getL3FieldBuilder() {
+        if (l3Builder_ == null) {
+          l3Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder>(
+                  getL3(),
+                  getParentForChildren(),
+                  isClean());
+          l3_ = null;
         }
-        return this;
+        return l3Builder_;
       }
+
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return Whether the l4 field is set.
        */
-      public Builder clearPathHopsEndpointIds() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      public boolean hasL4() {
+        return l4Builder_ != null || l4_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return The l4.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+        if (l4Builder_ == null) {
+          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
         } else {
-          pathHopsEndpointIdsBuilder_.clear();
+          return l4Builder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder removePathHopsEndpointIds(int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          ensurePathHopsEndpointIdsIsMutable();
-          pathHopsEndpointIds_.remove(index);
+      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l4_ = value;
           onChanged();
         } else {
-          pathHopsEndpointIdsBuilder_.remove(index);
+          l4Builder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      public Builder setL4(
+          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
+        if (l4Builder_ == null) {
+          l4_ = builderForValue.build();
+          onChanged();
+        } else {
+          l4Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-          int index) {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          return pathHopsEndpointIds_.get(index);  } else {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (l4_ != null) {
+            l4_ =
+              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
+          } else {
+            l4_ = value;
+          }
+          onChanged();
+        } else {
+          l4Builder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathHopsEndpointIdsOrBuilderList() {
-        if (pathHopsEndpointIdsBuilder_ != null) {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearL4() {
+        if (l4Builder_ == null) {
+          l4_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+          l4_ = null;
+          l4Builder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
+        
+        onChanged();
+        return getL4FieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
-          int index) {
-        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+        if (l4Builder_ != null) {
+          return l4Builder_.getMessageOrBuilder();
+        } else {
+          return l4_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
+        }
       }
       /**
-       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getPathHopsEndpointIdsBuilderList() {
-        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getPathHopsEndpointIdsFieldBuilder() {
-        if (pathHopsEndpointIdsBuilder_ == null) {
-          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  pathHopsEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> 
+          getL4FieldBuilder() {
+        if (l4Builder_ == null) {
+          l4Builder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder>(
+                  getL4(),
                   getParentForChildren(),
                   isClean());
-          pathHopsEndpointIds_ = null;
+          l4_ = null;
+        }
+        return l4Builder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
+    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
+    }
+
+    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionSettings>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
+      @java.lang.Override
+      public ConnectionSettings parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionSettings(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathHopsEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    int getPathHopsEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSubServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSubServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    int getSubServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    boolean hasSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    context.ContextOuterClass.ConnectionSettings getSettings();
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Connection}
+   */
+  public static final class Connection extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Connection() {
+      pathHopsEndpointIds_ = java.util.Collections.emptyList();
+      subServiceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Connection();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Connection(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
+              }
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceId_);
+                serviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              pathHopsEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              subServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ConnectionSettings.Builder subBuilder = null;
+              if (settings_ != null) {
+                subBuilder = settings_.toBuilder();
+              }
+              settings_ = input.readMessage(context.ContextOuterClass.ConnectionSettings.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(settings_);
+                settings_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathHopsEndpointIdsOrBuilderList() {
+      return pathHopsEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathHopsEndpointIdsCount() {
+      return pathHopsEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+        int index) {
+      return pathHopsEndpointIds_.get(index);
+    }
+
+    public static final int SUB_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSubServiceIdsOrBuilderList() {
+      return subServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSubServiceIdsCount() {
+      return subServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+      return subServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+        int index) {
+      return subServiceIds_.get(index);
+    }
+
+    public static final int SETTINGS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ConnectionSettings settings_;
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return Whether the settings field is set.
+     */
+    @java.lang.Override
+    public boolean hasSettings() {
+      return settings_ != null;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     * @return The settings.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings getSettings() {
+      return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+    }
+    /**
+     * <code>.context.ConnectionSettings settings = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+      return getSettings();
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        output.writeMessage(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        output.writeMessage(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        output.writeMessage(5, getSettings());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      for (int i = 0; i < pathHopsEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, pathHopsEndpointIds_.get(i));
+      }
+      for (int i = 0; i < subServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, subServiceIds_.get(i));
+      }
+      if (settings_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getSettings());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (!getPathHopsEndpointIdsList()
+          .equals(other.getPathHopsEndpointIdsList())) return false;
+      if (!getSubServiceIdsList()
+          .equals(other.getSubServiceIdsList())) return false;
+      if (hasSettings() != other.hasSettings()) return false;
+      if (hasSettings()) {
+        if (!getSettings()
+            .equals(other.getSettings())) return false;
+      }
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      if (getPathHopsEndpointIdsCount() > 0) {
+        hash = (37 * hash) + PATH_HOPS_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getPathHopsEndpointIdsList().hashCode();
+      }
+      if (getSubServiceIdsCount() > 0) {
+        hash = (37 * hash) + SUB_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSubServiceIdsList().hashCode();
+      }
+      if (hasSettings()) {
+        hash = (37 * hash) + SETTINGS_FIELD_NUMBER;
+        hash = (53 * hash) + getSettings().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Connection}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPathHopsEndpointIdsFieldBuilder();
+          getSubServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+        return context.ContextOuterClass.Connection.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection build() {
+        context.ContextOuterClass.Connection result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Connection buildPartial() {
+        context.ContextOuterClass.Connection result = new context.ContextOuterClass.Connection(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            pathHopsEndpointIds_ = java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.pathHopsEndpointIds_ = pathHopsEndpointIds_;
+        } else {
+          result.pathHopsEndpointIds_ = pathHopsEndpointIdsBuilder_.build();
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            subServiceIds_ = java.util.Collections.unmodifiableList(subServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.subServiceIds_ = subServiceIds_;
+        } else {
+          result.subServiceIds_ = subServiceIdsBuilder_.build();
+        }
+        if (settingsBuilder_ == null) {
+          result.settings_ = settings_;
+        } else {
+          result.settings_ = settingsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Connection) {
+          return mergeFrom((context.ContextOuterClass.Connection)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Connection other) {
+        if (other == context.ContextOuterClass.Connection.getDefaultInstance()) return this;
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIds_.isEmpty()) {
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathHopsEndpointIdsIsMutable();
+              pathHopsEndpointIds_.addAll(other.pathHopsEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.pathHopsEndpointIds_.isEmpty()) {
+            if (pathHopsEndpointIdsBuilder_.isEmpty()) {
+              pathHopsEndpointIdsBuilder_.dispose();
+              pathHopsEndpointIdsBuilder_ = null;
+              pathHopsEndpointIds_ = other.pathHopsEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathHopsEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathHopsEndpointIdsFieldBuilder() : null;
+            } else {
+              pathHopsEndpointIdsBuilder_.addAllMessages(other.pathHopsEndpointIds_);
+            }
+          }
+        }
+        if (subServiceIdsBuilder_ == null) {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIds_.isEmpty()) {
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSubServiceIdsIsMutable();
+              subServiceIds_.addAll(other.subServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.subServiceIds_.isEmpty()) {
+            if (subServiceIdsBuilder_.isEmpty()) {
+              subServiceIdsBuilder_.dispose();
+              subServiceIdsBuilder_ = null;
+              subServiceIds_ = other.subServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              subServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSubServiceIdsFieldBuilder() : null;
+            } else {
+              subServiceIdsBuilder_.addAllMessages(other.subServiceIds_);
+            }
+          }
+        }
+        if (other.hasSettings()) {
+          mergeSettings(other.getSettings());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Connection parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Connection) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return Whether the connectionId field is set.
+       */
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        } else {
+          return connectionIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
+                  getParentForChildren(),
+                  isClean());
+          connectionId_ = null;
+        }
+        return connectionIdBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> pathHopsEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensurePathHopsEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          pathHopsEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(pathHopsEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathHopsEndpointIdsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathHopsEndpointIdsList() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
+        } else {
+          return pathHopsEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);
+        } else {
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder setPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addPathHopsEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder addAllPathHopsEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, pathHopsEndpointIds_);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder clearPathHopsEndpointIds() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public Builder removePathHopsEndpointIds(int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          ensurePathHopsEndpointIdsIsMutable();
+          pathHopsEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          pathHopsEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
+          int index) {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.get(index);  } else {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathHopsEndpointIdsOrBuilderList() {
+        if (pathHopsEndpointIdsBuilder_ != null) {
+          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder() {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathHopsEndpointIdsBuilderList() {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathHopsEndpointIdsFieldBuilder() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          pathHopsEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  pathHopsEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          pathHopsEndpointIds_ = null;
+        }
+        return pathHopsEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSubServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
+        if (subServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        } else {
+          return subServiceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public int getSubServiceIdsCount() {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.size();
+        } else {
+          return subServiceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);
+        } else {
+          return subServiceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder setSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder addAllSubServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subServiceIds_);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder clearSubServiceIds() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
+          onChanged();
+        } else {
+          subServiceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
+          int index) {
+        if (subServiceIdsBuilder_ == null) {
+          return subServiceIds_.get(index);  } else {
+          return subServiceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSubServiceIdsOrBuilderList() {
+        if (subServiceIdsBuilder_ != null) {
+          return subServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subServiceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSubServiceIdsBuilderList() {
+        return getSubServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSubServiceIdsFieldBuilder() {
+        if (subServiceIdsBuilder_ == null) {
+          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  subServiceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          subServiceIds_ = null;
+        }
+        return subServiceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.ConnectionSettings settings_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return Whether the settings field is set.
+       */
+      public boolean hasSettings() {
+        return settingsBuilder_ != null || settings_ != null;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return The settings.
+       */
+      public context.ContextOuterClass.ConnectionSettings getSettings() {
+        if (settingsBuilder_ == null) {
+          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        } else {
+          return settingsBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          settings_ = value;
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder setSettings(
+          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
+        if (settingsBuilder_ == null) {
+          settings_ = builderForValue.build();
+          onChanged();
+        } else {
+          settingsBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (settings_ != null) {
+            settings_ =
+              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
+          } else {
+            settings_ = value;
+          }
+          onChanged();
+        } else {
+          settingsBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public Builder clearSettings() {
+        if (settingsBuilder_ == null) {
+          settings_ = null;
+          onChanged();
+        } else {
+          settings_ = null;
+          settingsBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
+        
+        onChanged();
+        return getSettingsFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+        if (settingsBuilder_ != null) {
+          return settingsBuilder_.getMessageOrBuilder();
+        } else {
+          return settings_ == null ?
+              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
+          getSettingsFieldBuilder() {
+        if (settingsBuilder_ == null) {
+          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
+                  getSettings(),
+                  getParentForChildren(),
+                  isClean());
+          settings_ = null;
+        }
+        return settingsBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Connection)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+    }
+
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+      @java.lang.Override
+      public Connection parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Connection(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Connection> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Connection> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    int getConnectionIdsCount();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionIdList}
+   */
+  public static final class ConnectionIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+    }
+
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connectionIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
+        } else {
+          result.connectionIds_ = connectionIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return pathHopsEndpointIdsBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ServiceId> subServiceIds_ =
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
         java.util.Collections.emptyList();
-      private void ensureSubServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          subServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(subServiceIds_);
-          bitField0_ |= 0x00000002;
+      private void ensureConnectionIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> subServiceIdsBuilder_;
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSubServiceIdsList() {
-        if (subServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
         } else {
-          return subServiceIdsBuilder_.getMessageList();
+          return connectionIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public int getSubServiceIdsCount() {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.size();
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
         } else {
-          return subServiceIdsBuilder_.getCount();
+          return connectionIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
         } else {
-          return subServiceIdsBuilder_.getMessage(index);
+          return connectionIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, builderForValue.build());
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
           onChanged();
         } else {
-          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(value);
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          subServiceIdsBuilder_.addMessage(value);
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder addAllSubServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, subServiceIds_);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder clearSubServiceIds() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public Builder removeSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.remove(index);
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-          int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);  } else {
-          return subServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSubServiceIdsOrBuilderList() {
-        if (subServiceIdsBuilder_ != null) {
-          return subServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSubServiceIdsBuilderList() {
-        return getSubServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSubServiceIdsFieldBuilder() {
-        if (subServiceIdsBuilder_ == null) {
-          subServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  subServiceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          subServiceIds_ = null;
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(value);
         }
-        return subServiceIdsBuilder_;
+        return this;
       }
-
-      private context.ContextOuterClass.ConnectionSettings settings_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return Whether the settings field is set.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public boolean hasSettings() {
-        return settingsBuilder_ != null || settings_ != null;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(index, value);
+        }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
-       * @return The settings.
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings getSettings() {
-        if (settingsBuilder_ == null) {
-          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return settingsBuilder_.getMessage();
+          connectionIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          settings_ = value;
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          settingsBuilder_.setMessage(value);
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder setSettings(
-          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
-        if (settingsBuilder_ == null) {
-          settings_ = builderForValue.build();
+      public Builder addAllConnectionIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connectionIds_);
           onChanged();
         } else {
-          settingsBuilder_.setMessage(builderForValue.build());
+          connectionIdsBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
-        if (settingsBuilder_ == null) {
-          if (settings_ != null) {
-            settings_ =
-              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
-          } else {
-            settings_ = value;
-          }
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          settingsBuilder_.mergeFrom(value);
+          connectionIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public Builder clearSettings() {
-        if (settingsBuilder_ == null) {
-          settings_ = null;
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
           onChanged();
         } else {
-          settings_ = null;
-          settingsBuilder_ = null;
+          connectionIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
-        
-        onChanged();
-        return getSettingsFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
-        if (settingsBuilder_ != null) {
-          return settingsBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return settings_ == null ?
-              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
+          return java.util.Collections.unmodifiableList(connectionIds_);
         }
       }
       /**
-       * <code>.context.ConnectionSettings settings = 5;</code>
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> 
-          getSettingsFieldBuilder() {
-        if (settingsBuilder_ == null) {
-          settingsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder>(
-                  getSettings(),
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          settings_ = null;
+          connectionIds_ = null;
         }
-        return settingsBuilder_;
+        return connectionIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -42845,95 +44634,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Connection>
-        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public ConnectionIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new ConnectionIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.ConnectionId> 
-        getConnectionIdsList();
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    context.ContextOuterClass.Connection getConnections(int index);
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    int getConnectionIdsCount();
+    int getConnectionsCount();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * Protobuf type {@code context.ConnectionList}
    */
-  public static final class ConnectionIdList extends
+  public static final class ConnectionList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new ConnectionList();
     }
 
     @java.lang.Override
@@ -42941,7 +44730,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private ConnectionList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -42962,11 +44751,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              connectionIds_.add(
-                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -42985,7 +44774,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+          connections_ = java.util.Collections.unmodifiableList(connections_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -42993,55 +44782,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
     }
 
-    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-      return connectionIds_;
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList() {
-      return connectionIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionIdsCount() {
-      return connectionIds_.size();
+    public int getConnectionsCount() {
+      return connections_.size();
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
     }
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>repeated .context.Connection connections = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
         int index) {
-      return connectionIds_.get(index);
+      return connections_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -43058,8 +44847,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      for (int i = 0; i < connections_.size(); i++) {
+        output.writeMessage(1, connections_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -43070,9 +44859,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      for (int i = 0; i < connections_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeMessageSize(1, connections_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -43084,13 +44873,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
 
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -43102,78 +44891,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionIdsCount() > 0) {
-        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -43186,7 +44975,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -43202,26 +44991,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * Protobuf type {@code context.ConnectionList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
+        context.ContextOuterClass.ConnectionListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -43234,17 +45023,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionIdsFieldBuilder();
+          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          connectionIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
@@ -43252,17 +45041,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -43270,17 +45059,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList buildPartial() {
-        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+      public context.ContextOuterClass.ConnectionList buildPartial() {
+        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
         int from_bitField0_ = bitField0_;
-        if (connectionIdsBuilder_ == null) {
+        if (connectionsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            connections_ = java.util.Collections.unmodifiableList(connections_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.connectionIds_ = connectionIds_;
+          result.connections_ = connections_;
         } else {
-          result.connectionIds_ = connectionIdsBuilder_.build();
+          result.connections_ = connectionsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -43320,39 +45109,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
-        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
-        if (connectionIdsBuilder_ == null) {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIds_.isEmpty()) {
-              connectionIds_ = other.connectionIds_;
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureConnectionIdsIsMutable();
-              connectionIds_.addAll(other.connectionIds_);
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
             }
             onChanged();
           }
         } else {
-          if (!other.connectionIds_.isEmpty()) {
-            if (connectionIdsBuilder_.isEmpty()) {
-              connectionIdsBuilder_.dispose();
-              connectionIdsBuilder_ = null;
-              connectionIds_ = other.connectionIds_;
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              connectionIdsBuilder_ = 
+              connectionsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionIdsFieldBuilder() : null;
+                   getConnectionsFieldBuilder() : null;
             } else {
-              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+              connectionsBuilder_.addAllMessages(other.connections_);
             }
           }
         }
@@ -43371,11 +45160,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -43386,244 +45175,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
         java.util.Collections.emptyList();
-      private void ensureConnectionIdsIsMutable() {
+      private void ensureConnectionsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>(connectionIds_);
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
         } else {
-          return connectionIdsBuilder_.getMessageList();
+          return connectionsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
         } else {
-          return connectionIdsBuilder_.getCount();
+          return connectionsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
         } else {
-          return connectionIdsBuilder_.getMessage(index);
+          return connectionsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, value);
+          connectionsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
+          ensureConnectionsIsMutable();
+          connections_.add(value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(value);
+          connectionsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, value);
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, value);
+          connectionsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
+          connectionsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
           onChanged();
         } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
+          connectionsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addAllConnectionIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConnectionId> values) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connectionIds_);
+              values, connections_);
           onChanged();
         } else {
-          connectionIdsBuilder_.addAllMessages(values);
+          connectionsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          connectionIdsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
           onChanged();
         } else {
-          connectionIdsBuilder_.remove(index);
+          connectionsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
           int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
+        return getConnectionsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
           int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
+          return java.util.Collections.unmodifiableList(connections_);
         }
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
           int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
-           getConnectionIdsBuilderList() {
-        return getConnectionIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdsFieldBuilder() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  connectionIds_,
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
+          getConnectionsFieldBuilder() {
+        if (connectionsBuilder_ == null) {
+          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
+                  connections_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          connectionIds_ = null;
+          connections_ = null;
         }
-        return connectionIdsBuilder_;
+        return connectionsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -43638,95 +45427,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public ConnectionList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new ConnectionList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getConnectionsCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    boolean hasConnectionId();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionList}
+   * Protobuf type {@code context.ConnectionEvent}
    */
-  public static final class ConnectionList extends
+  public static final class ConnectionEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private ConnectionEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new ConnectionEvent();
     }
 
     @java.lang.Override
@@ -43734,7 +45528,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private ConnectionEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -43742,7 +45536,6 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -43754,12 +45547,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -43777,64 +45587,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          connections_ = java.util.Collections.unmodifiableList(connections_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getConnectionsCount() {
-      return connections_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -43851,8 +45670,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < connections_.size(); i++) {
-        output.writeMessage(1, connections_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
       }
       unknownFields.writeTo(output);
     }
@@ -43863,9 +45685,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getConnectionId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -43877,13 +45703,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
 
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -43895,78 +45729,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConnectionsCount() > 0) {
-        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionsList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseDelimitedFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionList parseFrom(
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -43979,7 +45817,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -43995,26 +45833,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * Protobuf type {@code context.ConnectionEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionList)
-        context.ContextOuterClass.ConnectionListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
+        context.ContextOuterClass.ConnectionEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44027,17 +45865,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConnectionsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          connectionsBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
         return this;
       }
@@ -44045,17 +45888,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44063,17 +45906,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList buildPartial() {
-        context.ContextOuterClass.ConnectionList result = new context.ContextOuterClass.ConnectionList(this);
-        int from_bitField0_ = bitField0_;
-        if (connectionsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            connections_ = java.util.Collections.unmodifiableList(connections_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.connections_ = connections_;
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.connections_ = connectionsBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
+        } else {
+          result.connectionId_ = connectionIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44113,41 +45956,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionList) {
-          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
-        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
-        if (connectionsBuilder_ == null) {
-          if (!other.connections_.isEmpty()) {
-            if (connections_.isEmpty()) {
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConnectionsIsMutable();
-              connections_.addAll(other.connections_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.connections_.isEmpty()) {
-            if (connectionsBuilder_.isEmpty()) {
-              connectionsBuilder_.dispose();
-              connectionsBuilder_ = null;
-              connections_ = other.connections_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              connectionsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConnectionsFieldBuilder() : null;
-            } else {
-              connectionsBuilder_.addAllMessages(other.connections_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
+        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasConnectionId()) {
+          mergeConnectionId(other.getConnectionId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -44164,11 +45987,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -44177,246 +46000,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Connection> connections_ =
-        java.util.Collections.emptyList();
-      private void ensureConnectionsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
-        } else {
-          return connectionsBuilder_.getCount();
-        }
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return connectionsBuilder_.getMessage(index);
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
+          event_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, value);
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+          } else {
+            event_ = value;
           }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(index, value);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          connectionsBuilder_.addMessage(builderForValue.build());
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
+          getEventFieldBuilder() {
+        if (eventBuilder_ == null) {
+          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
+                  getEvent(),
+                  getParentForChildren(),
+                  isClean());
+          event_ = null;
         }
-        return this;
+        return eventBuilder_;
       }
+
+      private context.ContextOuterClass.ConnectionId connectionId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
-          onChanged();
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
+      }
+      /**
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          connectionsBuilder_.addAllMessages(values);
+          return connectionIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionId_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.clear();
+          connectionIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.remove(index);
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+          } else {
+            connectionId_ = value;
+          }
+          onChanged();
+        } else {
+          connectionIdBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+        
+        onChanged();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+        }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.Connection.Builder> 
-           getConnectionsBuilderList() {
-        return getConnectionsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> 
-          getConnectionsFieldBuilder() {
-        if (connectionsBuilder_ == null) {
-          connectionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder>(
-                  connections_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdFieldBuilder() {
+        if (connectionIdBuilder_ == null) {
+          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  getConnectionId(),
                   getParentForChildren(),
                   isClean());
-          connections_ = null;
+          connectionId_ = null;
         }
-        return connectionsBuilder_;
+        return connectionIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -44431,100 +46251,119 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionList>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public ConnectionEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new ConnectionEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
-    boolean hasEvent();
+    boolean hasTopologyId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.TopologyId getTopologyId();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
 
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
-    boolean hasConnectionId();
+    boolean hasDeviceId();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.DeviceId getDeviceId();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    boolean hasEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    context.ContextOuterClass.Uuid getEndpointUuid();
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionEvent}
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
    */
-  public static final class ConnectionEvent extends
+  public static final class EndPointId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
-      ConnectionEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionEvent.newBuilder() to construct.
-    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionEvent() {
+    private EndPointId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionEvent();
+      return new EndPointId();
     }
 
     @java.lang.Override
@@ -44532,7 +46371,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionEvent(
+    private EndPointId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -44551,27 +46390,40 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (deviceId_ != null) {
+                subBuilder = deviceId_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(deviceId_);
+                deviceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (endpointUuid_ != null) {
+                subBuilder = endpointUuid_.toBuilder();
+              }
+              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointUuid_);
+                endpointUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -44597,67 +46449,93 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.TopologyId topology_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int DEVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.DeviceId getDeviceId() {
+      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.DeviceId device_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.Uuid endpointUuid_;
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return Whether the endpointUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointUuid() {
+      return endpointUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * @return The endpointUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getEndpointUuid() {
+      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    }
+    /**
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+      return getEndpointUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -44674,11 +46552,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (event_ != null) {
-        output.writeMessage(1, getEvent());
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
       }
-      if (connectionId_ != null) {
-        output.writeMessage(2, getConnectionId());
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -44689,13 +46570,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (topologyId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getTopologyId());
       }
-      if (connectionId_ != null) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getConnectionId());
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -44707,20 +46592,25 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
       }
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) return false;
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -44733,82 +46623,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEvent()) {
-        hash = (37 * hash) + EVENT_FIELD_NUMBER;
-        hash = (53 * hash) + getEvent().hashCode();
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
       }
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().hashCode();
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      if (hasEndpointUuid()) {
+        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -44821,7 +46715,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConnectionEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -44837,26 +46731,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionEvent}
+     * <pre>
+     * ----- Endpoint ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.EndPointId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConnectionEvent)
-        context.ContextOuterClass.ConnectionEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -44874,17 +46772,23 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
         return this;
       }
@@ -44892,17 +46796,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent build() {
-        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -44910,17 +46814,22 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent buildPartial() {
-        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
         } else {
-          result.event_ = eventBuilder_.build();
+          result.topologyId_ = topologyIdBuilder_.build();
         }
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -44960,287 +46869,409 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConnectionEvent) {
-          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
+        if (other instanceof context.ContextOuterClass.EndPointId) {
+          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
+        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (other.hasEndpointUuid()) {
+          mergeEndpointUuid(other.getEndpointUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.EndPointId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.TopologyId topologyId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       * @return The topologyId.
+       */
+      public context.ContextOuterClass.TopologyId getTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        } else {
+          return topologyIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyId_ = value;
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder setTopologyId(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdBuilder_ == null) {
+          if (topologyId_ != null) {
+            topologyId_ =
+              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+          } else {
+            topologyId_ = value;
+          }
+          onChanged();
+        } else {
+          topologyIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
         }
-      }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
-        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
         return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
         }
-        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdFieldBuilder() {
+        if (topologyIdBuilder_ == null) {
+          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  getTopologyId(),
+                  getParentForChildren(),
+                  isClean());
+          topologyId_ = null;
+        }
+        return topologyIdBuilder_;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.DeviceId deviceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return eventBuilder_.getMessage();
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          deviceId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          deviceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder mergeEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (event_ != null) {
-            event_ =
-              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
+      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (deviceId_ != null) {
+            deviceId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            deviceId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          deviceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> 
-          getEventFieldBuilder() {
-        if (eventBuilder_ == null) {
-          eventBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder>(
-                  getEvent(),
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdFieldBuilder() {
+        if (deviceIdBuilder_ == null) {
+          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDeviceId(),
                   getParentForChildren(),
                   isClean());
-          event_ = null;
+          deviceId_ = null;
         }
-        return eventBuilder_;
+        return deviceIdBuilder_;
       }
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.Uuid endpointUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return The connectionId.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return endpointUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          endpointUuid_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          endpointUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          endpointUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
-          if (connectionId_ != null) {
-            connectionId_ =
-              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            endpointUuid_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          endpointUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
-          getConnectionIdFieldBuilder() {
-        if (connectionIdBuilder_ == null) {
-          connectionIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
-                  getConnectionId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
                   getParentForChildren(),
                   isClean());
-          connectionId_ = null;
+          endpointUuid_ = null;
         }
-        return connectionIdBuilder_;
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -45255,119 +47286,143 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConnectionEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public ConnectionEvent parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionEvent(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasTopologyId();
+    boolean hasEndpointId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
-    boolean hasDeviceId();
+    java.lang.String getEndpointType();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
+     */
+    int getKpiSampleTypesCount();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     */
+    java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList();
+    /**
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+     */
+    int getKpiSampleTypesValue(int index);
 
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
      */
-    boolean hasEndpointUuid();
+    boolean hasEndpointLocation();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
      */
-    context.ContextOuterClass.Uuid getEndpointUuid();
+    context.ContextOuterClass.Location getEndpointLocation();
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Location endpoint_location = 4;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class EndPointId extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private EndPoint() {
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -45375,7 +47430,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -45383,6 +47438,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -45394,40 +47450,56 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
-              }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              endpointType_ = s;
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiSampleTypes_.add(rawValue);
               break;
             }
             case 26: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (endpointUuid_ != null) {
-                subBuilder = endpointUuid_.toBuilder();
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                kpiSampleTypes_.add(rawValue);
               }
-              endpointUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (endpointLocation_ != null) {
+                subBuilder = endpointLocation_.toBuilder();
+              }
+              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointUuid_);
-                endpointUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointLocation_);
+                endpointLocation_ = subBuilder.buildPartial();
               }
 
               break;
@@ -45447,99 +47519,172 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
+    /**
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+    public java.lang.String getEndpointType() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        endpointType_ = s;
+        return s;
+      }
     }
-
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
     @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
+    public com.google.protobuf.ByteString
+        getEndpointTypeBytes() {
+      java.lang.Object ref = endpointType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        endpointType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
+
+    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> kpiSampleTypes_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
+              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
+                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
+              }
+            };
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
     }
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return The count of kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    public int getKpiSampleTypesCount() {
+      return kpiSampleTypes_.size();
     }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the element to return.
+     * @return The kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
+    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.util.List<java.lang.Integer>
+    getKpiSampleTypesValueList() {
+      return kpiSampleTypes_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public int getKpiSampleTypesValue(int index) {
+      return kpiSampleTypes_.get(index);
     }
+    private int kpiSampleTypesMemoizedSerializedSize;
 
-    public static final int ENDPOINT_UUID_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.Uuid endpointUuid_;
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.Location endpointLocation_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return Whether the endpointUuid field is set.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return Whether the endpointLocation field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointUuid() {
-      return endpointUuid_ != null;
+    public boolean hasEndpointLocation() {
+      return endpointLocation_ != null;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
-     * @return The endpointUuid.
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getEndpointUuid() {
-      return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+    public context.ContextOuterClass.Location getEndpointLocation() {
+      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
     }
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>.context.Location endpoint_location = 4;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+      return getEndpointLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -45556,14 +47701,22 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (topologyId_ != null) {
-        output.writeMessage(1, getTopologyId());
+      getSerializedSize();
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
       }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      if (getKpiSampleTypesList().size() > 0) {
+        output.writeUInt32NoTag(26);
+        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      }
+      if (endpointLocation_ != null) {
+        output.writeMessage(4, getEndpointLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -45574,17 +47727,28 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
       }
-      if (endpointUuid_ != null) {
+      {
+        int dataSize = 0;
+        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
+        }
+        size += dataSize;
+        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      }
+      if (endpointLocation_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeMessageSize(4, getEndpointLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -45596,25 +47760,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
-      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) return false;
+      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
+      if (hasEndpointLocation()) {
+        if (!getEndpointLocation()
+            .equals(other.getEndpointLocation())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -45627,86 +47789,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasTopologyId()) {
-        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyId().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
+      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getEndpointType().hashCode();
+      if (getKpiSampleTypesCount() > 0) {
+        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
+        hash = (53 * hash) + kpiSampleTypes_.hashCode();
       }
-      if (hasEndpointUuid()) {
-        hash = (37 * hash) + ENDPOINT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointUuid().hashCode();
+      if (hasEndpointLocation()) {
+        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseDelimitedFrom(
+    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -45719,7 +47883,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -45735,30 +47899,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.EndPoint}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPointId)
-        context.ContextOuterClass.EndPointIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -45776,23 +47936,21 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+        endpointType_ = "";
+
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
         return this;
       }
@@ -45800,17 +47958,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -45818,22 +47976,24 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId buildPartial() {
-        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+        int from_bitField0_ = bitField0_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.topologyId_ = topologyIdBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
+        result.endpointType_ = endpointType_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
         }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
+        result.kpiSampleTypes_ = kpiSampleTypes_;
+        if (endpointLocationBuilder_ == null) {
+          result.endpointLocation_ = endpointLocation_;
         } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
+          result.endpointLocation_ = endpointLocationBuilder_.build();
         }
         onBuilt();
         return result;
@@ -45873,24 +48033,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPointId) {
-          return mergeFrom((context.ContextOuterClass.EndPointId)other);
+        if (other instanceof context.ContextOuterClass.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.EndPointId other) {
-        if (other == context.ContextOuterClass.EndPointId.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
         }
-        if (other.hasEndpointUuid()) {
-          mergeEndpointUuid(other.getEndpointUuid());
+        if (!other.kpiSampleTypes_.isEmpty()) {
+          if (kpiSampleTypes_.isEmpty()) {
+            kpiSampleTypes_ = other.kpiSampleTypes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureKpiSampleTypesIsMutable();
+            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
+          }
+          onChanged();
+        }
+        if (other.hasEndpointLocation()) {
+          mergeEndpointLocation(other.getEndpointLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -45907,11 +48078,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPointId parsedMessage = null;
+        context.ContextOuterClass.EndPoint parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -45920,362 +48091,460 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.TopologyId topologyId_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return topologyIdBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyId_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setTopologyId(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder mergeTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (topologyId_ != null) {
-            topologyId_ =
-              context.ContextOuterClass.TopologyId.newBuilder(topologyId_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            topologyId_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          topologyIdBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private java.lang.Object endpointType_ = "";
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The endpointType.
+       */
+      public java.lang.String getEndpointType() {
+        java.lang.Object ref = endpointType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          endpointType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return The bytes for endpointType.
+       */
+      public com.google.protobuf.ByteString
+          getEndpointTypeBytes() {
+        java.lang.Object ref = endpointType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          endpointType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+      public Builder clearEndpointType() {
         
+        endpointType_ = getDefaultInstance().getEndpointType();
         onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
+        java.util.Collections.emptyList();
+      private void ensureKpiSampleTypesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
+          bitField0_ |= 0x00000001;
         }
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the kpiSampleTypes.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdFieldBuilder() {
-        if (topologyIdBuilder_ == null) {
-          topologyIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  getTopologyId(),
-                  getParentForChildren(),
-                  isClean());
-          topologyId_ = null;
-        }
-        return topologyIdBuilder_;
+      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
       }
-
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return The count of kpiSampleTypes.
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the element to return.
+       * @return The kpiSampleTypes at the given index.
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index to set the value at.
+       * @param value The kpiSampleTypes to set.
+       * @return This builder for chaining.
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
+      public Builder setKpiSampleTypes(
+          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value.getNumber());
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public Builder mergeDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (deviceId_ != null) {
-            deviceId_ =
-              context.ContextOuterClass.DeviceId.newBuilder(deviceId_).mergeFrom(value).buildPartial();
-          } else {
-            deviceId_ = value;
-          }
-          onChanged();
-        } else {
-          deviceIdBuilder_.mergeFrom(value);
+      public Builder addAllKpiSampleTypes(
+          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
+          kpiSampleTypes_.add(value.getNumber());
         }
-
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
+      public java.util.List<java.lang.Integer>
+      getKpiSampleTypesValueList() {
+        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       */
+      public int getKpiSampleTypesValue(int index) {
+        return kpiSampleTypes_.get(index);
+      }
+      /**
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setKpiSampleTypesValue(
+          int index, int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.set(index, value);
         onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdFieldBuilder() {
-        if (deviceIdBuilder_ == null) {
-          deviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  getDeviceId(),
-                  getParentForChildren(),
-                  isClean());
-          deviceId_ = null;
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(value);
         }
-        return deviceIdBuilder_;
+        onChanged();
+        return this;
       }
 
-      private context.ContextOuterClass.Uuid endpointUuid_;
+      private context.ContextOuterClass.Location endpointLocation_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return Whether the endpointLocation field is set.
        */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      public boolean hasEndpointLocation() {
+        return endpointLocationBuilder_ != null || endpointLocation_ != null;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return The endpointLocation.
        */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+      public context.ContextOuterClass.Location getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         } else {
-          return endpointUuidBuilder_.getMessage();
+          return endpointLocationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
+      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointUuid_ = value;
+          endpointLocation_ = value;
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(value);
+          endpointLocationBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = builderForValue.build();
           onChanged();
         } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
+          endpointLocationBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (endpointLocation_ != null) {
+            endpointLocation_ =
+              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
           } else {
-            endpointUuid_ = value;
+            endpointLocation_ = value;
           }
           onChanged();
         } else {
-          endpointUuidBuilder_.mergeFrom(value);
+          endpointLocationBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
           onChanged();
         } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
         
         onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
+        return getEndpointLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+        if (endpointLocationBuilder_ != null) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
         } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
+          return endpointLocation_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
         }
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getEndpointUuidFieldBuilder() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getEndpointUuid(),
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getEndpointLocation(),
                   getParentForChildren(),
                   isClean());
-          endpointUuid_ = null;
+          endpointLocation_ = null;
         }
-        return endpointUuidBuilder_;
+        return endpointLocationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -46290,143 +48559,96 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPointId>
-        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface ConfigRule_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    boolean hasEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    context.ContextOuterClass.EndPointId getEndpointId();
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
-
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
-    java.lang.String getEndpointType();
+    java.lang.String getResourceKey();
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     com.google.protobuf.ByteString
-        getEndpointTypeBytes();
-
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    int getKpiSampleTypesCount();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index);
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList();
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-     */
-    int getKpiSampleTypesValue(int index);
+        getResourceKeyBytes();
 
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
-     */
-    boolean hasEndpointLocation();
-    /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
-    context.ContextOuterClass.Location getEndpointLocation();
+    java.lang.String getResourceValue();
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
-    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.ConfigRule_Custom}
    */
-  public static final class EndPoint extends
+  public static final class ConfigRule_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
+      ConfigRule_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_Custom.newBuilder() to construct.
+    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
-      kpiSampleTypes_ = java.util.Collections.emptyList();
+    private ConfigRule_Custom() {
+      resourceKey_ = "";
+      resourceValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new ConfigRule_Custom();
     }
 
     @java.lang.Override
@@ -46434,7 +48656,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private ConfigRule_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -46442,70 +48664,26 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
-              }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              endpointType_ = s;
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              kpiSampleTypes_.add(rawValue);
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
               break;
-            }
-            case 26: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                kpiSampleTypes_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
               break;
             }
-            case 34: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (endpointLocation_ != null) {
-                subBuilder = endpointLocation_.toBuilder();
-              }
-              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointLocation_);
-                endpointLocation_ = subBuilder.buildPartial();
-              }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
 
+              resourceValue_ = s;
               break;
             }
             default: {
@@ -46523,172 +48701,97 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
-    }
-
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-    }
-    /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
     }
 
-    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object endpointType_;
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
+    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
     @java.lang.Override
-    public java.lang.String getEndpointType() {
-      java.lang.Object ref = endpointType_;
+    public java.lang.String getResourceKey() {
+      java.lang.Object ref = resourceKey_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        endpointType_ = s;
+        resourceKey_ = s;
         return s;
       }
     }
     /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getEndpointTypeBytes() {
-      java.lang.Object ref = endpointType_;
+        getResourceKeyBytes() {
+      java.lang.Object ref = resourceKey_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        endpointType_ = b;
+        resourceKey_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int KPI_SAMPLE_TYPES_FIELD_NUMBER = 3;
-    private java.util.List<java.lang.Integer> kpiSampleTypes_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType> kpiSampleTypes_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>() {
-              public kpi_sample_types.KpiSampleTypes.KpiSampleType convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                kpi_sample_types.KpiSampleTypes.KpiSampleType result = kpi_sample_types.KpiSampleTypes.KpiSampleType.valueOf(from);
-                return result == null ? kpi_sample_types.KpiSampleTypes.KpiSampleType.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return The count of kpiSampleTypes.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesCount() {
-      return kpiSampleTypes_.size();
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the element to return.
-     * @return The kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-     */
-    @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList() {
-      return kpiSampleTypes_;
-    }
-    /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-     */
-    @java.lang.Override
-    public int getKpiSampleTypesValue(int index) {
-      return kpiSampleTypes_.get(index);
-    }
-    private int kpiSampleTypesMemoizedSerializedSize;
-
-    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.Location endpointLocation_;
-    /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return Whether the endpointLocation field is set.
-     */
-    @java.lang.Override
-    public boolean hasEndpointLocation() {
-      return endpointLocation_ != null;
-    }
+    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
-     * @return The endpointLocation.
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Location getEndpointLocation() {
-      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+    public java.lang.String getResourceValue() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        resourceValue_ = s;
+        return s;
+      }
     }
     /**
-     * <code>.context.Location endpoint_location = 4;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-      return getEndpointLocation();
+    public com.google.protobuf.ByteString
+        getResourceValueBytes() {
+      java.lang.Object ref = resourceValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        resourceValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -46705,22 +48808,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
-      }
-      if (getKpiSampleTypesList().size() > 0) {
-        output.writeUInt32NoTag(26);
-        output.writeUInt32NoTag(kpiSampleTypesMemoizedSerializedSize);
-      }
-      for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-        output.writeEnumNoTag(kpiSampleTypes_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
       }
-      if (endpointLocation_ != null) {
-        output.writeMessage(4, getEndpointLocation());
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -46731,28 +48823,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < kpiSampleTypes_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(kpiSampleTypes_.get(i));
-        }
-        size += dataSize;
-        if (!getKpiSampleTypesList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }kpiSampleTypesMemoizedSerializedSize = dataSize;
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
       }
-      if (endpointLocation_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getEndpointLocation());
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -46760,28 +48835,19 @@ public final class ContextOuterClass {
     }
 
     @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
-
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
-      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
-      if (hasEndpointLocation() != other.hasEndpointLocation()) return false;
-      if (hasEndpointLocation()) {
-        if (!getEndpointLocation()
-            .equals(other.getEndpointLocation())) return false;
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
+
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -46793,88 +48859,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      hash = (37 * hash) + ENDPOINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getEndpointType().hashCode();
-      if (getKpiSampleTypesCount() > 0) {
-        hash = (37 * hash) + KPI_SAMPLE_TYPES_FIELD_NUMBER;
-        hash = (53 * hash) + kpiSampleTypes_.hashCode();
-      }
-      if (hasEndpointLocation()) {
-        hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointLocation().hashCode();
-      }
+      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceKey().hashCode();
+      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getResourceValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -46887,7 +48943,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.EndPoint prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -46903,26 +48959,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.ConfigRule_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.EndPoint)
-        context.ContextOuterClass.EndPointOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
+        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -46940,39 +48996,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        endpointType_ = "";
+        resourceKey_ = "";
+
+        resourceValue_ = "";
 
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-        } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
-        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_Custom build() {
+        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -46980,25 +49024,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint buildPartial() {
-        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
-        int from_bitField0_ = bitField0_;
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
-        }
-        result.endpointType_ = endpointType_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.kpiSampleTypes_ = kpiSampleTypes_;
-        if (endpointLocationBuilder_ == null) {
-          result.endpointLocation_ = endpointLocation_;
-        } else {
-          result.endpointLocation_ = endpointLocationBuilder_.build();
-        }
+      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
+        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
         onBuilt();
         return result;
       }
@@ -47031,524 +49060,209 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
-        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
-        }
-        if (!other.getEndpointType().isEmpty()) {
-          endpointType_ = other.endpointType_;
-          onChanged();
-        }
-        if (!other.kpiSampleTypes_.isEmpty()) {
-          if (kpiSampleTypes_.isEmpty()) {
-            kpiSampleTypes_ = other.kpiSampleTypes_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureKpiSampleTypesIsMutable();
-            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
-          }
-          onChanged();
-        }
-        if (other.hasEndpointLocation()) {
-          mergeEndpointLocation(other.getEndpointLocation());
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private context.ContextOuterClass.EndPointId endpointId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
-       */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
-       */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        } else {
-          return endpointIdBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointId_ = value;
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
-          } else {
-            endpointId_ = value;
-          }
-          onChanged();
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          super.mergeFrom(other);
+          return this;
         }
-
-        return this;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
+
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
+        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
           onChanged();
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
         }
-
-        return this;
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+        return this;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
-        }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
-                  getParentForChildren(),
-                  isClean());
-          endpointId_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return endpointIdBuilder_;
+        return this;
       }
 
-      private java.lang.Object endpointType_ = "";
+      private java.lang.Object resourceKey_ = "";
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The endpointType.
+       * <code>string resource_key = 1;</code>
+       * @return The resourceKey.
        */
-      public java.lang.String getEndpointType() {
-        java.lang.Object ref = endpointType_;
+      public java.lang.String getResourceKey() {
+        java.lang.Object ref = resourceKey_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          endpointType_ = s;
+          resourceKey_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @return The bytes for endpointType.
+       * <code>string resource_key = 1;</code>
+       * @return The bytes for resourceKey.
        */
       public com.google.protobuf.ByteString
-          getEndpointTypeBytes() {
-        java.lang.Object ref = endpointType_;
+          getResourceKeyBytes() {
+        java.lang.Object ref = resourceKey_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          endpointType_ = b;
+          resourceKey_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEndpointType() {
-        
-        endpointType_ = getDefaultInstance().getEndpointType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        endpointType_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
-        java.util.Collections.emptyList();
-      private void ensureKpiSampleTypesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
-          bitField0_ |= 0x00000001;
-        }
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the kpiSampleTypes.
-       */
-      public java.util.List<kpi_sample_types.KpiSampleTypes.KpiSampleType> getKpiSampleTypesList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, kpi_sample_types.KpiSampleTypes.KpiSampleType>(kpiSampleTypes_, kpiSampleTypes_converter_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return The count of kpiSampleTypes.
-       */
-      public int getKpiSampleTypesCount() {
-        return kpiSampleTypes_.size();
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the element to return.
-       * @return The kpiSampleTypes at the given index.
-       */
-      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index to set the value at.
-       * @param value The kpiSampleTypes to set.
-       * @return This builder for chaining.
-       */
-      public Builder setKpiSampleTypes(
-          int index, kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addKpiSampleTypes(kpi_sample_types.KpiSampleTypes.KpiSampleType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value.getNumber());
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The kpiSampleTypes to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllKpiSampleTypes(
-          java.lang.Iterable<? extends kpi_sample_types.KpiSampleTypes.KpiSampleType> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (kpi_sample_types.KpiSampleTypes.KpiSampleType value : values) {
-          kpiSampleTypes_.add(value.getNumber());
-        }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearKpiSampleTypes() {
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
-       */
-      public java.util.List<java.lang.Integer>
-      getKpiSampleTypesValueList() {
-        return java.util.Collections.unmodifiableList(kpiSampleTypes_);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
-       */
-      public int getKpiSampleTypesValue(int index) {
-        return kpiSampleTypes_.get(index);
-      }
-      /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of kpiSampleTypes at the given index.
+       * <code>string resource_key = 1;</code>
+       * @param value The resourceKey to set.
        * @return This builder for chaining.
        */
-      public Builder setKpiSampleTypesValue(
-          int index, int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value);
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param value The enum numeric value on the wire for kpiSampleTypes to add.
+       * <code>string resource_key = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder addKpiSampleTypesValue(int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value);
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
         onChanged();
         return this;
       }
       /**
-       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-       * @param values The enum numeric values on the wire for kpiSampleTypes to add.
+       * <code>string resource_key = 1;</code>
+       * @param value The bytes for resourceKey to set.
        * @return This builder for chaining.
        */
-      public Builder addAllKpiSampleTypesValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureKpiSampleTypesIsMutable();
-        for (int value : values) {
-          kpiSampleTypes_.add(value);
-        }
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
         onChanged();
         return this;
       }
 
-      private context.ContextOuterClass.Location endpointLocation_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> endpointLocationBuilder_;
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return Whether the endpointLocation field is set.
-       */
-      public boolean hasEndpointLocation() {
-        return endpointLocationBuilder_ != null || endpointLocation_ != null;
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       * @return The endpointLocation.
-       */
-      public context.ContextOuterClass.Location getEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        } else {
-          return endpointLocationBuilder_.getMessage();
-        }
-      }
+      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The resourceValue.
        */
-      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointLocation_ = value;
-          onChanged();
+      public java.lang.String getResourceValue() {
+        java.lang.Object ref = resourceValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          resourceValue_ = s;
+          return s;
         } else {
-          endpointLocationBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The bytes for resourceValue.
        */
-      public Builder setEndpointLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = builderForValue.build();
-          onChanged();
+      public com.google.protobuf.ByteString
+          getResourceValueBytes() {
+        java.lang.Object ref = resourceValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          resourceValue_ = b;
+          return b;
         } else {
-          endpointLocationBuilder_.setMessage(builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-
-        return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeEndpointLocation(context.ContextOuterClass.Location value) {
-        if (endpointLocationBuilder_ == null) {
-          if (endpointLocation_ != null) {
-            endpointLocation_ =
-              context.ContextOuterClass.Location.newBuilder(endpointLocation_).mergeFrom(value).buildPartial();
-          } else {
-            endpointLocation_ = value;
-          }
-          onChanged();
-        } else {
-          endpointLocationBuilder_.mergeFrom(value);
-        }
-
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearEndpointLocation() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocation_ = null;
-          onChanged();
-        } else {
-          endpointLocation_ = null;
-          endpointLocationBuilder_ = null;
-        }
-
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.Location endpoint_location = 4;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
+        resourceValue_ = value;
         onChanged();
-        return getEndpointLocationFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       */
-      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
-        if (endpointLocationBuilder_ != null) {
-          return endpointLocationBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointLocation_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
-        }
-      }
-      /**
-       * <code>.context.Location endpoint_location = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getEndpointLocationFieldBuilder() {
-        if (endpointLocationBuilder_ == null) {
-          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getEndpointLocation(),
-                  getParentForChildren(),
-                  isClean());
-          endpointLocation_ = null;
-        }
-        return endpointLocationBuilder_;
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -47563,96 +49277,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
+    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
     }
 
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<EndPoint>
-        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+    private static final com.google.protobuf.Parser<ConfigRule_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
       @java.lang.Override
-      public EndPoint parsePartialFrom(
+      public ConfigRule_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+        return new ConfigRule_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPoint> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRule_CustomOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
+  public interface ConfigRule_ACLOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.lang.String getResourceKey();
+    boolean hasEndpointId();
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The bytes for resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    com.google.protobuf.ByteString
-        getResourceKeyBytes();
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
-    java.lang.String getResourceValue();
+    boolean hasRuleSet();
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The bytes for resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
-    com.google.protobuf.ByteString
-        getResourceValueBytes();
+    acl.Acl.AclRuleSet getRuleSet();
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConfigRule_Custom}
+   * Protobuf type {@code context.ConfigRule_ACL}
    */
-  public static final class ConfigRule_Custom extends
+  public static final class ConfigRule_ACL extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
-      ConfigRule_CustomOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
+      ConfigRule_ACLOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule_Custom.newBuilder() to construct.
-    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_ACL.newBuilder() to construct.
+    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule_Custom() {
-      resourceKey_ = "";
-      resourceValue_ = "";
+    private ConfigRule_ACL() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule_Custom();
+      return new ConfigRule_ACL();
     }
 
     @java.lang.Override
@@ -47660,7 +49378,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule_Custom(
+    private ConfigRule_ACL(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -47679,15 +49397,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
 
-              resourceKey_ = s;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+              acl.Acl.AclRuleSet.Builder subBuilder = null;
+              if (ruleSet_ != null) {
+                subBuilder = ruleSet_.toBuilder();
+              }
+              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ruleSet_);
+                ruleSet_ = subBuilder.buildPartial();
+              }
 
-              resourceValue_ = s;
               break;
             }
             default: {
@@ -47711,91 +49443,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
+              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
     }
 
-    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
-    private volatile java.lang.Object resourceKey_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public java.lang.String getResourceKey() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceKey_ = s;
-        return s;
-      }
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>string resource_key = 1;</code>
-     * @return The bytes for resourceKey.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceKeyBytes() {
-      java.lang.Object ref = resourceKey_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceKey_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object resourceValue_;
+    public static final int RULE_SET_FIELD_NUMBER = 2;
+    private acl.Acl.AclRuleSet ruleSet_;
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
     @java.lang.Override
-    public java.lang.String getResourceValue() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        resourceValue_ = s;
-        return s;
-      }
+    public boolean hasRuleSet() {
+      return ruleSet_ != null;
     }
     /**
-     * <code>string resource_value = 2;</code>
-     * @return The bytes for resourceValue.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getResourceValueBytes() {
-      java.lang.Object ref = resourceValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        resourceValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public acl.Acl.AclRuleSet getRuleSet() {
+      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    }
+    /**
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+      return getRuleSet();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -47812,11 +49520,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getResourceKeyBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
+      if (ruleSet_ != null) {
+        output.writeMessage(2, getRuleSet());
       }
       unknownFields.writeTo(output);
     }
@@ -47827,11 +49535,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getResourceKeyBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
       }
-      if (!getResourceValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
+      if (ruleSet_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getRuleSet());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -47843,15 +49553,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
+      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
 
-      if (!getResourceKey()
-          .equals(other.getResourceKey())) return false;
-      if (!getResourceValue()
-          .equals(other.getResourceValue())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasRuleSet() != other.hasRuleSet()) return false;
+      if (hasRuleSet()) {
+        if (!getRuleSet()
+            .equals(other.getRuleSet())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -47863,78 +49579,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + RESOURCE_KEY_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceKey().hashCode();
-      hash = (37 * hash) + RESOURCE_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getResourceValue().hashCode();
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasRuleSet()) {
+        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
+        hash = (53 * hash) + getRuleSet().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -47947,7 +49667,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_Custom prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -47963,26 +49683,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule_Custom}
+     * Protobuf type {@code context.ConfigRule_ACL}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule_Custom)
-        context.ContextOuterClass.ConfigRule_CustomOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
+        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
+                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48000,38 +49720,54 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        resourceKey_ = "";
-
-        resourceValue_ = "";
-
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+        } else {
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom build() {
-        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_ACL build() {
+        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
-        return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom buildPartial() {
-        context.ContextOuterClass.ConfigRule_Custom result = new context.ContextOuterClass.ConfigRule_Custom(this);
-        result.resourceKey_ = resourceKey_;
-        result.resourceValue_ = resourceValue_;
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
+        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        if (ruleSetBuilder_ == null) {
+          result.ruleSet_ = ruleSet_;
+        } else {
+          result.ruleSet_ = ruleSetBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -48070,23 +49806,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule_Custom) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_Custom other) {
-        if (other == context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) return this;
-        if (!other.getResourceKey().isEmpty()) {
-          resourceKey_ = other.resourceKey_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
+        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
         }
-        if (!other.getResourceValue().isEmpty()) {
-          resourceValue_ = other.resourceValue_;
-          onChanged();
+        if (other.hasRuleSet()) {
+          mergeRuleSet(other.getRuleSet());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48103,11 +49837,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule_Custom parsedMessage = null;
+        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48117,156 +49851,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private java.lang.Object resourceKey_ = "";
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>string resource_key = 1;</code>
-       * @return The resourceKey.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public java.lang.String getResourceKey() {
-        java.lang.Object ref = resourceKey_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceKey_ = s;
-          return s;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
+       */
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return (java.lang.String) ref;
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @return The bytes for resourceKey.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceKeyBytes() {
-        java.lang.Object ref = resourceKey_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceKey_ = b;
-          return b;
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointId_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @param value The resourceKey to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setResourceKey(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceKey_ = value;
-        onChanged();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointIdBuilder_.setMessage(builderForValue.build());
+        }
+
         return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearResourceKey() {
-        
-        resourceKey_ = getDefaultInstance().getResourceKey();
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string resource_key = 1;</code>
-       * @param value The bytes for resourceKey to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setResourceKeyBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
-        resourceKey_ = value;
         onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
+      }
+
+      private acl.Acl.AclRuleSet ruleSet_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return Whether the ruleSet field is set.
+       */
+      public boolean hasRuleSet() {
+        return ruleSetBuilder_ != null || ruleSet_ != null;
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return The ruleSet.
+       */
+      public acl.Acl.AclRuleSet getRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        } else {
+          return ruleSetBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       */
+      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ruleSet_ = value;
+          onChanged();
+        } else {
+          ruleSetBuilder_.setMessage(value);
+        }
+
         return this;
       }
+      /**
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       */
+      public Builder setRuleSet(
+          acl.Acl.AclRuleSet.Builder builderForValue) {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = builderForValue.build();
+          onChanged();
+        } else {
+          ruleSetBuilder_.setMessage(builderForValue.build());
+        }
 
-      private java.lang.Object resourceValue_ = "";
+        return this;
+      }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return The resourceValue.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public java.lang.String getResourceValue() {
-        java.lang.Object ref = resourceValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          resourceValue_ = s;
-          return s;
+      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (ruleSet_ != null) {
+            ruleSet_ =
+              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+          } else {
+            ruleSet_ = value;
+          }
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          ruleSetBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return The bytes for resourceValue.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public com.google.protobuf.ByteString
-          getResourceValueBytes() {
-        java.lang.Object ref = resourceValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          resourceValue_ = b;
-          return b;
+      public Builder clearRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @param value The resourceValue to set.
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setResourceValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceValue_ = value;
+      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
+        
         onChanged();
-        return this;
+        return getRuleSetFieldBuilder().getBuilder();
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder clearResourceValue() {
-        
-        resourceValue_ = getDefaultInstance().getResourceValue();
-        onChanged();
-        return this;
+      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+        if (ruleSetBuilder_ != null) {
+          return ruleSetBuilder_.getMessageOrBuilder();
+        } else {
+          return ruleSet_ == null ?
+              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+        }
       }
       /**
-       * <code>string resource_value = 2;</code>
-       * @param value The bytes for resourceValue to set.
-       * @return This builder for chaining.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setResourceValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceValue_ = value;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
+          getRuleSetFieldBuilder() {
+        if (ruleSetBuilder_ == null) {
+          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
+                  getRuleSet(),
+                  getParentForChildren(),
+                  isClean());
+          ruleSet_ = null;
+        }
+        return ruleSetBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -48281,100 +50101,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule_Custom)
-    private static final context.ContextOuterClass.ConfigRule_Custom DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
+    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
     }
 
-    public static context.ContextOuterClass.ConfigRule_Custom getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule_Custom>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
+    private static final com.google.protobuf.Parser<ConfigRule_ACL>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
       @java.lang.Override
-      public ConfigRule_Custom parsePartialFrom(
+      public ConfigRule_ACL parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule_Custom(input, extensionRegistry);
+        return new ConfigRule_ACL(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRule_ACLOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    boolean hasEndpointId();
+    int getActionValue();
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
      */
-    context.ContextOuterClass.EndPointId getEndpointId();
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+    boolean hasCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
+     */
+    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     */
+    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
 
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return Whether the ruleSet field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
-    boolean hasRuleSet();
+    boolean hasAcl();
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return The ruleSet.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
-    acl.Acl.AclRuleSet getRuleSet();
+    context.ContextOuterClass.ConfigRule_ACL getAcl();
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
-    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
+    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
+
+    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
   }
   /**
-   * Protobuf type {@code context.ConfigRule_ACL}
+   * Protobuf type {@code context.ConfigRule}
    */
-  public static final class ConfigRule_ACL extends
+  public static final class ConfigRule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
-      ConfigRule_ACLOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule_ACL.newBuilder() to construct.
-    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule_ACL() {
+    private ConfigRule() {
+      action_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule_ACL();
+      return new ConfigRule();
     }
 
     @java.lang.Override
@@ -48382,7 +50216,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule_ACL(
+    private ConfigRule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -48400,30 +50234,38 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
-              if (endpointId_ != null) {
-                subBuilder = endpointId_.toBuilder();
+            case 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
+              if (configRuleCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
               }
-              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(endpointId_);
-                endpointId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 2;
               break;
             }
-            case 18: {
-              acl.Acl.AclRuleSet.Builder subBuilder = null;
-              if (ruleSet_ != null) {
-                subBuilder = ruleSet_.toBuilder();
+            case 26: {
+              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
+              if (configRuleCase_ == 3) {
+                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
               }
-              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(ruleSet_);
-                ruleSet_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
+                configRule_ = subBuilder.buildPartial();
               }
-
+              configRuleCase_ = 3;
               break;
             }
             default: {
@@ -48435,79 +50277,149 @@ public final class ContextOuterClass {
             }
           }
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+    }
+
+    private int configRuleCase_ = 0;
+    private java.lang.Object configRule_;
+    public enum ConfigRuleCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      CUSTOM(2),
+      ACL(3),
+      CONFIGRULE_NOT_SET(0);
+      private final int value;
+      private ConfigRuleCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static ConfigRuleCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ConfigRuleCase forNumber(int value) {
+        switch (value) {
+          case 2: return CUSTOM;
+          case 3: return ACL;
+          case 0: return CONFIGRULE_NOT_SET;
+          default: return null;
+        }
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ConfigRuleCase
+    getConfigRuleCase() {
+      return ConfigRuleCase.forNumber(
+          configRuleCase_);
     }
 
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
     }
 
-    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.EndPointId endpointId_;
+    public static final int CUSTOM_FIELD_NUMBER = 2;
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return Whether the endpointId field is set.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
     @java.lang.Override
-    public boolean hasEndpointId() {
-      return endpointId_ != null;
+    public boolean hasCustom() {
+      return configRuleCase_ == 2;
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
-     * @return The endpointId.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getEndpointId() {
-      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-      return getEndpointId();
+    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int RULE_SET_FIELD_NUMBER = 2;
-    private acl.Acl.AclRuleSet ruleSet_;
+    public static final int ACL_FIELD_NUMBER = 3;
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return Whether the ruleSet field is set.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return Whether the acl field is set.
      */
     @java.lang.Override
-    public boolean hasRuleSet() {
-      return ruleSet_ != null;
+    public boolean hasAcl() {
+      return configRuleCase_ == 3;
     }
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
-     * @return The ruleSet.
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
      */
     @java.lang.Override
-    public acl.Acl.AclRuleSet getRuleSet() {
-      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
      */
     @java.lang.Override
-    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-      return getRuleSet();
+    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -48524,11 +50436,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (endpointId_ != null) {
-        output.writeMessage(1, getEndpointId());
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
       }
-      if (ruleSet_ != null) {
-        output.writeMessage(2, getRuleSet());
+      if (configRuleCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       unknownFields.writeTo(output);
     }
@@ -48539,13 +50454,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
+          .computeEnumSize(1, action_);
       }
-      if (ruleSet_ != null) {
+      if (configRuleCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getRuleSet());
+          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      }
+      if (configRuleCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -48557,20 +50476,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (hasRuleSet() != other.hasRuleSet()) return false;
-      if (hasRuleSet()) {
-        if (!getRuleSet()
-            .equals(other.getRuleSet())) return false;
+      if (action_ != other.action_) return false;
+      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
+      switch (configRuleCase_) {
+        case 2:
+          if (!getCustom()
+              .equals(other.getCustom())) return false;
+          break;
+        case 3:
+          if (!getAcl()
+              .equals(other.getAcl())) return false;
+          break;
+        case 0:
+        default:
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -48583,82 +50506,88 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasEndpointId()) {
-        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getEndpointId().hashCode();
-      }
-      if (hasRuleSet()) {
-        hash = (37 * hash) + RULE_SET_FIELD_NUMBER;
-        hash = (53 * hash) + getRuleSet().hashCode();
+      hash = (37 * hash) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      switch (configRuleCase_) {
+        case 2:
+          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+          hash = (53 * hash) + getCustom().hashCode();
+          break;
+        case 3:
+          hash = (37 * hash) + ACL_FIELD_NUMBER;
+          hash = (53 * hash) + getAcl().hashCode();
+          break;
+        case 0:
+        default:
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseDelimitedFrom(
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -48671,7 +50600,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule_ACL prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -48687,26 +50616,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule_ACL}
+     * Protobuf type {@code context.ConfigRule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule_ACL)
-        context.ContextOuterClass.ConfigRule_ACLOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -48724,54 +50653,52 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = null;
-        } else {
-          ruleSet_ = null;
-          ruleSetBuilder_ = null;
-        }
+        action_ = 0;
+
+        configRuleCase_ = 0;
+        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL build() {
-        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
         return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL buildPartial() {
-        context.ContextOuterClass.ConfigRule_ACL result = new context.ContextOuterClass.ConfigRule_ACL(this);
-        if (endpointIdBuilder_ == null) {
-          result.endpointId_ = endpointId_;
-        } else {
-          result.endpointId_ = endpointIdBuilder_.build();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        if (configRuleCase_ == 2) {
+          if (customBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = customBuilder_.build();
+          }
         }
-        if (ruleSetBuilder_ == null) {
-          result.ruleSet_ = ruleSet_;
-        } else {
-          result.ruleSet_ = ruleSetBuilder_.build();
+        if (configRuleCase_ == 3) {
+          if (aclBuilder_ == null) {
+            result.configRule_ = configRule_;
+          } else {
+            result.configRule_ = aclBuilder_.build();
+          }
         }
+        result.configRuleCase_ = configRuleCase_;
         onBuilt();
         return result;
       }
@@ -48810,21 +50737,31 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule_ACL) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)other);
+        if (other instanceof context.ContextOuterClass.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule_ACL other) {
-        if (other == context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) return this;
-        if (other.hasEndpointId()) {
-          mergeEndpointId(other.getEndpointId());
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
         }
-        if (other.hasRuleSet()) {
-          mergeRuleSet(other.getRuleSet());
+        switch (other.getConfigRuleCase()) {
+          case CUSTOM: {
+            mergeCustom(other.getCustom());
+            break;
+          }
+          case ACL: {
+            mergeAcl(other.getAcl());
+            break;
+          }
+          case CONFIGRULE_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -48841,11 +50778,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule_ACL parsedMessage = null;
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -48854,243 +50791,356 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int configRuleCase_ = 0;
+      private java.lang.Object configRule_;
+      public ConfigRuleCase
+          getConfigRuleCase() {
+        return ConfigRuleCase.forNumber(
+            configRuleCase_);
+      }
+
+      public Builder clearConfigRule() {
+        configRuleCase_ = 0;
+        configRule_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      private int action_ = 0;
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The enum numeric value on the wire for action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setActionValue(int value) {
+        
+        action_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ConfigActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
 
-      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return Whether the endpointId field is set.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return Whether the custom field is set.
        */
-      public boolean hasEndpointId() {
-        return endpointIdBuilder_ != null || endpointId_ != null;
+      @java.lang.Override
+      public boolean hasCustom() {
+        return configRuleCase_ == 2;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       * @return The endpointId.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return The custom.
        */
-      public context.ContextOuterClass.EndPointId getEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         } else {
-          return endpointIdBuilder_.getMessage();
+          if (configRuleCase_ == 2) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
+      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          endpointId_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(value);
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setEndpointId(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = builderForValue.build();
+      public Builder setCustom(
+          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          endpointIdBuilder_.setMessage(builderForValue.build());
+          customBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
-        if (endpointIdBuilder_ == null) {
-          if (endpointId_ != null) {
-            endpointId_ =
-              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            endpointId_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          endpointIdBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 2) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder clearEndpointId() {
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-          onChanged();
+      public Builder clearCustom() {
+        if (customBuilder_ == null) {
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
+          if (configRuleCase_ == 2) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          customBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
-        
-        onChanged();
-        return getEndpointIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
-        if (endpointIdBuilder_ != null) {
-          return endpointIdBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
         } else {
-          return endpointId_ == null ?
-              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
-      }
-      /**
-       * <code>.context.EndPointId endpoint_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getEndpointIdFieldBuilder() {
-        if (endpointIdBuilder_ == null) {
-          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  getEndpointId(),
+      }
+      /**
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
+          getCustomFieldBuilder() {
+        if (customBuilder_ == null) {
+          if (!(configRuleCase_ == 2)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          }
+          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
                   getParentForChildren(),
                   isClean());
-          endpointId_ = null;
+          configRule_ = null;
         }
-        return endpointIdBuilder_;
+        configRuleCase_ = 2;
+        onChanged();;
+        return customBuilder_;
       }
 
-      private acl.Acl.AclRuleSet ruleSet_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
-       * @return Whether the ruleSet field is set.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return Whether the acl field is set.
        */
-      public boolean hasRuleSet() {
-        return ruleSetBuilder_ != null || ruleSet_ != null;
+      @java.lang.Override
+      public boolean hasAcl() {
+        return configRuleCase_ == 3;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
-       * @return The ruleSet.
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * @return The acl.
        */
-      public acl.Acl.AclRuleSet getRuleSet() {
-        if (ruleSetBuilder_ == null) {
-          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         } else {
-          return ruleSetBuilder_.getMessage();
+          if (configRuleCase_ == 3) {
+            return aclBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
-        if (ruleSetBuilder_ == null) {
+      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ruleSet_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          ruleSetBuilder_.setMessage(value);
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder setRuleSet(
-          acl.Acl.AclRuleSet.Builder builderForValue) {
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = builderForValue.build();
+      public Builder setAcl(
+          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
+        if (aclBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          ruleSetBuilder_.setMessage(builderForValue.build());
+          aclBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder mergeRuleSet(acl.Acl.AclRuleSet value) {
-        if (ruleSetBuilder_ == null) {
-          if (ruleSet_ != null) {
-            ruleSet_ =
-              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
+      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3 &&
+              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
+                .mergeFrom(value).buildPartial();
           } else {
-            ruleSet_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          ruleSetBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 3) {
+            aclBuilder_.mergeFrom(value);
+          }
+          aclBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder clearRuleSet() {
-        if (ruleSetBuilder_ == null) {
-          ruleSet_ = null;
-          onChanged();
+      public Builder clearAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          ruleSet_ = null;
-          ruleSetBuilder_ = null;
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          aclBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
-        
-        onChanged();
-        return getRuleSetFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
+        return getAclFieldBuilder().getBuilder();
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
-        if (ruleSetBuilder_ != null) {
-          return ruleSetBuilder_.getMessageOrBuilder();
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
+        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
+          return aclBuilder_.getMessageOrBuilder();
         } else {
-          return ruleSet_ == null ?
-              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
+          if (configRuleCase_ == 3) {
+            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
         }
       }
       /**
-       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> 
-          getRuleSetFieldBuilder() {
-        if (ruleSetBuilder_ == null) {
-          ruleSetBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder>(
-                  getRuleSet(),
+          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
+          getAclFieldBuilder() {
+        if (aclBuilder_ == null) {
+          if (!(configRuleCase_ == 3)) {
+            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+          }
+          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
+                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
                   getParentForChildren(),
                   isClean());
-          ruleSet_ = null;
+          configRule_ = null;
         }
-        return ruleSetBuilder_;
+        configRuleCase_ = 3;
+        onChanged();;
+        return aclBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -49105,114 +51155,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule_ACL)
-    private static final context.ContextOuterClass.ConfigRule_ACL DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
     }
 
-    public static context.ContextOuterClass.ConfigRule_ACL getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule_ACL>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
       @java.lang.Override
-      public ConfigRule_ACL parsePartialFrom(
+      public ConfigRule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule_ACL(input, extensionRegistry);
+        return new ConfigRule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRuleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+  public interface Constraint_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    int getActionValue();
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    context.ContextOuterClass.ConfigActionEnum getAction();
-
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return Whether the custom field is set.
-     */
-    boolean hasCustom();
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return The custom.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
-    context.ContextOuterClass.ConfigRule_Custom getCustom();
+    java.lang.String getConstraintType();
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
-    context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder();
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
 
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return Whether the acl field is set.
-     */
-    boolean hasAcl();
-    /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return The acl.
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
-    context.ContextOuterClass.ConfigRule_ACL getAcl();
+    java.lang.String getConstraintValue();
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
-    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
-
-    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
   }
   /**
-   * Protobuf type {@code context.ConfigRule}
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint_Custom}
    */
-  public static final class ConfigRule extends
+  public static final class Constraint_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule)
-      ConfigRuleOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use ConfigRule.newBuilder() to construct.
-    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
+      Constraint_CustomOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_Custom.newBuilder() to construct.
+    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule() {
-      action_ = 0;
+    private Constraint_Custom() {
+      constraintType_ = "";
+      constraintValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule();
+      return new Constraint_Custom();
     }
 
     @java.lang.Override
@@ -49220,7 +51256,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule(
+    private Constraint_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -49238,38 +51274,16 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              action_ = rawValue;
+              constraintType_ = s;
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConfigRule_Custom.Builder subBuilder = null;
-              if (configRuleCase_ == 2) {
-                subBuilder = ((context.ContextOuterClass.ConfigRule_Custom) configRule_).toBuilder();
-              }
-              configRule_ =
-                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_Custom) configRule_);
-                configRule_ = subBuilder.buildPartial();
-              }
-              configRuleCase_ = 2;
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.ConfigRule_ACL.Builder subBuilder = null;
-              if (configRuleCase_ == 3) {
-                subBuilder = ((context.ContextOuterClass.ConfigRule_ACL) configRule_).toBuilder();
-              }
-              configRule_ =
-                  input.readMessage(context.ContextOuterClass.ConfigRule_ACL.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.ConfigRule_ACL) configRule_);
-                configRule_ = subBuilder.buildPartial();
-              }
-              configRuleCase_ = 3;
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintValue_ = s;
               break;
             }
             default: {
@@ -49293,137 +51307,91 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
-    }
-
-    private int configRuleCase_ = 0;
-    private java.lang.Object configRule_;
-    public enum ConfigRuleCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      CUSTOM(2),
-      ACL(3),
-      CONFIGRULE_NOT_SET(0);
-      private final int value;
-      private ConfigRuleCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static ConfigRuleCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static ConfigRuleCase forNumber(int value) {
-        switch (value) {
-          case 2: return CUSTOM;
-          case 3: return ACL;
-          case 0: return CONFIGRULE_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public ConfigRuleCase
-    getConfigRuleCase() {
-      return ConfigRuleCase.forNumber(
-          configRuleCase_);
-    }
-
-    public static final int ACTION_FIELD_NUMBER = 1;
-    private int action_;
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
-     */
-    @java.lang.Override public int getActionValue() {
-      return action_;
-    }
-    /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
-     */
-    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
     }
 
-    public static final int CUSTOM_FIELD_NUMBER = 2;
-    /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return Whether the custom field is set.
-     */
-    @java.lang.Override
-    public boolean hasCustom() {
-      return configRuleCase_ == 2;
-    }
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
-     * @return The custom.
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
-      if (configRuleCase_ == 2) {
-         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
       }
-      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
-      if (configRuleCase_ == 2) {
-         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
 
-    public static final int ACL_FIELD_NUMBER = 3;
-    /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return Whether the acl field is set.
-     */
-    @java.lang.Override
-    public boolean hasAcl() {
-      return configRuleCase_ == 3;
-    }
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
-     * @return The acl.
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
-      if (configRuleCase_ == 3) {
-         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
       }
-      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
     /**
-     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
-      if (configRuleCase_ == 3) {
-         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+    public com.google.protobuf.ByteString
+        getConstraintValueBytes() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
       }
-      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -49440,14 +51408,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        output.writeEnum(1, action_);
-      }
-      if (configRuleCase_ == 2) {
-        output.writeMessage(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
       }
-      if (configRuleCase_ == 3) {
-        output.writeMessage(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -49458,47 +51423,31 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, action_);
-      }
-      if (configRuleCase_ == 2) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, (context.ContextOuterClass.ConfigRule_Custom) configRule_);
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
       }
-      if (configRuleCase_ == 3) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, (context.ContextOuterClass.ConfigRule_ACL) configRule_);
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
-    }
-
-    @java.lang.Override
-    public boolean equals(final java.lang.Object obj) {
-      if (obj == this) {
-       return true;
-      }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
-
-      if (action_ != other.action_) return false;
-      if (!getConfigRuleCase().equals(other.getConfigRuleCase())) return false;
-      switch (configRuleCase_) {
-        case 2:
-          if (!getCustom()
-              .equals(other.getCustom())) return false;
-          break;
-        case 3:
-          if (!getAcl()
-              .equals(other.getAcl())) return false;
-          break;
-        case 0:
-        default:
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
+        return super.equals(obj);
       }
+      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
+
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -49510,88 +51459,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ACTION_FIELD_NUMBER;
-      hash = (53 * hash) + action_;
-      switch (configRuleCase_) {
-        case 2:
-          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
-          hash = (53 * hash) + getCustom().hashCode();
-          break;
-        case 3:
-          hash = (37 * hash) + ACL_FIELD_NUMBER;
-          hash = (53 * hash) + getAcl().hashCode();
-          break;
-        case 0:
-        default:
-      }
+      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintType().hashCode();
+      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
+      hash = (53 * hash) + getConstraintValue().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -49604,7 +51543,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ConfigRule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -49620,26 +51559,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule}
+     * <pre>
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Constraint_Custom}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
-        context.ContextOuterClass.ConfigRuleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
+        context.ContextOuterClass.Constraint_CustomOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -49657,27 +51600,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        action_ = 0;
+        constraintType_ = "";
+
+        constraintValue_ = "";
 
-        configRuleCase_ = 0;
-        configRule_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule build() {
-        context.ContextOuterClass.ConfigRule result = buildPartial();
+      public context.ContextOuterClass.Constraint_Custom build() {
+        context.ContextOuterClass.Constraint_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -49685,24 +51628,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule buildPartial() {
-        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-        result.action_ = action_;
-        if (configRuleCase_ == 2) {
-          if (customBuilder_ == null) {
-            result.configRule_ = configRule_;
-          } else {
-            result.configRule_ = customBuilder_.build();
-          }
-        }
-        if (configRuleCase_ == 3) {
-          if (aclBuilder_ == null) {
-            result.configRule_ = configRule_;
-          } else {
-            result.configRule_ = aclBuilder_.build();
-          }
-        }
-        result.configRuleCase_ = configRuleCase_;
+      public context.ContextOuterClass.Constraint_Custom buildPartial() {
+        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
         onBuilt();
         return result;
       }
@@ -49738,413 +51667,206 @@ public final class ContextOuterClass {
           com.google.protobuf.Descriptors.FieldDescriptor field,
           java.lang.Object value) {
         return super.addRepeatedField(field, value);
-      }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
-        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
-        if (other.action_ != 0) {
-          setActionValue(other.getActionValue());
-        }
-        switch (other.getConfigRuleCase()) {
-          case CUSTOM: {
-            mergeCustom(other.getCustom());
-            break;
-          }
-          case ACL: {
-            mergeAcl(other.getAcl());
-            break;
-          }
-          case CONFIGRULE_NOT_SET: {
-            break;
-          }
-        }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
-      }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int configRuleCase_ = 0;
-      private java.lang.Object configRule_;
-      public ConfigRuleCase
-          getConfigRuleCase() {
-        return ConfigRuleCase.forNumber(
-            configRuleCase_);
-      }
-
-      public Builder clearConfigRule() {
-        configRuleCase_ = 0;
-        configRule_ = null;
-        onChanged();
-        return this;
-      }
-
-
-      private int action_ = 0;
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The enum numeric value on the wire for action.
-       */
-      @java.lang.Override public int getActionValue() {
-        return action_;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The enum numeric value on the wire for action to set.
-       * @return This builder for chaining.
-       */
-      public Builder setActionValue(int value) {
-        
-        action_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The action.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigActionEnum getAction() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The action to set.
-       * @return This builder for chaining.
-       */
-      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        action_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearAction() {
-        
-        action_ = 0;
-        onChanged();
-        return this;
-      }
-
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       * @return Whether the custom field is set.
-       */
-      @java.lang.Override
-      public boolean hasCustom() {
-        return configRuleCase_ == 2;
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       * @return The custom.
-       */
+      }
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_Custom getCustom() {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2) {
-            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
         } else {
-          if (configRuleCase_ == 2) {
-            return customBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
-        if (customBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          configRule_ = value;
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
+        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
           onChanged();
-        } else {
-          customBuilder_.setMessage(value);
         }
-        configRuleCase_ = 2;
-        return this;
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder setCustom(
-          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
-        if (customBuilder_ == null) {
-          configRule_ = builderForValue.build();
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
           onChanged();
-        } else {
-          customBuilder_.setMessage(builderForValue.build());
         }
-        configRuleCase_ = 2;
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder mergeCustom(context.ContextOuterClass.ConfigRule_Custom value) {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2 &&
-              configRule_ != context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance()) {
-            configRule_ = context.ContextOuterClass.ConfigRule_Custom.newBuilder((context.ContextOuterClass.ConfigRule_Custom) configRule_)
-                .mergeFrom(value).buildPartial();
-          } else {
-            configRule_ = value;
-          }
-          onChanged();
-        } else {
-          if (configRuleCase_ == 2) {
-            customBuilder_.mergeFrom(value);
-          }
-          customBuilder_.setMessage(value);
-        }
-        configRuleCase_ = 2;
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public Builder clearCustom() {
-        if (customBuilder_ == null) {
-          if (configRuleCase_ == 2) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-            onChanged();
-          }
-        } else {
-          if (configRuleCase_ == 2) {
-            configRuleCase_ = 0;
-            configRule_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          customBuilder_.clear();
         }
         return this;
       }
+
+      private java.lang.Object constraintType_ = "";
       /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
-       */
-      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
-        return getCustomFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
-        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
-          return customBuilder_.getMessageOrBuilder();
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
         } else {
-          if (configRuleCase_ == 2) {
-            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> 
-          getCustomFieldBuilder() {
-        if (customBuilder_ == null) {
-          if (!(configRuleCase_ == 2)) {
-            configRule_ = context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
-          }
-          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder>(
-                  (context.ContextOuterClass.ConfigRule_Custom) configRule_,
-                  getParentForChildren(),
-                  isClean());
-          configRule_ = null;
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
         }
-        configRuleCase_ = 2;
-        onChanged();;
-        return customBuilder_;
-      }
-
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> aclBuilder_;
-      /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       * @return Whether the acl field is set.
-       */
-      @java.lang.Override
-      public boolean hasAcl() {
-        return configRuleCase_ == 3;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       * @return The acl.
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACL getAcl() {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3) {
-            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        } else {
-          if (configRuleCase_ == 3) {
-            return aclBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        }
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setAcl(context.ContextOuterClass.ConfigRule_ACL value) {
-        if (aclBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          configRule_ = value;
-          onChanged();
-        } else {
-          aclBuilder_.setMessage(value);
-        }
-        configRuleCase_ = 3;
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
         return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
        */
-      public Builder setAcl(
-          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
-        if (aclBuilder_ == null) {
-          configRule_ = builderForValue.build();
-          onChanged();
-        } else {
-          aclBuilder_.setMessage(builderForValue.build());
-        }
-        configRuleCase_ = 3;
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object constraintValue_ = "";
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
-       */
-      public Builder mergeAcl(context.ContextOuterClass.ConfigRule_ACL value) {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3 &&
-              configRule_ != context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance()) {
-            configRule_ = context.ContextOuterClass.ConfigRule_ACL.newBuilder((context.ContextOuterClass.ConfigRule_ACL) configRule_)
-                .mergeFrom(value).buildPartial();
-          } else {
-            configRule_ = value;
-          }
-          onChanged();
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
+       */
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
         } else {
-          if (configRuleCase_ == 3) {
-            aclBuilder_.mergeFrom(value);
-          }
-          aclBuilder_.setMessage(value);
+          return (java.lang.String) ref;
         }
-        configRuleCase_ = 3;
-        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
        */
-      public Builder clearAcl() {
-        if (aclBuilder_ == null) {
-          if (configRuleCase_ == 3) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-            onChanged();
-          }
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
         } else {
-          if (configRuleCase_ == 3) {
-            configRuleCase_ = 0;
-            configRule_ = null;
-          }
-          aclBuilder_.clear();
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
-        return getAclFieldBuilder().getBuilder();
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder() {
-        if ((configRuleCase_ == 3) && (aclBuilder_ != null)) {
-          return aclBuilder_.getMessageOrBuilder();
-        } else {
-          if (configRuleCase_ == 3) {
-            return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
-          }
-          return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-        }
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder> 
-          getAclFieldBuilder() {
-        if (aclBuilder_ == null) {
-          if (!(configRuleCase_ == 3)) {
-            configRule_ = context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
-          }
-          aclBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ConfigRule_ACL, context.ContextOuterClass.ConfigRule_ACL.Builder, context.ContextOuterClass.ConfigRule_ACLOrBuilder>(
-                  (context.ContextOuterClass.ConfigRule_ACL) configRule_,
-                  getParentForChildren(),
-                  isClean());
-          configRule_ = null;
-        }
-        configRuleCase_ = 3;
-        onChanged();;
-        return aclBuilder_;
+      public Builder setConstraintValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintValue_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -50159,100 +51881,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule)
-    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
+    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
     }
 
-    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ConfigRule>
-        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+    private static final com.google.protobuf.Parser<Constraint_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
       @java.lang.Override
-      public ConfigRule parsePartialFrom(
+      public Constraint_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule(input, extensionRegistry);
+        return new Constraint_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule> parser() {
+    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_CustomOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
+  public interface Constraint_ScheduleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
-     */
-    java.lang.String getConstraintType();
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
      */
-    com.google.protobuf.ByteString
-        getConstraintTypeBytes();
+    float getStartTimestamp();
 
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
-     */
-    java.lang.String getConstraintValue();
-    /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
-    com.google.protobuf.ByteString
-        getConstraintValueBytes();
+    float getDurationDays();
   }
   /**
-   * <pre>
-   * ----- Constraint ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.Constraint_Custom}
+   * Protobuf type {@code context.Constraint_Schedule}
    */
-  public static final class Constraint_Custom extends
+  public static final class Constraint_Schedule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
-      Constraint_CustomOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
+      Constraint_ScheduleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_Custom.newBuilder() to construct.
-    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Schedule.newBuilder() to construct.
+    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_Custom() {
-      constraintType_ = "";
-      constraintValue_ = "";
+    private Constraint_Schedule() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_Custom();
+      return new Constraint_Schedule();
     }
 
     @java.lang.Override
@@ -50260,7 +51964,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_Custom(
+    private Constraint_Schedule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -50278,16 +51982,14 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 13: {
 
-              constraintType_ = s;
+              startTimestamp_ = input.readFloat();
               break;
             }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 21: {
 
-              constraintValue_ = s;
+              durationDays_ = input.readFloat();
               break;
             }
             default: {
@@ -50311,91 +52013,37 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
-    }
-
-    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object constraintType_;
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
-     */
-    @java.lang.Override
-    public java.lang.String getConstraintType() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintTypeBytes() {
-      java.lang.Object ref = constraintType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
     }
 
-    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object constraintValue_;
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
+    private float startTimestamp_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
-     */
-    @java.lang.Override
-    public java.lang.String getConstraintValue() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        constraintValue_ = s;
-        return s;
-      }
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
+     */
+    @java.lang.Override
+    public float getStartTimestamp() {
+      return startTimestamp_;
     }
+
+    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
+    private float durationDays_;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getConstraintValueBytes() {
-      java.lang.Object ref = constraintValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        constraintValue_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public float getDurationDays() {
+      return durationDays_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -50412,11 +52060,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getConstraintTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      if (startTimestamp_ != 0F) {
+        output.writeFloat(1, startTimestamp_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      if (durationDays_ != 0F) {
+        output.writeFloat(2, durationDays_);
       }
       unknownFields.writeTo(output);
     }
@@ -50427,11 +52075,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getConstraintTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      if (startTimestamp_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, startTimestamp_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      if (durationDays_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, durationDays_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -50443,15 +52093,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) obj;
+      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
 
-      if (!getConstraintType()
-          .equals(other.getConstraintType())) return false;
-      if (!getConstraintValue()
-          .equals(other.getConstraintValue())) return false;
+      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+          != java.lang.Float.floatToIntBits(
+              other.getStartTimestamp())) return false;
+      if (java.lang.Float.floatToIntBits(getDurationDays())
+          != java.lang.Float.floatToIntBits(
+              other.getDurationDays())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -50463,78 +52115,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + CONSTRAINT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintType().hashCode();
-      hash = (37 * hash) + CONSTRAINT_VALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getConstraintValue().hashCode();
+      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getStartTimestamp());
+      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getDurationDays());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Custom parseFrom(
+    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -50547,7 +52201,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -50563,30 +52217,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Constraint ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.Constraint_Custom}
+     * Protobuf type {@code context.Constraint_Schedule}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_Custom)
-        context.ContextOuterClass.Constraint_CustomOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
+        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
+                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -50604,9 +52254,9 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        constraintType_ = "";
+        startTimestamp_ = 0F;
 
-        constraintValue_ = "";
+        durationDays_ = 0F;
 
         return this;
       }
@@ -50614,17 +52264,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom build() {
-        context.ContextOuterClass.Constraint_Custom result = buildPartial();
+      public context.ContextOuterClass.Constraint_Schedule build() {
+        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -50632,10 +52282,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Custom buildPartial() {
-        context.ContextOuterClass.Constraint_Custom result = new context.ContextOuterClass.Constraint_Custom(this);
-        result.constraintType_ = constraintType_;
-        result.constraintValue_ = constraintValue_;
+      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
+        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
+        result.startTimestamp_ = startTimestamp_;
+        result.durationDays_ = durationDays_;
         onBuilt();
         return result;
       }
@@ -50674,23 +52324,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_Custom) {
-          return mergeFrom((context.ContextOuterClass.Constraint_Custom)other);
+        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
+          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_Custom other) {
-        if (other == context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) return this;
-        if (!other.getConstraintType().isEmpty()) {
-          constraintType_ = other.constraintType_;
-          onChanged();
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
+        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
+        if (other.getStartTimestamp() != 0F) {
+          setStartTimestamp(other.getStartTimestamp());
         }
-        if (!other.getConstraintValue().isEmpty()) {
-          constraintValue_ = other.constraintValue_;
-          onChanged();
+        if (other.getDurationDays() != 0F) {
+          setDurationDays(other.getDurationDays());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -50707,168 +52355,78 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_Custom parsedMessage = null;
+        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_Custom) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object constraintType_ = "";
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return The constraintType.
-       */
-      public java.lang.String getConstraintType() {
-        java.lang.Object ref = constraintType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return The bytes for constraintType.
-       */
-      public com.google.protobuf.ByteString
-          getConstraintTypeBytes() {
-        java.lang.Object ref = constraintType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintType_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The constraintType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setConstraintType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearConstraintType() {
-        
-        constraintType_ = getDefaultInstance().getConstraintType();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The bytes for constraintType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setConstraintTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintType_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object constraintValue_ = "";
-      /**
-       * <code>string constraint_value = 2;</code>
-       * @return The constraintValue.
-       */
-      public java.lang.String getConstraintValue() {
-        java.lang.Object ref = constraintValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          constraintValue_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
+          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
+        return this;
       }
+
+      private float startTimestamp_ ;
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The bytes for constraintValue.
+       * <code>float start_timestamp = 1;</code>
+       * @return The startTimestamp.
        */
-      public com.google.protobuf.ByteString
-          getConstraintValueBytes() {
-        java.lang.Object ref = constraintValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          constraintValue_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      @java.lang.Override
+      public float getStartTimestamp() {
+        return startTimestamp_;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The constraintValue to set.
+       * <code>float start_timestamp = 1;</code>
+       * @param value The startTimestamp to set.
        * @return This builder for chaining.
        */
-      public Builder setConstraintValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintValue_ = value;
+      public Builder setStartTimestamp(float value) {
+        
+        startTimestamp_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
+       * <code>float start_timestamp = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearConstraintValue() {
+      public Builder clearStartTimestamp() {
         
-        constraintValue_ = getDefaultInstance().getConstraintValue();
+        startTimestamp_ = 0F;
         onChanged();
         return this;
       }
+
+      private float durationDays_ ;
+      /**
+       * <code>float duration_days = 2;</code>
+       * @return The durationDays.
+       */
+      @java.lang.Override
+      public float getDurationDays() {
+        return durationDays_;
+      }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The bytes for constraintValue to set.
+       * <code>float duration_days = 2;</code>
+       * @param value The durationDays to set.
        * @return This builder for chaining.
        */
-      public Builder setConstraintValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder setDurationDays(float value) {
         
-        constraintValue_ = value;
+        durationDays_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float duration_days = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDurationDays() {
+        
+        durationDays_ = 0F;
         onChanged();
         return this;
       }
@@ -50885,82 +52443,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_Custom)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
-    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
+    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
     }
 
-    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_Custom>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
+    private static final com.google.protobuf.Parser<Constraint_Schedule>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
       @java.lang.Override
-      public Constraint_Custom parsePartialFrom(
+      public Constraint_Schedule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_Custom(input, extensionRegistry);
+        return new Constraint_Schedule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
+    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_ScheduleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
+  public interface GPS_PositionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>float start_timestamp = 1;</code>
-     * @return The startTimestamp.
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
-    float getStartTimestamp();
+    float getLatitude();
 
     /**
-     * <code>float duration_days = 2;</code>
-     * @return The durationDays.
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
-    float getDurationDays();
+    float getLongitude();
   }
   /**
-   * Protobuf type {@code context.Constraint_Schedule}
+   * Protobuf type {@code context.GPS_Position}
    */
-  public static final class Constraint_Schedule extends
+  public static final class GPS_Position extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
-      Constraint_ScheduleOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.GPS_Position)
+      GPS_PositionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_Schedule.newBuilder() to construct.
-    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use GPS_Position.newBuilder() to construct.
+    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_Schedule() {
+    private GPS_Position() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_Schedule();
+      return new GPS_Position();
     }
 
     @java.lang.Override
@@ -50968,7 +52526,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_Schedule(
+    private GPS_Position(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -50988,12 +52546,12 @@ public final class ContextOuterClass {
               break;
             case 13: {
 
-              startTimestamp_ = input.readFloat();
+              latitude_ = input.readFloat();
               break;
             }
             case 21: {
 
-              durationDays_ = input.readFloat();
+              longitude_ = input.readFloat();
               break;
             }
             default: {
@@ -51017,37 +52575,37 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
     }
 
-    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
-    private float startTimestamp_;
+    public static final int LATITUDE_FIELD_NUMBER = 1;
+    private float latitude_;
     /**
-     * <code>float start_timestamp = 1;</code>
-     * @return The startTimestamp.
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
     @java.lang.Override
-    public float getStartTimestamp() {
-      return startTimestamp_;
+    public float getLatitude() {
+      return latitude_;
     }
 
-    public static final int DURATION_DAYS_FIELD_NUMBER = 2;
-    private float durationDays_;
+    public static final int LONGITUDE_FIELD_NUMBER = 2;
+    private float longitude_;
     /**
-     * <code>float duration_days = 2;</code>
-     * @return The durationDays.
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
     @java.lang.Override
-    public float getDurationDays() {
-      return durationDays_;
+    public float getLongitude() {
+      return longitude_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -51064,11 +52622,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (startTimestamp_ != 0F) {
-        output.writeFloat(1, startTimestamp_);
+      if (latitude_ != 0F) {
+        output.writeFloat(1, latitude_);
       }
-      if (durationDays_ != 0F) {
-        output.writeFloat(2, durationDays_);
+      if (longitude_ != 0F) {
+        output.writeFloat(2, longitude_);
       }
       unknownFields.writeTo(output);
     }
@@ -51079,13 +52637,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (startTimestamp_ != 0F) {
+      if (latitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, startTimestamp_);
+          .computeFloatSize(1, latitude_);
       }
-      if (durationDays_ != 0F) {
+      if (longitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, durationDays_);
+          .computeFloatSize(2, longitude_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -51097,17 +52655,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_Schedule)) {
+      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
+      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
 
-      if (java.lang.Float.floatToIntBits(getStartTimestamp())
+      if (java.lang.Float.floatToIntBits(getLatitude())
           != java.lang.Float.floatToIntBits(
-              other.getStartTimestamp())) return false;
-      if (java.lang.Float.floatToIntBits(getDurationDays())
+              other.getLatitude())) return false;
+      if (java.lang.Float.floatToIntBits(getLongitude())
           != java.lang.Float.floatToIntBits(
-              other.getDurationDays())) return false;
+              other.getLongitude())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -51119,80 +52677,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + START_TIMESTAMP_FIELD_NUMBER;
+      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getStartTimestamp());
-      hash = (37 * hash) + DURATION_DAYS_FIELD_NUMBER;
+          getLatitude());
+      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
       hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getDurationDays());
+          getLongitude());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(byte[] data)
+    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseDelimitedFrom(
+    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_Schedule parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -51205,7 +52763,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_Schedule prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -51221,26 +52779,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_Schedule}
+     * Protobuf type {@code context.GPS_Position}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_Schedule)
-        context.ContextOuterClass.Constraint_ScheduleOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
+        context.ContextOuterClass.GPS_PositionOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_Schedule.newBuilder()
+      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -51258,9 +52816,9 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        startTimestamp_ = 0F;
+        latitude_ = 0F;
 
-        durationDays_ = 0F;
+        longitude_ = 0F;
 
         return this;
       }
@@ -51268,17 +52826,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule build() {
-        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
+      public context.ContextOuterClass.GPS_Position build() {
+        context.ContextOuterClass.GPS_Position result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -51286,10 +52844,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_Schedule buildPartial() {
-        context.ContextOuterClass.Constraint_Schedule result = new context.ContextOuterClass.Constraint_Schedule(this);
-        result.startTimestamp_ = startTimestamp_;
-        result.durationDays_ = durationDays_;
+      public context.ContextOuterClass.GPS_Position buildPartial() {
+        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
+        result.latitude_ = latitude_;
+        result.longitude_ = longitude_;
         onBuilt();
         return result;
       }
@@ -51328,21 +52886,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_Schedule) {
-          return mergeFrom((context.ContextOuterClass.Constraint_Schedule)other);
+        if (other instanceof context.ContextOuterClass.GPS_Position) {
+          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_Schedule other) {
-        if (other == context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) return this;
-        if (other.getStartTimestamp() != 0F) {
-          setStartTimestamp(other.getStartTimestamp());
+      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
+        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
+        if (other.getLatitude() != 0F) {
+          setLatitude(other.getLatitude());
         }
-        if (other.getDurationDays() != 0F) {
-          setDurationDays(other.getDurationDays());
+        if (other.getLongitude() != 0F) {
+          setLongitude(other.getLongitude());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -51359,11 +52917,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_Schedule parsedMessage = null;
+        context.ContextOuterClass.GPS_Position parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -51373,64 +52931,64 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private float startTimestamp_ ;
+      private float latitude_ ;
       /**
-       * <code>float start_timestamp = 1;</code>
-       * @return The startTimestamp.
+       * <code>float latitude = 1;</code>
+       * @return The latitude.
        */
       @java.lang.Override
-      public float getStartTimestamp() {
-        return startTimestamp_;
+      public float getLatitude() {
+        return latitude_;
       }
       /**
-       * <code>float start_timestamp = 1;</code>
-       * @param value The startTimestamp to set.
+       * <code>float latitude = 1;</code>
+       * @param value The latitude to set.
        * @return This builder for chaining.
        */
-      public Builder setStartTimestamp(float value) {
+      public Builder setLatitude(float value) {
         
-        startTimestamp_ = value;
+        latitude_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float start_timestamp = 1;</code>
+       * <code>float latitude = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStartTimestamp() {
+      public Builder clearLatitude() {
         
-        startTimestamp_ = 0F;
+        latitude_ = 0F;
         onChanged();
         return this;
       }
 
-      private float durationDays_ ;
+      private float longitude_ ;
       /**
-       * <code>float duration_days = 2;</code>
-       * @return The durationDays.
+       * <code>float longitude = 2;</code>
+       * @return The longitude.
        */
       @java.lang.Override
-      public float getDurationDays() {
-        return durationDays_;
+      public float getLongitude() {
+        return longitude_;
       }
       /**
-       * <code>float duration_days = 2;</code>
-       * @param value The durationDays to set.
+       * <code>float longitude = 2;</code>
+       * @param value The longitude to set.
        * @return This builder for chaining.
        */
-      public Builder setDurationDays(float value) {
+      public Builder setLongitude(float value) {
         
-        durationDays_ = value;
+        longitude_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float duration_days = 2;</code>
+       * <code>float longitude = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearDurationDays() {
+      public Builder clearLongitude() {
         
-        durationDays_ = 0F;
+        longitude_ = 0F;
         onChanged();
         return this;
       }
@@ -51447,82 +53005,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
+      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_Schedule)
-    private static final context.ContextOuterClass.Constraint_Schedule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.GPS_Position)
+    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
     }
 
-    public static context.ContextOuterClass.Constraint_Schedule getDefaultInstance() {
+    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_Schedule>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
+    private static final com.google.protobuf.Parser<GPS_Position>
+        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
       @java.lang.Override
-      public Constraint_Schedule parsePartialFrom(
+      public GPS_Position parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_Schedule(input, extensionRegistry);
+        return new GPS_Position(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
+    public static com.google.protobuf.Parser<GPS_Position> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
+    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface GPS_PositionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
+  public interface LocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Location)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>float latitude = 1;</code>
-     * @return The latitude.
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    float getLatitude();
+    boolean hasRegion();
+    /**
+     * <code>string region = 1;</code>
+     * @return The region.
+     */
+    java.lang.String getRegion();
+    /**
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    com.google.protobuf.ByteString
+        getRegionBytes();
 
     /**
-     * <code>float longitude = 2;</code>
-     * @return The longitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
      */
-    float getLongitude();
+    boolean hasGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
+     */
+    context.ContextOuterClass.GPS_Position getGpsPosition();
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     */
+    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
+
+    public context.ContextOuterClass.Location.LocationCase getLocationCase();
   }
   /**
-   * Protobuf type {@code context.GPS_Position}
+   * Protobuf type {@code context.Location}
    */
-  public static final class GPS_Position extends
+  public static final class Location extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.GPS_Position)
-      GPS_PositionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Location)
+      LocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use GPS_Position.newBuilder() to construct.
-    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Location.newBuilder() to construct.
+    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private GPS_Position() {
+    private Location() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new GPS_Position();
+      return new Location();
     }
 
     @java.lang.Override
@@ -51530,7 +53110,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private GPS_Position(
+    private Location(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -51538,78 +53118,190 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            case 13: {
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+              locationCase_ = 1;
+              location_ = s;
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
+              if (locationCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
+              }
+              location_ =
+                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                location_ = subBuilder.buildPartial();
+              }
+              locationCase_ = 2;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Location_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
+    }
+
+    private int locationCase_ = 0;
+    private java.lang.Object location_;
+    public enum LocationCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      REGION(1),
+      GPS_POSITION(2),
+      LOCATION_NOT_SET(0);
+      private final int value;
+      private LocationCase(int value) {
+        this.value = value;
+      }
+      /**
+       * @param value The number of the enum to look for.
+       * @return The enum associated with the given number.
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
+      public static LocationCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static LocationCase forNumber(int value) {
+        switch (value) {
+          case 1: return REGION;
+          case 2: return GPS_POSITION;
+          case 0: return LOCATION_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
 
-              latitude_ = input.readFloat();
-              break;
-            }
-            case 21: {
+    public LocationCase
+    getLocationCase() {
+      return LocationCase.forNumber(
+          locationCase_);
+    }
 
-              longitude_ = input.readFloat();
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+    public static final int REGION_FIELD_NUMBER = 1;
+    /**
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
+     */
+    public boolean hasRegion() {
+      return locationCase_ == 1;
+    }
+    /**
+     * <code>string region = 1;</code>
+     * @return The region.
+     */
+    public java.lang.String getRegion() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        if (locationCase_ == 1) {
+          location_ = s;
         }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
+        return s;
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+    /**
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
+     */
+    public com.google.protobuf.ByteString
+        getRegionBytes() {
+      java.lang.Object ref = "";
+      if (locationCase_ == 1) {
+        ref = location_;
+      }
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        if (locationCase_ == 1) {
+          location_ = b;
+        }
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
+    public static final int GPS_POSITION_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+    public boolean hasGpsPosition() {
+      return locationCase_ == 2;
     }
-
-    public static final int LATITUDE_FIELD_NUMBER = 1;
-    private float latitude_;
     /**
-     * <code>float latitude = 1;</code>
-     * @return The latitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
     @java.lang.Override
-    public float getLatitude() {
-      return latitude_;
+    public context.ContextOuterClass.GPS_Position getGpsPosition() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
-
-    public static final int LONGITUDE_FIELD_NUMBER = 2;
-    private float longitude_;
     /**
-     * <code>float longitude = 2;</code>
-     * @return The longitude.
+     * <code>.context.GPS_Position gps_position = 2;</code>
      */
     @java.lang.Override
-    public float getLongitude() {
-      return longitude_;
+    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -51626,11 +53318,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (latitude_ != 0F) {
-        output.writeFloat(1, latitude_);
+      if (locationCase_ == 1) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
       }
-      if (longitude_ != 0F) {
-        output.writeFloat(2, longitude_);
+      if (locationCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       unknownFields.writeTo(output);
     }
@@ -51641,13 +53333,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (latitude_ != 0F) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(1, latitude_);
+      if (locationCase_ == 1) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
       }
-      if (longitude_ != 0F) {
+      if (locationCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, longitude_);
+          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -51659,17 +53350,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
+      if (!(obj instanceof context.ContextOuterClass.Location)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
+      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
 
-      if (java.lang.Float.floatToIntBits(getLatitude())
-          != java.lang.Float.floatToIntBits(
-              other.getLatitude())) return false;
-      if (java.lang.Float.floatToIntBits(getLongitude())
-          != java.lang.Float.floatToIntBits(
-              other.getLongitude())) return false;
+      if (!getLocationCase().equals(other.getLocationCase())) return false;
+      switch (locationCase_) {
+        case 1:
+          if (!getRegion()
+              .equals(other.getRegion())) return false;
+          break;
+        case 2:
+          if (!getGpsPosition()
+              .equals(other.getGpsPosition())) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -51681,80 +53379,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + LATITUDE_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getLatitude());
-      hash = (37 * hash) + LONGITUDE_FIELD_NUMBER;
-      hash = (53 * hash) + java.lang.Float.floatToIntBits(
-          getLongitude());
+      switch (locationCase_) {
+        case 1:
+          hash = (37 * hash) + REGION_FIELD_NUMBER;
+          hash = (53 * hash) + getRegion().hashCode();
+          break;
+        case 2:
+          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
+          hash = (53 * hash) + getGpsPosition().hashCode();
+          break;
+        case 0:
+        default:
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(byte[] data)
+    public static context.ContextOuterClass.Location parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseDelimitedFrom(
+    public static context.ContextOuterClass.Location parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.GPS_Position parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -51767,7 +53471,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.GPS_Position prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -51783,26 +53487,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.GPS_Position}
+     * Protobuf type {@code context.Location}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.GPS_Position)
-        context.ContextOuterClass.GPS_PositionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Location)
+        context.ContextOuterClass.LocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
+                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
+      // Construct using context.ContextOuterClass.Location.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -51820,27 +53524,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        latitude_ = 0F;
-
-        longitude_ = 0F;
-
+        locationCase_ = 0;
+        location_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
-        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+      public context.ContextOuterClass.Location getDefaultInstanceForType() {
+        return context.ContextOuterClass.Location.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position build() {
-        context.ContextOuterClass.GPS_Position result = buildPartial();
+      public context.ContextOuterClass.Location build() {
+        context.ContextOuterClass.Location result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -51848,10 +53550,19 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.GPS_Position buildPartial() {
-        context.ContextOuterClass.GPS_Position result = new context.ContextOuterClass.GPS_Position(this);
-        result.latitude_ = latitude_;
-        result.longitude_ = longitude_;
+      public context.ContextOuterClass.Location buildPartial() {
+        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
+        if (locationCase_ == 1) {
+          result.location_ = location_;
+        }
+        if (locationCase_ == 2) {
+          if (gpsPositionBuilder_ == null) {
+            result.location_ = location_;
+          } else {
+            result.location_ = gpsPositionBuilder_.build();
+          }
+        }
+        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -51890,21 +53601,30 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.GPS_Position) {
-          return mergeFrom((context.ContextOuterClass.GPS_Position)other);
+        if (other instanceof context.ContextOuterClass.Location) {
+          return mergeFrom((context.ContextOuterClass.Location)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.GPS_Position other) {
-        if (other == context.ContextOuterClass.GPS_Position.getDefaultInstance()) return this;
-        if (other.getLatitude() != 0F) {
-          setLatitude(other.getLatitude());
-        }
-        if (other.getLongitude() != 0F) {
-          setLongitude(other.getLongitude());
+      public Builder mergeFrom(context.ContextOuterClass.Location other) {
+        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
+        switch (other.getLocationCase()) {
+          case REGION: {
+            locationCase_ = 1;
+            location_ = other.location_;
+            onChanged();
+            break;
+          }
+          case GPS_POSITION: {
+            mergeGpsPosition(other.getGpsPosition());
+            break;
+          }
+          case LOCATION_NOT_SET: {
+            break;
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -51921,11 +53641,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.GPS_Position parsedMessage = null;
+        context.ContextOuterClass.Location parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -51934,67 +53654,258 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int locationCase_ = 0;
+      private java.lang.Object location_;
+      public LocationCase
+          getLocationCase() {
+        return LocationCase.forNumber(
+            locationCase_);
+      }
+
+      public Builder clearLocation() {
+        locationCase_ = 0;
+        location_ = null;
+        onChanged();
+        return this;
+      }
+
 
-      private float latitude_ ;
       /**
-       * <code>float latitude = 1;</code>
-       * @return The latitude.
+       * <code>string region = 1;</code>
+       * @return Whether the region field is set.
        */
       @java.lang.Override
-      public float getLatitude() {
-        return latitude_;
+      public boolean hasRegion() {
+        return locationCase_ == 1;
       }
       /**
-       * <code>float latitude = 1;</code>
-       * @param value The latitude to set.
+       * <code>string region = 1;</code>
+       * @return The region.
+       */
+      @java.lang.Override
+      public java.lang.String getRegion() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          if (locationCase_ == 1) {
+            location_ = s;
+          }
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @return The bytes for region.
+       */
+      @java.lang.Override
+      public com.google.protobuf.ByteString
+          getRegionBytes() {
+        java.lang.Object ref = "";
+        if (locationCase_ == 1) {
+          ref = location_;
+        }
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          if (locationCase_ == 1) {
+            location_ = b;
+          }
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @param value The region to set.
        * @return This builder for chaining.
        */
-      public Builder setLatitude(float value) {
-        
-        latitude_ = value;
+      public Builder setRegion(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  locationCase_ = 1;
+        location_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>float latitude = 1;</code>
+       * <code>string region = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearLatitude() {
-        
-        latitude_ = 0F;
+      public Builder clearRegion() {
+        if (locationCase_ == 1) {
+          locationCase_ = 0;
+          location_ = null;
+          onChanged();
+        }
+        return this;
+      }
+      /**
+       * <code>string region = 1;</code>
+       * @param value The bytes for region to set.
+       * @return This builder for chaining.
+       */
+      public Builder setRegionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        locationCase_ = 1;
+        location_ = value;
         onChanged();
         return this;
       }
 
-      private float longitude_ ;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
       /**
-       * <code>float longitude = 2;</code>
-       * @return The longitude.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return Whether the gpsPosition field is set.
        */
       @java.lang.Override
-      public float getLongitude() {
-        return longitude_;
+      public boolean hasGpsPosition() {
+        return locationCase_ == 2;
       }
       /**
-       * <code>float longitude = 2;</code>
-       * @param value The longitude to set.
-       * @return This builder for chaining.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return The gpsPosition.
        */
-      public Builder setLongitude(float value) {
-        
-        longitude_ = value;
-        onChanged();
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_Position getGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        } else {
+          if (locationCase_ == 2) {
+            return gpsPositionBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          location_ = value;
+          onChanged();
+        } else {
+          gpsPositionBuilder_.setMessage(value);
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder setGpsPosition(
+          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
+        if (gpsPositionBuilder_ == null) {
+          location_ = builderForValue.build();
+          onChanged();
+        } else {
+          gpsPositionBuilder_.setMessage(builderForValue.build());
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2 &&
+              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
+            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            location_ = value;
+          }
+          onChanged();
+        } else {
+          if (locationCase_ == 2) {
+            gpsPositionBuilder_.mergeFrom(value);
+          }
+          gpsPositionBuilder_.setMessage(value);
+        }
+        locationCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public Builder clearGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+            onChanged();
+          }
+        } else {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+          }
+          gpsPositionBuilder_.clear();
+        }
         return this;
       }
       /**
-       * <code>float longitude = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
+        return getGpsPositionFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
+          return gpsPositionBuilder_.getMessageOrBuilder();
+        } else {
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder clearLongitude() {
-        
-        longitude_ = 0F;
-        onChanged();
-        return this;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
+          getGpsPositionFieldBuilder() {
+        if (gpsPositionBuilder_ == null) {
+          if (!(locationCase_ == 2)) {
+            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          }
+          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
+                  (context.ContextOuterClass.GPS_Position) location_,
+                  getParentForChildren(),
+                  isClean());
+          location_ = null;
+        }
+        locationCase_ = 2;
+        onChanged();;
+        return gpsPositionBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -52009,104 +53920,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
+      // @@protoc_insertion_point(builder_scope:context.Location)
     }
 
-    // @@protoc_insertion_point(class_scope:context.GPS_Position)
-    private static final context.ContextOuterClass.GPS_Position DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Location)
+    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
     }
 
-    public static context.ContextOuterClass.GPS_Position getDefaultInstance() {
+    public static context.ContextOuterClass.Location getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<GPS_Position>
-        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
+    private static final com.google.protobuf.Parser<Location>
+        PARSER = new com.google.protobuf.AbstractParser<Location>() {
       @java.lang.Override
-      public GPS_Position parsePartialFrom(
+      public Location parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new GPS_Position(input, extensionRegistry);
+        return new Location(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<GPS_Position> parser() {
+    public static com.google.protobuf.Parser<Location> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
+    public com.google.protobuf.Parser<Location> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+    public context.ContextOuterClass.Location getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LocationOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Location)
+  public interface Constraint_EndPointLocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string region = 1;</code>
-     * @return Whether the region field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasRegion();
+    boolean hasEndpointId();
     /**
-     * <code>string region = 1;</code>
-     * @return The region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    java.lang.String getRegion();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>string region = 1;</code>
-     * @return The bytes for region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    com.google.protobuf.ByteString
-        getRegionBytes();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return Whether the gpsPosition field is set.
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
-    boolean hasGpsPosition();
+    boolean hasLocation();
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return The gpsPosition.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
-    context.ContextOuterClass.GPS_Position getGpsPosition();
+    context.ContextOuterClass.Location getLocation();
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
-    context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder();
-
-    public context.ContextOuterClass.Location.LocationCase getLocationCase();
+    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Location}
+   * Protobuf type {@code context.Constraint_EndPointLocation}
    */
-  public static final class Location extends
+  public static final class Constraint_EndPointLocation extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Location)
-      LocationOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
+      Constraint_EndPointLocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Location.newBuilder() to construct.
-    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointLocation.newBuilder() to construct.
+    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Location() {
+    private Constraint_EndPointLocation() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Location();
+      return new Constraint_EndPointLocation();
     }
 
     @java.lang.Override
@@ -52114,7 +54021,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Location(
+    private Constraint_EndPointLocation(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -52133,23 +54040,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-              locationCase_ = 1;
-              location_ = s;
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             case 18: {
-              context.ContextOuterClass.GPS_Position.Builder subBuilder = null;
-              if (locationCase_ == 2) {
-                subBuilder = ((context.ContextOuterClass.GPS_Position) location_).toBuilder();
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (location_ != null) {
+                subBuilder = location_.toBuilder();
               }
-              location_ =
-                  input.readMessage(context.ContextOuterClass.GPS_Position.parser(), extensionRegistry);
+              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom((context.ContextOuterClass.GPS_Position) location_);
+                subBuilder.mergeFrom(location_);
                 location_ = subBuilder.buildPartial();
               }
-              locationCase_ = 2;
+
               break;
             }
             default: {
@@ -52173,139 +54086,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Location_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
-    }
-
-    private int locationCase_ = 0;
-    private java.lang.Object location_;
-    public enum LocationCase
-        implements com.google.protobuf.Internal.EnumLite,
-            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
-      REGION(1),
-      GPS_POSITION(2),
-      LOCATION_NOT_SET(0);
-      private final int value;
-      private LocationCase(int value) {
-        this.value = value;
-      }
-      /**
-       * @param value The number of the enum to look for.
-       * @return The enum associated with the given number.
-       * @deprecated Use {@link #forNumber(int)} instead.
-       */
-      @java.lang.Deprecated
-      public static LocationCase valueOf(int value) {
-        return forNumber(value);
-      }
-
-      public static LocationCase forNumber(int value) {
-        switch (value) {
-          case 1: return REGION;
-          case 2: return GPS_POSITION;
-          case 0: return LOCATION_NOT_SET;
-          default: return null;
-        }
-      }
-      public int getNumber() {
-        return this.value;
-      }
-    };
-
-    public LocationCase
-    getLocationCase() {
-      return LocationCase.forNumber(
-          locationCase_);
+              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
     }
 
-    public static final int REGION_FIELD_NUMBER = 1;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>string region = 1;</code>
-     * @return Whether the region field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    public boolean hasRegion() {
-      return locationCase_ == 1;
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>string region = 1;</code>
-     * @return The region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    public java.lang.String getRegion() {
-      java.lang.Object ref = "";
-      if (locationCase_ == 1) {
-        ref = location_;
-      }
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (locationCase_ == 1) {
-          location_ = s;
-        }
-        return s;
-      }
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>string region = 1;</code>
-     * @return The bytes for region.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    public com.google.protobuf.ByteString
-        getRegionBytes() {
-      java.lang.Object ref = "";
-      if (locationCase_ == 1) {
-        ref = location_;
-      }
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        if (locationCase_ == 1) {
-          location_ = b;
-        }
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int GPS_POSITION_FIELD_NUMBER = 2;
-    /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return Whether the gpsPosition field is set.
+    public static final int LOCATION_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Location location_;
+    /**
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
     @java.lang.Override
-    public boolean hasGpsPosition() {
-      return locationCase_ == 2;
+    public boolean hasLocation() {
+      return location_ != null;
     }
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
-     * @return The gpsPosition.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
     @java.lang.Override
-    public context.ContextOuterClass.GPS_Position getGpsPosition() {
-      if (locationCase_ == 2) {
-         return (context.ContextOuterClass.GPS_Position) location_;
-      }
-      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+    public context.ContextOuterClass.Location getLocation() {
+      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
     }
     /**
-     * <code>.context.GPS_Position gps_position = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
-      if (locationCase_ == 2) {
-         return (context.ContextOuterClass.GPS_Position) location_;
-      }
-      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+      return getLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -52322,11 +54163,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (locationCase_ == 1) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
+      if (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (locationCase_ == 2) {
-        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
+      if (location_ != null) {
+        output.writeMessage(2, getLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -52337,12 +54178,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (locationCase_ == 1) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
       }
-      if (locationCase_ == 2) {
+      if (location_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
+          .computeMessageSize(2, getLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -52354,23 +54196,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Location)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) obj;
+      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
 
-      if (!getLocationCase().equals(other.getLocationCase())) return false;
-      switch (locationCase_) {
-        case 1:
-          if (!getRegion()
-              .equals(other.getRegion())) return false;
-          break;
-        case 2:
-          if (!getGpsPosition()
-              .equals(other.getGpsPosition())) return false;
-          break;
-        case 0:
-        default:
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (hasLocation() != other.hasLocation()) return false;
+      if (hasLocation()) {
+        if (!getLocation()
+            .equals(other.getLocation())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -52383,86 +54222,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      switch (locationCase_) {
-        case 1:
-          hash = (37 * hash) + REGION_FIELD_NUMBER;
-          hash = (53 * hash) + getRegion().hashCode();
-          break;
-        case 2:
-          hash = (37 * hash) + GPS_POSITION_FIELD_NUMBER;
-          hash = (53 * hash) + getGpsPosition().hashCode();
-          break;
-        case 0:
-        default:
+      if (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
+      }
+      if (hasLocation()) {
+        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
+        hash = (53 * hash) + getLocation().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Location parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -52475,7 +54310,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Location prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -52491,26 +54326,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Location}
+     * Protobuf type {@code context.Constraint_EndPointLocation}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Location)
-        context.ContextOuterClass.LocationOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
+        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Location_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Location.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -52528,25 +54363,35 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        locationCase_ = 0;
-        location_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        if (locationBuilder_ == null) {
+          location_ = null;
+        } else {
+          location_ = null;
+          locationBuilder_ = null;
+        }
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Location_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location getDefaultInstanceForType() {
-        return context.ContextOuterClass.Location.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location build() {
-        context.ContextOuterClass.Location result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointLocation build() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -52554,19 +54399,18 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Location buildPartial() {
-        context.ContextOuterClass.Location result = new context.ContextOuterClass.Location(this);
-        if (locationCase_ == 1) {
-          result.location_ = location_;
+      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (locationCase_ == 2) {
-          if (gpsPositionBuilder_ == null) {
-            result.location_ = location_;
-          } else {
-            result.location_ = gpsPositionBuilder_.build();
-          }
+        if (locationBuilder_ == null) {
+          result.location_ = location_;
+        } else {
+          result.location_ = locationBuilder_.build();
         }
-        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -52605,30 +54449,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Location) {
-          return mergeFrom((context.ContextOuterClass.Location)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Location other) {
-        if (other == context.ContextOuterClass.Location.getDefaultInstance()) return this;
-        switch (other.getLocationCase()) {
-          case REGION: {
-            locationCase_ = 1;
-            location_ = other.location_;
-            onChanged();
-            break;
-          }
-          case GPS_POSITION: {
-            mergeGpsPosition(other.getGpsPosition());
-            break;
-          }
-          case LOCATION_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (other.hasLocation()) {
+          mergeLocation(other.getLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -52645,11 +54480,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Location parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -52658,258 +54493,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int locationCase_ = 0;
-      private java.lang.Object location_;
-      public LocationCase
-          getLocationCase() {
-        return LocationCase.forNumber(
-            locationCase_);
-      }
-
-      public Builder clearLocation() {
-        locationCase_ = 0;
-        location_ = null;
-        onChanged();
-        return this;
-      }
-
 
+      private context.ContextOuterClass.EndPointId endpointId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>string region = 1;</code>
-       * @return Whether the region field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      @java.lang.Override
-      public boolean hasRegion() {
-        return locationCase_ == 1;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return The region.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      @java.lang.Override
-      public java.lang.String getRegion() {
-        java.lang.Object ref = "";
-        if (locationCase_ == 1) {
-          ref = location_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        } else {
+          return endpointIdBuilder_.getMessage();
         }
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (locationCase_ == 1) {
-            location_ = s;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          return s;
+          endpointId_ = value;
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          endpointIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return The bytes for region.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      @java.lang.Override
-      public com.google.protobuf.ByteString
-          getRegionBytes() {
-        java.lang.Object ref = "";
-        if (locationCase_ == 1) {
-          ref = location_;
-        }
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          if (locationCase_ == 1) {
-            location_ = b;
-          }
-          return b;
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @param value The region to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRegion(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  locationCase_ = 1;
-        location_ = value;
-        onChanged();
+      public Builder mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
+          } else {
+            endpointId_ = value;
+          }
+          onChanged();
+        } else {
+          endpointIdBuilder_.mergeFrom(value);
+        }
+
         return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearRegion() {
-        if (locationCase_ == 1) {
-          locationCase_ = 0;
-          location_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>string region = 1;</code>
-       * @param value The bytes for region to set.
-       * @return This builder for chaining.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setRegionBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        locationCase_ = 1;
-        location_ = value;
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
         onChanged();
-        return this;
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
+        }
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getEndpointIdFieldBuilder() {
+        if (endpointIdBuilder_ == null) {
+          endpointIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  getEndpointId(),
+                  getParentForChildren(),
+                  isClean());
+          endpointId_ = null;
+        }
+        return endpointIdBuilder_;
       }
 
+      private context.ContextOuterClass.Location location_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
-       * @return Whether the gpsPosition field is set.
+       * <code>.context.Location location = 2;</code>
+       * @return Whether the location field is set.
        */
-      @java.lang.Override
-      public boolean hasGpsPosition() {
-        return locationCase_ == 2;
+      public boolean hasLocation() {
+        return locationBuilder_ != null || location_ != null;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
-       * @return The gpsPosition.
+       * <code>.context.Location location = 2;</code>
+       * @return The location.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.GPS_Position getGpsPosition() {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2) {
-            return (context.ContextOuterClass.GPS_Position) location_;
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+      public context.ContextOuterClass.Location getLocation() {
+        if (locationBuilder_ == null) {
+          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
         } else {
-          if (locationCase_ == 2) {
-            return gpsPositionBuilder_.getMessage();
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          return locationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
-        if (gpsPositionBuilder_ == null) {
+      public Builder setLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
           location_ = value;
           onChanged();
         } else {
-          gpsPositionBuilder_.setMessage(value);
+          locationBuilder_.setMessage(value);
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setGpsPosition(
-          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
-        if (gpsPositionBuilder_ == null) {
+      public Builder setLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
           location_ = builderForValue.build();
           onChanged();
         } else {
-          gpsPositionBuilder_.setMessage(builderForValue.build());
+          locationBuilder_.setMessage(builderForValue.build());
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder mergeGpsPosition(context.ContextOuterClass.GPS_Position value) {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2 &&
-              location_ != context.ContextOuterClass.GPS_Position.getDefaultInstance()) {
-            location_ = context.ContextOuterClass.GPS_Position.newBuilder((context.ContextOuterClass.GPS_Position) location_)
-                .mergeFrom(value).buildPartial();
+      public Builder mergeLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
+          if (location_ != null) {
+            location_ =
+              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
           } else {
             location_ = value;
           }
           onChanged();
         } else {
-          if (locationCase_ == 2) {
-            gpsPositionBuilder_.mergeFrom(value);
-          }
-          gpsPositionBuilder_.setMessage(value);
+          locationBuilder_.mergeFrom(value);
         }
-        locationCase_ = 2;
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder clearGpsPosition() {
-        if (gpsPositionBuilder_ == null) {
-          if (locationCase_ == 2) {
-            locationCase_ = 0;
-            location_ = null;
-            onChanged();
-          }
+      public Builder clearLocation() {
+        if (locationBuilder_ == null) {
+          location_ = null;
+          onChanged();
         } else {
-          if (locationCase_ == 2) {
-            locationCase_ = 0;
-            location_ = null;
-          }
-          gpsPositionBuilder_.clear();
+          location_ = null;
+          locationBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
-        return getGpsPositionFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+        
+        onChanged();
+        return getLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      @java.lang.Override
-      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
-        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
-          return gpsPositionBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+        if (locationBuilder_ != null) {
+          return locationBuilder_.getMessageOrBuilder();
         } else {
-          if (locationCase_ == 2) {
-            return (context.ContextOuterClass.GPS_Position) location_;
-          }
-          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
+          return location_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : location_;
         }
       }
       /**
-       * <code>.context.GPS_Position gps_position = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> 
-          getGpsPositionFieldBuilder() {
-        if (gpsPositionBuilder_ == null) {
-          if (!(locationCase_ == 2)) {
-            location_ = context.ContextOuterClass.GPS_Position.getDefaultInstance();
-          }
-          gpsPositionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder>(
-                  (context.ContextOuterClass.GPS_Position) location_,
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
+          getLocationFieldBuilder() {
+        if (locationBuilder_ == null) {
+          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
+                  getLocation(),
                   getParentForChildren(),
                   isClean());
           location_ = null;
         }
-        locationCase_ = 2;
-        onChanged();;
-        return gpsPositionBuilder_;
+        return locationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -52924,48 +54744,48 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Location)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Location)
-    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
+    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
     }
 
-    public static context.ContextOuterClass.Location getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Location>
-        PARSER = new com.google.protobuf.AbstractParser<Location>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
       @java.lang.Override
-      public Location parsePartialFrom(
+      public Constraint_EndPointLocation parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Location(input, extensionRegistry);
+        return new Constraint_EndPointLocation(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Location> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Location> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Location getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface Constraint_EndPointLocationOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
+  public interface Constraint_EndPointPriorityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointPriority)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -52984,40 +54804,31 @@ public final class ContextOuterClass {
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.Location location = 2;</code>
-     * @return Whether the location field is set.
-     */
-    boolean hasLocation();
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return The location.
-     */
-    context.ContextOuterClass.Location getLocation();
-    /**
-     * <code>.context.Location location = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
-    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
+    int getPriority();
   }
   /**
-   * Protobuf type {@code context.Constraint_EndPointLocation}
+   * Protobuf type {@code context.Constraint_EndPointPriority}
    */
-  public static final class Constraint_EndPointLocation extends
+  public static final class Constraint_EndPointPriority extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
-      Constraint_EndPointLocationOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointPriority)
+      Constraint_EndPointPriorityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Constraint_EndPointLocation.newBuilder() to construct.
-    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointPriority.newBuilder() to construct.
+    private Constraint_EndPointPriority(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Constraint_EndPointLocation() {
+    private Constraint_EndPointPriority() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Constraint_EndPointLocation();
+      return new Constraint_EndPointPriority();
     }
 
     @java.lang.Override
@@ -53025,7 +54836,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Constraint_EndPointLocation(
+    private Constraint_EndPointPriority(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -53056,17 +54867,9 @@ public final class ContextOuterClass {
 
               break;
             }
-            case 18: {
-              context.ContextOuterClass.Location.Builder subBuilder = null;
-              if (location_ != null) {
-                subBuilder = location_.toBuilder();
-              }
-              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(location_);
-                location_ = subBuilder.buildPartial();
-              }
+            case 16: {
 
+              priority_ = input.readUInt32();
               break;
             }
             default: {
@@ -53090,15 +54893,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
+              context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
     }
 
     public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
@@ -53127,30 +54930,15 @@ public final class ContextOuterClass {
       return getEndpointId();
     }
 
-    public static final int LOCATION_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Location location_;
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return Whether the location field is set.
-     */
-    @java.lang.Override
-    public boolean hasLocation() {
-      return location_ != null;
-    }
-    /**
-     * <code>.context.Location location = 2;</code>
-     * @return The location.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Location getLocation() {
-      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
-    }
+    public static final int PRIORITY_FIELD_NUMBER = 2;
+    private int priority_;
     /**
-     * <code>.context.Location location = 2;</code>
+     * <code>uint32 priority = 2;</code>
+     * @return The priority.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-      return getLocation();
+    public int getPriority() {
+      return priority_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -53170,8 +54958,8 @@ public final class ContextOuterClass {
       if (endpointId_ != null) {
         output.writeMessage(1, getEndpointId());
       }
-      if (location_ != null) {
-        output.writeMessage(2, getLocation());
+      if (priority_ != 0) {
+        output.writeUInt32(2, priority_);
       }
       unknownFields.writeTo(output);
     }
@@ -53186,9 +54974,9 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getEndpointId());
       }
-      if (location_ != null) {
+      if (priority_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getLocation());
+          .computeUInt32Size(2, priority_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -53200,21 +54988,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointPriority)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
+      context.ContextOuterClass.Constraint_EndPointPriority other = (context.ContextOuterClass.Constraint_EndPointPriority) obj;
 
       if (hasEndpointId() != other.hasEndpointId()) return false;
       if (hasEndpointId()) {
         if (!getEndpointId()
             .equals(other.getEndpointId())) return false;
       }
-      if (hasLocation() != other.hasLocation()) return false;
-      if (hasLocation()) {
-        if (!getLocation()
-            .equals(other.getLocation())) return false;
-      }
+      if (getPriority()
+          != other.getPriority()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -53230,78 +55015,76 @@ public final class ContextOuterClass {
         hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
         hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasLocation()) {
-        hash = (37 * hash) + LOCATION_FIELD_NUMBER;
-        hash = (53 * hash) + getLocation().hashCode();
-      }
+      hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPriority();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(byte[] data)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseDelimitedFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointPriority parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -53314,7 +55097,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointLocation prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_EndPointPriority prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -53330,26 +55113,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Constraint_EndPointLocation}
+     * Protobuf type {@code context.Constraint_EndPointPriority}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointLocation)
-        context.ContextOuterClass.Constraint_EndPointLocationOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Constraint_EndPointPriority)
+        context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointPriority.class, context.ContextOuterClass.Constraint_EndPointPriority.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointPriority.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -53373,29 +55156,25 @@ public final class ContextOuterClass {
           endpointId_ = null;
           endpointIdBuilder_ = null;
         }
-        if (locationBuilder_ == null) {
-          location_ = null;
-        } else {
-          location_ = null;
-          locationBuilder_ = null;
-        }
+        priority_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointPriority_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation build() {
-        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointPriority build() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -53403,18 +55182,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Constraint_EndPointLocation buildPartial() {
-        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+      public context.ContextOuterClass.Constraint_EndPointPriority buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointPriority result = new context.ContextOuterClass.Constraint_EndPointPriority(this);
         if (endpointIdBuilder_ == null) {
           result.endpointId_ = endpointId_;
         } else {
           result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (locationBuilder_ == null) {
-          result.location_ = location_;
-        } else {
-          result.location_ = locationBuilder_.build();
-        }
+        result.priority_ = priority_;
         onBuilt();
         return result;
       }
@@ -53453,21 +55228,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint_EndPointLocation) {
-          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
+        if (other instanceof context.ContextOuterClass.Constraint_EndPointPriority) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointLocation other) {
-        if (other == context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_EndPointPriority other) {
+        if (other == context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) return this;
         if (other.hasEndpointId()) {
           mergeEndpointId(other.getEndpointId());
         }
-        if (other.hasLocation()) {
-          mergeLocation(other.getLocation());
+        if (other.getPriority() != 0) {
+          setPriority(other.getPriority());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -53484,11 +55259,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointPriority parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointPriority) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -53617,123 +55392,35 @@ public final class ContextOuterClass {
         return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.Location location_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
-      /**
-       * <code>.context.Location location = 2;</code>
-       * @return Whether the location field is set.
-       */
-      public boolean hasLocation() {
-        return locationBuilder_ != null || location_ != null;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       * @return The location.
-       */
-      public context.ContextOuterClass.Location getLocation() {
-        if (locationBuilder_ == null) {
-          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
-        } else {
-          return locationBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder setLocation(context.ContextOuterClass.Location value) {
-        if (locationBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          location_ = value;
-          onChanged();
-        } else {
-          locationBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder setLocation(
-          context.ContextOuterClass.Location.Builder builderForValue) {
-        if (locationBuilder_ == null) {
-          location_ = builderForValue.build();
-          onChanged();
-        } else {
-          locationBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public Builder mergeLocation(context.ContextOuterClass.Location value) {
-        if (locationBuilder_ == null) {
-          if (location_ != null) {
-            location_ =
-              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
-          } else {
-            location_ = value;
-          }
-          onChanged();
-        } else {
-          locationBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
+      private int priority_ ;
       /**
-       * <code>.context.Location location = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @return The priority.
        */
-      public Builder clearLocation() {
-        if (locationBuilder_ == null) {
-          location_ = null;
-          onChanged();
-        } else {
-          location_ = null;
-          locationBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public int getPriority() {
+        return priority_;
       }
       /**
-       * <code>.context.Location location = 2;</code>
+       * <code>uint32 priority = 2;</code>
+       * @param value The priority to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
+      public Builder setPriority(int value) {
         
+        priority_ = value;
         onChanged();
-        return getLocationFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
-        if (locationBuilder_ != null) {
-          return locationBuilder_.getMessageOrBuilder();
-        } else {
-          return location_ == null ?
-              context.ContextOuterClass.Location.getDefaultInstance() : location_;
-        }
+        return this;
       }
-      /**
-       * <code>.context.Location location = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> 
-          getLocationFieldBuilder() {
-        if (locationBuilder_ == null) {
-          locationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder>(
-                  getLocation(),
-                  getParentForChildren(),
-                  isClean());
-          location_ = null;
-        }
-        return locationBuilder_;
+      /**
+       * <code>uint32 priority = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPriority() {
+        
+        priority_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -53748,41 +55435,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointPriority)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointLocation)
-    private static final context.ContextOuterClass.Constraint_EndPointLocation DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_EndPointPriority)
+    private static final context.ContextOuterClass.Constraint_EndPointPriority DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointPriority();
     }
 
-    public static context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Constraint_EndPointLocation>
-        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
+    private static final com.google.protobuf.Parser<Constraint_EndPointPriority>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointPriority>() {
       @java.lang.Override
-      public Constraint_EndPointLocation parsePartialFrom(
+      public Constraint_EndPointPriority parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Constraint_EndPointLocation(input, extensionRegistry);
+        return new Constraint_EndPointPriority(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointPriority> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointPriority> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointPriority getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -55332,15 +57019,33 @@ public final class ContextOuterClass {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The enum numeric value on the wire for isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
+     */
+    java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    int getIsolationLevelCount();
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index);
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    int getIsolationLevelValue();
+    java.util.List<java.lang.Integer>
+    getIsolationLevelValueList();
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel();
+    int getIsolationLevelValue(int index);
   }
   /**
    * Protobuf type {@code context.Constraint_SLA_Isolation_level}
@@ -55355,7 +57060,7 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Constraint_SLA_Isolation_level() {
-      isolationLevel_ = 0;
+      isolationLevel_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -55378,6 +57083,7 @@ public final class ContextOuterClass {
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -55390,8 +57096,25 @@ public final class ContextOuterClass {
               break;
             case 8: {
               int rawValue = input.readEnum();
-
-              isolationLevel_ = rawValue;
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              isolationLevel_.add(rawValue);
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  isolationLevel_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                isolationLevel_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
               break;
             }
             default: {
@@ -55409,6 +57132,9 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -55427,23 +57153,62 @@ public final class ContextOuterClass {
     }
 
     public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
-    private int isolationLevel_;
+    private java.util.List<java.lang.Integer> isolationLevel_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum> isolationLevel_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>() {
+              public context.ContextOuterClass.IsolationLevelEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the isolationLevel.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The count of isolationLevel.
+     */
+    @java.lang.Override
+    public int getIsolationLevelCount() {
+      return isolationLevel_.size();
+    }
+    /**
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the element to return.
+     * @return The isolationLevel at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+      return isolationLevel_converter_.convert(isolationLevel_.get(index));
+    }
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The enum numeric value on the wire for isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return A list containing the enum numeric values on the wire for isolationLevel.
      */
-    @java.lang.Override public int getIsolationLevelValue() {
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getIsolationLevelValueList() {
       return isolationLevel_;
     }
     /**
-     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-     * @return The isolationLevel.
+     * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of isolationLevel at the given index.
      */
-    @java.lang.Override public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
-      return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public int getIsolationLevelValue(int index) {
+      return isolationLevel_.get(index);
     }
+    private int isolationLevelMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -55459,8 +57224,13 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
-        output.writeEnum(1, isolationLevel_);
+      getSerializedSize();
+      if (getIsolationLevelList().size() > 0) {
+        output.writeUInt32NoTag(10);
+        output.writeUInt32NoTag(isolationLevelMemoizedSerializedSize);
+      }
+      for (int i = 0; i < isolationLevel_.size(); i++) {
+        output.writeEnumNoTag(isolationLevel_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -55471,9 +57241,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, isolationLevel_);
+      {
+        int dataSize = 0;
+        for (int i = 0; i < isolationLevel_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(isolationLevel_.get(i));
+        }
+        size += dataSize;
+        if (!getIsolationLevelList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }isolationLevelMemoizedSerializedSize = dataSize;
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -55490,7 +57268,7 @@ public final class ContextOuterClass {
       }
       context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
 
-      if (isolationLevel_ != other.isolationLevel_) return false;
+      if (!isolationLevel_.equals(other.isolationLevel_)) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -55502,8 +57280,10 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
-      hash = (53 * hash) + isolationLevel_;
+      if (getIsolationLevelCount() > 0) {
+        hash = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
+        hash = (53 * hash) + isolationLevel_.hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -55637,8 +57417,8 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        isolationLevel_ = 0;
-
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
         return this;
       }
 
@@ -55665,6 +57445,11 @@ public final class ContextOuterClass {
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
         context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
+        int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = java.util.Collections.unmodifiableList(isolationLevel_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
         result.isolationLevel_ = isolationLevel_;
         onBuilt();
         return result;
@@ -55714,8 +57499,15 @@ public final class ContextOuterClass {
 
       public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Isolation_level other) {
         if (other == context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) return this;
-        if (other.isolationLevel_ != 0) {
-          setIsolationLevelValue(other.getIsolationLevelValue());
+        if (!other.isolationLevel_.isEmpty()) {
+          if (isolationLevel_.isEmpty()) {
+            isolationLevel_ = other.isolationLevel_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureIsolationLevelIsMutable();
+            isolationLevel_.addAll(other.isolationLevel_);
+          }
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -55745,57 +57537,144 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private int isolationLevel_ = 0;
+      private java.util.List<java.lang.Integer> isolationLevel_ =
+        java.util.Collections.emptyList();
+      private void ensureIsolationLevelIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          isolationLevel_ = new java.util.ArrayList<java.lang.Integer>(isolationLevel_);
+          bitField0_ |= 0x00000001;
+        }
+      }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The enum numeric value on the wire for isolationLevel.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the isolationLevel.
        */
-      @java.lang.Override public int getIsolationLevelValue() {
-        return isolationLevel_;
+      public java.util.List<context.ContextOuterClass.IsolationLevelEnum> getIsolationLevelList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.IsolationLevelEnum>(isolationLevel_, isolationLevel_converter_);
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @param value The enum numeric value on the wire for isolationLevel to set.
-       * @return This builder for chaining.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The count of isolationLevel.
        */
-      public Builder setIsolationLevelValue(int value) {
-        
-        isolationLevel_ = value;
-        onChanged();
-        return this;
+      public int getIsolationLevelCount() {
+        return isolationLevel_.size();
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
-       * @return The isolationLevel.
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the element to return.
+       * @return The isolationLevel at the given index.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
-        return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
+      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel(int index) {
+        return isolationLevel_converter_.convert(isolationLevel_.get(index));
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index to set the value at.
        * @param value The isolationLevel to set.
        * @return This builder for chaining.
        */
-      public Builder setIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+      public Builder setIsolationLevel(
+          int index, context.ContextOuterClass.IsolationLevelEnum value) {
         if (value == null) {
           throw new NullPointerException();
         }
-        
-        isolationLevel_ = value.getNumber();
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevel(context.ContextOuterClass.IsolationLevelEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevel(
+          java.lang.Iterable<? extends context.ContextOuterClass.IsolationLevelEnum> values) {
+        ensureIsolationLevelIsMutable();
+        for (context.ContextOuterClass.IsolationLevelEnum value : values) {
+          isolationLevel_.add(value.getNumber());
+        }
         onChanged();
         return this;
       }
       /**
-       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
        * @return This builder for chaining.
        */
       public Builder clearIsolationLevel() {
-        
-        isolationLevel_ = 0;
+        isolationLevel_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return A list containing the enum numeric values on the wire for isolationLevel.
+       */
+      public java.util.List<java.lang.Integer>
+      getIsolationLevelValueList() {
+        return java.util.Collections.unmodifiableList(isolationLevel_);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       */
+      public int getIsolationLevelValue(int index) {
+        return isolationLevel_.get(index);
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of isolationLevel at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setIsolationLevelValue(
+          int index, int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The enum numeric value on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addIsolationLevelValue(int value) {
+        ensureIsolationLevelIsMutable();
+        isolationLevel_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param values The enum numeric values on the wire for isolationLevel to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllIsolationLevelValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureIsolationLevelIsMutable();
+        for (int value : values) {
+          isolationLevel_.add(value);
+        }
         onChanged();
         return this;
       }
@@ -55902,62 +57781,77 @@ public final class ContextOuterClass {
     context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    boolean hasEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority();
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return Whether the slaCapacity field is set.
      */
     boolean hasSlaCapacity();
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return The slaCapacity.
      */
     context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      */
     context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return Whether the slaLatency field is set.
      */
     boolean hasSlaLatency();
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return The slaLatency.
      */
     context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      */
     context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return Whether the slaAvailability field is set.
      */
     boolean hasSlaAvailability();
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return The slaAvailability.
      */
     context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      */
     context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
 
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return Whether the slaIsolation field is set.
      */
     boolean hasSlaIsolation();
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return The slaIsolation.
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
 
@@ -56051,8 +57945,22 @@ public final class ContextOuterClass {
               break;
             }
             case 34: {
-              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              context.ContextOuterClass.Constraint_EndPointPriority.Builder subBuilder = null;
               if (constraintCase_ == 4) {
+                subBuilder = ((context.ContextOuterClass.Constraint_EndPointPriority) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_EndPointPriority.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 4;
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              if (constraintCase_ == 5) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).toBuilder();
               }
               constraint_ =
@@ -56061,12 +57969,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 4;
+              constraintCase_ = 5;
               break;
             }
-            case 42: {
+            case 50: {
               context.ContextOuterClass.Constraint_SLA_Latency.Builder subBuilder = null;
-              if (constraintCase_ == 5) {
+              if (constraintCase_ == 6) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).toBuilder();
               }
               constraint_ =
@@ -56075,12 +57983,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 5;
+              constraintCase_ = 6;
               break;
             }
-            case 50: {
+            case 58: {
               context.ContextOuterClass.Constraint_SLA_Availability.Builder subBuilder = null;
-              if (constraintCase_ == 6) {
+              if (constraintCase_ == 7) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).toBuilder();
               }
               constraint_ =
@@ -56089,12 +57997,12 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 6;
+              constraintCase_ = 7;
               break;
             }
-            case 58: {
+            case 66: {
               context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder subBuilder = null;
-              if (constraintCase_ == 7) {
+              if (constraintCase_ == 8) {
                 subBuilder = ((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).toBuilder();
               }
               constraint_ =
@@ -56103,7 +58011,7 @@ public final class ContextOuterClass {
                 subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
                 constraint_ = subBuilder.buildPartial();
               }
-              constraintCase_ = 7;
+              constraintCase_ = 8;
               break;
             }
             default: {
@@ -56146,10 +58054,11 @@ public final class ContextOuterClass {
       CUSTOM(1),
       SCHEDULE(2),
       ENDPOINT_LOCATION(3),
-      SLA_CAPACITY(4),
-      SLA_LATENCY(5),
-      SLA_AVAILABILITY(6),
-      SLA_ISOLATION(7),
+      ENDPOINT_PRIORITY(4),
+      SLA_CAPACITY(5),
+      SLA_LATENCY(6),
+      SLA_AVAILABILITY(7),
+      SLA_ISOLATION(8),
       CONSTRAINT_NOT_SET(0);
       private final int value;
       private ConstraintCase(int value) {
@@ -56170,10 +58079,11 @@ public final class ContextOuterClass {
           case 1: return CUSTOM;
           case 2: return SCHEDULE;
           case 3: return ENDPOINT_LOCATION;
-          case 4: return SLA_CAPACITY;
-          case 5: return SLA_LATENCY;
-          case 6: return SLA_AVAILABILITY;
-          case 7: return SLA_ISOLATION;
+          case 4: return ENDPOINT_PRIORITY;
+          case 5: return SLA_CAPACITY;
+          case 6: return SLA_LATENCY;
+          case 7: return SLA_AVAILABILITY;
+          case 8: return SLA_ISOLATION;
           case 0: return CONSTRAINT_NOT_SET;
           default: return null;
         }
@@ -56282,125 +58192,156 @@ public final class ContextOuterClass {
       return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
     }
 
-    public static final int SLA_CAPACITY_FIELD_NUMBER = 4;
+    public static final int ENDPOINT_PRIORITY_FIELD_NUMBER = 4;
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return Whether the endpointPriority field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointPriority() {
+      return constraintCase_ == 4;
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     * @return The endpointPriority.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+    }
+
+    public static final int SLA_CAPACITY_FIELD_NUMBER = 5;
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return Whether the slaCapacity field is set.
      */
     @java.lang.Override
     public boolean hasSlaCapacity() {
-      return constraintCase_ == 4;
+      return constraintCase_ == 5;
     }
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      * @return The slaCapacity.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
-      if (constraintCase_ == 4) {
+      if (constraintCase_ == 5) {
          return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-      if (constraintCase_ == 4) {
+      if (constraintCase_ == 5) {
          return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
 
-    public static final int SLA_LATENCY_FIELD_NUMBER = 5;
+    public static final int SLA_LATENCY_FIELD_NUMBER = 6;
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return Whether the slaLatency field is set.
      */
     @java.lang.Override
     public boolean hasSlaLatency() {
-      return constraintCase_ == 5;
+      return constraintCase_ == 6;
     }
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      * @return The slaLatency.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
-      if (constraintCase_ == 5) {
+      if (constraintCase_ == 6) {
          return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-      if (constraintCase_ == 5) {
+      if (constraintCase_ == 6) {
          return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
 
-    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 6;
+    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 7;
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return Whether the slaAvailability field is set.
      */
     @java.lang.Override
     public boolean hasSlaAvailability() {
-      return constraintCase_ == 6;
+      return constraintCase_ == 7;
     }
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      * @return The slaAvailability.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
-      if (constraintCase_ == 6) {
+      if (constraintCase_ == 7) {
          return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-      if (constraintCase_ == 6) {
+      if (constraintCase_ == 7) {
          return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
 
-    public static final int SLA_ISOLATION_FIELD_NUMBER = 7;
+    public static final int SLA_ISOLATION_FIELD_NUMBER = 8;
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return Whether the slaIsolation field is set.
      */
     @java.lang.Override
     public boolean hasSlaIsolation() {
-      return constraintCase_ == 7;
+      return constraintCase_ == 8;
     }
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      * @return The slaIsolation.
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
-      if (constraintCase_ == 7) {
+      if (constraintCase_ == 8) {
          return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
     /**
-     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-      if (constraintCase_ == 7) {
+      if (constraintCase_ == 8) {
          return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
       return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
@@ -56430,16 +58371,19 @@ public final class ContextOuterClass {
         output.writeMessage(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
       }
       if (constraintCase_ == 4) {
-        output.writeMessage(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+        output.writeMessage(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
       }
       if (constraintCase_ == 5) {
-        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
       }
       if (constraintCase_ == 6) {
-        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
       }
       if (constraintCase_ == 7) {
-        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        output.writeMessage(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       unknownFields.writeTo(output);
     }
@@ -56464,19 +58408,23 @@ public final class ContextOuterClass {
       }
       if (constraintCase_ == 4) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+          .computeMessageSize(4, (context.ContextOuterClass.Constraint_EndPointPriority) constraint_);
       }
       if (constraintCase_ == 5) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
       }
       if (constraintCase_ == 6) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
       }
       if (constraintCase_ == 7) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 8) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -56508,18 +58456,22 @@ public final class ContextOuterClass {
               .equals(other.getEndpointLocation())) return false;
           break;
         case 4:
+          if (!getEndpointPriority()
+              .equals(other.getEndpointPriority())) return false;
+          break;
+        case 5:
           if (!getSlaCapacity()
               .equals(other.getSlaCapacity())) return false;
           break;
-        case 5:
+        case 6:
           if (!getSlaLatency()
               .equals(other.getSlaLatency())) return false;
           break;
-        case 6:
+        case 7:
           if (!getSlaAvailability()
               .equals(other.getSlaAvailability())) return false;
           break;
-        case 7:
+        case 8:
           if (!getSlaIsolation()
               .equals(other.getSlaIsolation())) return false;
           break;
@@ -56551,18 +58503,22 @@ public final class ContextOuterClass {
           hash = (53 * hash) + getEndpointLocation().hashCode();
           break;
         case 4:
+          hash = (37 * hash) + ENDPOINT_PRIORITY_FIELD_NUMBER;
+          hash = (53 * hash) + getEndpointPriority().hashCode();
+          break;
+        case 5:
           hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaCapacity().hashCode();
           break;
-        case 5:
+        case 6:
           hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaLatency().hashCode();
           break;
-        case 6:
+        case 7:
           hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
           hash = (53 * hash) + getSlaAvailability().hashCode();
           break;
-        case 7:
+        case 8:
           hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
           hash = (53 * hash) + getSlaIsolation().hashCode();
           break;
@@ -56752,27 +58708,34 @@ public final class ContextOuterClass {
           }
         }
         if (constraintCase_ == 4) {
+          if (endpointPriorityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = endpointPriorityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 5) {
           if (slaCapacityBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaCapacityBuilder_.build();
           }
         }
-        if (constraintCase_ == 5) {
+        if (constraintCase_ == 6) {
           if (slaLatencyBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaLatencyBuilder_.build();
           }
         }
-        if (constraintCase_ == 6) {
+        if (constraintCase_ == 7) {
           if (slaAvailabilityBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
             result.constraint_ = slaAvailabilityBuilder_.build();
           }
         }
-        if (constraintCase_ == 7) {
+        if (constraintCase_ == 8) {
           if (slaIsolationBuilder_ == null) {
             result.constraint_ = constraint_;
           } else {
@@ -56841,6 +58804,10 @@ public final class ContextOuterClass {
             mergeEndpointLocation(other.getEndpointLocation());
             break;
           }
+          case ENDPOINT_PRIORITY: {
+            mergeEndpointPriority(other.getEndpointPriority());
+            break;
+          }
           case SLA_CAPACITY: {
             mergeSlaCapacity(other.getSlaCapacity());
             break;
@@ -57328,36 +59295,177 @@ public final class ContextOuterClass {
         return endpointLocationBuilder_;
       }
 
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> endpointPriorityBuilder_;
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return Whether the endpointPriority field is set.
+       */
+      @java.lang.Override
+      public boolean hasEndpointPriority() {
+        return constraintCase_ == 4;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       * @return The endpointPriority.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriority getEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 4) {
+            return endpointPriorityBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder setEndpointPriority(
+          context.ContextOuterClass.Constraint_EndPointPriority.Builder builderForValue) {
+        if (endpointPriorityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointPriorityBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder mergeEndpointPriority(context.ContextOuterClass.Constraint_EndPointPriority value) {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4 &&
+              constraint_ != context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.newBuilder((context.ContextOuterClass.Constraint_EndPointPriority) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 4) {
+            endpointPriorityBuilder_.mergeFrom(value);
+          }
+          endpointPriorityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public Builder clearEndpointPriority() {
+        if (endpointPriorityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          endpointPriorityBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint_EndPointPriority.Builder getEndpointPriorityBuilder() {
+        return getEndpointPriorityFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder getEndpointPriorityOrBuilder() {
+        if ((constraintCase_ == 4) && (endpointPriorityBuilder_ != null)) {
+          return endpointPriorityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_EndPointPriority) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointPriority endpoint_priority = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder> 
+          getEndpointPriorityFieldBuilder() {
+        if (endpointPriorityBuilder_ == null) {
+          if (!(constraintCase_ == 4)) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointPriority.getDefaultInstance();
+          }
+          endpointPriorityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_EndPointPriority, context.ContextOuterClass.Constraint_EndPointPriority.Builder, context.ContextOuterClass.Constraint_EndPointPriorityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_EndPointPriority) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 4;
+        onChanged();;
+        return endpointPriorityBuilder_;
+      }
+
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> slaCapacityBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        * @return Whether the slaCapacity field is set.
        */
       @java.lang.Override
       public boolean hasSlaCapacity() {
-        return constraintCase_ == 4;
+        return constraintCase_ == 5;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        * @return The slaCapacity.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return slaCapacityBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
         if (slaCapacityBuilder_ == null) {
@@ -57369,11 +59477,11 @@ public final class ContextOuterClass {
         } else {
           slaCapacityBuilder_.setMessage(value);
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder setSlaCapacity(
           context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
@@ -57383,15 +59491,15 @@ public final class ContextOuterClass {
         } else {
           slaCapacityBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4 &&
+          if (constraintCase_ == 5 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57400,26 +59508,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             slaCapacityBuilder_.mergeFrom(value);
           }
           slaCapacityBuilder_.setMessage(value);
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public Builder clearSlaCapacity() {
         if (slaCapacityBuilder_ == null) {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57428,33 +59536,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
         return getSlaCapacityFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
-        if ((constraintCase_ == 4) && (slaCapacityBuilder_ != null)) {
+        if ((constraintCase_ == 5) && (slaCapacityBuilder_ != null)) {
           return slaCapacityBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 4) {
+          if (constraintCase_ == 5) {
             return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder> 
           getSlaCapacityFieldBuilder() {
         if (slaCapacityBuilder_ == null) {
-          if (!(constraintCase_ == 4)) {
+          if (!(constraintCase_ == 5)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
           }
           slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57464,7 +59572,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 4;
+        constraintCase_ = 5;
         onChanged();;
         return slaCapacityBuilder_;
       }
@@ -57472,33 +59580,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> slaLatencyBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        * @return Whether the slaLatency field is set.
        */
       @java.lang.Override
       public boolean hasSlaLatency() {
-        return constraintCase_ == 5;
+        return constraintCase_ == 6;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        * @return The slaLatency.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return slaLatencyBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
         if (slaLatencyBuilder_ == null) {
@@ -57510,11 +59618,11 @@ public final class ContextOuterClass {
         } else {
           slaLatencyBuilder_.setMessage(value);
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder setSlaLatency(
           context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
@@ -57524,15 +59632,15 @@ public final class ContextOuterClass {
         } else {
           slaLatencyBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5 &&
+          if (constraintCase_ == 6 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57541,26 +59649,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             slaLatencyBuilder_.mergeFrom(value);
           }
           slaLatencyBuilder_.setMessage(value);
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public Builder clearSlaLatency() {
         if (slaLatencyBuilder_ == null) {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57569,33 +59677,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
         return getSlaLatencyFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
-        if ((constraintCase_ == 5) && (slaLatencyBuilder_ != null)) {
+        if ((constraintCase_ == 6) && (slaLatencyBuilder_ != null)) {
           return slaLatencyBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 5) {
+          if (constraintCase_ == 6) {
             return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * <code>.context.Constraint_SLA_Latency sla_latency = 6;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder> 
           getSlaLatencyFieldBuilder() {
         if (slaLatencyBuilder_ == null) {
-          if (!(constraintCase_ == 5)) {
+          if (!(constraintCase_ == 6)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
           }
           slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57605,7 +59713,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 5;
+        constraintCase_ = 6;
         onChanged();;
         return slaLatencyBuilder_;
       }
@@ -57613,33 +59721,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> slaAvailabilityBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        * @return Whether the slaAvailability field is set.
        */
       @java.lang.Override
       public boolean hasSlaAvailability() {
-        return constraintCase_ == 6;
+        return constraintCase_ == 7;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        * @return The slaAvailability.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return slaAvailabilityBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
         if (slaAvailabilityBuilder_ == null) {
@@ -57651,11 +59759,11 @@ public final class ContextOuterClass {
         } else {
           slaAvailabilityBuilder_.setMessage(value);
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder setSlaAvailability(
           context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
@@ -57665,15 +59773,15 @@ public final class ContextOuterClass {
         } else {
           slaAvailabilityBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6 &&
+          if (constraintCase_ == 7 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57682,26 +59790,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             slaAvailabilityBuilder_.mergeFrom(value);
           }
           slaAvailabilityBuilder_.setMessage(value);
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public Builder clearSlaAvailability() {
         if (slaAvailabilityBuilder_ == null) {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57710,33 +59818,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
         return getSlaAvailabilityFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
-        if ((constraintCase_ == 6) && (slaAvailabilityBuilder_ != null)) {
+        if ((constraintCase_ == 7) && (slaAvailabilityBuilder_ != null)) {
           return slaAvailabilityBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 6) {
+          if (constraintCase_ == 7) {
             return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * <code>.context.Constraint_SLA_Availability sla_availability = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder> 
           getSlaAvailabilityFieldBuilder() {
         if (slaAvailabilityBuilder_ == null) {
-          if (!(constraintCase_ == 6)) {
+          if (!(constraintCase_ == 7)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
           }
           slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57746,7 +59854,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 6;
+        constraintCase_ = 7;
         onChanged();;
         return slaAvailabilityBuilder_;
       }
@@ -57754,33 +59862,33 @@ public final class ContextOuterClass {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> slaIsolationBuilder_;
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        * @return Whether the slaIsolation field is set.
        */
       @java.lang.Override
       public boolean hasSlaIsolation() {
-        return constraintCase_ == 7;
+        return constraintCase_ == 8;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        * @return The slaIsolation.
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return slaIsolationBuilder_.getMessage();
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
         if (slaIsolationBuilder_ == null) {
@@ -57792,11 +59900,11 @@ public final class ContextOuterClass {
         } else {
           slaIsolationBuilder_.setMessage(value);
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder setSlaIsolation(
           context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
@@ -57806,15 +59914,15 @@ public final class ContextOuterClass {
         } else {
           slaIsolationBuilder_.setMessage(builderForValue.build());
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7 &&
+          if (constraintCase_ == 8 &&
               constraint_ != context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance()) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_)
                 .mergeFrom(value).buildPartial();
@@ -57823,26 +59931,26 @@ public final class ContextOuterClass {
           }
           onChanged();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             slaIsolationBuilder_.mergeFrom(value);
           }
           slaIsolationBuilder_.setMessage(value);
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public Builder clearSlaIsolation() {
         if (slaIsolationBuilder_ == null) {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             constraintCase_ = 0;
             constraint_ = null;
             onChanged();
           }
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             constraintCase_ = 0;
             constraint_ = null;
           }
@@ -57851,33 +59959,33 @@ public final class ContextOuterClass {
         return this;
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
         return getSlaIsolationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       @java.lang.Override
       public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
-        if ((constraintCase_ == 7) && (slaIsolationBuilder_ != null)) {
+        if ((constraintCase_ == 8) && (slaIsolationBuilder_ != null)) {
           return slaIsolationBuilder_.getMessageOrBuilder();
         } else {
-          if (constraintCase_ == 7) {
+          if (constraintCase_ == 8) {
             return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
           }
           return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 8;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder> 
           getSlaIsolationFieldBuilder() {
         if (slaIsolationBuilder_ == null) {
-          if (!(constraintCase_ == 7)) {
+          if (!(constraintCase_ == 8)) {
             constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
           }
           slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
@@ -57887,7 +59995,7 @@ public final class ContextOuterClass {
                   isClean());
           constraint_ = null;
         }
-        constraintCase_ = 7;
+        constraintCase_ = 8;
         onChanged();;
         return slaIsolationBuilder_;
       }
@@ -59665,6 +61773,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_SliceStatus_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceConfig_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceIdList_descriptor;
   private static final 
@@ -59780,6 +61893,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Constraint_EndPointLocation_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_EndPointPriority_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_EndPointPriority_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Constraint_SLA_Latency_descriptor;
   private static final 
@@ -59893,194 +62011,200 @@ public final class ContextOuterClass {
       "nt\030\001 \001(\0132\016.context.Event\022&\n\nservice_id\030\002" +
       " \001(\0132\022.context.ServiceId\"T\n\007SliceId\022&\n\nc" +
       "ontext_id\030\001 \001(\0132\022.context.ContextId\022!\n\ns" +
-      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\346\002\n\005Slice" +
+      "lice_uuid\030\002 \001(\0132\r.context.Uuid\"\222\003\n\005Slice" +
       "\022\"\n\010slice_id\030\001 \001(\0132\020.context.SliceId\022/\n\022" +
       "slice_endpoint_ids\030\002 \003(\0132\023.context.EndPo" +
       "intId\022.\n\021slice_constraints\030\003 \003(\0132\023.conte" +
       "xt.Constraint\022-\n\021slice_service_ids\030\004 \003(\013" +
       "2\022.context.ServiceId\022,\n\022slice_subslice_i" +
       "ds\030\005 \003(\0132\020.context.SliceId\022*\n\014slice_stat" +
-      "us\030\006 \001(\0132\024.context.SliceStatus\022(\n\013slice_" +
-      "owner\030\007 \001(\0132\023.context.SliceOwner\022%\n\ttime" +
-      "stamp\030\010 \001(\0132\022.context.Timestamp\"E\n\nSlice" +
-      "Owner\022!\n\nowner_uuid\030\001 \001(\0132\r.context.Uuid" +
-      "\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatus\022.\n" +
-      "\014slice_status\030\001 \001(\0162\030.context.SliceStatu" +
-      "sEnum\"2\n\013SliceIdList\022#\n\tslice_ids\030\001 \003(\0132" +
-      "\020.context.SliceId\"+\n\tSliceList\022\036\n\006slices" +
-      "\030\001 \003(\0132\016.context.Slice\"O\n\nSliceEvent\022\035\n\005" +
-      "event\030\001 \001(\0132\016.context.Event\022\"\n\010slice_id\030" +
-      "\002 \001(\0132\020.context.SliceId\"6\n\014ConnectionId\022" +
-      "&\n\017connection_uuid\030\001 \001(\0132\r.context.Uuid\"" +
-      "2\n\025ConnectionSettings_L0\022\031\n\021lsp_symbolic" +
-      "_name\030\001 \001(\t\"\236\001\n\025ConnectionSettings_L2\022\027\n" +
-      "\017src_mac_address\030\001 \001(\t\022\027\n\017dst_mac_addres" +
-      "s\030\002 \001(\t\022\022\n\nether_type\030\003 \001(\r\022\017\n\007vlan_id\030\004" +
-      " \001(\r\022\022\n\nmpls_label\030\005 \001(\r\022\032\n\022mpls_traffic" +
-      "_class\030\006 \001(\r\"t\n\025ConnectionSettings_L3\022\026\n" +
-      "\016src_ip_address\030\001 \001(\t\022\026\n\016dst_ip_address\030" +
-      "\002 \001(\t\022\014\n\004dscp\030\003 \001(\r\022\020\n\010protocol\030\004 \001(\r\022\013\n" +
-      "\003ttl\030\005 \001(\r\"[\n\025ConnectionSettings_L4\022\020\n\010s" +
-      "rc_port\030\001 \001(\r\022\020\n\010dst_port\030\002 \001(\r\022\021\n\ttcp_f" +
-      "lags\030\003 \001(\r\022\013\n\003ttl\030\004 \001(\r\"\304\001\n\022ConnectionSe" +
-      "ttings\022*\n\002l0\030\001 \001(\0132\036.context.ConnectionS" +
-      "ettings_L0\022*\n\002l2\030\002 \001(\0132\036.context.Connect" +
-      "ionSettings_L2\022*\n\002l3\030\003 \001(\0132\036.context.Con" +
-      "nectionSettings_L3\022*\n\002l4\030\004 \001(\0132\036.context" +
-      ".ConnectionSettings_L4\"\363\001\n\nConnection\022,\n" +
-      "\rconnection_id\030\001 \001(\0132\025.context.Connectio" +
-      "nId\022&\n\nservice_id\030\002 \001(\0132\022.context.Servic" +
-      "eId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023.co" +
-      "ntext.EndPointId\022+\n\017sub_service_ids\030\004 \003(" +
-      "\0132\022.context.ServiceId\022-\n\010settings\030\005 \001(\0132" +
-      "\033.context.ConnectionSettings\"A\n\020Connecti" +
-      "onIdList\022-\n\016connection_ids\030\001 \003(\0132\025.conte" +
-      "xt.ConnectionId\":\n\016ConnectionList\022(\n\013con" +
-      "nections\030\001 \003(\0132\023.context.Connection\"^\n\017C" +
-      "onnectionEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
-      "Event\022,\n\rconnection_id\030\002 \001(\0132\025.context.C" +
-      "onnectionId\"\202\001\n\nEndPointId\022(\n\013topology_i" +
-      "d\030\001 \001(\0132\023.context.TopologyId\022$\n\tdevice_i" +
-      "d\030\002 \001(\0132\021.context.DeviceId\022$\n\rendpoint_u" +
-      "uid\030\003 \001(\0132\r.context.Uuid\"\264\001\n\010EndPoint\022(\n" +
-      "\013endpoint_id\030\001 \001(\0132\023.context.EndPointId\022" +
-      "\025\n\rendpoint_type\030\002 \001(\t\0229\n\020kpi_sample_typ" +
-      "es\030\003 \003(\0162\037.kpi_sample_types.KpiSampleTyp" +
-      "e\022,\n\021endpoint_location\030\004 \001(\0132\021.context.L" +
-      "ocation\"A\n\021ConfigRule_Custom\022\024\n\014resource" +
-      "_key\030\001 \001(\t\022\026\n\016resource_value\030\002 \001(\t\"]\n\016Co" +
-      "nfigRule_ACL\022(\n\013endpoint_id\030\001 \001(\0132\023.cont" +
-      "ext.EndPointId\022!\n\010rule_set\030\002 \001(\0132\017.acl.A" +
-      "clRuleSet\"\234\001\n\nConfigRule\022)\n\006action\030\001 \001(\016" +
-      "2\031.context.ConfigActionEnum\022,\n\006custom\030\002 " +
-      "\001(\0132\032.context.ConfigRule_CustomH\000\022&\n\003acl" +
-      "\030\003 \001(\0132\027.context.ConfigRule_ACLH\000B\r\n\013con" +
-      "fig_rule\"F\n\021Constraint_Custom\022\027\n\017constra" +
-      "int_type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t" +
-      "\"E\n\023Constraint_Schedule\022\027\n\017start_timesta" +
-      "mp\030\001 \001(\002\022\025\n\rduration_days\030\002 \001(\002\"3\n\014GPS_P" +
-      "osition\022\020\n\010latitude\030\001 \001(\002\022\021\n\tlongitude\030\002" +
-      " \001(\002\"W\n\010Location\022\020\n\006region\030\001 \001(\tH\000\022-\n\014gp" +
-      "s_position\030\002 \001(\0132\025.context.GPS_PositionH" +
-      "\000B\n\n\010location\"l\n\033Constraint_EndPointLoca" +
-      "tion\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndP" +
-      "ointId\022#\n\010location\030\002 \001(\0132\021.context.Locat" +
-      "ion\"0\n\026Constraint_SLA_Latency\022\026\n\016e2e_lat" +
-      "ency_ms\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity" +
-      "\022\025\n\rcapacity_gbps\030\001 \001(\002\"M\n\033Constraint_SL" +
-      "A_Availability\022\032\n\022num_disjoint_paths\030\001 \001" +
-      "(\r\022\022\n\nall_active\030\002 \001(\010\"V\n\036Constraint_SLA" +
-      "_Isolation_level\0224\n\017isolation_level\030\001 \001(" +
-      "\0162\033.context.IsolationLevelEnum\"\263\003\n\nConst" +
-      "raint\022,\n\006custom\030\001 \001(\0132\032.context.Constrai" +
-      "nt_CustomH\000\0220\n\010schedule\030\002 \001(\0132\034.context." +
-      "Constraint_ScheduleH\000\022A\n\021endpoint_locati" +
-      "on\030\003 \001(\0132$.context.Constraint_EndPointLo" +
-      "cationH\000\0228\n\014sla_capacity\030\004 \001(\0132 .context" +
-      ".Constraint_SLA_CapacityH\000\0226\n\013sla_latenc" +
-      "y\030\005 \001(\0132\037.context.Constraint_SLA_Latency" +
-      "H\000\022@\n\020sla_availability\030\006 \001(\0132$.context.C" +
-      "onstraint_SLA_AvailabilityH\000\022@\n\rsla_isol" +
-      "ation\030\007 \001(\0132\'.context.Constraint_SLA_Iso" +
-      "lation_levelH\000B\014\n\nconstraint\"^\n\022TeraFlow" +
-      "Controller\022&\n\ncontext_id\030\001 \001(\0132\022.context" +
-      ".ContextId\022\022\n\nip_address\030\002 \001(\t\022\014\n\004port\030\003" +
-      " \001(\r\"U\n\024AuthenticationResult\022&\n\ncontext_" +
-      "id\030\001 \001(\0132\022.context.ContextId\022\025\n\rauthenti" +
-      "cated\030\002 \001(\010*j\n\rEventTypeEnum\022\027\n\023EVENTTYP" +
-      "E_UNDEFINED\020\000\022\024\n\020EVENTTYPE_CREATE\020\001\022\024\n\020E" +
-      "VENTTYPE_UPDATE\020\002\022\024\n\020EVENTTYPE_REMOVE\020\003*" +
-      "\305\001\n\020DeviceDriverEnum\022\032\n\026DEVICEDRIVER_UND" +
-      "EFINED\020\000\022\033\n\027DEVICEDRIVER_OPENCONFIG\020\001\022\036\n" +
-      "\032DEVICEDRIVER_TRANSPORT_API\020\002\022\023\n\017DEVICED" +
-      "RIVER_P4\020\003\022&\n\"DEVICEDRIVER_IETF_NETWORK_" +
-      "TOPOLOGY\020\004\022\033\n\027DEVICEDRIVER_ONF_TR_352\020\005*" +
-      "\217\001\n\033DeviceOperationalStatusEnum\022%\n!DEVIC" +
-      "EOPERATIONALSTATUS_UNDEFINED\020\000\022$\n DEVICE" +
-      "OPERATIONALSTATUS_DISABLED\020\001\022#\n\037DEVICEOP" +
-      "ERATIONALSTATUS_ENABLED\020\002*\201\001\n\017ServiceTyp" +
-      "eEnum\022\027\n\023SERVICETYPE_UNKNOWN\020\000\022\024\n\020SERVIC" +
-      "ETYPE_L3NM\020\001\022\024\n\020SERVICETYPE_L2NM\020\002\022)\n%SE" +
-      "RVICETYPE_TAPI_CONNECTIVITY_SERVICE\020\003*\250\001" +
-      "\n\021ServiceStatusEnum\022\033\n\027SERVICESTATUS_UND" +
-      "EFINED\020\000\022\031\n\025SERVICESTATUS_PLANNED\020\001\022\030\n\024S" +
-      "ERVICESTATUS_ACTIVE\020\002\022!\n\035SERVICESTATUS_P" +
-      "ENDING_REMOVAL\020\003\022\036\n\032SERVICESTATUS_SLA_VI" +
-      "OLATED\020\004*\251\001\n\017SliceStatusEnum\022\031\n\025SLICESTA" +
-      "TUS_UNDEFINED\020\000\022\027\n\023SLICESTATUS_PLANNED\020\001" +
-      "\022\024\n\020SLICESTATUS_INIT\020\002\022\026\n\022SLICESTATUS_AC" +
-      "TIVE\020\003\022\026\n\022SLICESTATUS_DEINIT\020\004\022\034\n\030SLICES" +
-      "TATUS_SLA_VIOLATED\020\005*]\n\020ConfigActionEnum" +
-      "\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022\024\n\020CONFIGAC" +
-      "TION_SET\020\001\022\027\n\023CONFIGACTION_DELETE\020\002*\203\002\n\022" +
-      "IsolationLevelEnum\022\020\n\014NO_ISOLATION\020\000\022\026\n\022" +
-      "PHYSICAL_ISOLATION\020\001\022\025\n\021LOGICAL_ISOLATIO" +
-      "N\020\002\022\025\n\021PROCESS_ISOLATION\020\003\022\035\n\031PHYSICAL_M" +
-      "EMORY_ISOLATION\020\004\022\036\n\032PHYSICAL_NETWORK_IS" +
-      "OLATION\020\005\022\036\n\032VIRTUAL_RESOURCE_ISOLATION\020" +
-      "\006\022\037\n\033NETWORK_FUNCTIONS_ISOLATION\020\007\022\025\n\021SE" +
-      "RVICE_ISOLATION\020\0102\357\022\n\016ContextService\022:\n\016" +
-      "ListContextIds\022\016.context.Empty\032\026.context" +
-      ".ContextIdList\"\000\0226\n\014ListContexts\022\016.conte" +
-      "xt.Empty\032\024.context.ContextList\"\000\0224\n\nGetC" +
-      "ontext\022\022.context.ContextId\032\020.context.Con" +
-      "text\"\000\0224\n\nSetContext\022\020.context.Context\032\022" +
-      ".context.ContextId\"\000\0225\n\rRemoveContext\022\022." +
-      "context.ContextId\032\016.context.Empty\"\000\022=\n\020G" +
-      "etContextEvents\022\016.context.Empty\032\025.contex" +
-      "t.ContextEvent\"\0000\001\022@\n\017ListTopologyIds\022\022." +
-      "context.ContextId\032\027.context.TopologyIdLi" +
-      "st\"\000\022=\n\016ListTopologies\022\022.context.Context" +
-      "Id\032\025.context.TopologyList\"\000\0227\n\013GetTopolo" +
-      "gy\022\023.context.TopologyId\032\021.context.Topolo" +
-      "gy\"\000\0227\n\013SetTopology\022\021.context.Topology\032\023" +
-      ".context.TopologyId\"\000\0227\n\016RemoveTopology\022" +
-      "\023.context.TopologyId\032\016.context.Empty\"\000\022?" +
-      "\n\021GetTopologyEvents\022\016.context.Empty\032\026.co" +
-      "ntext.TopologyEvent\"\0000\001\0228\n\rListDeviceIds" +
-      "\022\016.context.Empty\032\025.context.DeviceIdList\"" +
-      "\000\0224\n\013ListDevices\022\016.context.Empty\032\023.conte" +
-      "xt.DeviceList\"\000\0221\n\tGetDevice\022\021.context.D" +
-      "eviceId\032\017.context.Device\"\000\0221\n\tSetDevice\022" +
-      "\017.context.Device\032\021.context.DeviceId\"\000\0223\n" +
-      "\014RemoveDevice\022\021.context.DeviceId\032\016.conte" +
-      "xt.Empty\"\000\022;\n\017GetDeviceEvents\022\016.context." +
-      "Empty\032\024.context.DeviceEvent\"\0000\001\0224\n\013ListL" +
-      "inkIds\022\016.context.Empty\032\023.context.LinkIdL" +
-      "ist\"\000\0220\n\tListLinks\022\016.context.Empty\032\021.con" +
-      "text.LinkList\"\000\022+\n\007GetLink\022\017.context.Lin" +
-      "kId\032\r.context.Link\"\000\022+\n\007SetLink\022\r.contex" +
-      "t.Link\032\017.context.LinkId\"\000\022/\n\nRemoveLink\022" +
-      "\017.context.LinkId\032\016.context.Empty\"\000\0227\n\rGe" +
-      "tLinkEvents\022\016.context.Empty\032\022.context.Li" +
-      "nkEvent\"\0000\001\022>\n\016ListServiceIds\022\022.context." +
-      "ContextId\032\026.context.ServiceIdList\"\000\022:\n\014L" +
-      "istServices\022\022.context.ContextId\032\024.contex" +
-      "t.ServiceList\"\000\0224\n\nGetService\022\022.context." +
-      "ServiceId\032\020.context.Service\"\000\0224\n\nSetServ" +
-      "ice\022\020.context.Service\032\022.context.ServiceI" +
-      "d\"\000\0225\n\rRemoveService\022\022.context.ServiceId" +
-      "\032\016.context.Empty\"\000\022=\n\020GetServiceEvents\022\016" +
-      ".context.Empty\032\025.context.ServiceEvent\"\0000" +
-      "\001\022:\n\014ListSliceIds\022\022.context.ContextId\032\024." +
-      "context.SliceIdList\"\000\0226\n\nListSlices\022\022.co" +
-      "ntext.ContextId\032\022.context.SliceList\"\000\022.\n" +
-      "\010GetSlice\022\020.context.SliceId\032\016.context.Sl" +
-      "ice\"\000\022.\n\010SetSlice\022\016.context.Slice\032\020.cont" +
-      "ext.SliceId\"\000\0221\n\013RemoveSlice\022\020.context.S" +
-      "liceId\032\016.context.Empty\"\000\0229\n\016GetSliceEven" +
-      "ts\022\016.context.Empty\032\023.context.SliceEvent\"" +
-      "\0000\001\022D\n\021ListConnectionIds\022\022.context.Servi" +
-      "ceId\032\031.context.ConnectionIdList\"\000\022@\n\017Lis" +
-      "tConnections\022\022.context.ServiceId\032\027.conte" +
-      "xt.ConnectionList\"\000\022=\n\rGetConnection\022\025.c" +
-      "ontext.ConnectionId\032\023.context.Connection" +
-      "\"\000\022=\n\rSetConnection\022\023.context.Connection" +
-      "\032\025.context.ConnectionId\"\000\022;\n\020RemoveConne" +
-      "ction\022\025.context.ConnectionId\032\016.context.E" +
-      "mpty\"\000\022C\n\023GetConnectionEvents\022\016.context." +
-      "Empty\032\030.context.ConnectionEvent\"\0000\001b\006pro" +
-      "to3"
+      "us\030\006 \001(\0132\024.context.SliceStatus\022*\n\014slice_" +
+      "config\030\007 \001(\0132\024.context.SliceConfig\022(\n\013sl" +
+      "ice_owner\030\010 \001(\0132\023.context.SliceOwner\022%\n\t" +
+      "timestamp\030\t \001(\0132\022.context.Timestamp\"E\n\nS" +
+      "liceOwner\022!\n\nowner_uuid\030\001 \001(\0132\r.context." +
+      "Uuid\022\024\n\014owner_string\030\002 \001(\t\"=\n\013SliceStatu" +
+      "s\022.\n\014slice_status\030\001 \001(\0162\030.context.SliceS" +
+      "tatusEnum\"8\n\013SliceConfig\022)\n\014config_rules" +
+      "\030\001 \003(\0132\023.context.ConfigRule\"2\n\013SliceIdLi" +
+      "st\022#\n\tslice_ids\030\001 \003(\0132\020.context.SliceId\"" +
+      "+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.context.S" +
+      "lice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016.cont" +
+      "ext.Event\022\"\n\010slice_id\030\002 \001(\0132\020.context.Sl" +
+      "iceId\"6\n\014ConnectionId\022&\n\017connection_uuid" +
+      "\030\001 \001(\0132\r.context.Uuid\"2\n\025ConnectionSetti" +
+      "ngs_L0\022\031\n\021lsp_symbolic_name\030\001 \001(\t\"\236\001\n\025Co" +
+      "nnectionSettings_L2\022\027\n\017src_mac_address\030\001" +
+      " \001(\t\022\027\n\017dst_mac_address\030\002 \001(\t\022\022\n\nether_t" +
+      "ype\030\003 \001(\r\022\017\n\007vlan_id\030\004 \001(\r\022\022\n\nmpls_label" +
+      "\030\005 \001(\r\022\032\n\022mpls_traffic_class\030\006 \001(\r\"t\n\025Co" +
+      "nnectionSettings_L3\022\026\n\016src_ip_address\030\001 " +
+      "\001(\t\022\026\n\016dst_ip_address\030\002 \001(\t\022\014\n\004dscp\030\003 \001(" +
+      "\r\022\020\n\010protocol\030\004 \001(\r\022\013\n\003ttl\030\005 \001(\r\"[\n\025Conn" +
+      "ectionSettings_L4\022\020\n\010src_port\030\001 \001(\r\022\020\n\010d" +
+      "st_port\030\002 \001(\r\022\021\n\ttcp_flags\030\003 \001(\r\022\013\n\003ttl\030" +
+      "\004 \001(\r\"\304\001\n\022ConnectionSettings\022*\n\002l0\030\001 \001(\013" +
+      "2\036.context.ConnectionSettings_L0\022*\n\002l2\030\002" +
+      " \001(\0132\036.context.ConnectionSettings_L2\022*\n\002" +
+      "l3\030\003 \001(\0132\036.context.ConnectionSettings_L3" +
+      "\022*\n\002l4\030\004 \001(\0132\036.context.ConnectionSetting" +
+      "s_L4\"\363\001\n\nConnection\022,\n\rconnection_id\030\001 \001" +
+      "(\0132\025.context.ConnectionId\022&\n\nservice_id\030" +
+      "\002 \001(\0132\022.context.ServiceId\0223\n\026path_hops_e" +
+      "ndpoint_ids\030\003 \003(\0132\023.context.EndPointId\022+" +
+      "\n\017sub_service_ids\030\004 \003(\0132\022.context.Servic" +
+      "eId\022-\n\010settings\030\005 \001(\0132\033.context.Connecti" +
+      "onSettings\"A\n\020ConnectionIdList\022-\n\016connec" +
+      "tion_ids\030\001 \003(\0132\025.context.ConnectionId\":\n" +
+      "\016ConnectionList\022(\n\013connections\030\001 \003(\0132\023.c" +
+      "ontext.Connection\"^\n\017ConnectionEvent\022\035\n\005" +
+      "event\030\001 \001(\0132\016.context.Event\022,\n\rconnectio" +
+      "n_id\030\002 \001(\0132\025.context.ConnectionId\"\202\001\n\nEn" +
+      "dPointId\022(\n\013topology_id\030\001 \001(\0132\023.context." +
+      "TopologyId\022$\n\tdevice_id\030\002 \001(\0132\021.context." +
+      "DeviceId\022$\n\rendpoint_uuid\030\003 \001(\0132\r.contex" +
+      "t.Uuid\"\264\001\n\010EndPoint\022(\n\013endpoint_id\030\001 \001(\013" +
+      "2\023.context.EndPointId\022\025\n\rendpoint_type\030\002" +
+      " \001(\t\0229\n\020kpi_sample_types\030\003 \003(\0162\037.kpi_sam" +
+      "ple_types.KpiSampleType\022,\n\021endpoint_loca" +
+      "tion\030\004 \001(\0132\021.context.Location\"A\n\021ConfigR" +
+      "ule_Custom\022\024\n\014resource_key\030\001 \001(\t\022\026\n\016reso" +
+      "urce_value\030\002 \001(\t\"]\n\016ConfigRule_ACL\022(\n\013en" +
+      "dpoint_id\030\001 \001(\0132\023.context.EndPointId\022!\n\010" +
+      "rule_set\030\002 \001(\0132\017.acl.AclRuleSet\"\234\001\n\nConf" +
+      "igRule\022)\n\006action\030\001 \001(\0162\031.context.ConfigA" +
+      "ctionEnum\022,\n\006custom\030\002 \001(\0132\032.context.Conf" +
+      "igRule_CustomH\000\022&\n\003acl\030\003 \001(\0132\027.context.C" +
+      "onfigRule_ACLH\000B\r\n\013config_rule\"F\n\021Constr" +
+      "aint_Custom\022\027\n\017constraint_type\030\001 \001(\t\022\030\n\020" +
+      "constraint_value\030\002 \001(\t\"E\n\023Constraint_Sch" +
+      "edule\022\027\n\017start_timestamp\030\001 \001(\002\022\025\n\rdurati" +
+      "on_days\030\002 \001(\002\"3\n\014GPS_Position\022\020\n\010latitud" +
+      "e\030\001 \001(\002\022\021\n\tlongitude\030\002 \001(\002\"W\n\010Location\022\020" +
+      "\n\006region\030\001 \001(\tH\000\022-\n\014gps_position\030\002 \001(\0132\025" +
+      ".context.GPS_PositionH\000B\n\n\010location\"l\n\033C" +
+      "onstraint_EndPointLocation\022(\n\013endpoint_i" +
+      "d\030\001 \001(\0132\023.context.EndPointId\022#\n\010location" +
+      "\030\002 \001(\0132\021.context.Location\"Y\n\033Constraint_" +
+      "EndPointPriority\022(\n\013endpoint_id\030\001 \001(\0132\023." +
+      "context.EndPointId\022\020\n\010priority\030\002 \001(\r\"0\n\026" +
+      "Constraint_SLA_Latency\022\026\n\016e2e_latency_ms" +
+      "\030\001 \001(\002\"0\n\027Constraint_SLA_Capacity\022\025\n\rcap" +
+      "acity_gbps\030\001 \001(\002\"M\n\033Constraint_SLA_Avail" +
+      "ability\022\032\n\022num_disjoint_paths\030\001 \001(\r\022\022\n\na" +
+      "ll_active\030\002 \001(\010\"V\n\036Constraint_SLA_Isolat" +
+      "ion_level\0224\n\017isolation_level\030\001 \003(\0162\033.con" +
+      "text.IsolationLevelEnum\"\366\003\n\nConstraint\022," +
+      "\n\006custom\030\001 \001(\0132\032.context.Constraint_Cust" +
+      "omH\000\0220\n\010schedule\030\002 \001(\0132\034.context.Constra" +
+      "int_ScheduleH\000\022A\n\021endpoint_location\030\003 \001(" +
+      "\0132$.context.Constraint_EndPointLocationH" +
+      "\000\022A\n\021endpoint_priority\030\004 \001(\0132$.context.C" +
+      "onstraint_EndPointPriorityH\000\0228\n\014sla_capa" +
+      "city\030\005 \001(\0132 .context.Constraint_SLA_Capa" +
+      "cityH\000\0226\n\013sla_latency\030\006 \001(\0132\037.context.Co" +
+      "nstraint_SLA_LatencyH\000\022@\n\020sla_availabili" +
+      "ty\030\007 \001(\0132$.context.Constraint_SLA_Availa" +
+      "bilityH\000\022@\n\rsla_isolation\030\010 \001(\0132\'.contex" +
+      "t.Constraint_SLA_Isolation_levelH\000B\014\n\nco" +
+      "nstraint\"^\n\022TeraFlowController\022&\n\ncontex" +
+      "t_id\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_add" +
+      "ress\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024Authenticati" +
+      "onResult\022&\n\ncontext_id\030\001 \001(\0132\022.context.C" +
+      "ontextId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEvent" +
+      "TypeEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVE" +
+      "NTTYPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n" +
+      "\020EVENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum" +
+      "\022\032\n\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDR" +
+      "IVER_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSP" +
+      "ORT_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICE" +
+      "DRIVER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICE" +
+      "DRIVER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationa" +
+      "lStatusEnum\022%\n!DEVICEOPERATIONALSTATUS_U" +
+      "NDEFINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DI" +
+      "SABLED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENAB" +
+      "LED\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE" +
+      "_UNKNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERV" +
+      "ICETYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNE" +
+      "CTIVITY_SERVICE\020\003*\250\001\n\021ServiceStatusEnum\022" +
+      "\033\n\027SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICES" +
+      "TATUS_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020" +
+      "\002\022!\n\035SERVICESTATUS_PENDING_REMOVAL\020\003\022\036\n\032" +
+      "SERVICESTATUS_SLA_VIOLATED\020\004*\251\001\n\017SliceSt" +
+      "atusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000\022\027\n\023S" +
+      "LICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS_INIT" +
+      "\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICESTATU" +
+      "S_DEINIT\020\004\022\034\n\030SLICESTATUS_SLA_VIOLATED\020\005" +
+      "*]\n\020ConfigActionEnum\022\032\n\026CONFIGACTION_UND" +
+      "EFINED\020\000\022\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIG" +
+      "ACTION_DELETE\020\002*\203\002\n\022IsolationLevelEnum\022\020" +
+      "\n\014NO_ISOLATION\020\000\022\026\n\022PHYSICAL_ISOLATION\020\001" +
+      "\022\025\n\021LOGICAL_ISOLATION\020\002\022\025\n\021PROCESS_ISOLA" +
+      "TION\020\003\022\035\n\031PHYSICAL_MEMORY_ISOLATION\020\004\022\036\n" +
+      "\032PHYSICAL_NETWORK_ISOLATION\020\005\022\036\n\032VIRTUAL" +
+      "_RESOURCE_ISOLATION\020\006\022\037\n\033NETWORK_FUNCTIO" +
+      "NS_ISOLATION\020\007\022\025\n\021SERVICE_ISOLATION\020\0102\357\022" +
+      "\n\016ContextService\022:\n\016ListContextIds\022\016.con" +
+      "text.Empty\032\026.context.ContextIdList\"\000\0226\n\014" +
+      "ListContexts\022\016.context.Empty\032\024.context.C" +
+      "ontextList\"\000\0224\n\nGetContext\022\022.context.Con" +
+      "textId\032\020.context.Context\"\000\0224\n\nSetContext" +
+      "\022\020.context.Context\032\022.context.ContextId\"\000" +
+      "\0225\n\rRemoveContext\022\022.context.ContextId\032\016." +
+      "context.Empty\"\000\022=\n\020GetContextEvents\022\016.co" +
+      "ntext.Empty\032\025.context.ContextEvent\"\0000\001\022@" +
+      "\n\017ListTopologyIds\022\022.context.ContextId\032\027." +
+      "context.TopologyIdList\"\000\022=\n\016ListTopologi" +
+      "es\022\022.context.ContextId\032\025.context.Topolog" +
+      "yList\"\000\0227\n\013GetTopology\022\023.context.Topolog" +
+      "yId\032\021.context.Topology\"\000\0227\n\013SetTopology\022" +
+      "\021.context.Topology\032\023.context.TopologyId\"" +
+      "\000\0227\n\016RemoveTopology\022\023.context.TopologyId" +
+      "\032\016.context.Empty\"\000\022?\n\021GetTopologyEvents\022" +
+      "\016.context.Empty\032\026.context.TopologyEvent\"" +
+      "\0000\001\0228\n\rListDeviceIds\022\016.context.Empty\032\025.c" +
+      "ontext.DeviceIdList\"\000\0224\n\013ListDevices\022\016.c" +
+      "ontext.Empty\032\023.context.DeviceList\"\000\0221\n\tG" +
+      "etDevice\022\021.context.DeviceId\032\017.context.De" +
+      "vice\"\000\0221\n\tSetDevice\022\017.context.Device\032\021.c" +
+      "ontext.DeviceId\"\000\0223\n\014RemoveDevice\022\021.cont" +
+      "ext.DeviceId\032\016.context.Empty\"\000\022;\n\017GetDev" +
+      "iceEvents\022\016.context.Empty\032\024.context.Devi" +
+      "ceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.context.Emp" +
+      "ty\032\023.context.LinkIdList\"\000\0220\n\tListLinks\022\016" +
+      ".context.Empty\032\021.context.LinkList\"\000\022+\n\007G" +
+      "etLink\022\017.context.LinkId\032\r.context.Link\"\000" +
+      "\022+\n\007SetLink\022\r.context.Link\032\017.context.Lin" +
+      "kId\"\000\022/\n\nRemoveLink\022\017.context.LinkId\032\016.c" +
+      "ontext.Empty\"\000\0227\n\rGetLinkEvents\022\016.contex" +
+      "t.Empty\032\022.context.LinkEvent\"\0000\001\022>\n\016ListS" +
+      "erviceIds\022\022.context.ContextId\032\026.context." +
+      "ServiceIdList\"\000\022:\n\014ListServices\022\022.contex" +
+      "t.ContextId\032\024.context.ServiceList\"\000\0224\n\nG" +
+      "etService\022\022.context.ServiceId\032\020.context." +
+      "Service\"\000\0224\n\nSetService\022\020.context.Servic" +
+      "e\032\022.context.ServiceId\"\000\0225\n\rRemoveService" +
+      "\022\022.context.ServiceId\032\016.context.Empty\"\000\022=" +
+      "\n\020GetServiceEvents\022\016.context.Empty\032\025.con" +
+      "text.ServiceEvent\"\0000\001\022:\n\014ListSliceIds\022\022." +
+      "context.ContextId\032\024.context.SliceIdList\"" +
+      "\000\0226\n\nListSlices\022\022.context.ContextId\032\022.co" +
+      "ntext.SliceList\"\000\022.\n\010GetSlice\022\020.context." +
+      "SliceId\032\016.context.Slice\"\000\022.\n\010SetSlice\022\016." +
+      "context.Slice\032\020.context.SliceId\"\000\0221\n\013Rem" +
+      "oveSlice\022\020.context.SliceId\032\016.context.Emp" +
+      "ty\"\000\0229\n\016GetSliceEvents\022\016.context.Empty\032\023" +
+      ".context.SliceEvent\"\0000\001\022D\n\021ListConnectio" +
+      "nIds\022\022.context.ServiceId\032\031.context.Conne" +
+      "ctionIdList\"\000\022@\n\017ListConnections\022\022.conte" +
+      "xt.ServiceId\032\027.context.ConnectionList\"\000\022" +
+      "=\n\rGetConnection\022\025.context.ConnectionId\032" +
+      "\023.context.Connection\"\000\022=\n\rSetConnection\022" +
+      "\023.context.Connection\032\025.context.Connectio" +
+      "nId\"\000\022;\n\020RemoveConnection\022\025.context.Conn" +
+      "ectionId\032\016.context.Empty\"\000\022C\n\023GetConnect" +
+      "ionEvents\022\016.context.Empty\032\030.context.Conn" +
+      "ectionEvent\"\0000\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -60291,7 +62415,7 @@ public final class ContextOuterClass {
     internal_static_context_Slice_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Slice_descriptor,
-        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceOwner", "Timestamp", });
+        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceConfig", "SliceOwner", "Timestamp", });
     internal_static_context_SliceOwner_descriptor =
       getDescriptor().getMessageTypes().get(34);
     internal_static_context_SliceOwner_fieldAccessorTable = new
@@ -60304,182 +62428,194 @@ public final class ContextOuterClass {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceStatus_descriptor,
         new java.lang.String[] { "SliceStatus", });
-    internal_static_context_SliceIdList_descriptor =
+    internal_static_context_SliceConfig_descriptor =
       getDescriptor().getMessageTypes().get(36);
+    internal_static_context_SliceConfig_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceConfig_descriptor,
+        new java.lang.String[] { "ConfigRules", });
+    internal_static_context_SliceIdList_descriptor =
+      getDescriptor().getMessageTypes().get(37);
     internal_static_context_SliceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceIdList_descriptor,
         new java.lang.String[] { "SliceIds", });
     internal_static_context_SliceList_descriptor =
-      getDescriptor().getMessageTypes().get(37);
+      getDescriptor().getMessageTypes().get(38);
     internal_static_context_SliceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceList_descriptor,
         new java.lang.String[] { "Slices", });
     internal_static_context_SliceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(38);
+      getDescriptor().getMessageTypes().get(39);
     internal_static_context_SliceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceEvent_descriptor,
         new java.lang.String[] { "Event", "SliceId", });
     internal_static_context_ConnectionId_descriptor =
-      getDescriptor().getMessageTypes().get(39);
+      getDescriptor().getMessageTypes().get(40);
     internal_static_context_ConnectionId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionId_descriptor,
         new java.lang.String[] { "ConnectionUuid", });
     internal_static_context_ConnectionSettings_L0_descriptor =
-      getDescriptor().getMessageTypes().get(40);
+      getDescriptor().getMessageTypes().get(41);
     internal_static_context_ConnectionSettings_L0_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L0_descriptor,
         new java.lang.String[] { "LspSymbolicName", });
     internal_static_context_ConnectionSettings_L2_descriptor =
-      getDescriptor().getMessageTypes().get(41);
+      getDescriptor().getMessageTypes().get(42);
     internal_static_context_ConnectionSettings_L2_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L2_descriptor,
         new java.lang.String[] { "SrcMacAddress", "DstMacAddress", "EtherType", "VlanId", "MplsLabel", "MplsTrafficClass", });
     internal_static_context_ConnectionSettings_L3_descriptor =
-      getDescriptor().getMessageTypes().get(42);
+      getDescriptor().getMessageTypes().get(43);
     internal_static_context_ConnectionSettings_L3_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L3_descriptor,
         new java.lang.String[] { "SrcIpAddress", "DstIpAddress", "Dscp", "Protocol", "Ttl", });
     internal_static_context_ConnectionSettings_L4_descriptor =
-      getDescriptor().getMessageTypes().get(43);
+      getDescriptor().getMessageTypes().get(44);
     internal_static_context_ConnectionSettings_L4_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_L4_descriptor,
         new java.lang.String[] { "SrcPort", "DstPort", "TcpFlags", "Ttl", });
     internal_static_context_ConnectionSettings_descriptor =
-      getDescriptor().getMessageTypes().get(44);
+      getDescriptor().getMessageTypes().get(45);
     internal_static_context_ConnectionSettings_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionSettings_descriptor,
         new java.lang.String[] { "L0", "L2", "L3", "L4", });
     internal_static_context_Connection_descriptor =
-      getDescriptor().getMessageTypes().get(45);
+      getDescriptor().getMessageTypes().get(46);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
         new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", "Settings", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(46);
+      getDescriptor().getMessageTypes().get(47);
     internal_static_context_ConnectionIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionIdList_descriptor,
         new java.lang.String[] { "ConnectionIds", });
     internal_static_context_ConnectionList_descriptor =
-      getDescriptor().getMessageTypes().get(47);
+      getDescriptor().getMessageTypes().get(48);
     internal_static_context_ConnectionList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionList_descriptor,
         new java.lang.String[] { "Connections", });
     internal_static_context_ConnectionEvent_descriptor =
-      getDescriptor().getMessageTypes().get(48);
+      getDescriptor().getMessageTypes().get(49);
     internal_static_context_ConnectionEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConnectionEvent_descriptor,
         new java.lang.String[] { "Event", "ConnectionId", });
     internal_static_context_EndPointId_descriptor =
-      getDescriptor().getMessageTypes().get(49);
+      getDescriptor().getMessageTypes().get(50);
     internal_static_context_EndPointId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPointId_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceId", "EndpointUuid", });
     internal_static_context_EndPoint_descriptor =
-      getDescriptor().getMessageTypes().get(50);
+      getDescriptor().getMessageTypes().get(51);
     internal_static_context_EndPoint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPoint_descriptor,
         new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
     internal_static_context_ConfigRule_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(51);
+      getDescriptor().getMessageTypes().get(52);
     internal_static_context_ConfigRule_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_Custom_descriptor,
         new java.lang.String[] { "ResourceKey", "ResourceValue", });
     internal_static_context_ConfigRule_ACL_descriptor =
-      getDescriptor().getMessageTypes().get(52);
+      getDescriptor().getMessageTypes().get(53);
     internal_static_context_ConfigRule_ACL_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_ACL_descriptor,
         new java.lang.String[] { "EndpointId", "RuleSet", });
     internal_static_context_ConfigRule_descriptor =
-      getDescriptor().getMessageTypes().get(53);
+      getDescriptor().getMessageTypes().get(54);
     internal_static_context_ConfigRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_descriptor,
         new java.lang.String[] { "Action", "Custom", "Acl", "ConfigRule", });
     internal_static_context_Constraint_Custom_descriptor =
-      getDescriptor().getMessageTypes().get(54);
+      getDescriptor().getMessageTypes().get(55);
     internal_static_context_Constraint_Custom_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Custom_descriptor,
         new java.lang.String[] { "ConstraintType", "ConstraintValue", });
     internal_static_context_Constraint_Schedule_descriptor =
-      getDescriptor().getMessageTypes().get(55);
+      getDescriptor().getMessageTypes().get(56);
     internal_static_context_Constraint_Schedule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_Schedule_descriptor,
         new java.lang.String[] { "StartTimestamp", "DurationDays", });
     internal_static_context_GPS_Position_descriptor =
-      getDescriptor().getMessageTypes().get(56);
+      getDescriptor().getMessageTypes().get(57);
     internal_static_context_GPS_Position_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_GPS_Position_descriptor,
         new java.lang.String[] { "Latitude", "Longitude", });
     internal_static_context_Location_descriptor =
-      getDescriptor().getMessageTypes().get(57);
+      getDescriptor().getMessageTypes().get(58);
     internal_static_context_Location_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Location_descriptor,
         new java.lang.String[] { "Region", "GpsPosition", "Location", });
     internal_static_context_Constraint_EndPointLocation_descriptor =
-      getDescriptor().getMessageTypes().get(58);
+      getDescriptor().getMessageTypes().get(59);
     internal_static_context_Constraint_EndPointLocation_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_EndPointLocation_descriptor,
         new java.lang.String[] { "EndpointId", "Location", });
+    internal_static_context_Constraint_EndPointPriority_descriptor =
+      getDescriptor().getMessageTypes().get(60);
+    internal_static_context_Constraint_EndPointPriority_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_EndPointPriority_descriptor,
+        new java.lang.String[] { "EndpointId", "Priority", });
     internal_static_context_Constraint_SLA_Latency_descriptor =
-      getDescriptor().getMessageTypes().get(59);
+      getDescriptor().getMessageTypes().get(61);
     internal_static_context_Constraint_SLA_Latency_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Latency_descriptor,
         new java.lang.String[] { "E2ELatencyMs", });
     internal_static_context_Constraint_SLA_Capacity_descriptor =
-      getDescriptor().getMessageTypes().get(60);
+      getDescriptor().getMessageTypes().get(62);
     internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Capacity_descriptor,
         new java.lang.String[] { "CapacityGbps", });
     internal_static_context_Constraint_SLA_Availability_descriptor =
-      getDescriptor().getMessageTypes().get(61);
+      getDescriptor().getMessageTypes().get(63);
     internal_static_context_Constraint_SLA_Availability_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Availability_descriptor,
         new java.lang.String[] { "NumDisjointPaths", "AllActive", });
     internal_static_context_Constraint_SLA_Isolation_level_descriptor =
-      getDescriptor().getMessageTypes().get(62);
+      getDescriptor().getMessageTypes().get(64);
     internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_SLA_Isolation_level_descriptor,
         new java.lang.String[] { "IsolationLevel", });
     internal_static_context_Constraint_descriptor =
-      getDescriptor().getMessageTypes().get(63);
+      getDescriptor().getMessageTypes().get(65);
     internal_static_context_Constraint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
+        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "EndpointPriority", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
     internal_static_context_TeraFlowController_descriptor =
-      getDescriptor().getMessageTypes().get(64);
+      getDescriptor().getMessageTypes().get(66);
     internal_static_context_TeraFlowController_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TeraFlowController_descriptor,
         new java.lang.String[] { "ContextId", "IpAddress", "Port", });
     internal_static_context_AuthenticationResult_descriptor =
-      getDescriptor().getMessageTypes().get(65);
+      getDescriptor().getMessageTypes().get(67);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
new file mode 100644
index 0000000000000000000000000000000000000000..455aef779d7a0c29a4654b895e6c9652ca416e14
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
@@ -0,0 +1,49 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: context_policy.proto
+
+package context_policy;
+
+public final class ContextPolicy {
+  private ContextPolicy() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\024context_policy.proto\022\016context_policy\032\r" +
+      "context.proto\032\014policy.proto2\324\002\n\024ContextP" +
+      "olicyService\022?\n\021ListPolicyRuleIds\022\016.cont" +
+      "ext.Empty\032\030.policy.PolicyRuleIdList\"\000\022;\n" +
+      "\017ListPolicyRules\022\016.context.Empty\032\026.polic" +
+      "y.PolicyRuleList\"\000\022@\n\rGetPolicyRule\022\024.po" +
+      "licy.PolicyRuleId\032\027.policy.PolicyRuleBas" +
+      "ic\"\000\022@\n\rSetPolicyRule\022\027.policy.PolicyRul" +
+      "eBasic\032\024.policy.PolicyRuleId\"\000\022:\n\020Remove" +
+      "PolicyRule\022\024.policy.PolicyRuleId\032\016.conte" +
+      "xt.Empty\"\000b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          context.ContextOuterClass.getDescriptor(),
+          policy.Policy.getDescriptor(),
+        });
+    context.ContextOuterClass.getDescriptor();
+    policy.Policy.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ace0b9dcf220b80359a47781c1f8cdc1d9984ea
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
@@ -0,0 +1,24 @@
+package context_policy;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context_policy.proto")
+public interface ContextPolicyService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request);
+    
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..a08761c67c484d5b35d22253364ccaf6beaa266c
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
@@ -0,0 +1,59 @@
+package context_policy;
+
+import io.grpc.BindableService;
+import io.quarkus.grpc.GrpcService;
+import io.quarkus.grpc.runtime.MutinyBean;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context_policy.proto")
+public class ContextPolicyServiceBean extends MutinyContextPolicyServiceGrpc.ContextPolicyServiceImplBase implements BindableService, MutinyBean {
+
+    private final ContextPolicyService delegate;
+
+    ContextPolicyServiceBean(@GrpcService ContextPolicyService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listPolicyRuleIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listPolicyRules(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+       try {
+         return delegate.getPolicyRule(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+       try {
+         return delegate.setPolicyRule(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+       try {
+         return delegate.removePolicyRule(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..98e57eeff41027e644057dced751b78837fd5fe3
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
@@ -0,0 +1,44 @@
+package context_policy;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context_policy.proto")
+public class ContextPolicyServiceClient implements ContextPolicyService, MutinyClient<MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub> {
+
+    private final MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub stub;
+
+    public ContextPolicyServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub, MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyContextPolicyServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+       return stub.listPolicyRuleIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+       return stub.listPolicyRules(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+       return stub.getPolicyRule(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+       return stub.setPolicyRule(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+       return stub.removePolicyRule(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa859ecff706640410d852ec129c359cb38be990
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
@@ -0,0 +1,586 @@
+package context_policy;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ * <pre>
+ * created as a separate service to prevent import-loops in context and policy
+ * </pre>
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: context_policy.proto")
+public final class ContextPolicyServiceGrpc {
+
+  private ContextPolicyServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "context_policy.ContextPolicyService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleIdList> getListPolicyRuleIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListPolicyRuleIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = policy.Policy.PolicyRuleIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleIdList> getListPolicyRuleIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleIdList> getListPolicyRuleIdsMethod;
+    if ((getListPolicyRuleIdsMethod = ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getListPolicyRuleIdsMethod = ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod) == null) {
+          ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod = getListPolicyRuleIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListPolicyRuleIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("ListPolicyRuleIds"))
+              .build();
+        }
+      }
+    }
+    return getListPolicyRuleIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleList> getListPolicyRulesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListPolicyRules",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = policy.Policy.PolicyRuleList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleList> getListPolicyRulesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleList> getListPolicyRulesMethod;
+    if ((getListPolicyRulesMethod = ContextPolicyServiceGrpc.getListPolicyRulesMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getListPolicyRulesMethod = ContextPolicyServiceGrpc.getListPolicyRulesMethod) == null) {
+          ContextPolicyServiceGrpc.getListPolicyRulesMethod = getListPolicyRulesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListPolicyRules"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("ListPolicyRules"))
+              .build();
+        }
+      }
+    }
+    return getListPolicyRulesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      policy.Policy.PolicyRuleBasic> getGetPolicyRuleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetPolicyRule",
+      requestType = policy.Policy.PolicyRuleId.class,
+      responseType = policy.Policy.PolicyRuleBasic.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      policy.Policy.PolicyRuleBasic> getGetPolicyRuleMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleBasic> getGetPolicyRuleMethod;
+    if ((getGetPolicyRuleMethod = ContextPolicyServiceGrpc.getGetPolicyRuleMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getGetPolicyRuleMethod = ContextPolicyServiceGrpc.getGetPolicyRuleMethod) == null) {
+          ContextPolicyServiceGrpc.getGetPolicyRuleMethod = getGetPolicyRuleMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleBasic>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetPolicyRule"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleBasic.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("GetPolicyRule"))
+              .build();
+        }
+      }
+    }
+    return getGetPolicyRuleMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleBasic,
+      policy.Policy.PolicyRuleId> getSetPolicyRuleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetPolicyRule",
+      requestType = policy.Policy.PolicyRuleBasic.class,
+      responseType = policy.Policy.PolicyRuleId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleBasic,
+      policy.Policy.PolicyRuleId> getSetPolicyRuleMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleBasic, policy.Policy.PolicyRuleId> getSetPolicyRuleMethod;
+    if ((getSetPolicyRuleMethod = ContextPolicyServiceGrpc.getSetPolicyRuleMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getSetPolicyRuleMethod = ContextPolicyServiceGrpc.getSetPolicyRuleMethod) == null) {
+          ContextPolicyServiceGrpc.getSetPolicyRuleMethod = getSetPolicyRuleMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleBasic, policy.Policy.PolicyRuleId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetPolicyRule"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleBasic.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("SetPolicyRule"))
+              .build();
+        }
+      }
+    }
+    return getSetPolicyRuleMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      context.ContextOuterClass.Empty> getRemovePolicyRuleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemovePolicyRule",
+      requestType = policy.Policy.PolicyRuleId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      context.ContextOuterClass.Empty> getRemovePolicyRuleMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId, context.ContextOuterClass.Empty> getRemovePolicyRuleMethod;
+    if ((getRemovePolicyRuleMethod = ContextPolicyServiceGrpc.getRemovePolicyRuleMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getRemovePolicyRuleMethod = ContextPolicyServiceGrpc.getRemovePolicyRuleMethod) == null) {
+          ContextPolicyServiceGrpc.getRemovePolicyRuleMethod = getRemovePolicyRuleMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemovePolicyRule"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("RemovePolicyRule"))
+              .build();
+        }
+      }
+    }
+    return getRemovePolicyRuleMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static ContextPolicyServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceStub>() {
+        @java.lang.Override
+        public ContextPolicyServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextPolicyServiceStub(channel, callOptions);
+        }
+      };
+    return ContextPolicyServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static ContextPolicyServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceBlockingStub>() {
+        @java.lang.Override
+        public ContextPolicyServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextPolicyServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return ContextPolicyServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static ContextPolicyServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceFutureStub>() {
+        @java.lang.Override
+        public ContextPolicyServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextPolicyServiceFutureStub(channel, callOptions);
+        }
+      };
+    return ContextPolicyServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static abstract class ContextPolicyServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void listPolicyRuleIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListPolicyRuleIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listPolicyRules(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListPolicyRulesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetPolicyRuleMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setPolicyRule(policy.Policy.PolicyRuleBasic request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetPolicyRuleMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removePolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemovePolicyRuleMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getListPolicyRuleIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                policy.Policy.PolicyRuleIdList>(
+                  this, METHODID_LIST_POLICY_RULE_IDS)))
+          .addMethod(
+            getListPolicyRulesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                policy.Policy.PolicyRuleList>(
+                  this, METHODID_LIST_POLICY_RULES)))
+          .addMethod(
+            getGetPolicyRuleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleId,
+                policy.Policy.PolicyRuleBasic>(
+                  this, METHODID_GET_POLICY_RULE)))
+          .addMethod(
+            getSetPolicyRuleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleBasic,
+                policy.Policy.PolicyRuleId>(
+                  this, METHODID_SET_POLICY_RULE)))
+          .addMethod(
+            getRemovePolicyRuleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_POLICY_RULE)))
+          .build();
+    }
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static final class ContextPolicyServiceStub extends io.grpc.stub.AbstractAsyncStub<ContextPolicyServiceStub> {
+    private ContextPolicyServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextPolicyServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextPolicyServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void listPolicyRuleIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListPolicyRuleIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listPolicyRules(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListPolicyRulesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetPolicyRuleMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setPolicyRule(policy.Policy.PolicyRuleBasic request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetPolicyRuleMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removePolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemovePolicyRuleMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static final class ContextPolicyServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<ContextPolicyServiceBlockingStub> {
+    private ContextPolicyServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextPolicyServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextPolicyServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleIdList listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListPolicyRuleIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleList listPolicyRules(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListPolicyRulesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleBasic getPolicyRule(policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetPolicyRuleMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleId setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetPolicyRuleMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removePolicyRule(policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemovePolicyRuleMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static final class ContextPolicyServiceFutureStub extends io.grpc.stub.AbstractFutureStub<ContextPolicyServiceFutureStub> {
+    private ContextPolicyServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextPolicyServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextPolicyServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListPolicyRuleIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleList> listPolicyRules(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListPolicyRulesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleBasic> getPolicyRule(
+        policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetPolicyRuleMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleId> setPolicyRule(
+        policy.Policy.PolicyRuleBasic request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetPolicyRuleMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removePolicyRule(
+        policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemovePolicyRuleMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_LIST_POLICY_RULE_IDS = 0;
+  private static final int METHODID_LIST_POLICY_RULES = 1;
+  private static final int METHODID_GET_POLICY_RULE = 2;
+  private static final int METHODID_SET_POLICY_RULE = 3;
+  private static final int METHODID_REMOVE_POLICY_RULE = 4;
+
+  private static final class MethodHandlers<Req, Resp> implements
+      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final ContextPolicyServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(ContextPolicyServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_LIST_POLICY_RULE_IDS:
+          serviceImpl.listPolicyRuleIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList>) responseObserver);
+          break;
+        case METHODID_LIST_POLICY_RULES:
+          serviceImpl.listPolicyRules((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver);
+          break;
+        case METHODID_GET_POLICY_RULE:
+          serviceImpl.getPolicyRule((policy.Policy.PolicyRuleId) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic>) responseObserver);
+          break;
+        case METHODID_SET_POLICY_RULE:
+          serviceImpl.setPolicyRule((policy.Policy.PolicyRuleBasic) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId>) responseObserver);
+          break;
+        case METHODID_REMOVE_POLICY_RULE:
+          serviceImpl.removePolicyRule((policy.Policy.PolicyRuleId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  private static abstract class ContextPolicyServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    ContextPolicyServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return context_policy.ContextPolicy.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("ContextPolicyService");
+    }
+  }
+
+  private static final class ContextPolicyServiceFileDescriptorSupplier
+      extends ContextPolicyServiceBaseDescriptorSupplier {
+    ContextPolicyServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class ContextPolicyServiceMethodDescriptorSupplier
+      extends ContextPolicyServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    ContextPolicyServiceMethodDescriptorSupplier(String methodName) {
+      this.methodName = methodName;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+      return getServiceDescriptor().findMethodByName(methodName);
+    }
+  }
+
+  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    io.grpc.ServiceDescriptor result = serviceDescriptor;
+    if (result == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new ContextPolicyServiceFileDescriptorSupplier())
+              .addMethod(getListPolicyRuleIdsMethod())
+              .addMethod(getListPolicyRulesMethod())
+              .addMethod(getGetPolicyRuleMethod())
+              .addMethod(getSetPolicyRuleMethod())
+              .addMethod(getRemovePolicyRuleMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9ff3b64cb48b70406954b72ace59035283ba701
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
@@ -0,0 +1,224 @@
+package context_policy;
+
+import static context_policy.ContextPolicyServiceGrpc.getServiceDescriptor;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context_policy.proto")
+public final class MutinyContextPolicyServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyContextPolicyServiceGrpc() {}
+
+    public static MutinyContextPolicyServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyContextPolicyServiceStub(channel);
+    }
+
+    /**
+     * <pre>
+     *  created as a separate service to prevent import-loops in context and policy
+     * </pre>
+     */
+    public static final class MutinyContextPolicyServiceStub extends io.grpc.stub.AbstractStub<MutinyContextPolicyServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private ContextPolicyServiceGrpc.ContextPolicyServiceStub delegateStub;
+
+        private MutinyContextPolicyServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = ContextPolicyServiceGrpc.newStub(channel);
+        }
+
+        private MutinyContextPolicyServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = ContextPolicyServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyContextPolicyServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyContextPolicyServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listPolicyRuleIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listPolicyRules);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getPolicyRule);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setPolicyRule);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removePolicyRule);
+        }
+
+    }
+
+    /**
+     * <pre>
+     *  created as a separate service to prevent import-loops in context and policy
+     * </pre>
+     */
+    public static abstract class ContextPolicyServiceImplBase implements io.grpc.BindableService {
+
+        private String compression;
+        /**
+        * Set whether the server will try to use a compressed response.
+        *
+        * @param compression the compression, e.g {@code gzip}
+        */
+        public ContextPolicyServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+            return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            policy.Policy.PolicyRuleIdList>(
+                                            this, METHODID_LIST_POLICY_RULE_IDS, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getListPolicyRulesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            policy.Policy.PolicyRuleList>(
+                                            this, METHODID_LIST_POLICY_RULES, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getGetPolicyRuleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleId,
+                                            policy.Policy.PolicyRuleBasic>(
+                                            this, METHODID_GET_POLICY_RULE, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getSetPolicyRuleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleBasic,
+                                            policy.Policy.PolicyRuleId>(
+                                            this, METHODID_SET_POLICY_RULE, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getRemovePolicyRuleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_POLICY_RULE, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_LIST_POLICY_RULE_IDS = 0;
+    private static final int METHODID_LIST_POLICY_RULES = 1;
+    private static final int METHODID_GET_POLICY_RULE = 2;
+    private static final int METHODID_SET_POLICY_RULE = 3;
+    private static final int METHODID_REMOVE_POLICY_RULE = 4;
+
+    private static final class MethodHandlers<Req, Resp> implements
+            io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+        private final ContextPolicyServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(ContextPolicyServiceImplBase serviceImpl, int methodId, String compression) {
+            this.serviceImpl = serviceImpl;
+            this.methodId = methodId;
+            this.compression = compression;
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                case METHODID_LIST_POLICY_RULE_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listPolicyRuleIds);
+                    break;
+                case METHODID_LIST_POLICY_RULES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver,
+                            compression,
+                            serviceImpl::listPolicyRules);
+                    break;
+                case METHODID_GET_POLICY_RULE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleId) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic>) responseObserver,
+                            compression,
+                            serviceImpl::getPolicyRule);
+                    break;
+                case METHODID_SET_POLICY_RULE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleBasic) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId>) responseObserver,
+                            compression,
+                            serviceImpl::setPolicyRule);
+                    break;
+                case METHODID_REMOVE_POLICY_RULE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removePolicyRule);
+                    break;
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public io.grpc.stub.StreamObserver<Req> invoke(io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
index d332560fa0ceaabe472c8f78db306e7e8d9246eb..08ce14adab068743fd26f031a82ec5fd56693c09 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -1457,17 +1457,29 @@ public final class Policy {
     policy.Policy.PolicyRuleIdOrBuilder getPolicyRuleIdOrBuilder();
 
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return Whether the policyRuleState field is set.
      */
     boolean hasPolicyRuleState();
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return The policyRuleState.
      */
     policy.Policy.PolicyRuleState getPolicyRuleState();
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      */
     policy.Policy.PolicyRuleStateOrBuilder getPolicyRuleStateOrBuilder();
 
@@ -1652,7 +1664,7 @@ public final class Policy {
             }
             case 18: {
               policy.Policy.PolicyRuleState.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000001) != 0)) {
+              if (policyRuleState_ != null) {
                 subBuilder = policyRuleState_.toBuilder();
               }
               policyRuleState_ = input.readMessage(policy.Policy.PolicyRuleState.parser(), extensionRegistry);
@@ -1660,7 +1672,7 @@ public final class Policy {
                 subBuilder.mergeFrom(policyRuleState_);
                 policyRuleState_ = subBuilder.buildPartial();
               }
-              bitField0_ |= 0x00000001;
+
               break;
             }
             case 24: {
@@ -1669,9 +1681,9 @@ public final class Policy {
               break;
             }
             case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                 conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>();
-                mutable_bitField0_ |= 0x00000002;
+                mutable_bitField0_ |= 0x00000001;
               }
               conditionList_.add(
                   input.readMessage(policy.PolicyCondition.PolicyRuleCondition.parser(), extensionRegistry));
@@ -1684,9 +1696,9 @@ public final class Policy {
               break;
             }
             case 50: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                 actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>();
-                mutable_bitField0_ |= 0x00000004;
+                mutable_bitField0_ |= 0x00000002;
               }
               actionList_.add(
                   input.readMessage(policy.PolicyAction.PolicyRuleAction.parser(), extensionRegistry));
@@ -1707,10 +1719,10 @@ public final class Policy {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
           conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
         }
-        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
           actionList_ = java.util.Collections.unmodifiableList(actionList_);
         }
         this.unknownFields = unknownFields.build();
@@ -1730,7 +1742,6 @@ public final class Policy {
               policy.Policy.PolicyRuleBasic.class, policy.Policy.PolicyRuleBasic.Builder.class);
     }
 
-    private int bitField0_;
     public static final int POLICYRULEID_FIELD_NUMBER = 1;
     private policy.Policy.PolicyRuleId policyRuleId_;
     /**
@@ -1760,15 +1771,23 @@ public final class Policy {
     public static final int POLICYRULESTATE_FIELD_NUMBER = 2;
     private policy.Policy.PolicyRuleState policyRuleState_;
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return Whether the policyRuleState field is set.
      */
     @java.lang.Override
     public boolean hasPolicyRuleState() {
-      return ((bitField0_ & 0x00000001) != 0);
+      return policyRuleState_ != null;
     }
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return The policyRuleState.
      */
     @java.lang.Override
@@ -1776,11 +1795,15 @@ public final class Policy {
       return policyRuleState_ == null ? policy.Policy.PolicyRuleState.getDefaultInstance() : policyRuleState_;
     }
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      */
     @java.lang.Override
     public policy.Policy.PolicyRuleStateOrBuilder getPolicyRuleStateOrBuilder() {
-      return policyRuleState_ == null ? policy.Policy.PolicyRuleState.getDefaultInstance() : policyRuleState_;
+      return getPolicyRuleState();
     }
 
     public static final int PRIORITY_FIELD_NUMBER = 3;
@@ -1958,7 +1981,7 @@ public final class Policy {
       if (policyRuleId_ != null) {
         output.writeMessage(1, getPolicyRuleId());
       }
-      if (((bitField0_ & 0x00000001) != 0)) {
+      if (policyRuleState_ != null) {
         output.writeMessage(2, getPolicyRuleState());
       }
       if (priority_ != 0) {
@@ -1986,7 +2009,7 @@ public final class Policy {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getPolicyRuleId());
       }
-      if (((bitField0_ & 0x00000001) != 0)) {
+      if (policyRuleState_ != null) {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(2, getPolicyRuleState());
       }
@@ -2201,7 +2224,6 @@ public final class Policy {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPolicyRuleStateFieldBuilder();
           getConditionListFieldBuilder();
           getActionListFieldBuilder();
         }
@@ -2218,14 +2240,14 @@ public final class Policy {
         if (policyRuleStateBuilder_ == null) {
           policyRuleState_ = null;
         } else {
-          policyRuleStateBuilder_.clear();
+          policyRuleState_ = null;
+          policyRuleStateBuilder_ = null;
         }
-        bitField0_ = (bitField0_ & ~0x00000001);
         priority_ = 0;
 
         if (conditionListBuilder_ == null) {
           conditionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
           conditionListBuilder_.clear();
         }
@@ -2233,7 +2255,7 @@ public final class Policy {
 
         if (actionListBuilder_ == null) {
           actionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+          bitField0_ = (bitField0_ & ~0x00000002);
         } else {
           actionListBuilder_.clear();
         }
@@ -2264,25 +2286,21 @@ public final class Policy {
       public policy.Policy.PolicyRuleBasic buildPartial() {
         policy.Policy.PolicyRuleBasic result = new policy.Policy.PolicyRuleBasic(this);
         int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
         if (policyRuleIdBuilder_ == null) {
           result.policyRuleId_ = policyRuleId_;
         } else {
           result.policyRuleId_ = policyRuleIdBuilder_.build();
         }
-        if (((from_bitField0_ & 0x00000001) != 0)) {
-          if (policyRuleStateBuilder_ == null) {
-            result.policyRuleState_ = policyRuleState_;
-          } else {
-            result.policyRuleState_ = policyRuleStateBuilder_.build();
-          }
-          to_bitField0_ |= 0x00000001;
+        if (policyRuleStateBuilder_ == null) {
+          result.policyRuleState_ = policyRuleState_;
+        } else {
+          result.policyRuleState_ = policyRuleStateBuilder_.build();
         }
         result.priority_ = priority_;
         if (conditionListBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
+          if (((bitField0_ & 0x00000001) != 0)) {
             conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
-            bitField0_ = (bitField0_ & ~0x00000002);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
           result.conditionList_ = conditionList_;
         } else {
@@ -2290,15 +2308,14 @@ public final class Policy {
         }
         result.booleanOperator_ = booleanOperator_;
         if (actionListBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
+          if (((bitField0_ & 0x00000002) != 0)) {
             actionList_ = java.util.Collections.unmodifiableList(actionList_);
-            bitField0_ = (bitField0_ & ~0x00000004);
+            bitField0_ = (bitField0_ & ~0x00000002);
           }
           result.actionList_ = actionList_;
         } else {
           result.actionList_ = actionListBuilder_.build();
         }
-        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
@@ -2360,7 +2377,7 @@ public final class Policy {
           if (!other.conditionList_.isEmpty()) {
             if (conditionList_.isEmpty()) {
               conditionList_ = other.conditionList_;
-              bitField0_ = (bitField0_ & ~0x00000002);
+              bitField0_ = (bitField0_ & ~0x00000001);
             } else {
               ensureConditionListIsMutable();
               conditionList_.addAll(other.conditionList_);
@@ -2373,7 +2390,7 @@ public final class Policy {
               conditionListBuilder_.dispose();
               conditionListBuilder_ = null;
               conditionList_ = other.conditionList_;
-              bitField0_ = (bitField0_ & ~0x00000002);
+              bitField0_ = (bitField0_ & ~0x00000001);
               conditionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                    getConditionListFieldBuilder() : null;
@@ -2389,7 +2406,7 @@ public final class Policy {
           if (!other.actionList_.isEmpty()) {
             if (actionList_.isEmpty()) {
               actionList_ = other.actionList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
+              bitField0_ = (bitField0_ & ~0x00000002);
             } else {
               ensureActionListIsMutable();
               actionList_.addAll(other.actionList_);
@@ -2402,7 +2419,7 @@ public final class Policy {
               actionListBuilder_.dispose();
               actionListBuilder_ = null;
               actionList_ = other.actionList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
+              bitField0_ = (bitField0_ & ~0x00000002);
               actionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                    getActionListFieldBuilder() : null;
@@ -2564,14 +2581,22 @@ public final class Policy {
       private com.google.protobuf.SingleFieldBuilderV3<
           policy.Policy.PolicyRuleState, policy.Policy.PolicyRuleState.Builder, policy.Policy.PolicyRuleStateOrBuilder> policyRuleStateBuilder_;
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        * @return Whether the policyRuleState field is set.
        */
       public boolean hasPolicyRuleState() {
-        return ((bitField0_ & 0x00000001) != 0);
+        return policyRuleStateBuilder_ != null || policyRuleState_ != null;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        * @return The policyRuleState.
        */
       public policy.Policy.PolicyRuleState getPolicyRuleState() {
@@ -2582,7 +2607,11 @@ public final class Policy {
         }
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder setPolicyRuleState(policy.Policy.PolicyRuleState value) {
         if (policyRuleStateBuilder_ == null) {
@@ -2594,11 +2623,15 @@ public final class Policy {
         } else {
           policyRuleStateBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000001;
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder setPolicyRuleState(
           policy.Policy.PolicyRuleState.Builder builderForValue) {
@@ -2608,17 +2641,19 @@ public final class Policy {
         } else {
           policyRuleStateBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000001;
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder mergePolicyRuleState(policy.Policy.PolicyRuleState value) {
         if (policyRuleStateBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0) &&
-              policyRuleState_ != null &&
-              policyRuleState_ != policy.Policy.PolicyRuleState.getDefaultInstance()) {
+          if (policyRuleState_ != null) {
             policyRuleState_ =
               policy.Policy.PolicyRuleState.newBuilder(policyRuleState_).mergeFrom(value).buildPartial();
           } else {
@@ -2628,32 +2663,45 @@ public final class Policy {
         } else {
           policyRuleStateBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000001;
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder clearPolicyRuleState() {
         if (policyRuleStateBuilder_ == null) {
           policyRuleState_ = null;
           onChanged();
         } else {
-          policyRuleStateBuilder_.clear();
+          policyRuleState_ = null;
+          policyRuleStateBuilder_ = null;
         }
-        bitField0_ = (bitField0_ & ~0x00000001);
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public policy.Policy.PolicyRuleState.Builder getPolicyRuleStateBuilder() {
-        bitField0_ |= 0x00000001;
+        
         onChanged();
         return getPolicyRuleStateFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public policy.Policy.PolicyRuleStateOrBuilder getPolicyRuleStateOrBuilder() {
         if (policyRuleStateBuilder_ != null) {
@@ -2664,7 +2712,11 @@ public final class Policy {
         }
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           policy.Policy.PolicyRuleState, policy.Policy.PolicyRuleState.Builder, policy.Policy.PolicyRuleStateOrBuilder> 
@@ -2714,9 +2766,9 @@ public final class Policy {
       private java.util.List<policy.PolicyCondition.PolicyRuleCondition> conditionList_ =
         java.util.Collections.emptyList();
       private void ensureConditionListIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
+        if (!((bitField0_ & 0x00000001) != 0)) {
           conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>(conditionList_);
-          bitField0_ |= 0x00000002;
+          bitField0_ |= 0x00000001;
          }
       }
 
@@ -2910,7 +2962,7 @@ public final class Policy {
       public Builder clearConditionList() {
         if (conditionListBuilder_ == null) {
           conditionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
           conditionListBuilder_.clear();
@@ -3015,7 +3067,7 @@ public final class Policy {
           conditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder>(
                   conditionList_,
-                  ((bitField0_ & 0x00000002) != 0),
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
           conditionList_ = null;
@@ -3100,9 +3152,9 @@ public final class Policy {
       private java.util.List<policy.PolicyAction.PolicyRuleAction> actionList_ =
         java.util.Collections.emptyList();
       private void ensureActionListIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
+        if (!((bitField0_ & 0x00000002) != 0)) {
           actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>(actionList_);
-          bitField0_ |= 0x00000004;
+          bitField0_ |= 0x00000002;
          }
       }
 
@@ -3296,7 +3348,7 @@ public final class Policy {
       public Builder clearActionList() {
         if (actionListBuilder_ == null) {
           actionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+          bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
         } else {
           actionListBuilder_.clear();
@@ -3401,7 +3453,7 @@ public final class Policy {
           actionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder>(
                   actionList_,
-                  ((bitField0_ & 0x00000004) != 0),
+                  ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
                   isClean());
           actionList_ = null;
@@ -9335,53 +9387,52 @@ public final class Policy {
   static {
     java.lang.String[] descriptorData = {
       "\n\014policy.proto\022\006policy\032\rcontext.proto\032\026p" +
-      "olicy-condition.proto\032\023policy-action.pro" +
+      "olicy_condition.proto\032\023policy_action.pro" +
       "to\"+\n\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.conte" +
       "xt.Uuid\"=\n\017PolicyRuleState\022*\n\017policyRule" +
-      "State\030\001 \001(\0162\021.policy.RuleState\"\256\002\n\017Polic" +
+      "State\030\001 \001(\0162\021.policy.RuleState\"\225\002\n\017Polic" +
       "yRuleBasic\022*\n\014policyRuleId\030\001 \001(\0132\024.polic" +
-      "y.PolicyRuleId\0225\n\017policyRuleState\030\002 \001(\0132" +
-      "\027.policy.PolicyRuleStateH\000\210\001\001\022\020\n\010priorit" +
-      "y\030\003 \001(\r\0222\n\rconditionList\030\004 \003(\0132\033.policy." +
-      "PolicyRuleCondition\0220\n\017booleanOperator\030\005" +
-      " \001(\0162\027.policy.BooleanOperator\022,\n\nactionL" +
-      "ist\030\006 \003(\0132\030.policy.PolicyRuleActionB\022\n\020_" +
-      "policyRuleState\"\223\001\n\021PolicyRuleService\0220\n" +
-      "\017policyRuleBasic\030\001 \001(\0132\027.policy.PolicyRu" +
-      "leBasic\022%\n\tserviceId\030\002 \001(\0132\022.context.Ser" +
-      "viceId\022%\n\ndeviceList\030\003 \003(\0132\021.context.Dev" +
-      "iceId\"k\n\020PolicyRuleDevice\0220\n\017policyRuleB" +
-      "asic\030\001 \001(\0132\027.policy.PolicyRuleBasic\022%\n\nd" +
-      "eviceList\030\002 \003(\0132\021.context.DeviceId\"B\n\020Po" +
-      "licyRuleIdList\022.\n\020policyRuleIdList\030\001 \003(\013" +
-      "2\024.policy.PolicyRuleId\"Q\n\025PolicyRuleServ" +
-      "iceList\0228\n\025policyRuleServiceList\030\001 \003(\0132\031" +
-      ".policy.PolicyRuleService\"N\n\024PolicyRuleD" +
-      "eviceList\0226\n\024policyRuleDeviceList\030\001 \003(\0132" +
-      "\030.policy.PolicyRuleDevice\";\n\016PolicyRuleL" +
-      "ist\022)\n\013policyRules\030\001 \003(\0132\024.policy.Policy" +
-      "RuleId*\365\001\n\tRuleState\022\024\n\020POLICY_UNDEFINED" +
-      "\020\000\022\021\n\rPOLICY_FAILED\020\001\022\023\n\017POLICY_INSERTED" +
-      "\020\002\022\024\n\020POLICY_VALIDATED\020\003\022\026\n\022POLICY_PROVI" +
-      "SIONED\020\004\022\021\n\rPOLICY_ACTIVE\020\005\022\023\n\017POLICY_EN" +
-      "FORCED\020\006\022\026\n\022POLICY_INEFFECTIVE\020\007\022\024\n\020POLI" +
-      "CY_EFFECTIVE\020\010\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016PO" +
-      "LICY_REMOVED\020\n2\323\004\n\rPolicyService\022H\n\020Poli" +
-      "cyAddService\022\031.policy.PolicyRuleService\032" +
-      "\027.policy.PolicyRuleState\"\000\022F\n\017PolicyAddD" +
-      "evice\022\030.policy.PolicyRuleDevice\032\027.policy" +
-      ".PolicyRuleState\"\000\022K\n\023PolicyUpdateServic" +
-      "e\022\031.policy.PolicyRuleService\032\027.policy.Po" +
-      "licyRuleState\"\000\022I\n\022PolicyUpdateDevice\022\030." +
-      "policy.PolicyRuleDevice\032\027.policy.PolicyR" +
-      "uleState\"\000\022?\n\014PolicyDelete\022\024.policy.Poli" +
-      "cyRuleId\032\027.policy.PolicyRuleState\"\000\022E\n\020G" +
-      "etPolicyService\022\024.policy.PolicyRuleId\032\031." +
-      "policy.PolicyRuleService\"\000\022C\n\017GetPolicyD" +
-      "evice\022\024.policy.PolicyRuleId\032\030.policy.Pol" +
-      "icyRuleDevice\"\000\022K\n\024GetPolicyByServiceId\022" +
-      "\022.context.ServiceId\032\035.policy.PolicyRuleS" +
-      "erviceList\"\000b\006proto3"
+      "y.PolicyRuleId\0220\n\017policyRuleState\030\002 \001(\0132" +
+      "\027.policy.PolicyRuleState\022\020\n\010priority\030\003 \001" +
+      "(\r\0222\n\rconditionList\030\004 \003(\0132\033.policy.Polic" +
+      "yRuleCondition\0220\n\017booleanOperator\030\005 \001(\0162" +
+      "\027.policy.BooleanOperator\022,\n\nactionList\030\006" +
+      " \003(\0132\030.policy.PolicyRuleAction\"\223\001\n\021Polic" +
+      "yRuleService\0220\n\017policyRuleBasic\030\001 \001(\0132\027." +
+      "policy.PolicyRuleBasic\022%\n\tserviceId\030\002 \001(" +
+      "\0132\022.context.ServiceId\022%\n\ndeviceList\030\003 \003(" +
+      "\0132\021.context.DeviceId\"k\n\020PolicyRuleDevice" +
+      "\0220\n\017policyRuleBasic\030\001 \001(\0132\027.policy.Polic" +
+      "yRuleBasic\022%\n\ndeviceList\030\002 \003(\0132\021.context" +
+      ".DeviceId\"B\n\020PolicyRuleIdList\022.\n\020policyR" +
+      "uleIdList\030\001 \003(\0132\024.policy.PolicyRuleId\"Q\n" +
+      "\025PolicyRuleServiceList\0228\n\025policyRuleServ" +
+      "iceList\030\001 \003(\0132\031.policy.PolicyRuleService" +
+      "\"N\n\024PolicyRuleDeviceList\0226\n\024policyRuleDe" +
+      "viceList\030\001 \003(\0132\030.policy.PolicyRuleDevice" +
+      "\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(\0132" +
+      "\024.policy.PolicyRuleId*\365\001\n\tRuleState\022\024\n\020P" +
+      "OLICY_UNDEFINED\020\000\022\021\n\rPOLICY_FAILED\020\001\022\023\n\017" +
+      "POLICY_INSERTED\020\002\022\024\n\020POLICY_VALIDATED\020\003\022" +
+      "\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rPOLICY_ACTIVE" +
+      "\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022POLICY_INEFFE" +
+      "CTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020\010\022\022\n\016POLICY_" +
+      "UPDATED\020\t\022\022\n\016POLICY_REMOVED\020\n2\323\004\n\rPolicy" +
+      "Service\022H\n\020PolicyAddService\022\031.policy.Pol" +
+      "icyRuleService\032\027.policy.PolicyRuleState\"" +
+      "\000\022F\n\017PolicyAddDevice\022\030.policy.PolicyRule" +
+      "Device\032\027.policy.PolicyRuleState\"\000\022K\n\023Pol" +
+      "icyUpdateService\022\031.policy.PolicyRuleServ" +
+      "ice\032\027.policy.PolicyRuleState\"\000\022I\n\022Policy" +
+      "UpdateDevice\022\030.policy.PolicyRuleDevice\032\027" +
+      ".policy.PolicyRuleState\"\000\022?\n\014PolicyDelet" +
+      "e\022\024.policy.PolicyRuleId\032\027.policy.PolicyR" +
+      "uleState\"\000\022E\n\020GetPolicyService\022\024.policy." +
+      "PolicyRuleId\032\031.policy.PolicyRuleService\"" +
+      "\000\022C\n\017GetPolicyDevice\022\024.policy.PolicyRule" +
+      "Id\032\030.policy.PolicyRuleDevice\"\000\022K\n\024GetPol" +
+      "icyByServiceId\022\022.context.ServiceId\032\035.pol" +
+      "icy.PolicyRuleServiceList\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -9407,7 +9458,7 @@ public final class Policy {
     internal_static_policy_PolicyRuleBasic_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleBasic_descriptor,
-        new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", "Priority", "ConditionList", "BooleanOperator", "ActionList", "PolicyRuleState", });
+        new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", "Priority", "ConditionList", "BooleanOperator", "ActionList", });
     internal_static_policy_PolicyRuleService_descriptor =
       getDescriptor().getMessageTypes().get(3);
     internal_static_policy_PolicyRuleService_fieldAccessorTable = new
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
index 1baaf538dc031be9443984f640826ccd893290e4..ea6ee17d03fecab1e341cdfbc97d5dd5f3b2576c 100644
--- a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
@@ -1,5 +1,5 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: policy-action.proto
+// source: policy_action.proto
 
 package policy;
 
@@ -907,7 +907,7 @@ public final class PolicyAction {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\023policy-action.proto\022\006policy\"T\n\020PolicyR" +
+      "\n\023policy_action.proto\022\006policy\"T\n\020PolicyR" +
       "uleAction\022,\n\006action\030\001 \001(\0162\034.policy.Polic" +
       "yRuleActionEnum\022\022\n\nparameters\030\002 \003(\t*\274\001\n\024" +
       "PolicyRuleActionEnum\022\037\n\033POLICYRULE_ACTIO" +
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java b/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
index 2bde987ea6b48fa4a5285775a235d26892ee3b81..ecd7192778b6f5e7d0f7ee8f189565c828860c21 100644
--- a/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
@@ -1,5 +1,5 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: policy-condition.proto
+// source: policy_condition.proto
 
 package policy;
 
@@ -1325,7 +1325,7 @@ public final class PolicyCondition {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\026policy-condition.proto\022\006policy\032\020monito" +
+      "\n\026policy_condition.proto\022\006policy\032\020monito" +
       "ring.proto\"\225\001\n\023PolicyRuleCondition\022 \n\005kp" +
       "iId\030\001 \001(\0132\021.monitoring.KpiId\0224\n\021numerica" +
       "lOperator\030\002 \001(\0162\031.policy.NumericalOperat" +
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index 97929a86330aa71f708199fa3333764e0fd31e38..fa8f8df32cdd910f2be7801387325c502d401303 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,20 +3,20 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+    app.quarkus.io/commit-id: 164149a37bb250bca49a933b823f7c82877b277a
+    app.quarkus.io/build-timestamp: 2022-08-02 - 11:19:07 +0000
   labels:
     app.kubernetes.io/name: policyservice
     app: policyservice
   name: policyservice
 spec:
   ports:
-    - name: http
-      port: 8080
-      targetPort: 8080
     - name: grpc
       port: 6060
       targetPort: 6060
+    - name: http
+      port: 8080
+      targetPort: 8080
   selector:
     app.kubernetes.io/name: policyservice
   type: ClusterIP
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+    app.quarkus.io/commit-id: 164149a37bb250bca49a933b823f7c82877b277a
+    app.quarkus.io/build-timestamp: 2022-08-02 - 11:19:07 +0000
   labels:
     app: policyservice
     app.kubernetes.io/name: policyservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-        app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+        app.quarkus.io/commit-id: 164149a37bb250bca49a933b823f7c82877b277a
+        app.quarkus.io/build-timestamp: 2022-08-02 - 11:19:07 +0000
       labels:
         app: policyservice
         app.kubernetes.io/name: policyservice
@@ -71,12 +71,12 @@ spec:
             timeoutSeconds: 10
           name: policyservice
           ports:
-            - containerPort: 8080
-              name: http
-              protocol: TCP
             - containerPort: 6060
               name: grpc
               protocol: TCP
+            - containerPort: 8080
+              name: http
+              protocol: TCP
           readinessProbe:
             failureThreshold: 3
             httpGet:
diff --git a/src/service/.gitlab-ci.yml b/src/service/.gitlab-ci.yml
index 043b5c990eaa0266105439bdf7a02143b859b960..c40bc90cfe0b20669fe89aa9d6ecda562d7d0422 100644
--- a/src/service/.gitlab-ci.yml
+++ b/src/service/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build service:
   variables:
     IMAGE_NAME: 'service' # name of the microservice
diff --git a/src/slice/.gitlab-ci.yml b/src/slice/.gitlab-ci.yml
index 3fe479f71ce1d8ed6fd72fe3ed95736a981713ea..9393e6b29a2fbe180e74944375c871af4c4ae3d6 100644
--- a/src/slice/.gitlab-ci.yml
+++ b/src/slice/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build slice:
   variables:
     IMAGE_NAME: 'slice' # name of the microservice
diff --git a/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py b/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py
index 2830225be8738fb7b5e5b02f2d04007a94cbfa85..40a954868620564aef7d60c5ec0023ea0a32337b 100644
--- a/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py
+++ b/src/tests/oeccpsc22/tests/test_functional_delete_interdomain_slice.py
@@ -113,6 +113,7 @@ def test_interdomain_slice_removal(
     #assert len(service_uuids) == 1  # assume a single service has been created
     #service_uuid = set(service_uuids).pop()
     #osm_wim.delete_connectivity_service(service_uuid)
+    pass
 
 
 def test_interdomain_slice_removed(
diff --git a/src/tests/ofc22/README.md b/src/tests/ofc22/README.md
deleted file mode 100644
index 07fd4f72f494638744e7bc35eb207157bbb8cc1d..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/README.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# OFC'22 Demo - Bootstrap devices, Monitor device Endpoints, Manage L3VPN Services
-This functional test reproduces the live demonstration "Demonstration of Zero-touch Device and L3-VPN Service
-Management Using the TeraFlow Cloud-native SDN Controller" carried out at
-[OFC'22](https://www.ofcconference.org/en-us/home/program-speakers/demo/).
-
-## Functional test folder
-This functional test can be found in folder `./src/tests/ofc22/`. A convenience alias `./ofc22/` pointing to that folder has been defined.
-
-## Execute with real devices
-This functional test is designed to operate both with real and emulated devices.
-By default, emulated devices are used; however, if you have access to real devices, you can create/modify the files `./ofc22/tests/Objects.py` and `./ofc22/tests/Credentials.py` to point to your devices, and map to your network topology.
-Note that the default scenario assumes devices R2 and R4 are always emulated, while devices R1, R3, and O1 can be configured as emulated or real devices.
-
-__Important:__ The OpenConfigDriver, the P4Driver, and the TrandportApiDriver have to be considered as experimental. The configuration and monitoring capabilities they support are limited or partially implemented. Use them with care.
-
-## Deployment
-To run this functional test, it is assumed you have deployed a Kubernetes-based environment as described in [Wiki: Installing Kubernetes on your Linux machine](https://gitlab.com/teraflow-h2020/controller/-/wikis/Installing-Kubernetes-on-your-Linux-machine).
-
-After installing Kubernetes, you can run it to deploy the appropriate components. Feel free to adapt it your particular case following the instructions described in [Wiki: Deploying a TeraFlow OS test instance](https://gitlab.com/teraflow-h2020/controller/-/wikis/Deploying-a-TeraFlow-OS-test-instance).
-
-__Important:__
-- The `./ofc22/deploy_in_kubernetes.sh` assumes you have installed the appropriate development dependencies using the `install_development_dependencies.sh` script.
-- Before running the scripts in this folder, remember to update the environment variable K8S_HOSTNAME to point to the Kubernetes node you will be using as described in [Wiki: Deploying a TeraFlow OS test instance](https://gitlab.com/teraflow-h2020/controller/-/wikis/Deploying-a-TeraFlow-OS-test-instance).
-
-For your convenience, the configuration s sript `./ofc22/deploy_in_kubernetes.sh` has been already defined. The script will take some minutes to download the dependencies, build the micro-services, deploy them, and leave them ready for operation. The deployment will finish with a report of the items that have been created.
-
-## Access to the WebUI and Dashboard
-When the deployment completes, you can connect to the TeraFlow OS WebUI and Dashboards as described in [Wiki: Using the WebUI](https://gitlab.com/teraflow-h2020/controller/-/wikis/Using-the-WebUI), or directly navigating to `http://[your-node-ip]:30800` for the WebUI and `http://[your-node-ip]:30300` for the Grafana Dashboard.
-
-Notes:
-- the default credentials for the Grafana Dashboiard is user/pass: `admin`/`admin123+`.
-- in Grafana, you can find the "L3-Monitorng" in the "Starred dashboards" section.
-
-## Test execution
-To execute this functional test, four main steps needs to be carried out:
-1. Device bootstrapping
-2. L3VPN Service creation
-3. L3VPN Service removal
-4. Cleanup
-
-Upon the execution of each test progresses, a report will be generated indicating PASSED / FAILED / SKIPPED. If there is some error during the execution, you should see a detailed report on the error. See the troubleshooting section in that case.
-
-Feel free to check the logs of the different components using the appropriate `ofc22/show_logs_[component].sh` scripts after you execute each step.
-
-### 1. Device bootstrapping
-
-This step configures some basic entities (Context and Topology), the devices, and the links in the topology. The expected results are:
-- The devices to be incorporated into the Topology.
-- The devices to be pre-configured and initialized as ENABLED by the Automation component.
-- The monitoring for the device ports (named as endpoints in TeraFlow OS) to be activated and data collection to automatically start.
-- The links to be added to the topology.
-
-To run this step, execute the following script:
-`./ofc22/run_test_01_bootstrap.sh`
-
-When the script finishes, check in the Grafana L3-Monitoring Dashboard and you should see the monitoring data being plotted and updated every 5 seconds (by default). Given that there is no service configured, you should see a 0-valued flat plot.
-
-In the WebUI, select the "admin" Context. In the "Devices" tab you should see that 5 different emulated devices have been created and activated: 4 packet routers, and 1 optical line system controller. Besides, in the "Services" tab you should see that there is no service created. Note here that the emulated devices produce synthetic randomly-generated data and do not care about the services configured.
-
-### 2. L3VPN Service creation
-
-This step configures a new service emulating the request an OSM WIM would make by means of a Mock OSM instance.
-
-To run this step, execute the following script:
-`./ofc22/run_test_02_create_service.sh`
-
-When the script finishes, check the WebUI "Services" tab. You should see that two services have been created, one for the optical layer and another for the packet layer. Besides, you can check the "Devices" tab to see the configuration rules that have been configured in each device. In the Grafana Dashboard, given that there is now a service configured, you should see the plots with the monitored data for the device. By default, device R1-INF is selected.
-
-### 3. L3VPN Service removal
-
-This step deconfigures the previously created services emulating the request an OSM WIM would make by means of a Mock OSM instance.
-
-To run this step, execute the following script:
-`./ofc22/run_test_03_delete_service.sh`
-
-When the script finishes, check the WebUI "Services" tab. You should see that the two services have been removed. Besides, in the "Devices" tab you can see that the appropriate configuration rules have been deconfigured. In the Grafana Dashboard, given that there is no service configured, you should see a 0-valued flat plot again.
-
-### 4. Cleanup
-
-This last step just performs a cleanup of the scenario removing all the TeraFlow OS entities for completeness.
-
-To run this step, execute the following script:
-`./ofc22/run_test_04_cleanup.sh`
-
-When the script finishes, check the WebUI "Devices" tab, you should see that the devices have been removed. Besides, in the "Services" tab you can see that the "admin" Context has no services given that that context has been removed.
-
-## Troubleshooting
-
-Different scripts are provided to help in troubleshooting issues in the execution of the test. These scripts are:
-- `./ofc22/show_deployment.sh`: this script reports the items belonging to this deployment. Use it to validate that all the pods, deployments and replica sets are ready and have a state of "running"; and the services are deployed and have appropriate IP addresses and ports.
-- `ofc22/show_logs_automation.sh`: this script reports the logs for the automation component.
-- `ofc22/show_logs_compute.sh`: this script reports the logs for the compute component.
-- `ofc22/show_logs_context.sh`: this script reports the logs for the context component.
-- `ofc22/show_logs_device.sh`: this script reports the logs for the device component.
-- `ofc22/show_logs_monitoring.sh`: this script reports the logs for the monitoring component.
-- `ofc22/show_logs_service.sh`: this script reports the logs for the service component.
-- `ofc22/show_logs_webui.sh`: this script reports the logs for the webui component.
diff --git a/src/tests/ofc22/deploy_in_kubernetes.sh b/src/tests/ofc22/deploy_in_kubernetes.sh
deleted file mode 100755
index 1b725e5d629831d3c80be8ce8a09925e4bcc9c8e..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/deploy_in_kubernetes.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-# OFC 22 deployment settings
-
-export REGISTRY_IMAGE=""
-export COMPONENTS="context device service compute webui automation monitoring"
-export IMAGE_TAG="ofc22"
-export K8S_NAMESPACE="ofc22"
-export K8S_HOSTNAME="kubernetes-master"
-export EXTRA_MANIFESTS="./ofc22/expose_services.yaml"
-export GRAFANA_PASSWORD="admin123+"
-
-./deploy_in_kubernetes.sh
diff --git a/src/tests/ofc22/expose_services.yaml b/src/tests/ofc22/expose_services.yaml
deleted file mode 100644
index d514383615e7b9dca20f22dbb6ef3438457953cc..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/expose_services.yaml
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: contextservice-public
-  labels:
-    app: contextservice
-spec:
-  type: NodePort
-  selector:
-    app: contextservice
-  ports:
-  - name: grpc
-    protocol: TCP
-    port: 1010
-    targetPort: 1010
-    nodePort: 30101
-  - name: redis
-    protocol: TCP
-    port: 6379
-    targetPort: 6379
-    nodePort: 30637
-  - name: http
-    protocol: TCP
-    port: 8080
-    targetPort: 8080
-    nodePort: 31808
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: deviceservice-public
-  labels:
-    app: deviceservice
-spec:
-  type: NodePort
-  selector:
-    app: deviceservice
-  ports:
-  - name: grpc
-    protocol: TCP
-    port: 2020
-    targetPort: 2020
-    nodePort: 30202
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: monitoringservice-public
-  labels:
-    app: monitoringservice
-spec:
-  type: NodePort
-  selector:
-    app: monitoringservice
-  ports:
-  - name: influx
-    protocol: TCP
-    port: 8086
-    targetPort: 8086
-    nodePort: 30886
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: computeservice-public
-spec:
-  type: NodePort
-  selector:
-    app: computeservice
-  ports:
-  - name: http
-    protocol: TCP
-    port: 8080
-    targetPort: 8080
-    nodePort: 30808
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: webuiservice-public
-  labels:
-    app: webuiservice
-spec:
-  type: NodePort
-  selector:
-    app: webuiservice
-  ports:
-  - name: http
-    protocol: TCP
-    port: 8004
-    targetPort: 8004
-    nodePort: 30800
-  - name: grafana
-    protocol: TCP
-    port: 3000
-    targetPort: 3000
-    nodePort: 30300
diff --git a/src/tests/ofc22/redeploy_webui.sh b/src/tests/ofc22/redeploy_webui.sh
deleted file mode 100755
index 975f84a9d3b75e00a809acd336d844973cb26897..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/redeploy_webui.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-export COMPONENT="webui"
-export IMAGE_TAG="ofc22"
-export K8S_NAMESPACE="ofc22"
-export K8S_HOSTNAME="kubernetes-master"
-export GRAFANA_PASSWORD="admin123+"
-
-# Constants
-TMP_FOLDER="./tmp"
-
-# Create a tmp folder for files modified during the deployment
-TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
-mkdir -p $TMP_MANIFESTS_FOLDER
-TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
-mkdir -p $TMP_LOGS_FOLDER
-
-echo "Processing '$COMPONENT' component..."
-IMAGE_NAME="$COMPONENT:$IMAGE_TAG"
-
-echo "  Building Docker image..."
-BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log"
-docker build -t "$IMAGE_NAME" -f ./src/"$COMPONENT"/Dockerfile ./src/ > "$BUILD_LOG"
-
-sleep 1
-
-echo "  Deploying '$COMPONENT' component to Kubernetes..."
-kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=0 ${COMPONENT}service
-kubectl --namespace $K8S_NAMESPACE scale deployment --replicas=1 ${COMPONENT}service
-printf "\n"
-
-sleep 1
-
-echo "Waiting for '$COMPONENT' component..."
-kubectl wait --namespace $K8S_NAMESPACE --for='condition=available' --timeout=300s deployment/${COMPONENT}service
-printf "\n"
-
-echo "Configuring DataStores and Dashboards..."
-./configure_dashboards.sh
-printf "\n\n"
-
-echo "Reporting Deployment..."
-kubectl --namespace $K8S_NAMESPACE get all
-printf "\n"
-
-echo "Done!"
diff --git a/src/tests/ofc22/run_test_01_bootstrap.sh b/src/tests/ofc22/run_test_01_bootstrap.sh
index 634fed02dd71464c6878f0c96fb67cf3067148e2..be30b15189786de3fd2f593a1584c73890e9e4fe 100755
--- a/src/tests/ofc22/run_test_01_bootstrap.sh
+++ b/src/tests/ofc22/run_test_01_bootstrap.sh
@@ -13,39 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-PROJECTDIR=`pwd`
-
-cd $PROJECTDIR/src
-RCFILE=$PROJECTDIR/coverage/.coveragerc
-COVERAGEFILE=$PROJECTDIR/coverage/.coverage
-
-# Configure the correct folder on the .coveragerc file
-cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PROJECTDIR+g > $RCFILE
-
-# Destroy old coverage file
-rm -f $COVERAGEFILE
-
-# Set the name of the Kubernetes namespace and hostname to use.
-K8S_NAMESPACE="ofc22"
-# K8S_HOSTNAME="kubernetes-master"
-# dynamically gets the name of the K8s master node
-K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'`
-
-# Flush Context database
-kubectl --namespace $K8S_NAMESPACE exec -it deployment/contextservice --container redis -- redis-cli FLUSHALL
-
-export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}')
-export DEVICESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export DEVICESERVICE_SERVICE_PORT_GRPC=$(kubectl get service deviceservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==2020)].nodePort}')
-export COMPUTESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export COMPUTESERVICE_SERVICE_PORT_HTTP=$(kubectl get service computeservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==8080)].nodePort}')
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
-# Run functional test and analyze coverage of code at same time
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    tests/ofc22/tests/test_functional_bootstrap.py
+pytest --verbose src/tests/ofc22/tests/test_functional_bootstrap.py
diff --git a/src/tests/ofc22/run_test_02_create_service.sh b/src/tests/ofc22/run_test_02_create_service.sh
index 5498f91f2a3186ca694443dfc047760464ad2663..20fc3db65dd57ae8697253443050b1767d9b77a1 100755
--- a/src/tests/ofc22/run_test_02_create_service.sh
+++ b/src/tests/ofc22/run_test_02_create_service.sh
@@ -13,29 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-PROJECTDIR=`pwd`
-
-cd $PROJECTDIR/src
-RCFILE=$PROJECTDIR/coverage/.coveragerc
-COVERAGEFILE=$PROJECTDIR/coverage/.coverage
-
-# Set the name of the Kubernetes namespace and hostname to use.
-K8S_NAMESPACE="ofc22"
-# dynamically gets the name of the K8s master node
-K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'`
-
-export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}')
-export DEVICESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export DEVICESERVICE_SERVICE_PORT_GRPC=$(kubectl get service deviceservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==2020)].nodePort}')
-export COMPUTESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export COMPUTESERVICE_SERVICE_PORT_HTTP=$(kubectl get service computeservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==8080)].nodePort}')
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
-# Run functional test and analyze coverage of code at same time
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    tests/ofc22/tests/test_functional_create_service.py
+pytest --verbose src/tests/ofc22/tests/test_functional_create_service.py
diff --git a/src/tests/ofc22/run_test_03_delete_service.sh b/src/tests/ofc22/run_test_03_delete_service.sh
index 7a8e3a662610042fc3aaf603f8944e48d5573dd2..98073013d84e9d64e56dd9022ac163b6321ce389 100755
--- a/src/tests/ofc22/run_test_03_delete_service.sh
+++ b/src/tests/ofc22/run_test_03_delete_service.sh
@@ -13,29 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-PROJECTDIR=`pwd`
-
-cd $PROJECTDIR/src
-RCFILE=$PROJECTDIR/coverage/.coveragerc
-COVERAGEFILE=$PROJECTDIR/coverage/.coverage
-
-# Set the name of the Kubernetes namespace and hostname to use.
-K8S_NAMESPACE="ofc22"
-# dynamically gets the name of the K8s master node
-K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'`
-
-export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}')
-export DEVICESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export DEVICESERVICE_SERVICE_PORT_GRPC=$(kubectl get service deviceservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==2020)].nodePort}')
-export COMPUTESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export COMPUTESERVICE_SERVICE_PORT_HTTP=$(kubectl get service computeservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==8080)].nodePort}')
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
-# Run functional test and analyze coverage of code at same time
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    tests/ofc22/tests/test_functional_delete_service.py
+pytest --verbose src/tests/ofc22/tests/test_functional_delete_service.py
diff --git a/src/tests/ofc22/run_test_04_cleanup.sh b/src/tests/ofc22/run_test_04_cleanup.sh
index 5995a804f84db1d18f7e1ed18676bc575af7e80b..f7c0aad8da0b0446d188ec1fad3f0fc0e7dc2b4a 100755
--- a/src/tests/ofc22/run_test_04_cleanup.sh
+++ b/src/tests/ofc22/run_test_04_cleanup.sh
@@ -13,29 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
-PROJECTDIR=`pwd`
-
-cd $PROJECTDIR/src
-RCFILE=$PROJECTDIR/coverage/.coveragerc
-COVERAGEFILE=$PROJECTDIR/coverage/.coverage
-
-# Set the name of the Kubernetes namespace and hostname to use.
-K8S_NAMESPACE="ofc22"
-# dynamically gets the name of the K8s master node
-K8S_HOSTNAME=`kubectl get nodes --selector=node-role.kubernetes.io/master | tr -s " " | cut -f1 -d" " | sed -n '2 p'`
-
-export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service contextservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==1010)].nodePort}')
-export DEVICESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export DEVICESERVICE_SERVICE_PORT_GRPC=$(kubectl get service deviceservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==2020)].nodePort}')
-export COMPUTESERVICE_SERVICE_HOST=$(kubectl get node $K8S_HOSTNAME -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export COMPUTESERVICE_SERVICE_PORT_HTTP=$(kubectl get service computeservice-public --namespace $K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==8080)].nodePort}')
-
-# Useful flags for pytest:
-#-o log_cli=true -o log_file=device.log -o log_file_level=DEBUG
-
-# Run functional test and analyze coverage of code at same time
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    tests/ofc22/tests/test_functional_cleanup.py
+pytest --verbose src/tests/ofc22/tests/test_functional_cleanup.py
diff --git a/src/tests/ofc22/run_tests_and_coverage.sh b/src/tests/ofc22/run_tests_and_coverage.sh
new file mode 100755
index 0000000000000000000000000000000000000000..fa5026db2310c8753d8e4476707ce46a38ecb0f2
--- /dev/null
+++ b/src/tests/ofc22/run_tests_and_coverage.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+PROJECTDIR=`pwd`
+
+cd $PROJECTDIR/src
+RCFILE=$PROJECTDIR/coverage/.coveragerc
+COVERAGEFILE=$PROJECTDIR/coverage/.coverage
+
+# Configure the correct folder on the .coveragerc file
+cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PROJECTDIR+g > $RCFILE
+
+# Destroy old coverage file
+rm -f $COVERAGEFILE
+
+# Force a flush of Context database
+kubectl --namespace $TFS_K8S_NAMESPACE exec -it deployment/contextservice --container redis -- redis-cli FLUSHALL
+
+# Run functional tests and analyze code coverage at the same time
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_bootstrap.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_create_service.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_delete_service.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    tests/ofc22/tests/test_functional_cleanup.py
diff --git a/src/tests/ofc22/show_deploy.sh b/src/tests/ofc22/show_deploy.sh
deleted file mode 100755
index 58fce79e32819478627c87b8a5fb8ea7701db2d7..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_deploy.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE get all
diff --git a/src/tests/ofc22/show_logs_automation.sh b/src/tests/ofc22/show_logs_automation.sh
deleted file mode 100755
index 778cfaa942bcb36a81ccd571afe0f024c32d373d..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_automation.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/automationservice
diff --git a/src/tests/ofc22/show_logs_compute.sh b/src/tests/ofc22/show_logs_compute.sh
deleted file mode 100755
index cafde447ace44cc71fc75d27af2a50100f155681..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_compute.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/computeservice
diff --git a/src/tests/ofc22/show_logs_context.sh b/src/tests/ofc22/show_logs_context.sh
deleted file mode 100755
index 6d5b77fa9e0565e6df66856829644f31f55a4197..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_context.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/contextservice -c server
diff --git a/src/tests/ofc22/show_logs_device.sh b/src/tests/ofc22/show_logs_device.sh
deleted file mode 100755
index 9d976755a959dd8674a5cfe4fffb7104c27e8521..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_device.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/deviceservice
diff --git a/src/tests/ofc22/show_logs_monitoring.sh b/src/tests/ofc22/show_logs_monitoring.sh
deleted file mode 100755
index 3dd7522fa57eca242225d29571956923075e14d8..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_monitoring.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/monitoringservice -c server
diff --git a/src/tests/ofc22/show_logs_service.sh b/src/tests/ofc22/show_logs_service.sh
deleted file mode 100755
index 2589a3cfe16f4383904c342366f3efc01c42d470..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_service.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/serviceservice
diff --git a/src/tests/ofc22/show_logs_webui.sh b/src/tests/ofc22/show_logs_webui.sh
deleted file mode 100755
index ecf4f3f6fc22dd71eef2a6db2b5ac18f54ccca35..0000000000000000000000000000000000000000
--- a/src/tests/ofc22/show_logs_webui.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-K8S_NAMESPACE="ofc22"
-kubectl --namespace $K8S_NAMESPACE logs deployment/webuiservice -c server
diff --git a/src/tests/ofc22/tests/Objects.py b/src/tests/ofc22/tests/Objects.py
index fd48210fa4c4ed507e090c8d225aa3755805446f..bda08d7761ab3ad794246e6f94932c147a787993 100644
--- a/src/tests/ofc22/tests/Objects.py
+++ b/src/tests/ofc22/tests/Objects.py
@@ -86,7 +86,7 @@ if not USE_REAL_DEVICES:
     json_device_packetrouter_disabled = json_device_emulated_packet_router_disabled
     json_device_tapi_disabled         = json_device_emulated_tapi_disabled
 
-DEVICE_R1_UUID          = 'R1-INF'
+DEVICE_R1_UUID          = 'R1-EMU'
 DEVICE_R1_TIMEOUT       = 120
 DEVICE_R1_ENDPOINT_DEFS = [('13/0/0', 'optical', []), ('13/1/2', 'copper', PACKET_PORT_SAMPLE_TYPES)]
 DEVICE_R1_ID            = json_device_id(DEVICE_R1_UUID)
@@ -113,7 +113,7 @@ ENDPOINT_ID_R2_13_1_2   = DEVICE_R2_ENDPOINT_IDS[1]
 DEVICE_R2_CONNECT_RULES = json_device_emulated_connect_rules(DEVICE_R2_ENDPOINT_DEFS)
 
 
-DEVICE_R3_UUID          = 'R3-INF'
+DEVICE_R3_UUID          = 'R3-EMU'
 DEVICE_R3_TIMEOUT       = 120
 DEVICE_R3_ENDPOINT_DEFS = [('13/0/0', 'optical', []), ('13/1/2', 'copper', PACKET_PORT_SAMPLE_TYPES)]
 DEVICE_R3_ID            = json_device_id(DEVICE_R3_UUID)
@@ -186,24 +186,15 @@ def compose_service_endpoint_id(endpoint_id):
     endpoint_uuid = endpoint_id['endpoint_uuid']['uuid']
     return ':'.join([device_uuid, endpoint_uuid])
 
-def compose_bearer(endpoint_id, router_id, route_distinguisher):
-    device_uuid = endpoint_id['device_id']['device_uuid']['uuid']
-    endpoint_uuid = endpoint_id['endpoint_uuid']['uuid']
-    return '#'.join([device_uuid, endpoint_uuid, router_id, route_distinguisher])
-
-WIM_SEP_R1_ID          = compose_service_endpoint_id(ENDPOINT_ID_R1_13_1_2)
-WIM_SEP_R1_ROUTER_ID   = '10.10.10.1'
-WIM_SEP_R1_ROUTER_DIST = '65000:111'
-WIM_SEP_R1_SITE_ID     = '1'
-WIM_SEP_R1_BEARER      = compose_bearer(ENDPOINT_ID_R1_13_1_2, WIM_SEP_R1_ROUTER_ID, WIM_SEP_R1_ROUTER_DIST)
-WIM_SRV_R1_VLAN_ID     = 400
-
-WIM_SEP_R3_ID          = compose_service_endpoint_id(ENDPOINT_ID_R3_13_1_2)
-WIM_SEP_R3_ROUTER_ID   = '20.20.20.1'
-WIM_SEP_R3_ROUTER_DIST = '65000:222'
-WIM_SEP_R3_SITE_ID     = '2'
-WIM_SEP_R3_BEARER      = compose_bearer(ENDPOINT_ID_R3_13_1_2, WIM_SEP_R3_ROUTER_ID, WIM_SEP_R3_ROUTER_DIST)
-WIM_SRV_R3_VLAN_ID     = 500
+WIM_SEP_R1_ID      = compose_service_endpoint_id(ENDPOINT_ID_R1_13_1_2)
+WIM_SEP_R1_SITE_ID = '1'
+WIM_SEP_R1_BEARER  = WIM_SEP_R1_ID
+WIM_SRV_R1_VLAN_ID = 400
+
+WIM_SEP_R3_ID      = compose_service_endpoint_id(ENDPOINT_ID_R3_13_1_2)
+WIM_SEP_R3_SITE_ID = '2'
+WIM_SEP_R3_BEARER  = WIM_SEP_R3_ID
+WIM_SRV_R3_VLAN_ID = 500
 
 WIM_USERNAME = 'admin'
 WIM_PASSWORD = 'admin'
diff --git a/src/webui/.gitlab-ci.yml b/src/webui/.gitlab-ci.yml
index afafed4b2892ba05a33595f961e0add738adc041..e939d834761834f60e13045f7ce941f41887b956 100644
--- a/src/webui/.gitlab-ci.yml
+++ b/src/webui/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build webui:
   variables:
     IMAGE_NAME: 'webui' # name of the microservice
diff --git a/src/webui/service/main/routes.py b/src/webui/service/main/routes.py
index 1901948676c7adbe6e926eda0d42d796e23dcca3..85d3aeeb7c6f23ab4123412173cdfda4d27b23a4 100644
--- a/src/webui/service/main/routes.py
+++ b/src/webui/service/main/routes.py
@@ -118,6 +118,9 @@ def topology():
 def about():
     return render_template('main/about.html')
 
+@main.get('/debug')
+def debug():
+    return render_template('main/debug.html')
 
 @main.get('/resetsession')
 def reset_session():
diff --git a/src/webui/service/templates/base.html b/src/webui/service/templates/base.html
index a24edaa541a09c7a22f52d9bf3e705c62c6ef1c6..d314acb3d5cbe607e82474be7e66302f3d620d6a 100644
--- a/src/webui/service/templates/base.html
+++ b/src/webui/service/templates/base.html
@@ -75,10 +75,15 @@
                 <a class="nav-link" href="{{ url_for('service.home') }}">Service</a>
                 {% endif %}
               </li>
-              
+
+              <li class="nav-item">
+                <a class="nav-link" href="/grafana" id="grafana_link" target="grafana">Grafana</a>
+              </li>
+
               <li class="nav-item">
-                <a class="nav-link" href="#" id="grafana_link" target="grafana">Grafana</a>
+                <a class="nav-link" href="{{ url_for('main.debug') }}">Debug</a>
               </li>
+
               <!-- <li class="nav-item">
                 <a class="nav-link" href="#">Context</a>
               </li>
@@ -143,9 +148,9 @@
     <!-- Option 1: Bootstrap Bundle with Popper -->
     <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-kQtW33rZJAHjgefvhyyzcGF3C5TFyBQBA13V1RKPf4uH+bwyzQxZ6CmMZHmNBEfJ" crossorigin="anonymous"></script>
     <!-- <script src="{{ url_for('static', filename='site.js') }}"/> -->
-    <script>
+    <!-- <script>
       document.getElementById("grafana_link").href = window.location.protocol + "//" + window.location.hostname + ":30300"
-    </script>
+    </script> -->
     <!-- Option 2: Separate Popper and Bootstrap JS -->
     <!--
     <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
diff --git a/src/webui/service/templates/main/debug.html b/src/webui/service/templates/main/debug.html
new file mode 100644
index 0000000000000000000000000000000000000000..d065cc49d7262940beedd5eb9aa44a2ab890a07e
--- /dev/null
+++ b/src/webui/service/templates/main/debug.html
@@ -0,0 +1,36 @@
+<!--
+ Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+{% extends 'base.html' %}
+
+{% block content %}
+    <h1>Debug</h1>
+
+    <h3>Dump ContextDB:</h3>
+    <ul>
+        <li>
+            <a class="nav-link" href="/context/api/dump/html" id="context_html_link" target="context_html">
+                as HTML
+            </a>
+        </li>
+        <li>
+            <a class="nav-link" href="/context/api/dump/text" id="context_text_link" target="context_text">
+                as Text
+            </a>
+        </li>
+    </ul>
+
+{% endblock %}
diff --git a/tutorial/1-0-deployment.md b/tutorial/1-0-deployment.md
new file mode 100644
index 0000000000000000000000000000000000000000..6d56808daf6df8ed8ed5ba1f6133858199d19994
--- /dev/null
+++ b/tutorial/1-0-deployment.md
@@ -0,0 +1,12 @@
+# 1. Deployment Guide
+
+This section walks you through the process of deploying TeraFlowSDN on top of a Virtual Machine (VM) running MicroK8s
+Kubernetes platform. The guide includes the details on configuring and installing the VM, installing and configuring
+MicroK8s, and deploying and reporting the status of the TeraFlowSDN controller.
+
+## Table of Content:
+- [1.1. Create VM for the TeraFlowSDN controller](./1-1-create-vm.md)
+- [1.2. Install MicroK8s Kubernetes platform](./1-2-install-microk8s.md)
+- [1.3. Deploy TeraFlowSDN over MicroK8s](./1-3-deploy-tfs.md)
+- [1.4. Access TeraFlowSDN WebUI and Grafana Dashboards](./1-4-access-webui.md)
+- [1.5. Show Deployment and Log per Component](./1-5-deploy-logs-troubleshooting.md)
diff --git a/tutorial/1-1-1-create-vm-oracle-virtualbox.md b/tutorial/1-1-1-create-vm-oracle-virtualbox.md
new file mode 100644
index 0000000000000000000000000000000000000000..c53601e145d4ad0ca41c55803c27d55309070231
--- /dev/null
+++ b/tutorial/1-1-1-create-vm-oracle-virtualbox.md
@@ -0,0 +1,90 @@
+## 1.1.1. Oracle VirtualBox
+
+### 1.1.1.1. Create a NAT Network in VirtualBox
+In "Oracle VM VirtualBox Manager", Menu "File > Preferences... > Network", create a NAT network with the following
+specifications:
+
+|Name       |CIDR       |DHCP    |IPv6    |
+|-----------|-----------|--------|--------|
+|TFS-NAT-Net|10.0.2.0/24|Disabled|Disabled|
+
+Within the newly created "TFS-NAT-Net" NAT network, configure the following IPv4 forwarding rules:
+
+|Name|Protocol|Host IP  |Host Port|Guest IP |Guest Port|
+|----|--------|---------|---------|---------|----------|
+|SSH |TCP     |127.0.0.1|2200     |10.0.2.10|22        |
+|HTTP|TCP     |127.0.0.1|8080     |10.0.2.10|80        |
+
+__Note__: IP address 10.0.2.10 is the one that will be assigned to the VM.
+
+
+### 1.1.1.2. Create VM in VirtualBox:
+
+- Name: TFS-VM
+- Type/Version: Linux / Ubuntu (64-bit)
+- CPU (*): 4 vCPUs @ 100% execution capacity
+- RAM: 8 GB
+- Disk: 40 GB, Virtual Disk Image (VDI), Dynamically allocated
+- Optical Drive ISO Image: "ubuntu-20.04.4-live-server-amd64.iso"
+  (from [Ubuntu Server 20.04 LTS](https://releases.ubuntu.com/20.04/))
+- Network Adapter 1 (*): enabled, attached to NAT Network "TFS-NAT-Net"
+- Minor adjustments (*):
+  - Audio: disabled
+  - Boot otder: disable "Floppy"
+
+__Note__: (*) settings to be editing after the VM is created.
+
+### 1.1.1.3. Install Ubuntu 20.04 LTS Operating System
+In "Oracle VM VirtualBox Manager", start the VM in normal mode, and follow the installation procedure. Below we provide
+some installation guidelines:
+- Installation Language: English
+- Autodetect your keyboard
+- Configure static network specifications:
+
+|Interface|IPv4 Method|Subnet     |Address  |Gateway |Name servers   |Search domains|
+|---------|-----------|-----------|---------|--------|---------------|--------------|
+|enp0s3   |Manual     |10.0.2.0/24|10.0.2.10|10.0.2.1|8.8.8.8,8.8.4.4|<empty>       |
+
+- Leave proxy and mirror addresses as they are
+- Let the installer self-upgrade (if asked). At the time of writing this walkthrough, the version of the installer is 22.06.1. Anyway, Ubuntu 20.04 LTS OS will be installed.
+- Use an entire disk for the installation
+  - Disable setup of the disk as LVM group
+  - Double check that NO swap space is allocated in the partition table. Kubernetes does not work properly with SWAP.
+- Configure your user and system names:
+  - User name: TeraFlowSDN
+  - Server's name: tfs-vm
+  - Username: tfs
+  - Password: tfs123
+- Install Open SSH Server
+  - Import SSH keys, if any.
+- Featured Server Snaps
+  - Do not install featured server snaps. It will be done manually later to illustrate how to uninstall and reinstall
+    them in case of trouble with.
+- Let the system install and upgrade the packages.
+  - This operation might take some minutes depending on how old is the Optical Drive ISO image you use and your
+    Internet connection speed.
+- Restart the VM when the installation is completed.
+
+## 1.1.1.4. Upgrade the Ubuntu distribution
+```bash
+sudo apt-get update -y
+sudo apt-get dist-upgrade -y
+```
+
+## 1.1.1.5. Install VirtualBox Guest Additions
+On VirtualBox Manager, open the VM main screen. If you are running the VM in headless mode, right click over the VM in
+the VirtualBox Manager window and click "Show". If a dialog informing about how to leave the interface of the VM is
+hown, confirm pressing "Switch" button. The interface of the VM should appear.
+
+Click menu "Device > Insert Guest Additions CD image..."
+
+On the VM terminal, type:
+```bash
+sudo apt-get install -y linux-headers-$(uname -r) build-essential dkms
+  # This command might take some minutes depending on your VM specs and your Internet access speed.
+sudo mount /dev/cdrom /mnt/
+cd /mnt/
+sudo ./VBoxLinuxAdditions.run
+  # This command might take some minutes depending on your VM specs.
+sudo reboot
+```
diff --git a/tutorial/1-1-2-create-vm-vmware-fusion.md b/tutorial/1-1-2-create-vm-vmware-fusion.md
new file mode 100644
index 0000000000000000000000000000000000000000..7147c24af8a2cc182c8e6987387254218a3f9db9
--- /dev/null
+++ b/tutorial/1-1-2-create-vm-vmware-fusion.md
@@ -0,0 +1,54 @@
+## 1.1.2. VMWare Fusion
+
+### 1.1.2.1. Create VM in VMWare Fusion:
+
+In "VMWare Fusion" manager, create a new network from the "Settings/Network" menu.
+
+- Unlock to make changes
+- Press the + icon and create a new network
+- Change the name to TFS-NAT-Net
+- Check "Allow virtual machines on this networkto connect to external network (NAT)"
+- Do not check "Enable IPv6"
+- Add port forwarding for HTTP and SSH
+- Uncheck "Provide address on this network via DHCP"
+
+Create a new VM an Ubuntu 20.04 iso:
+
+- Display Name: TeraFlowSDN
+- Username: tfs
+- Password: tfs123
+
+On the next screen press "Customize Settings", save the VM and in "Settings" change:
+- Change to use 4 CPUs
+- Change to access 8 GB of RAM
+- Change disk to size 40 GB
+- Change the network interface to use the previously created TFS-NAT-Net
+
+Run the VM to start the installation.
+
+### 1.1.2.2. Install Ubuntu 20.04 LTS Operating System
+
+The installation will be automatic, without any configuration required.
+
+- Configure the guest ip, gateway and DNS:
+
+  Using the Network Settings for the wired connection, set the IP to 10.0.2.10,
+  the mask to 255.255.255.0, the gatway to 10.0.2.2 and the DNS to 10.0.2.2.
+
+- Disable and remove swap file:
+
+  $ sudo swapoff -a
+  $ sudo rm /swapfile
+
+  Then you can remove or comment the /swapfile entry in /etc/fstab
+
+- Install Open SSH Server
+  - Import SSH keys, if any.
+
+- Restart the VM when the installation is completed.
+
+### 1.1.2.3. Upgrade the Ubuntu distribution
+```bash
+sudo apt-get update -y
+sudo apt-get dist-upgrade -y
+```
diff --git a/tutorial/1-1-create-vm.md b/tutorial/1-1-create-vm.md
new file mode 100644
index 0000000000000000000000000000000000000000..ce74e6dc6f8df07d5f7cf42d979a7b54d61bc9a6
--- /dev/null
+++ b/tutorial/1-1-create-vm.md
@@ -0,0 +1,13 @@
+# 1.1. Create VM for the TeraFlowSDN controller
+
+In this section, we install a VM to be used as the deployment, execution, and development environment for the ETSI
+TeraFlowSDN controller. If you already have a remote physical server fitting the requirements specified in this section
+feel free to use it instead of deploying a local VM. Other virtualization environments can also be used; in that case,
+you will need to adapt these instructions to your particular case.
+
+Different Hypervisors are considered for that. Check the table of contents for available options. If you want to
+contribute with other Hypervisors, [contact](./README.md#contact) the TFS team through Slack.
+
+## Table of Content:
+- [1.1.1. Oracle VirtualBox](./1-1-1-create-vm-oracle-virtualbox.md)
+- [1.1.2. VMWare Fusion](./1-1-2-create-vm-vmware-fusion.md)
diff --git a/tutorial/1-2-install-microk8s.md b/tutorial/1-2-install-microk8s.md
new file mode 100644
index 0000000000000000000000000000000000000000..09e0b41a36a9b6c88883377be6c0737157f7afba
--- /dev/null
+++ b/tutorial/1-2-install-microk8s.md
@@ -0,0 +1,121 @@
+# 1.2. Install MicroK8s Kubernetes platform
+
+This section describes how to deploy the MicroK8s Kubernetes platform and configure it to be used with ETSI TeraFlowSDN
+controller. Besides, Docker is installed to build docker images for the ETSI TeraFlowSDN controller.
+
+The steps described in this section might take some minutes depending on your internet connection speed and the
+resources assigned to your VM, or the specifications of your physical server.
+
+
+## 1.2.1. Upgrade the Ubuntu distribution
+Skip this step if you already did it during the creation of the VM.
+```bash
+sudo apt-get update -y
+sudo apt-get dist-upgrade -y
+```
+
+
+## 1.2.2. Install prerequisites
+```bash
+sudo apt-get install -y ca-certificates curl gnupg lsb-release snapd jq
+```
+
+
+## 1.2.3. Install Docker CE
+Install Docker CE
+```bash
+sudo apt-get install -y docker.io
+```
+
+Add key "insecure-registries" with the private repository to the daemon configuration. It is done in two commands since
+sometimes read from and write to same file might cause trouble.
+
+```bash
+if [ -s /etc/docker/daemon.json ]; then cat /etc/docker/daemon.json; else echo '{}'; fi \
+    | jq 'if has("insecure-registries") then . else .+ {"insecure-registries": []} end' -- \
+    | jq '."insecure-registries" |= (.+ ["localhost:32000"] | unique)' -- \
+    | tee tmp.daemon.json
+sudo mv tmp.daemon.json /etc/docker/daemon.json
+sudo chown root:root /etc/docker/daemon.json
+sudo chmod 600 /etc/docker/daemon.json
+```
+
+Restart the Docker daemon
+```bash
+sudo systemctl restart docker
+```
+
+
+## 1.2.4. Install MicroK8s
+Ref: https://ubuntu.com/tutorials/install-a-local-kubernetes-with-microk8s
+Ref: https://microk8s.io/#install-microk8s
+
+```bash
+# Install MicroK8s
+sudo snap install microk8s --classic --channel=1.24/stable
+
+# Create alias for command "microk8s.kubectl" to be usable as "kubectl"
+sudo snap alias microk8s.kubectl kubectl
+
+# Verify status of ufw firewall
+sudo ufw status
+
+# If ufw is active, install following rules to enable access pod-to-pod and pod-to-internet
+sudo ufw allow in on cni0 && sudo ufw allow out on cni0
+sudo ufw default allow routed
+```
+
+
+## 1.2.5. Add user to the docker and microk8s groups
+```bash
+sudo usermod -a -G docker $USER
+sudo usermod -a -G microk8s $USER
+sudo chown -f -R $USER ~/.kube
+sudo reboot
+```
+
+## 1.2.6. Check status of Kubernetes
+```bash
+microk8s.status --wait-ready
+```
+
+
+## 1.2.7. Check all resources in Kubernetes
+```bash
+microk8s.kubectl get all --all-namespaces
+```
+
+
+## 1.2.8. Enable addons
+The Addons enabled are:
+- `dns`: enables resolving the pods and services by name
+- `hostpath-storage`: enables providing storage for the pods (required by `registry`)
+- `ingress`: deploys an ingress controller to expose the microservices outside Kubernetes
+- `registry`: deploys a private registry for the TFS controller images
+
+```bash
+microk8s.enable dns hostpath-storage ingress registry
+```
+
+__Note__: enabling some of the addons might take few minutes.
+          [Check status](./1-2-install-microk8s.md#124-check-status-of-kubernetes) periodically until all addons are
+          shown as enabled. Then [Check resources](./1-2-install-microk8s.md#125-check-all-resources-in-kubernetes)
+          periodically until all pods are Ready and Running.
+
+
+## 1.2.9. Stop, Restart, and Redeploy
+Find below some additional commands you might need while you work with MicroK8s:
+```bash
+microk8s.stop  # stop MicroK8s cluster (for instance, before power off your computer)
+microk8s.start # start MicroK8s cluster
+microk8s.reset # reset infrastructure to a clean state
+```
+
+If the following commands does not work to recover the MicroK8s cluster, you can redeploy it.
+First remove the current deployment as follows:
+```bash
+sudo snap remove microk8s
+sudo apt-get remove --purge docker.io
+```
+
+Then, redeploy as it is described in this section.
diff --git a/tutorial/1-3-deploy-tfs.md b/tutorial/1-3-deploy-tfs.md
new file mode 100644
index 0000000000000000000000000000000000000000..07c79d7ab34f12b9042a38489752b28bd4fd474e
--- /dev/null
+++ b/tutorial/1-3-deploy-tfs.md
@@ -0,0 +1,94 @@
+# 1.3. Deploy TeraFlowSDN over MicroK8s
+
+This section describes how to deploy TeraFlowSDN controller on top of MicroK8s using the environment configured in the
+previous sections.
+
+
+## 1.3.1. Install prerequisites
+```bash
+sudo apt-get install -y git curl jq
+```
+
+
+## 1.3.2. Clone the Git repository of the TeraFlowSDN controller
+__Important__: Right now, we have two repositories hosting the code of TeraFlowSDN: GitLab.com and ETSI owned GitLab
+               repository. Nowadays, only GitLab.com repository accepts code contributions that are periodically
+               mirrored to ETSI labs. In the near future, we plan to swap the repository roles and new contributions
+               will be accepted only at ETSI labs, while GitLab.com will probably be kept as a mirror of ETSI. If you
+               plan to contribute code to the TeraFlowSDN controller, by now, clone from GitLab.com. We will update the
+               tutorial as soon as roles of repositories are swapped.
+
+Clone from GitLab (if you want to contribute code to TeraFlowSDN):
+```bash
+mkdir ~/tfs-ctrl
+git clone https://gitlab.com/teraflow-h2020/controller.git ~/tfs-ctrl
+```
+
+Clone from ETSI owned GitLab (if you do not plan to contribute code):
+```bash
+mkdir ~/tfs-ctrl
+git clone https://labs.etsi.org/rep/tfs/controller.git ~/tfs-ctrl
+```
+
+
+## 1.3.3. Checkout the appropriate Git branch
+By default 'master' branch is checked out. If you want to deploy 'develop' that incorporates the most up-to-date code
+contributions and features, run the following command:
+```bash
+cd ~/tfs-ctrl
+git checkout develop
+```
+
+__Important__: During the elaboration and validation of the tutorials, you should checkout branch
+               "feat/microk8s-deployment". Otherwise, you will not have important files such as "my_deploy.sh" or
+               "deploy.sh". As soon as the tutorials are completed and approved, we will remove this note and merge the
+               "feat/microk8s-deployment" into "develop" and later into "master", and then the previous step will be
+               effective.
+
+
+## 1.3.4. Prepare a deployment script with the deployment settings
+Create a new deployment script, e.g., `my_deploy.sh`, adding the appropriate settings as follows. This script, by
+default, makes use of the private Docker registry enabled in MicroK8s, as specified in `TFS_REGISTRY_IMAGE`. It builds
+the Docker images for the subset of components defined in `TFS_COMPONENTS`, tags them with the tag defined in
+`TFS_IMAGE_TAG`, deploys them in the namespace defined in `TFS_K8S_NAMESPACE`, and (optionally) deploys the extra
+Kubernetes manifests listed in `TFS_EXTRA_MANIFESTS`. Besides, it lets you specify in `TFS_GRAFANA_PASSWORD` the
+password to be set for the Grafana `admin` user.
+
+```bash
+cd ~/tfs-ctrl
+tee my_deploy.sh >/dev/null <<EOF
+export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+export TFS_COMPONENTS="context device automation service compute monitoring webui"
+export TFS_IMAGE_TAG="dev"
+export TFS_K8S_NAMESPACE="tfs"
+export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
+export TFS_GRAFANA_PASSWORD="admin123+"
+EOF
+```
+
+
+## 1.3.5. Deploy TFS controller
+First, source the deployment settings defined in the previous section. This way, you do not need to specify the
+environment variables in each and every command you execute to operate the TFS controller. Be aware to re-source the
+file if you open new terminal sessions.
+Then, run the following command to deploy TeraFlowSDN controller on top of the MicroK8s Kubernetes platform.
+
+```bash
+cd ~/tfs-ctrl
+source my_deploy.sh
+./deploy.sh
+```
+
+The script does the following steps:
+1. Build the Docker images for the components defined in `TFS_COMPONENTS`
+2. Tag the Docker images with the value of `TFS_IMAGE_TAG`
+3. Push the Docker images to the repository defined in `TFS_REGISTRY_IMAGE`
+4. Create the namespace defined in `TFS_K8S_NAMESPACE`
+5. Deploy the components defined in `TFS_COMPONENTS`
+6. Create the file `tfs_runtime_env_vars.sh` with the environment variables for the components defined in
+   `TFS_COMPONENTS` defining their local host addresses and their port numbers.
+7. Create an ingress controller listening at port 80 for HTTP connections to enable external access to the TeraFlowSDN
+   WebUI, Grafana Dashboards, Context Debug endpoints, and Compute NBI interfaces.
+8. Initialize and configure the Grafana dashboards
+9. Report a summary of the deployment (see 
+   [1.5. Show Deployment and Log per Component](./1-5-deploy-logs-troubleshooting.md))
diff --git a/tutorial/1-4-access-webui.md b/tutorial/1-4-access-webui.md
new file mode 100644
index 0000000000000000000000000000000000000000..7769669e32d6c79aa330e56fd550c923580a149d
--- /dev/null
+++ b/tutorial/1-4-access-webui.md
@@ -0,0 +1,18 @@
+# 1.4. Access TeraFlowSDN WebUI and Grafana Dashboards
+
+This section describes how to get access to the TeraFlowSDN controller WebUI and the monitoring Grafana dashboards.
+
+
+## 1.4.1. Access the TeraFlowSDN WebUI
+If you followed the installation steps based on MicroK8s, you got an ingress controller installed that exposes on TCP
+port 80. In the creation of the VM, a forward from local TCP port 8080 to VM's TCP port 80 is configured, so the WebUIs
+and REST APIs of TeraFlowSDN should be exposed on endpoint `127.0.0.1:8080`.
+Besides, the ingress controller defines the following reverse proxy paths:
+- `http://127.0.0.1:8080/webui`: points to the WebUI of TeraFlowSDN.
+- `http://127.0.0.1:8080/grafana`: points to the Grafana dashboards. This endpoint brings access to the monitoring
+  dashboards of TeraFlowSDN. The credentials for the `admin`user are those defined in the `my_deploy.sh` script, in the
+  `TFS_GRAFANA_PASSWORD` variable.
+- `http://127.0.0.1:8080/context`: points to the REST API exposed by the TeraFlowSDN Context component. This endpoint
+  is mainly used for debugging purposes. Note that this endpoint is designed to be accessed from the WebUI.
+- `http://127.0.0.1:8080/restconf`: points to the Compute component NBI based on RestCONF. This endpoint enables
+  connecting external software, such as ETSI OpenSourceMANO NFV Orchestrator, to TeraFlowSDN.
diff --git a/tutorial/1-5-deploy-logs-troubleshooting.md b/tutorial/1-5-deploy-logs-troubleshooting.md
new file mode 100644
index 0000000000000000000000000000000000000000..ce16a279cdf6a716d157582f7a4fba0e707f2757
--- /dev/null
+++ b/tutorial/1-5-deploy-logs-troubleshooting.md
@@ -0,0 +1,32 @@
+# 1.5. Show Deployment and Log per Component
+
+This section presents some helper scripts to inspect the status of the deployment and the logs of the components. These
+scripts are particularly helpful for troubleshooting during execution of experiments, development, and debugging.
+
+
+## 1.5.1. Report the deployment of the TFS controller
+
+The summary report given at the end of the [Deploy TFS controller](./1-3-deploy-tfs.md#135-deploy-tfs-controller)
+procedure can be generated manually at any time by running the following command. You can avoid sourcing `my_deploy.sh`
+if it has been already done.
+```bash
+cd ~/tfs-ctrl
+source my_deploy.sh
+./show_deploy.sh
+```
+
+Use this script to validate that all the pods, deployments, replica sets, ingress controller, etc. are ready and have
+the appropriate state, e.g., "running" for Pods, and the services are deployed and have appropriate IP addresses and
+port numbers.
+
+
+## 1.5.2. Report the log of a specific TFS controller component
+
+A number of scripts are pre-created in the `scripts` folder to facilitate the inspection of the component logs. For
+instance, to dump the log of the Context component, run the following command. You can avoid sourcing `my_deploy.sh`
+if it has been already done.
+
+```bash
+source my_deploy.sh
+./scripts/show_logs_context.sh
+```
diff --git a/tutorial/2-0-run-experiments.md b/tutorial/2-0-run-experiments.md
new file mode 100644
index 0000000000000000000000000000000000000000..f87d00e98a66449f5fa6d267c527565b145722b2
--- /dev/null
+++ b/tutorial/2-0-run-experiments.md
@@ -0,0 +1,12 @@
+# 2. Run Experiments Guide (WORK IN PROGRESS)
+
+This section walks you through the process of running experiments in TeraFlowSDN on top of a Oracle VirtualBox-based VM
+running MicroK8s Kubernetes platform. The guide includes the details on configuring the Python environment, some basic
+commands you might need, configuring the network topology, and executing different experiments.
+
+## Table of Content:
+- [2.1. Configure the Python environment](./2-1-python-environment.md)
+- [2.2. OFC'22 Demo - Bootstrap devices, Monitor device Endpoints, Manage L3VPN Services](./2-2-ofc22.md)
+- [2.3. OECC/PSC'22 Demo (WORK IN PROGRESS)](./2-3-oeccpsc22.md)
+- [2.4. ECOC'22 Demo (PENDING)](./2-4-ecoc22.md)
+- [2.5. NFV-SDN'22 Demo (PENDING)](./2-5-nfvsdn22.md)
diff --git a/tutorial/2-1-python-environment.md b/tutorial/2-1-python-environment.md
new file mode 100644
index 0000000000000000000000000000000000000000..4a818e9e7c0a2d4b4ef21ed48d04c84b339046fc
--- /dev/null
+++ b/tutorial/2-1-python-environment.md
@@ -0,0 +1,74 @@
+# 2.1. Configure Python Environment
+
+This section describes how to configure the Python environment to run experiments and develop code for the ETSI
+TeraFlowSDN controller.
+In particular, we use [PyEnv](https://github.com/pyenv/pyenv) to install the appropriate version of Python and manage
+the virtual environments.
+
+
+## 2.1.1. Upgrade the Ubuntu distribution
+Skip this step if you already did it during the creation of the VM.
+```bash
+sudo apt-get update -y
+sudo apt-get dist-upgrade -y
+```
+
+
+## 2.1.2. Install PyEnv dependencies in the VM
+```bash
+sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget \
+    curl llvm git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
+```
+
+
+## 2.1.3. Install PyEnv
+```bash
+curl https://pyenv.run | bash
+# When finished, edit ~/.bash_profile // ~/.profile // ~/.bashrc as the installer proposes.
+# In general, it means to append the following lines to ~/.bashrc:
+export PYENV_ROOT="$HOME/.pyenv"
+command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
+eval "$(pyenv init -)"
+eval "$(pyenv virtualenv-init -)"
+```
+
+
+## 2.1.4. Restart the VM
+Restart the VM for all the changes to take effect.
+```bash
+sudo reboot
+```
+
+
+## 2.1.5. Install Python 3.9 over PyEnv
+```bash
+pyenv install 3.9.13
+    # This command might take some minutes depending on your Internet connection speed and the performance of your VM.
+```
+
+
+## 2.1.6. Create the Virtual Environment for TeraFlowSDN
+The following commands create a virtual environment named as `tfs` using Python v3.9.13 and associate that environment
+with the current folder, i.e., `~/tfs-ctrl`. That way, when you are in that folder, the associated virtual environment
+will be used, thus inheriting the Python interpreter, i.e., Python v3.9.13, and the Python packages installed on it.
+
+```bash
+cd ~/tfs-ctrl
+pyenv virtualenv 3.9.13 tfs
+pyenv local 3.9.13/envs/tfs
+```
+
+After completing these commands, you should see in your prompt that now you're within the virtual environment
+`3.9.13/envs/tfs` on folder `~/tfs-ctrl`:
+```
+(3.9.13/envs/tfs) tfs@tfs-vm:~/tfs-ctrl$
+```
+
+
+## 2.1.7. Install the basic Python packages within the virtual environment
+From within the `3.9.13/envs/tfs` environment on folder `~/tfs-ctrl`, run the following commands to install the basic
+Python packages required to work with TeraFlowSDN.
+```bash
+cd ~/tfs-ctrl
+./install_requirements.sh
+```
diff --git a/tutorial/2-2-ofc22.md b/tutorial/2-2-ofc22.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a0547d640267ebd45030d10ce8673d984c6b137
--- /dev/null
+++ b/tutorial/2-2-ofc22.md
@@ -0,0 +1,121 @@
+# 2.2. OFC'22 Demo - Bootstrap devices, Monitor device Endpoints, Manage L3VPN Services
+
+This functional test reproduces the live demonstration "Demonstration of Zero-touch Device and L3-VPN Service Management
+Using the TeraFlow Cloud-native SDN Controller" carried out at
+[OFC'22](https://www.ofcconference.org/en-us/home/program-speakers/demo/).
+
+
+## 2.2.1. Functional test folder
+
+This functional test can be found in folder `./src/tests/ofc22/`. A convenience alias `./ofc22/` pointing to that folder
+has been defined.
+
+
+## 2.2.2. Execute with real devices
+
+This functional test is designed to operate both with real and emulated devices.
+By default, emulated devices are used; however, if you have access to real devices, you can create/modify the files
+`./ofc22/tests/Objects.py` and `./ofc22/tests/Credentials.py` to point to your devices, and map to your own network
+topology.
+Otherwise, you can modify the `./ofc22/tests/descriptors_emulated.json` that is designed to be uploaded through the
+WebUI instead of using the command line scripts.
+Note that the default scenario assumes devices R2 and R4 are always emulated, while devices R1, R3, and O1
+can be configured as emulated or real devices.
+
+__Important__: The device drivers operating with real devices, e.g., OpenConfigDriver, P4Driver, and TransportApiDriver,
+               have to be considered as experimental. The configuration and monitoring capabilities they support are
+               limited or partially implemented/tested. Use them with care.
+
+
+## 2.2.3. Deployment and Dependencies
+
+To run this functional test, it is assumed you have deployed a MicroK8s-based Kubernetes environment and a TeraFlowSDN
+controller instance as described in the [Tutorial: Deployment Guide](./1-0-deployment.md), and you configured
+the Python environment as described in
+[Tutorial: Run Experiments Guide > 2.1. Configure Python Environment](./2-1-python-environment.md).
+Remember to source the scenario settings appropriately, e.g., `cd ~/tfs-ctrl && source my_deploy.sh` in each terminal
+you open.
+
+
+## 2.2.4. Access to the WebUI and Dashboard
+
+When the deployment completes, you can connect to the TeraFlowSDN WebUI and Dashboards as described in
+[Tutorial: Deployment Guide > 1.4. Access TeraFlowSDN WebUI and Grafana Dashboards](./1-4-access-webui.md)
+
+Notes:
+- the default credentials for the Grafana Dashboiard is user/pass: `admin`/`admin123+`.
+- in Grafana, you will find the "L3-Monitorng" in the "Starred dashboards" section.
+
+
+## 2.2.5. Test execution
+
+To execute this functional test, four main steps needs to be carried out:
+1. Device bootstrapping
+2. L3VPN Service creation
+3. L3VPN Service removal
+4. Cleanup
+
+Upon the execution of each test progresses, a report will be generated indicating PASSED / FAILED / SKIPPED. If there
+is some error during the execution, you should see a detailed report on the error. See the troubleshooting section if
+needed.
+
+You can check the logs of the different components using the appropriate `scripts/show_logs_[component].sh` scripts
+after you execute each step.
+
+
+### 2.2.5.1. Device bootstrapping
+
+This step configures some basic entities (Context and Topology), the devices, and the links in the topology. The
+expected results are:
+- The devices to be added into the Topology.
+- The devices to be pre-configured and initialized as ENABLED by the Automation component.
+- The monitoring for the device ports (named as endpoints in TeraFlowSDN) to be activated and data collection to
+  automatically start.
+- The links to be added to the topology.
+
+To run this step, you can do it from the WebUI by uploading the file `./ofc22/tests/descriptors_emulated.json` that
+contains the descriptors of the contexts, topologies, devices, and links, or by executing the
+`./ofc22/run_test_01_bootstrap.sh` script.
+
+When the bootstrapping finishes, check in the Grafana L3-Monitoring Dashboard and you should see the monitoring data
+being plotted and updated every 5 seconds (by default). Given that there is no service configured, you should see a
+0-valued flat plot.
+
+In the WebUI, select the "admin" Context. Then, in the "Devices" tab you should see that 5 different emulated devices
+have been created and activated: 4 packet routers, and 1 optical line system controller. Besides, in the "Services" tab
+you should see that there is no service created. Note here that the emulated devices produce synthetic
+randomly-generated data and do not care about the services configured.
+
+
+### 2.2.5.2. L3VPN Service creation
+
+This step configures a new service emulating the request an OSM WIM would make by means of a Mock OSM instance.
+
+To run this step, execute the `./ofc22/run_test_02_create_service.sh` script.
+
+When the script finishes, check the WebUI "Services" tab. You should see that two services have been created, one for
+the optical layer and another for the packet layer. Besides, you can check the "Devices" tab to see the configuration
+rules that have been configured in each device. In the Grafana Dashboard, given that there is now a service configured,
+you should see the plots with the monitored data for the device. By default, device R1-EMU is selected.
+
+
+### 2.2.5.3. L3VPN Service removal
+
+This step deconfigures the previously created services emulating the request an OSM WIM would make by means of a Mock
+OSM instance.
+
+To run this step, execute the `./ofc22/run_test_03_delete_service.sh` script, or delete the L3NM service from the WebUI.
+
+When the script finishes, check the WebUI "Services" tab. You should see that the two services have been removed.
+Besides, in the "Devices" tab you can see that the appropriate configuration rules have been deconfigured. In the
+Grafana Dashboard, given that there is no service configured, you should see a 0-valued flat plot again.
+
+
+### 2.2.5.4. Cleanup
+
+This last step performs a cleanup of the scenario removing all the TeraFlowSDN entities for completeness.
+
+To run this step, execute the `./ofc22/run_test_04_cleanup.sh` script.
+
+When the script finishes, check the WebUI "Devices" tab, you should see that the devices have been removed. Besides, in
+the "Services" tab you can see that the "admin" Context has no services given that that context has been removed.
diff --git a/src/tests/oeccpsc22/README.md b/tutorial/2-3-oeccpsc22.md
similarity index 53%
rename from src/tests/oeccpsc22/README.md
rename to tutorial/2-3-oeccpsc22.md
index 42e0228a52bdf9dfc21bc0358b78fb98677ed458..2ea7261d8a032b6543b3f3e9ed2fa702d9066616 100644
--- a/src/tests/oeccpsc22/README.md
+++ b/tutorial/2-3-oeccpsc22.md
@@ -1,8 +1,8 @@
-# OECC/PSC'22 Paper - Interdomain slices
-This functional test reproduces the experiment in paper "... paper title ..." presented at OECC/PSC'22 conference
-[OECC/PSC'22](... demo link ...).
-
-## Functional test folder
-This functional test can be found in folder `./src/tests/oeccpsc22/`. A convenience alias `./oeccpsc22/` pointing to that folder has been defined.
-
-# TO BE WRITTEN
+# 2.3. OECC/PSC'22 Demo - Interdomain slices (WORK IN PROGRESS)
+
+This functional test reproduces the experiment in paper "... paper title ..." presented at OECC/PSC'22 conference
+[OECC/PSC'22](... demo link ...).
+
+## 2.3.1. Functional test folder
+This functional test can be found in folder `./src/tests/oeccpsc22/`. A convenience alias `./oeccpsc22/` pointing to
+that folder has been defined.
diff --git a/tutorial/2-4-ecoc22.md b/tutorial/2-4-ecoc22.md
new file mode 100644
index 0000000000000000000000000000000000000000..f752bda840a3eb2fbde6c907e4ce139de3f8ce82
--- /dev/null
+++ b/tutorial/2-4-ecoc22.md
@@ -0,0 +1 @@
+# 2.4. ECOC'22 Demo (PENDING)
diff --git a/tutorial/2-5-nfvsdn22.md b/tutorial/2-5-nfvsdn22.md
new file mode 100644
index 0000000000000000000000000000000000000000..35fae3af31420f401997377d9b10a47acc92d490
--- /dev/null
+++ b/tutorial/2-5-nfvsdn22.md
@@ -0,0 +1 @@
+# 2.5. NFV-SDN'22 Demo (PENDING)
diff --git a/tutorial/3-0-development.md b/tutorial/3-0-development.md
new file mode 100644
index 0000000000000000000000000000000000000000..c2b13315aec7ee506684a3b7cc2be40b9f6407fe
--- /dev/null
+++ b/tutorial/3-0-development.md
@@ -0,0 +1,10 @@
+# 3. Development Guide (WORK IN PROGRESS)
+
+This section walks you through the process of developing new components for the TeraFlowSDN controller. For convenience,
+this guide assumes you are using the Oracle VirtualBox-based VM running MicroK8s Kubernetes platform as described in the
+[Deployment Guide](./1-0-deployment.md). The guide includes the details on 
+
+## Table of Content:
+- [3.1. Configure VSCode and Connect to the VM](./3-1-configure-vscode.md)
+- [3.2. Development Commands, Tricks, and Hints (WORK IN PROGRESS)](./3-2-develop-cth.md)
+- [3.3. Debugging individual components in VSCode](./3.3-debug-comp.md)
diff --git a/tutorial/3-1-configure-vscode.md b/tutorial/3-1-configure-vscode.md
new file mode 100644
index 0000000000000000000000000000000000000000..10493ce225d67043bcfcf9914905f19d270f060f
--- /dev/null
+++ b/tutorial/3-1-configure-vscode.md
@@ -0,0 +1,92 @@
+# 3.1. Configure VSCode and Connect to the VM
+
+
+## 3.1.1. Install VSCode and the required extensions
+If not already done, install [VSCode](https://code.visualstudio.com/) and the "Remote SSH" extension on your local
+machine, not in the VM.
+
+__Note__: "Python" extension is not required here. It will be installed later on the VSCode server running on the VM.
+
+
+## 3.1.2. Configure the "Remote SSH" extension
+- Go to left icon "Remote Explorer"
+- Click the "gear" icon next to "SSH TARGETS" on top of "Remote Explorer" bar
+- Choose to edit "<...>/.ssh/config" file (or equivalent)
+- Add the following entry (assuming previous port forwarding configuration):
+```
+Host TFS-VM
+    HostName 127.0.0.1
+    Port 2200
+    ForwardX11 no
+    User tfs
+```
+- Save the file
+- An entry "TFS-VM" should appear on "SSH TARGETS".
+
+
+## 3.1.3. Connect VSCode to the VM through "Remote SSH" extension
+- Right-click on "TFS-VM"
+- Select "Connect to Host in Current Window"
+- Reply to the questions asked
+  - Platform of the remote host "TFS-VM": Linux
+  - "TFS-VM" has fingerprint "<fingerprint>". Do you want to continue?: Continue
+  - Type tfs user's password: tfs123
+- You should be now connected to the TFS-VM.
+
+__Note__: if you get a connection error message, the reason might be due to wrong SSH server fingerprint. Edit file
+          "<...>/.ssh/known_hosts" on your local user account, check if there is a line starting with
+          "[127.0.0.1]:2200" (assuming previous port forwarding configuration), remove the entire line, save the file,
+          and retry connection.
+
+
+## 3.1.4. Add SSH key to prevent typing the password every time
+This step creates an SSH key in the VM and installs it on the VSCode to prevent having to type the password every time.
+
+- In VSCode (connected to the VM), click menu "Terminal > New Terminal"
+- Run the following commands on the VM's terminal through VSCode
+```bash
+ssh-keygen -t rsa -b 4096 -f ~/.ssh/tfs-vm.key
+  # leave password empty
+ssh-copy-id -i ~/.ssh/tfs-vm.key.pub tfs@10.0.2.10
+  # tfs@10.0.2.10's password: <type tfs user's password: tfs123>
+rm .ssh/known_hosts 
+```
+
+- In VSCode, click left "Explorer" panel to expand, if not expanded, and click "Open Folder" button.
+  - Choose "/home/tfs/"
+  - Type tfs user's password when asked
+  - Trust authors of the "/home/tfs [SSH: TFS-VM]" folder when asked
+- Right click on the file "tfs-vm.key" in the file explorer
+  - Select "Download..." option
+  - Download the file into your user's accout ".ssh" folder
+- Delete files "tfs-vm.key" and "tfs-vm.key.pub" on the TFS-VM.
+
+- In VSCode, click left "Remote Explorer" panel to expand
+  - Click the "gear" icon next to "SSH TARGETS" on top of "Remote Explorer" bar
+  - Choose to edit "<...>/.ssh/config" file (or equivalent)
+  - Find entry "Host TFS-VM" and update it as follows:
+```
+Host TFS-VM
+    HostName 127.0.0.1
+    Port 2200
+    ForwardX11 no
+    User tfs
+    IdentityFile "<path to the downloaded identity private key file>"
+```
+  - Save the file
+- From now, VSCode will use the identity file to connect to the TFS-VM instead of the user's password.
+
+
+## 3.1.5. Install VSCode Python Extension (in VSCode server)
+This step installs Python extensions in VSCode server running in the VM.
+
+- In VSCode (connected to the VM), click left button "Extensions"
+- Search "Python" extension in the extension Marketplace.
+- Install official "Python" extension released by Microsoft.
+  - By default, since you're connected to the VM, it will be installed in the VSCode server running in the VM.
+
+- In VSCode (connected to the VM), click left button "Explorer"
+- Click "Ctrl+Alt+P" and type "Python: Select Interpreter". Select option "Python: 3.9.13 64-bit ('tfs')"
+
+in terminal: set python path to be used by VSCode:
+`echo "PYTHONPATH=./src" > ~/tfs-ctrl/.env`
diff --git a/tutorial/3-2-develop-cth.md b/tutorial/3-2-develop-cth.md
new file mode 100644
index 0000000000000000000000000000000000000000..eda70c9e8c411c8cc6a0ed0832f573ca787962ca
--- /dev/null
+++ b/tutorial/3-2-develop-cth.md
@@ -0,0 +1,37 @@
+# 3.2. Development Commands, Tricks, and Hints (WORK IN PROGRESS)
+
+
+
+## Items to be addressed:
+- pytest flags: --log-level=INFO --verbose -o log_cli=true -o log_file=my_log_file.log -o log_file_level=DEBUG
+- code coverage
+- nginx ingress grpc to enable access from external sources
+
+
+# interesting Docker commands
+
+Build by hand:
+cd src
+docker build -t "context:lgr-test" -f ./context/Dockerfile .
+
+Run by hand:
+docker run --rm --name lgr-test -it --env "DB_BACKEND=inmemory" --entrypoint /bin/bash context:lgr-test
+
+
+## Expose gRPC ports through Ingress Controller
+source `my_deploy.sh`
+run script `./expose_ingress_grpc.sh`
+
+to test:
+sudo apt-get install nmap
+nmap -p 1010 127.0.0.1  # test if context is reachable
+should retrieve something like:
+$ nmap -p 1010 127.0.0.1
+Starting Nmap 7.80 ( https://nmap.org ) at 2022-07-29 15:06 UTC
+Nmap scan report for localhost (127.0.0.1)
+Host is up (0.00035s latency).
+
+PORT     STATE SERVICE
+1010/tcp open  surf
+
+Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
diff --git a/tutorial/3.3-debug-comp.md b/tutorial/3.3-debug-comp.md
new file mode 100644
index 0000000000000000000000000000000000000000..380c5add26729c7d403135b20813b112ba214908
--- /dev/null
+++ b/tutorial/3.3-debug-comp.md
@@ -0,0 +1,55 @@
+# 3.3 Debugging individual components in VSCode
+
+## 3.3.1 Source TeraFlow environment variables into .bashrc
+
+With any text editor, open the file `~/.bashrc` and add the following line at the end:
+```bash
+source ~/tfs-ctrl/tfs_runtime_env_vars.sh
+```
+
+"tfs-ctrl" can be substituted by the appropriate path where the controller is deployed.
+
+## 3.3.2 Install VSCode Python extensions
+The following extensions are required to execute and debug TeraFlow components in VSCode:
+
+- *Python*. New versions of the extension are known to have some unsolved bugs, it is recommended to downgrade to version **v2022.10.0**. Go to the extension window, select Python, click the arrow next to the "Uninstall" button and select "Install Another Version..."
+- *Pylance*
+
+## 3.3.3 Configure VSCode workspace and launch settings
+Run VSCode and open the folder with the source code of TeraFlow, this will be the main workspace. Create (if it does not exist) the subfolder `.vscode`. Inside, create and edit the following files:
+
+- `settings.json` 
+    ```bash
+    {
+    "python.analysis.extraPaths": ["<HOME>/.pyenv/versions/3.9.7/envs/teraflow/lib/python3.9/site-packages"],
+    }
+    ```
+    `<HOME>` should be replaced by the path of your home folder. If in the future another version of Python is used, or the virtual environment changes, this file should be updated to reflect the new path of the installed pip packages.
+
+- `launch.json`
+    ```bash
+    {
+        // Use IntelliSense to learn about possible attributes.
+        // Hover to view descriptions of existing attributes.
+        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+        "version": "0.2.0",
+        "configurations": [
+            {
+                "name": "TFS compute.service",
+                "module": "compute.service",
+                "python": "${command:python.interpreterPath}",
+                "type": "python",
+                "request": "launch",
+                "justMyCode": true,
+                "console": "internalConsole",
+                "env": {
+                    "PYTHONPATH": "${config:python.analysis.extraPaths}:${workspaceRoot}/src",
+                    "LOG_LEVEL": "DEBUG",
+                    }
+            }
+        ]
+    }
+    ```
+    This file contains the configuration necessary to execute the `"compute"` component from the TeraFlow controller, while providing debugging capabilities (e.g., breaking points, console log output etc.). After saving, the debugging can be started from the "Run and Debug" menu.
+
+    Additional profiles can be added to the JSON file under the `"configurations"` arrray. Copy & paste the existing one and change the `"name"` and  `"module"` fields.
\ No newline at end of file
diff --git a/tutorial/README.md b/tutorial/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..836434e51b8797cf91a49a3f47298eec712fbe43
--- /dev/null
+++ b/tutorial/README.md
@@ -0,0 +1,39 @@
+# ETSI TeraFlowSDN Controller Tutorials
+
+
+## Abstract
+This document provides a walkthrough on how to prepare your environment for executing and contributing to the
+[ETSI TeraFlowSDN OSG](https://tfs.etsi.org/).
+
+This walkthrough makes some reasonable assumptions to simplify the deployment of the ETSI TeraFlowSDN controller, the
+execution of experiments and tests, and development of new contributions. In particular, we assume:
+
+- [VirtualBox](https://www.virtualbox.org/) version 6.1.34 r150636
+- [VSCode](https://code.visualstudio.com/) with the "Remote SSH" extension
+- VM software:
+  - [Ubuntu Server 20.04 LTS](https://releases.ubuntu.com/20.04/)
+  - [MicroK8s](https://microk8s.io/)
+
+
+## Contact
+If your environment does not fit with the proposed assumptions and you experience some trouble preparing it to work
+with the ETSI TeraFlowSDN controller, contact the ETSI TeraFlowSDN OSG team through
+[Slack](https://join.slack.com/t/teraflowsdn/shared_invite/zt-18gc5jvkh-1_DEZHFhxeuOqzJZPq~U~A)
+
+
+## Table of Content:
+- [1. Deployment Guide](./1-0-deployment.md)
+  - [1.1. Create VM for the TeraFlowSDN controller](./1-1-create-vm.md)
+  - [1.2. Install MicroK8s Kubernetes platform](./1-2-install-microk8s.md)
+  - [1.3. Deploy TeraFlowSDN over MicroK8s](./1-3-deploy-tfs.md)
+  - [1.4. Access TeraFlowSDN WebUI and Grafana Dashboards](./1-4-access-webui.md)
+  - [1.5. Show Deployment and Log per Component](./1-5-deploy-logs-troubleshooting.md)
+- [2. Run Experiments Guide (WORK IN PROGRESS)](./2-0-run-experiments.md)
+  - [2.1. Configure the Python environment](./2-1-python-environment.md)
+  - [2.2. OFC'22 Demo - Bootstrap devices, Monitor device Endpoints, Manage L3VPN Services](./2-2-ofc22.md)
+  - [2.3. OECC/PSC'22 Demo (WORK IN PROGRESS)](./2-3-oeccpsc22.md)
+  - [2.4. ECOC'22 Demo (PENDING)](./2-4-ecoc22.md)
+  - [2.5. NFV-SDN'22 Demo (PENDING)](./2-5-nfvsdn22.md)
+- [3. Development Guide (WORK IN PROGRESS)](./3-0-development.md)
+  - [3.1. Configure VSCode and Connect to the VM](./3-1-configure-vscode.md)
+  - [3.2. Development Commands, Tricks, and Hints (WORK IN PROGRESS)](./3-2-develop-cth.md)
diff --git a/update_tfs_runtime_env_vars.sh b/update_tfs_runtime_env_vars.sh
new file mode 100755
index 0000000000000000000000000000000000000000..db68e17ea49c035af085f2eb461f704b42c287e2
--- /dev/null
+++ b/update_tfs_runtime_env_vars.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+########################################################################################################################
+# Read deployment settings
+########################################################################################################################
+
+# If not already set, set the list of components you want to build images for, and deploy.
+# By default, only basic components are deployed
+export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device monitoring service compute webui"}
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+echo "Deploying components and collecting environment variables..."
+ENV_VARS_SCRIPT=tfs_runtime_env_vars.sh
+echo "# Environment variables for TeraFlowSDN deployment" > $ENV_VARS_SCRIPT
+PYTHONPATH=$(pwd)/src
+echo "export PYTHONPATH=${PYTHONPATH}" >> $ENV_VARS_SCRIPT
+
+for COMPONENT in $TFS_COMPONENTS; do
+    echo "  Collecting env-vars for '$COMPONENT' component..."
+
+    SERVICE_DATA=$(kubectl get service ${COMPONENT}service --namespace $TFS_K8S_NAMESPACE -o json)
+    if [ -z "${SERVICE_DATA}" ]; then continue; fi
+
+    # Env vars for service's host address
+    SERVICE_HOST=$(echo ${SERVICE_DATA} | jq -r '.spec.clusterIP')
+    if [ -z "${SERVICE_HOST}" ]; then continue; fi
+    ENVVAR_HOST=$(echo "${COMPONENT}service_SERVICE_HOST" | tr '[:lower:]' '[:upper:]')
+    echo "export ${ENVVAR_HOST}=${SERVICE_HOST}" >> $ENV_VARS_SCRIPT
+
+    # Env vars for service's 'grpc' port (if any)
+    SERVICE_PORT_GRPC=$(echo ${SERVICE_DATA} | jq -r '.spec.ports[] | select(.name=="grpc") | .port')
+    if [ -n "${SERVICE_PORT_GRPC}" ]; then
+        ENVVAR_PORT_GRPC=$(echo "${COMPONENT}service_SERVICE_PORT_GRPC" | tr '[:lower:]' '[:upper:]')
+        echo "export ${ENVVAR_PORT_GRPC}=${SERVICE_PORT_GRPC}" >> $ENV_VARS_SCRIPT
+    fi
+
+    # Env vars for service's 'http' port (if any)
+    SERVICE_PORT_HTTP=$(echo ${SERVICE_DATA} | jq -r '.spec.ports[] | select(.name=="http") | .port')
+    if [ -n "${SERVICE_PORT_HTTP}" ]; then
+        ENVVAR_PORT_HTTP=$(echo "${COMPONENT}service_SERVICE_PORT_HTTP" | tr '[:lower:]' '[:upper:]')
+        echo "export ${ENVVAR_PORT_HTTP}=${SERVICE_PORT_HTTP}" >> $ENV_VARS_SCRIPT
+    fi
+
+    printf "\n"
+done
+
+echo "Done!"