diff --git a/proto/policy-action.proto b/proto/policy-action.proto
new file mode 100644
index 0000000000000000000000000000000000000000..374b5975129353219902e270a521496e914b1625
--- /dev/null
+++ b/proto/policy-action.proto
@@ -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.
+
+syntax = "proto3";
+package policy;
+
+// Action
+message PolicyRuleAction {
+  PolicyRuleActionEnum action = 1;
+  repeated string parameters = 2;
+}
+
+enum PolicyRuleActionEnum {
+  POLICYRULE_ACTION_NO_ACTION = 0;
+  POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;
+  POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;
+  POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;
+}
diff --git a/proto/policy-condition.proto b/proto/policy-condition.proto
new file mode 100644
index 0000000000000000000000000000000000000000..7cd6576678872df07a2da6a3706349f004b3a8a1
--- /dev/null
+++ b/proto/policy-condition.proto
@@ -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.
+
+syntax = "proto3";
+package policy;
+
+import "monitoring.proto";
+
+// Condition
+message PolicyRuleCondition {
+  monitoring.KpiId kpiId = 1;
+  NumericalOperator numericalOperator = 2;
+  monitoring.KpiValue kpiValue = 3;
+}
+
+// Operator to be used when comparing Kpis with condition values
+enum NumericalOperator {
+  POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;          // Kpi numerical operator undefined
+  POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;              // Kpi is equal with value
+  POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;          // Kpi is not equal with value
+  POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;          // Kpi is less than value
+  POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;    // Kpi is less than or equal with value
+  POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;       // Kpi is greater than value
+  POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6; // Kpi is less than or equal with value
+}
+
+// Operator to be used when evaluating each condition
+enum BooleanOperator {
+  POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;  // Boolean operator undefined
+  POLICYRULE_CONDITION_BOOLEAN_AND = 1;        // Boolean AND operator
+  POLICYRULE_CONDITION_BOOLEAN_OR = 2;         // Boolean OR operator
+}
\ No newline at end of file
diff --git a/proto/policy.proto b/proto/policy.proto
index 447eda2e19188a39a1980181d3018a25ed9f83c7..0887ae955edb544616d711189db0133fa788c104 100644
--- a/proto/policy.proto
+++ b/proto/policy.proto
@@ -16,6 +16,8 @@ syntax = "proto3";
 package policy;
 
 import "context.proto";
+import "policy-condition.proto";
+import "policy-action.proto";
 
 service PolicyService {
   rpc PolicyAdd (PolicyRule) returns (PolicyRuleState) {}
@@ -46,14 +48,6 @@ message PolicyRuleState {
   RuleState policyRuleState = 2;
 }
 
-message PolicyRuleVariable {
-  string policyRuleVariable = 1;
-}
-
-message PolicyRuleValue {
-  string policyRuleValue = 1;
-}
-
 // IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
 //     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
 // Event
@@ -61,18 +55,6 @@ message PolicyRuleEvent {
   context.Event event = 1;
 }
 
-// Condition
-message PolicyRuleCondition {
-  PolicyRuleVariable polRuleConditionVar = 1;
-  PolicyRuleValue polRuleConditionVal = 2;
-}
-
-// Action
-message PolicyRuleAction {
-  PolicyRuleVariable polRuleActionVar = 1;
-  PolicyRuleValue polRuleActionVal = 2;
-}
-
 // Policy rule partially complies with IETF’s:
 //     RFC 3060: https://datatracker.ietf.org/doc/html/rfc3060
 //     RFC 3460: https://datatracker.ietf.org/doc/html/rfc3460
@@ -81,16 +63,17 @@ message PolicyRule {
   // Basic policy rule attributes
   PolicyRuleId policyRuleId = 1;
   PolicyRuleType policyRuleType = 2;
-  uint32 PolicyRulePriority = 3;
+  uint32 priority = 3;
 
   // Event-Condition-Action model
-  PolicyRuleEvent event = 4;                             // A single event triggers the policy
-  repeated PolicyRuleCondition polRuleConditionList = 5; // One or more conditions must be met
-  repeated PolicyRuleAction polRuleActionList = 6;       // One or more actions should be applied
-
-  // Affected services and devices
-  repeated context.ServiceId serviceList = 7;
-  repeated context.DeviceId deviceList = 8;
+  PolicyRuleEvent event = 4;                         // A single event triggers the policy
+  repeated PolicyRuleCondition conditionList = 5;    // One or more conditions must be met
+  BooleanOperator booleanOperator = 6;               // Evaluation operator to be used
+  repeated PolicyRuleAction actionList = 7;          // One or more actions should be applied
+
+  // Affected service and devices
+  context.ServiceId serviceId = 8;
+  repeated context.DeviceId deviceList = 9;
 }
 
 // A list of policy rules
diff --git a/src/policy/src/main/proto/monitoring.proto b/src/policy/src/main/proto/monitoring.proto
new file mode 120000
index 0000000000000000000000000000000000000000..aceaa7328099fe736163be048ee1ad21a61d79a2
--- /dev/null
+++ b/src/policy/src/main/proto/monitoring.proto
@@ -0,0 +1 @@
+../../../../../proto/monitoring.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..bb1531bd6607ff005fdaae9d0be27ee65e3515ca
--- /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..f847d8b602252979135ead0876c50a161f049a72
--- /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/target/generated-sources/grpc/monitoring/Monitoring.java b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ef1f0c029d1d5916eaf5ffc4f185c048a40b5a3
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -0,0 +1,5629 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: monitoring.proto
+
+package monitoring;
+
+public final class Monitoring {
+  private Monitoring() {}
+  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 interface KpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptor)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
+     */
+    java.lang.String getKpiDescription();
+    /**
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
+     */
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
+     */
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
+
+    /**
+     * <code>.context.DeviceId device_id = 3;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 3;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 3;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * @return Whether the endpointId field is set.
+     */
+    boolean hasEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * @return The endpointId.
+     */
+    context.ContextOuterClass.EndPointId getEndpointId();
+    /**
+     * <code>.context.EndPointId endpoint_id = 4;</code>
+     */
+    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();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiDescriptor}
+   */
+  public static final class KpiDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptor)
+      KpiDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiDescriptor.newBuilder() to construct.
+    private KpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiDescriptor() {
+      kpiDescription_ = "";
+      kpiSampleType_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiDescriptor(
+        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: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              kpiDescription_ = s;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              kpiSampleType_ = rawValue;
+              break;
+            }
+            case 26: {
+              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 34: {
+              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 42: {
+              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;
+            }
+            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_KpiDescriptor_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptor_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiDescriptor.class, monitoring.Monitoring.KpiDescriptor.Builder.class);
+    }
+
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object kpiDescription_;
+    /**
+     * <code>string kpi_description = 1;</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 = 1;</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_SAMPLE_TYPE_FIELD_NUMBER = 2;
+    private int kpiSampleType_;
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</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 = 2;</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 = 3;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 3;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 3;</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 = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.EndPointId endpointId_;
+    /**
+     * <code>.context.EndPointId endpoint_id = 4;</code>
+     * @return Whether the endpointId field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 4;</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 = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    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.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <pre>
+     *  context.SliceId    slice_id    = 6;
+     * </pre>
+     *
+     * <code>.context.ServiceId service_id = 5;</code>
+     * @return The serviceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      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
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    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 (!getKpiDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, kpiDescription_);
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(2, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(3, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        output.writeMessage(4, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(5, getServiceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getKpiDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, kpiDescription_);
+      }
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, kpiSampleType_);
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getServiceId());
+      }
+      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.KpiDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiDescriptor other = (monitoring.Monitoring.KpiDescriptor) obj;
+
+      if (!getKpiDescription()
+          .equals(other.getKpiDescription())) 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 (!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) + KPI_DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getKpiDescription().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();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiDescriptor parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiDescriptor parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiDescriptor 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.KpiDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static monitoring.Monitoring.KpiDescriptor parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static monitoring.Monitoring.KpiDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptor 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.KpiDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptor 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.KpiDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptor 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.KpiDescriptor 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.KpiDescriptor}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:monitoring.KpiDescriptor)
+        monitoring.Monitoring.KpiDescriptorOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiDescriptor.class, monitoring.Monitoring.KpiDescriptor.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiDescriptor.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();
+        kpiDescription_ = "";
+
+        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;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptor build() {
+        monitoring.Monitoring.KpiDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptor buildPartial() {
+        monitoring.Monitoring.KpiDescriptor result = new monitoring.Monitoring.KpiDescriptor(this);
+        result.kpiDescription_ = kpiDescription_;
+        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();
+        }
+        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.KpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.KpiDescriptor)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(monitoring.Monitoring.KpiDescriptor other) {
+        if (other == monitoring.Monitoring.KpiDescriptor.getDefaultInstance()) return this;
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
+        }
+        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());
+        }
+        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.KpiDescriptor parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiDescriptor) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object kpiDescription_ = "";
+      /**
+       * <code>string kpi_description = 1;</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 = 1;</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 = 1;</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 = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string kpi_description = 1;</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 int kpiSampleType_ = 0;
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 2;</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 = 2;</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 = 2;</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 = 2;</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 = 2;</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 = 3;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</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 = 3;</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 = 3;</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 = 3;</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 = 3;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 3;</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 = 3;</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 = 4;</code>
+       * @return Whether the endpointId field is set.
+       */
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 4;</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 = 4;</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 = 4;</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 = 4;</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 = 4;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 4;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
+        
+        onChanged();
+        return getEndpointIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 4;</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 = 4;</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_;
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</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;
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</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;
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <pre>
+       *  context.SliceId    slice_id    = 6;
+       * </pre>
+       *
+       * <code>.context.ServiceId service_id = 5;</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:monitoring.KpiDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptor)
+    private static final monitoring.Monitoring.KpiDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptor();
+    }
+
+    public static monitoring.Monitoring.KpiDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptor>() {
+      @java.lang.Override
+      public KpiDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiDescriptor> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiDescriptor> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptor 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 sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
+     */
+    float getSamplingDurationS();
+
+    /**
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
+     */
+    float getSamplingIntervalS();
+  }
+  /**
+   * 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: {
+
+              samplingDurationS_ = input.readFloat();
+              break;
+            }
+            case 29: {
+
+              samplingIntervalS_ = 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 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_;
+    }
+
+    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_);
+      }
+      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_);
+      }
+      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(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;
+    }
+
+    @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 = (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;
+        }
+        samplingDurationS_ = 0F;
+
+        samplingIntervalS_ = 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.samplingDurationS_ = samplingDurationS_;
+        result.samplingIntervalS_ = samplingIntervalS_;
+        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.getSamplingDurationS() != 0F) {
+          setSamplingDurationS(other.getSamplingDurationS());
+        }
+        if (other.getSamplingIntervalS() != 0F) {
+          setSamplingIntervalS(other.getSamplingIntervalS());
+        }
+        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 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;
+      }
+      @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 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 = 4;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    boolean hasKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 4;</code>
+     * @return The kpiValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 4;</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 34: {
+              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 = 4;
+    private monitoring.Monitoring.KpiValue kpiValue_;
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 4;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 4;</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 = 4;</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(4, 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(4, 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 = 4;</code>
+       * @return Whether the kpiValue field is set.
+       */
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 4;</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 = 4;</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 = 4;</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 = 4;</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 = 4;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+          onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpi_value = 4;</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 = 4;</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 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;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiDescriptor_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_KpiId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_Kpi_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_Kpi_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiValue_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiValue_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiList_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\020monitoring.proto\022\nmonitoring\032\rcontext." +
+      "proto\032\026kpi_sample_types.proto\"\332\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"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          context.ContextOuterClass.getDescriptor(),
+          kpi_sample_types.KpiSampleTypes.getDescriptor(),
+        });
+    internal_static_monitoring_KpiDescriptor_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    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 =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_MonitorKpiRequest_descriptor,
+        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", });
+    internal_static_monitoring_KpiId_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    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);
+    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_KpiValue_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    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);
+    internal_static_monitoring_KpiList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_KpiList_descriptor,
+        new java.lang.String[] { "KpiList", });
+    context.ContextOuterClass.getDescriptor();
+    kpi_sample_types.KpiSampleTypes.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
new file mode 100644
index 0000000000000000000000000000000000000000..480e193125e51851a72e18473c139d71190bab11
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -0,0 +1,26 @@
+package monitoring;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: monitoring.proto")
+public interface MonitoringService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor 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.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request);
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..b0b2f5abd4144d8f6e41c2613a36c5b78051dd57
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -0,0 +1,68 @@
+package monitoring;
+
+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: monitoring.proto")
+public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.MonitoringServiceImplBase implements BindableService, MutinyBean {
+
+    private final MonitoringService delegate;
+
+    MonitoringServiceBean(@GrpcService MonitoringService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+       try {
+         return delegate.createKpi(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);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+       try {
+         return delegate.includeKpi(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+       try {
+         return delegate.monitorKpi(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
+       try {
+         return delegate.getInstantKpi(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) {
+       try {
+         return delegate.getStreamKpi(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/monitoring/MonitoringServiceClient.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..293a7c418e6e027792e8007234e34225b8c1848a
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -0,0 +1,49 @@
+package monitoring;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: monitoring.proto")
+public class MonitoringServiceClient implements MonitoringService, MutinyClient<MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub> {
+
+    private final MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub stub;
+
+    public MonitoringServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub, MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyMonitoringServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyMonitoringServiceGrpc.MutinyMonitoringServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+       return stub.createKpi(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+       return stub.getKpiDescriptor(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+       return stub.includeKpi(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+       return stub.monitorKpi(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
+       return stub.getInstantKpi(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+       return stub.getStreamKpi(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..7749c322a714ed96bc523a6bb77da9d43e54dbca
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -0,0 +1,638 @@
+package monitoring;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: monitoring.proto")
+public final class MonitoringServiceGrpc {
+
+  private MonitoringServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "monitoring.MonitoringService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpi",
+      requestType = monitoring.Monitoring.KpiDescriptor.class,
+      responseType = monitoring.Monitoring.KpiId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor,
+      monitoring.Monitoring.KpiId> getCreateKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId> getCreateKpiMethod;
+    if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getCreateKpiMethod = MonitoringServiceGrpc.getCreateKpiMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiMethod = getCreateKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiDescriptor, monitoring.Monitoring.KpiId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("CreateKpi"))
+              .build();
+        }
+      }
+    }
+    return getCreateKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptor",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.KpiDescriptor.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor> getGetKpiDescriptorMethod;
+    if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetKpiDescriptorMethod = MonitoringServiceGrpc.getGetKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetKpiDescriptorMethod = getGetKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiDescriptor>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetKpiDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.Kpi,
+      context.ContextOuterClass.Empty> getIncludeKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "IncludeKpi",
+      requestType = monitoring.Monitoring.Kpi.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.Kpi,
+      context.ContextOuterClass.Empty> getIncludeKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.Kpi, context.ContextOuterClass.Empty> getIncludeKpiMethod;
+    if ((getIncludeKpiMethod = MonitoringServiceGrpc.getIncludeKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getIncludeKpiMethod = MonitoringServiceGrpc.getIncludeKpiMethod) == null) {
+          MonitoringServiceGrpc.getIncludeKpiMethod = getIncludeKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.Kpi, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "IncludeKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.Kpi.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("IncludeKpi"))
+              .build();
+        }
+      }
+    }
+    return getIncludeKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.MonitorKpiRequest,
+      context.ContextOuterClass.Empty> getMonitorKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "MonitorKpi",
+      requestType = monitoring.Monitoring.MonitorKpiRequest.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.MonitorKpiRequest,
+      context.ContextOuterClass.Empty> getMonitorKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.MonitorKpiRequest, context.ContextOuterClass.Empty> getMonitorKpiMethod;
+    if ((getMonitorKpiMethod = MonitoringServiceGrpc.getMonitorKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getMonitorKpiMethod = MonitoringServiceGrpc.getMonitorKpiMethod) == null) {
+          MonitoringServiceGrpc.getMonitorKpiMethod = getMonitorKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.MonitorKpiRequest, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "MonitorKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("MonitorKpi"))
+              .build();
+        }
+      }
+    }
+    return getMonitorKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetStreamKpi",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.Kpi.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) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
+          MonitoringServiceGrpc.getGetStreamKpiMethod = getGetStreamKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetStreamKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.Kpi.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetStreamKpi"))
+              .build();
+        }
+      }
+    }
+    return getGetStreamKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      monitoring.Monitoring.Kpi> getGetInstantKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetInstantKpi",
+      requestType = monitoring.Monitoring.KpiId.class,
+      responseType = monitoring.Monitoring.Kpi.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) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
+          MonitoringServiceGrpc.getGetInstantKpiMethod = getGetInstantKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInstantKpi"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.Kpi.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetInstantKpi"))
+              .build();
+        }
+      }
+    }
+    return getGetInstantKpiMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static MonitoringServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<MonitoringServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<MonitoringServiceStub>() {
+        @java.lang.Override
+        public MonitoringServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new MonitoringServiceStub(channel, callOptions);
+        }
+      };
+    return MonitoringServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static MonitoringServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<MonitoringServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<MonitoringServiceBlockingStub>() {
+        @java.lang.Override
+        public MonitoringServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new MonitoringServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return MonitoringServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static MonitoringServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<MonitoringServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<MonitoringServiceFutureStub>() {
+        @java.lang.Override
+        public MonitoringServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new MonitoringServiceFutureStub(channel, callOptions);
+        }
+      };
+    return MonitoringServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   */
+  public static abstract class MonitoringServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetKpiDescriptorMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void includeKpi(monitoring.Monitoring.Kpi request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getIncludeKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void monitorKpi(monitoring.Monitoring.MonitorKpiRequest request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getMonitorKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getStreamKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getInstantKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getCreateKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiDescriptor,
+                monitoring.Monitoring.KpiId>(
+                  this, METHODID_CREATE_KPI)))
+          .addMethod(
+            getGetKpiDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.KpiDescriptor>(
+                  this, METHODID_GET_KPI_DESCRIPTOR)))
+          .addMethod(
+            getIncludeKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.Kpi,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_INCLUDE_KPI)))
+          .addMethod(
+            getMonitorKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.MonitorKpiRequest,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_MONITOR_KPI)))
+          .addMethod(
+            getGetStreamKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.Kpi>(
+                  this, METHODID_GET_STREAM_KPI)))
+          .addMethod(
+            getGetInstantKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                monitoring.Monitoring.Kpi>(
+                  this, METHODID_GET_INSTANT_KPI)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class MonitoringServiceStub extends io.grpc.stub.AbstractAsyncStub<MonitoringServiceStub> {
+    private MonitoringServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected MonitoringServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new MonitoringServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void createKpi(monitoring.Monitoring.KpiDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptor(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void includeKpi(monitoring.Monitoring.Kpi request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getIncludeKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void monitorKpi(monitoring.Monitoring.MonitorKpiRequest request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getMonitorKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getStreamKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetStreamKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getInstantKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class MonitoringServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<MonitoringServiceBlockingStub> {
+    private MonitoringServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected MonitoringServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new MonitoringServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiId createKpi(monitoring.Monitoring.KpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getCreateKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetKpiDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty includeKpi(monitoring.Monitoring.Kpi request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getIncludeKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getMonitorKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<monitoring.Monitoring.Kpi> getStreamKpi(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetStreamKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.Kpi getInstantKpi(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetInstantKpiMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class MonitoringServiceFutureStub extends io.grpc.stub.AbstractFutureStub<MonitoringServiceFutureStub> {
+    private MonitoringServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected MonitoringServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new MonitoringServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiId> createKpi(
+        monitoring.Monitoring.KpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetKpiDescriptorMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> includeKpi(
+        monitoring.Monitoring.Kpi request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getIncludeKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> monitorKpi(
+        monitoring.Monitoring.MonitorKpiRequest request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getMonitorKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.Kpi> getInstantKpi(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetInstantKpiMethod(), 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 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 MonitoringServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(MonitoringServiceImplBase 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_CREATE_KPI:
+          serviceImpl.createKpi((monitoring.Monitoring.KpiDescriptor) 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);
+          break;
+        case METHODID_INCLUDE_KPI:
+          serviceImpl.includeKpi((monitoring.Monitoring.Kpi) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_MONITOR_KPI:
+          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);
+          break;
+        case METHODID_GET_INSTANT_KPI:
+          serviceImpl.getInstantKpi((monitoring.Monitoring.KpiId) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) 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 MonitoringServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    MonitoringServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return monitoring.Monitoring.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("MonitoringService");
+    }
+  }
+
+  private static final class MonitoringServiceFileDescriptorSupplier
+      extends MonitoringServiceBaseDescriptorSupplier {
+    MonitoringServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class MonitoringServiceMethodDescriptorSupplier
+      extends MonitoringServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    MonitoringServiceMethodDescriptorSupplier(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 (MonitoringServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier())
+              .addMethod(getCreateKpiMethod())
+              .addMethod(getGetKpiDescriptorMethod())
+              .addMethod(getIncludeKpiMethod())
+              .addMethod(getMonitorKpiMethod())
+              .addMethod(getGetStreamKpiMethod())
+              .addMethod(getGetInstantKpiMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5157378c1d8d4608d5da2ec0e429fbb2412c175
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -0,0 +1,240 @@
+package monitoring;
+
+import static monitoring.MonitoringServiceGrpc.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: monitoring.proto")
+public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyMonitoringServiceGrpc() {}
+
+    public static MutinyMonitoringServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyMonitoringServiceStub(channel);
+    }
+
+    
+    public static final class MutinyMonitoringServiceStub extends io.grpc.stub.AbstractStub<MutinyMonitoringServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private MonitoringServiceGrpc.MonitoringServiceStub delegateStub;
+
+        private MutinyMonitoringServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = MonitoringServiceGrpc.newStub(channel);
+        }
+
+        private MutinyMonitoringServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = MonitoringServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyMonitoringServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyMonitoringServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::createKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getKpiDescriptor);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::includeKpi);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::monitorKpi);
+        }
+
+        
+        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.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getStreamKpi);
+        }
+
+    }
+
+    
+    public static abstract class MonitoringServiceImplBase 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 MonitoringServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createKpi(monitoring.Monitoring.KpiDescriptor 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);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId 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(
+                            monitoring.MonitoringServiceGrpc.getCreateKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiDescriptor,
+                                            monitoring.Monitoring.KpiId>(
+                                            this, METHODID_CREATE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.KpiDescriptor>(
+                                            this, METHODID_GET_KPI_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getIncludeKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.Kpi,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_INCLUDE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getMonitorKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.MonitorKpiRequest,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_MONITOR_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetStreamKpiMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.Kpi>(
+                                            this, METHODID_GET_STREAM_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetInstantKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            monitoring.Monitoring.Kpi>(
+                                            this, METHODID_GET_INSTANT_KPI, 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 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 MonitoringServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(MonitoringServiceImplBase 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_CREATE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiId>) responseObserver,
+                            compression,
+                            serviceImpl::createKpi);
+                    break;
+                case METHODID_GET_KPI_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getKpiDescriptor);
+                    break;
+                case METHODID_INCLUDE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.Kpi) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::includeKpi);
+                    break;
+                case METHODID_MONITOR_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.MonitorKpiRequest) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            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,
+                            compression,
+                            serviceImpl::getStreamKpi);
+                    break;
+                case METHODID_GET_INSTANT_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
+                            compression,
+                            serviceImpl::getInstantKpi);
+                    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 8386be80944cbbbe49d8485a1abff74fdc112d30..78734473960668d0c7792df03104b91b5fabdbcb 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -1628,2665 +1628,51 @@ public final class Policy {
 
   }
 
-  public interface PolicyRuleVariableOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleVariable)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The policyRuleVariable.
-     */
-    java.lang.String getPolicyRuleVariable();
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The bytes for policyRuleVariable.
-     */
-    com.google.protobuf.ByteString
-        getPolicyRuleVariableBytes();
-  }
-  /**
-   * Protobuf type {@code policy.PolicyRuleVariable}
-   */
-  public static final class PolicyRuleVariable extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleVariable)
-      PolicyRuleVariableOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleVariable.newBuilder() to construct.
-    private PolicyRuleVariable(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleVariable() {
-      policyRuleVariable_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleVariable();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleVariable(
-        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: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              policyRuleVariable_ = 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 policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleVariable_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleVariable.class, policy.Policy.PolicyRuleVariable.Builder.class);
-    }
-
-    public static final int POLICYRULEVARIABLE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object policyRuleVariable_;
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The policyRuleVariable.
-     */
-    @java.lang.Override
-    public java.lang.String getPolicyRuleVariable() {
-      java.lang.Object ref = policyRuleVariable_;
-      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();
-        policyRuleVariable_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string policyRuleVariable = 1;</code>
-     * @return The bytes for policyRuleVariable.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getPolicyRuleVariableBytes() {
-      java.lang.Object ref = policyRuleVariable_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        policyRuleVariable_ = 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 (!getPolicyRuleVariableBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, policyRuleVariable_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!getPolicyRuleVariableBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, policyRuleVariable_);
-      }
-      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 policy.Policy.PolicyRuleVariable)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleVariable other = (policy.Policy.PolicyRuleVariable) obj;
-
-      if (!getPolicyRuleVariable()
-          .equals(other.getPolicyRuleVariable())) 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) + POLICYRULEVARIABLE_FIELD_NUMBER;
-      hash = (53 * hash) + getPolicyRuleVariable().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleVariable parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleVariable 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 policy.Policy.PolicyRuleVariable parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleVariable 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 policy.Policy.PolicyRuleVariable parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleVariable 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(policy.Policy.PolicyRuleVariable 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 policy.PolicyRuleVariable}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleVariable)
-        policy.Policy.PolicyRuleVariableOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleVariable_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleVariable.class, policy.Policy.PolicyRuleVariable.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleVariable.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();
-        policyRuleVariable_ = "";
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleVariable_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleVariable getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleVariable.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleVariable build() {
-        policy.Policy.PolicyRuleVariable result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleVariable buildPartial() {
-        policy.Policy.PolicyRuleVariable result = new policy.Policy.PolicyRuleVariable(this);
-        result.policyRuleVariable_ = policyRuleVariable_;
-        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 policy.Policy.PolicyRuleVariable) {
-          return mergeFrom((policy.Policy.PolicyRuleVariable)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleVariable other) {
-        if (other == policy.Policy.PolicyRuleVariable.getDefaultInstance()) return this;
-        if (!other.getPolicyRuleVariable().isEmpty()) {
-          policyRuleVariable_ = other.policyRuleVariable_;
-          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 {
-        policy.Policy.PolicyRuleVariable parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleVariable) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object policyRuleVariable_ = "";
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @return The policyRuleVariable.
-       */
-      public java.lang.String getPolicyRuleVariable() {
-        java.lang.Object ref = policyRuleVariable_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          policyRuleVariable_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @return The bytes for policyRuleVariable.
-       */
-      public com.google.protobuf.ByteString
-          getPolicyRuleVariableBytes() {
-        java.lang.Object ref = policyRuleVariable_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          policyRuleVariable_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @param value The policyRuleVariable to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleVariable(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        policyRuleVariable_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearPolicyRuleVariable() {
-        
-        policyRuleVariable_ = getDefaultInstance().getPolicyRuleVariable();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleVariable = 1;</code>
-       * @param value The bytes for policyRuleVariable to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleVariableBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        policyRuleVariable_ = 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:policy.PolicyRuleVariable)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleVariable)
-    private static final policy.Policy.PolicyRuleVariable DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleVariable();
-    }
-
-    public static policy.Policy.PolicyRuleVariable getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleVariable>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleVariable>() {
-      @java.lang.Override
-      public PolicyRuleVariable parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleVariable(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleVariable> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleVariable> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariable getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleValue)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The policyRuleValue.
-     */
-    java.lang.String getPolicyRuleValue();
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The bytes for policyRuleValue.
-     */
-    com.google.protobuf.ByteString
-        getPolicyRuleValueBytes();
-  }
-  /**
-   * Protobuf type {@code policy.PolicyRuleValue}
-   */
-  public static final class PolicyRuleValue extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleValue)
-      PolicyRuleValueOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleValue.newBuilder() to construct.
-    private PolicyRuleValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleValue() {
-      policyRuleValue_ = "";
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleValue();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleValue(
-        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: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              policyRuleValue_ = 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 policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleValue_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleValue.class, policy.Policy.PolicyRuleValue.Builder.class);
-    }
-
-    public static final int POLICYRULEVALUE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object policyRuleValue_;
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The policyRuleValue.
-     */
-    @java.lang.Override
-    public java.lang.String getPolicyRuleValue() {
-      java.lang.Object ref = policyRuleValue_;
-      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();
-        policyRuleValue_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string policyRuleValue = 1;</code>
-     * @return The bytes for policyRuleValue.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getPolicyRuleValueBytes() {
-      java.lang.Object ref = policyRuleValue_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        policyRuleValue_ = 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 (!getPolicyRuleValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, policyRuleValue_);
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (!getPolicyRuleValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, policyRuleValue_);
-      }
-      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 policy.Policy.PolicyRuleValue)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleValue other = (policy.Policy.PolicyRuleValue) obj;
-
-      if (!getPolicyRuleValue()
-          .equals(other.getPolicyRuleValue())) 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) + POLICYRULEVALUE_FIELD_NUMBER;
-      hash = (53 * hash) + getPolicyRuleValue().hashCode();
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleValue parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleValue 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 policy.Policy.PolicyRuleValue parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleValue 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 policy.Policy.PolicyRuleValue parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleValue 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(policy.Policy.PolicyRuleValue 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 policy.PolicyRuleValue}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleValue)
-        policy.Policy.PolicyRuleValueOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleValue_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleValue.class, policy.Policy.PolicyRuleValue.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleValue.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();
-        policyRuleValue_ = "";
-
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleValue_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleValue getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleValue.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleValue build() {
-        policy.Policy.PolicyRuleValue result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleValue buildPartial() {
-        policy.Policy.PolicyRuleValue result = new policy.Policy.PolicyRuleValue(this);
-        result.policyRuleValue_ = policyRuleValue_;
-        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 policy.Policy.PolicyRuleValue) {
-          return mergeFrom((policy.Policy.PolicyRuleValue)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleValue other) {
-        if (other == policy.Policy.PolicyRuleValue.getDefaultInstance()) return this;
-        if (!other.getPolicyRuleValue().isEmpty()) {
-          policyRuleValue_ = other.policyRuleValue_;
-          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 {
-        policy.Policy.PolicyRuleValue parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleValue) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private java.lang.Object policyRuleValue_ = "";
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @return The policyRuleValue.
-       */
-      public java.lang.String getPolicyRuleValue() {
-        java.lang.Object ref = policyRuleValue_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          policyRuleValue_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @return The bytes for policyRuleValue.
-       */
-      public com.google.protobuf.ByteString
-          getPolicyRuleValueBytes() {
-        java.lang.Object ref = policyRuleValue_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          policyRuleValue_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @param value The policyRuleValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        policyRuleValue_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearPolicyRuleValue() {
-        
-        policyRuleValue_ = getDefaultInstance().getPolicyRuleValue();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string policyRuleValue = 1;</code>
-       * @param value The bytes for policyRuleValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setPolicyRuleValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        policyRuleValue_ = 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:policy.PolicyRuleValue)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleValue)
-    private static final policy.Policy.PolicyRuleValue DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleValue();
-    }
-
-    public static policy.Policy.PolicyRuleValue getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleValue>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleValue>() {
-      @java.lang.Override
-      public PolicyRuleValue parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleValue(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleValue> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleValue> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleValue getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleEvent)
-      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();
-  }
-  /**
-   * <pre>
-   * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
-   *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
-   * Event
-   * </pre>
-   *
-   * Protobuf type {@code policy.PolicyRuleEvent}
-   */
-  public static final class PolicyRuleEvent extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleEvent)
-      PolicyRuleEventOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleEvent.newBuilder() to construct.
-    private PolicyRuleEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleEvent() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleEvent();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleEvent(
-        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;
-            }
-            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 policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.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();
-    }
-
-    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());
-      }
-      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());
-      }
-      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 policy.Policy.PolicyRuleEvent)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleEvent other = (policy.Policy.PolicyRuleEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) 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();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleEvent parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleEvent 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 policy.Policy.PolicyRuleEvent parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleEvent 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 policy.Policy.PolicyRuleEvent parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleEvent 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(policy.Policy.PolicyRuleEvent 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>
-     * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
-     *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
-     * Event
-     * </pre>
-     *
-     * Protobuf type {@code policy.PolicyRuleEvent}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleEvent)
-        policy.Policy.PolicyRuleEventOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleEvent.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;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleEvent.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleEvent build() {
-        policy.Policy.PolicyRuleEvent result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleEvent buildPartial() {
-        policy.Policy.PolicyRuleEvent result = new policy.Policy.PolicyRuleEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.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 policy.Policy.PolicyRuleEvent) {
-          return mergeFrom((policy.Policy.PolicyRuleEvent)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleEvent other) {
-        if (other == policy.Policy.PolicyRuleEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        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 {
-        policy.Policy.PolicyRuleEvent parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleEvent) 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_;
-      }
-      @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:policy.PolicyRuleEvent)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleEvent)
-    private static final policy.Policy.PolicyRuleEvent DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleEvent();
-    }
-
-    public static policy.Policy.PolicyRuleEvent getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleEvent>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleEvent>() {
-      @java.lang.Override
-      public PolicyRuleEvent parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleEvent(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleEvent> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleEvent> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleConditionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleCondition)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return Whether the polRuleConditionVar field is set.
-     */
-    boolean hasPolRuleConditionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return The polRuleConditionVar.
-     */
-    policy.Policy.PolicyRuleVariable getPolRuleConditionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     */
-    policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder();
-
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return Whether the polRuleConditionVal field is set.
-     */
-    boolean hasPolRuleConditionVal();
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return The polRuleConditionVal.
-     */
-    policy.Policy.PolicyRuleValue getPolRuleConditionVal();
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     */
-    policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder();
-  }
-  /**
-   * <pre>
-   * Condition
-   * </pre>
-   *
-   * Protobuf type {@code policy.PolicyRuleCondition}
-   */
-  public static final class PolicyRuleCondition extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleCondition)
-      PolicyRuleConditionOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use PolicyRuleCondition.newBuilder() to construct.
-    private PolicyRuleCondition(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private PolicyRuleCondition() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new PolicyRuleCondition();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private PolicyRuleCondition(
-        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: {
-              policy.Policy.PolicyRuleVariable.Builder subBuilder = null;
-              if (polRuleConditionVar_ != null) {
-                subBuilder = polRuleConditionVar_.toBuilder();
-              }
-              polRuleConditionVar_ = input.readMessage(policy.Policy.PolicyRuleVariable.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleConditionVar_);
-                polRuleConditionVar_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              policy.Policy.PolicyRuleValue.Builder subBuilder = null;
-              if (polRuleConditionVal_ != null) {
-                subBuilder = polRuleConditionVal_.toBuilder();
-              }
-              polRuleConditionVal_ = input.readMessage(policy.Policy.PolicyRuleValue.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleConditionVal_);
-                polRuleConditionVal_ = 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 policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleCondition.class, policy.Policy.PolicyRuleCondition.Builder.class);
-    }
-
-    public static final int POLRULECONDITIONVAR_FIELD_NUMBER = 1;
-    private policy.Policy.PolicyRuleVariable polRuleConditionVar_;
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return Whether the polRuleConditionVar field is set.
-     */
-    @java.lang.Override
-    public boolean hasPolRuleConditionVar() {
-      return polRuleConditionVar_ != null;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     * @return The polRuleConditionVar.
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariable getPolRuleConditionVar() {
-      return polRuleConditionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder() {
-      return getPolRuleConditionVar();
-    }
-
-    public static final int POLRULECONDITIONVAL_FIELD_NUMBER = 2;
-    private policy.Policy.PolicyRuleValue polRuleConditionVal_;
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return Whether the polRuleConditionVal field is set.
-     */
-    @java.lang.Override
-    public boolean hasPolRuleConditionVal() {
-      return polRuleConditionVal_ != null;
-    }
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     * @return The polRuleConditionVal.
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleValue getPolRuleConditionVal() {
-      return polRuleConditionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
-    }
-    /**
-     * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder() {
-      return getPolRuleConditionVal();
-    }
-
-    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 (polRuleConditionVar_ != null) {
-        output.writeMessage(1, getPolRuleConditionVar());
-      }
-      if (polRuleConditionVal_ != null) {
-        output.writeMessage(2, getPolRuleConditionVal());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (polRuleConditionVar_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getPolRuleConditionVar());
-      }
-      if (polRuleConditionVal_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getPolRuleConditionVal());
-      }
-      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 policy.Policy.PolicyRuleCondition)) {
-        return super.equals(obj);
-      }
-      policy.Policy.PolicyRuleCondition other = (policy.Policy.PolicyRuleCondition) obj;
-
-      if (hasPolRuleConditionVar() != other.hasPolRuleConditionVar()) return false;
-      if (hasPolRuleConditionVar()) {
-        if (!getPolRuleConditionVar()
-            .equals(other.getPolRuleConditionVar())) return false;
-      }
-      if (hasPolRuleConditionVal() != other.hasPolRuleConditionVal()) return false;
-      if (hasPolRuleConditionVal()) {
-        if (!getPolRuleConditionVal()
-            .equals(other.getPolRuleConditionVal())) 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 (hasPolRuleConditionVar()) {
-        hash = (37 * hash) + POLRULECONDITIONVAR_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleConditionVar().hashCode();
-      }
-      if (hasPolRuleConditionVal()) {
-        hash = (37 * hash) + POLRULECONDITIONVAL_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleConditionVal().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static policy.Policy.PolicyRuleCondition parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleCondition 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 policy.Policy.PolicyRuleCondition parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleCondition 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 policy.Policy.PolicyRuleCondition parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static policy.Policy.PolicyRuleCondition 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(policy.Policy.PolicyRuleCondition 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>
-     * Condition
-     * </pre>
-     *
-     * Protobuf type {@code policy.PolicyRuleCondition}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleCondition)
-        policy.Policy.PolicyRuleConditionOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleCondition.class, policy.Policy.PolicyRuleCondition.Builder.class);
-      }
-
-      // Construct using policy.Policy.PolicyRuleCondition.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 (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVar_ = null;
-        } else {
-          polRuleConditionVar_ = null;
-          polRuleConditionVarBuilder_ = null;
-        }
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionVal_ = null;
-        } else {
-          polRuleConditionVal_ = null;
-          polRuleConditionValBuilder_ = null;
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleCondition_descriptor;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleCondition getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleCondition.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleCondition build() {
-        policy.Policy.PolicyRuleCondition result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public policy.Policy.PolicyRuleCondition buildPartial() {
-        policy.Policy.PolicyRuleCondition result = new policy.Policy.PolicyRuleCondition(this);
-        if (polRuleConditionVarBuilder_ == null) {
-          result.polRuleConditionVar_ = polRuleConditionVar_;
-        } else {
-          result.polRuleConditionVar_ = polRuleConditionVarBuilder_.build();
-        }
-        if (polRuleConditionValBuilder_ == null) {
-          result.polRuleConditionVal_ = polRuleConditionVal_;
-        } else {
-          result.polRuleConditionVal_ = polRuleConditionValBuilder_.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 policy.Policy.PolicyRuleCondition) {
-          return mergeFrom((policy.Policy.PolicyRuleCondition)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(policy.Policy.PolicyRuleCondition other) {
-        if (other == policy.Policy.PolicyRuleCondition.getDefaultInstance()) return this;
-        if (other.hasPolRuleConditionVar()) {
-          mergePolRuleConditionVar(other.getPolRuleConditionVar());
-        }
-        if (other.hasPolRuleConditionVal()) {
-          mergePolRuleConditionVal(other.getPolRuleConditionVal());
-        }
-        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 {
-        policy.Policy.PolicyRuleCondition parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleCondition) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      private policy.Policy.PolicyRuleVariable polRuleConditionVar_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> polRuleConditionVarBuilder_;
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       * @return Whether the polRuleConditionVar field is set.
-       */
-      public boolean hasPolRuleConditionVar() {
-        return polRuleConditionVarBuilder_ != null || polRuleConditionVar_ != null;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       * @return The polRuleConditionVar.
-       */
-      public policy.Policy.PolicyRuleVariable getPolRuleConditionVar() {
-        if (polRuleConditionVarBuilder_ == null) {
-          return polRuleConditionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
-        } else {
-          return polRuleConditionVarBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder setPolRuleConditionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleConditionVarBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          polRuleConditionVar_ = value;
-          onChanged();
-        } else {
-          polRuleConditionVarBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder setPolRuleConditionVar(
-          policy.Policy.PolicyRuleVariable.Builder builderForValue) {
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVar_ = builderForValue.build();
-          onChanged();
-        } else {
-          polRuleConditionVarBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder mergePolRuleConditionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleConditionVarBuilder_ == null) {
-          if (polRuleConditionVar_ != null) {
-            polRuleConditionVar_ =
-              policy.Policy.PolicyRuleVariable.newBuilder(polRuleConditionVar_).mergeFrom(value).buildPartial();
-          } else {
-            polRuleConditionVar_ = value;
-          }
-          onChanged();
-        } else {
-          polRuleConditionVarBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public Builder clearPolRuleConditionVar() {
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVar_ = null;
-          onChanged();
-        } else {
-          polRuleConditionVar_ = null;
-          polRuleConditionVarBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariable.Builder getPolRuleConditionVarBuilder() {
-        
-        onChanged();
-        return getPolRuleConditionVarFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleConditionVarOrBuilder() {
-        if (polRuleConditionVarBuilder_ != null) {
-          return polRuleConditionVarBuilder_.getMessageOrBuilder();
-        } else {
-          return polRuleConditionVar_ == null ?
-              policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleConditionVar_;
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleConditionVar = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> 
-          getPolRuleConditionVarFieldBuilder() {
-        if (polRuleConditionVarBuilder_ == null) {
-          polRuleConditionVarBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder>(
-                  getPolRuleConditionVar(),
-                  getParentForChildren(),
-                  isClean());
-          polRuleConditionVar_ = null;
-        }
-        return polRuleConditionVarBuilder_;
-      }
-
-      private policy.Policy.PolicyRuleValue polRuleConditionVal_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> polRuleConditionValBuilder_;
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       * @return Whether the polRuleConditionVal field is set.
-       */
-      public boolean hasPolRuleConditionVal() {
-        return polRuleConditionValBuilder_ != null || polRuleConditionVal_ != null;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       * @return The polRuleConditionVal.
-       */
-      public policy.Policy.PolicyRuleValue getPolRuleConditionVal() {
-        if (polRuleConditionValBuilder_ == null) {
-          return polRuleConditionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
-        } else {
-          return polRuleConditionValBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder setPolRuleConditionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleConditionValBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          polRuleConditionVal_ = value;
-          onChanged();
-        } else {
-          polRuleConditionValBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder setPolRuleConditionVal(
-          policy.Policy.PolicyRuleValue.Builder builderForValue) {
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionVal_ = builderForValue.build();
-          onChanged();
-        } else {
-          polRuleConditionValBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder mergePolRuleConditionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleConditionValBuilder_ == null) {
-          if (polRuleConditionVal_ != null) {
-            polRuleConditionVal_ =
-              policy.Policy.PolicyRuleValue.newBuilder(polRuleConditionVal_).mergeFrom(value).buildPartial();
-          } else {
-            polRuleConditionVal_ = value;
-          }
-          onChanged();
-        } else {
-          polRuleConditionValBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public Builder clearPolRuleConditionVal() {
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionVal_ = null;
-          onChanged();
-        } else {
-          polRuleConditionVal_ = null;
-          polRuleConditionValBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public policy.Policy.PolicyRuleValue.Builder getPolRuleConditionValBuilder() {
-        
-        onChanged();
-        return getPolRuleConditionValFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      public policy.Policy.PolicyRuleValueOrBuilder getPolRuleConditionValOrBuilder() {
-        if (polRuleConditionValBuilder_ != null) {
-          return polRuleConditionValBuilder_.getMessageOrBuilder();
-        } else {
-          return polRuleConditionVal_ == null ?
-              policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleConditionVal_;
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleValue polRuleConditionVal = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> 
-          getPolRuleConditionValFieldBuilder() {
-        if (polRuleConditionValBuilder_ == null) {
-          polRuleConditionValBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder>(
-                  getPolRuleConditionVal(),
-                  getParentForChildren(),
-                  isClean());
-          polRuleConditionVal_ = null;
-        }
-        return polRuleConditionValBuilder_;
-      }
-      @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:policy.PolicyRuleCondition)
-    }
-
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleCondition)
-    private static final policy.Policy.PolicyRuleCondition DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleCondition();
-    }
-
-    public static policy.Policy.PolicyRuleCondition getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<PolicyRuleCondition>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleCondition>() {
-      @java.lang.Override
-      public PolicyRuleCondition parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleCondition(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<PolicyRuleCondition> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleCondition> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public policy.Policy.PolicyRuleCondition getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface PolicyRuleActionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleAction)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return Whether the polRuleActionVar field is set.
-     */
-    boolean hasPolRuleActionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return The polRuleActionVar.
-     */
-    policy.Policy.PolicyRuleVariable getPolRuleActionVar();
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     */
-    policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder();
+  public interface PolicyRuleEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleEvent)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return Whether the polRuleActionVal field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasPolRuleActionVal();
+    boolean hasEvent();
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return The polRuleActionVal.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    policy.Policy.PolicyRuleValue getPolRuleActionVal();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
   }
   /**
    * <pre>
-   * Action
+   * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
+   *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
+   * Event
    * </pre>
    *
-   * Protobuf type {@code policy.PolicyRuleAction}
+   * Protobuf type {@code policy.PolicyRuleEvent}
    */
-  public static final class PolicyRuleAction extends
+  public static final class PolicyRuleEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:policy.PolicyRuleAction)
-      PolicyRuleActionOrBuilder {
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleEvent)
+      PolicyRuleEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use PolicyRuleAction.newBuilder() to construct.
-    private PolicyRuleAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use PolicyRuleEvent.newBuilder() to construct.
+    private PolicyRuleEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private PolicyRuleAction() {
+    private PolicyRuleEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new PolicyRuleAction();
+      return new PolicyRuleEvent();
     }
 
     @java.lang.Override
@@ -4294,7 +1680,7 @@ public final class Policy {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private PolicyRuleAction(
+    private PolicyRuleEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4313,27 +1699,14 @@ public final class Policy {
               done = true;
               break;
             case 10: {
-              policy.Policy.PolicyRuleVariable.Builder subBuilder = null;
-              if (polRuleActionVar_ != null) {
-                subBuilder = polRuleActionVar_.toBuilder();
-              }
-              polRuleActionVar_ = input.readMessage(policy.Policy.PolicyRuleVariable.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleActionVar_);
-                polRuleActionVar_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              policy.Policy.PolicyRuleValue.Builder subBuilder = null;
-              if (polRuleActionVal_ != null) {
-                subBuilder = polRuleActionVal_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              polRuleActionVal_ = input.readMessage(policy.Policy.PolicyRuleValue.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(polRuleActionVal_);
-                polRuleActionVal_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
               }
 
               break;
@@ -4359,67 +1732,41 @@ public final class Policy {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+      return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return policy.Policy.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+      return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              policy.Policy.PolicyRuleAction.class, policy.Policy.PolicyRuleAction.Builder.class);
-    }
-
-    public static final int POLRULEACTIONVAR_FIELD_NUMBER = 1;
-    private policy.Policy.PolicyRuleVariable polRuleActionVar_;
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return Whether the polRuleActionVar field is set.
-     */
-    @java.lang.Override
-    public boolean hasPolRuleActionVar() {
-      return polRuleActionVar_ != null;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     * @return The polRuleActionVar.
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariable getPolRuleActionVar() {
-      return polRuleActionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
-    }
-    /**
-     * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-     */
-    @java.lang.Override
-    public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder() {
-      return getPolRuleActionVar();
+              policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
     }
 
-    public static final int POLRULEACTIONVAL_FIELD_NUMBER = 2;
-    private policy.Policy.PolicyRuleValue polRuleActionVal_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return Whether the polRuleActionVal field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasPolRuleActionVal() {
-      return polRuleActionVal_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-     * @return The polRuleActionVal.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleValue getPolRuleActionVal() {
-      return polRuleActionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder() {
-      return getPolRuleActionVal();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4436,11 +1783,8 @@ public final class Policy {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (polRuleActionVar_ != null) {
-        output.writeMessage(1, getPolRuleActionVar());
-      }
-      if (polRuleActionVal_ != null) {
-        output.writeMessage(2, getPolRuleActionVal());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
       unknownFields.writeTo(output);
     }
@@ -4451,13 +1795,9 @@ public final class Policy {
       if (size != -1) return size;
 
       size = 0;
-      if (polRuleActionVar_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getPolRuleActionVar());
-      }
-      if (polRuleActionVal_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getPolRuleActionVal());
+          .computeMessageSize(1, getEvent());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4469,20 +1809,15 @@ public final class Policy {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof policy.Policy.PolicyRuleAction)) {
+      if (!(obj instanceof policy.Policy.PolicyRuleEvent)) {
         return super.equals(obj);
       }
-      policy.Policy.PolicyRuleAction other = (policy.Policy.PolicyRuleAction) obj;
+      policy.Policy.PolicyRuleEvent other = (policy.Policy.PolicyRuleEvent) obj;
 
-      if (hasPolRuleActionVar() != other.hasPolRuleActionVar()) return false;
-      if (hasPolRuleActionVar()) {
-        if (!getPolRuleActionVar()
-            .equals(other.getPolRuleActionVar())) return false;
-      }
-      if (hasPolRuleActionVal() != other.hasPolRuleActionVal()) return false;
-      if (hasPolRuleActionVal()) {
-        if (!getPolRuleActionVal()
-            .equals(other.getPolRuleActionVal())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -4495,82 +1830,78 @@ public final class Policy {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasPolRuleActionVar()) {
-        hash = (37 * hash) + POLRULEACTIONVAR_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleActionVar().hashCode();
-      }
-      if (hasPolRuleActionVal()) {
-        hash = (37 * hash) + POLRULEACTIONVAL_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleActionVal().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(byte[] data)
+    public static policy.Policy.PolicyRuleEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(java.io.InputStream input)
+    public static policy.Policy.PolicyRuleEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent 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 policy.Policy.PolicyRuleAction parseDelimitedFrom(java.io.InputStream input)
+    public static policy.Policy.PolicyRuleEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static policy.Policy.PolicyRuleAction parseDelimitedFrom(
+    public static policy.Policy.PolicyRuleEvent 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 policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static policy.Policy.PolicyRuleAction parseFrom(
+    public static policy.Policy.PolicyRuleEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -4583,7 +1914,7 @@ public final class Policy {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(policy.Policy.PolicyRuleAction prototype) {
+    public static Builder newBuilder(policy.Policy.PolicyRuleEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -4600,29 +1931,31 @@ public final class Policy {
     }
     /**
      * <pre>
-     * Action
+     * IETF draft: Framework for Use of ECA (Event Condition Action) in Network Self Management
+     *     Source: https://datatracker.ietf.org/doc/draft-bwd-netmod-eca-framework/
+     * Event
      * </pre>
      *
-     * Protobuf type {@code policy.PolicyRuleAction}
+     * Protobuf type {@code policy.PolicyRuleEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleAction)
-        policy.Policy.PolicyRuleActionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleEvent)
+        policy.Policy.PolicyRuleEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return policy.Policy.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                policy.Policy.PolicyRuleAction.class, policy.Policy.PolicyRuleAction.Builder.class);
+                policy.Policy.PolicyRuleEvent.class, policy.Policy.PolicyRuleEvent.Builder.class);
       }
 
-      // Construct using policy.Policy.PolicyRuleAction.newBuilder()
+      // Construct using policy.Policy.PolicyRuleEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -4640,17 +1973,11 @@ public final class Policy {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVar_ = null;
-        } else {
-          polRuleActionVar_ = null;
-          polRuleActionVarBuilder_ = null;
-        }
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionVal_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          polRuleActionVal_ = null;
-          polRuleActionValBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
         return this;
       }
@@ -4658,17 +1985,17 @@ public final class Policy {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return policy.Policy.internal_static_policy_PolicyRuleAction_descriptor;
+        return policy.Policy.internal_static_policy_PolicyRuleEvent_descriptor;
       }
 
       @java.lang.Override
-      public policy.Policy.PolicyRuleAction getDefaultInstanceForType() {
-        return policy.Policy.PolicyRuleAction.getDefaultInstance();
+      public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
+        return policy.Policy.PolicyRuleEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public policy.Policy.PolicyRuleAction build() {
-        policy.Policy.PolicyRuleAction result = buildPartial();
+      public policy.Policy.PolicyRuleEvent build() {
+        policy.Policy.PolicyRuleEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -4676,17 +2003,12 @@ public final class Policy {
       }
 
       @java.lang.Override
-      public policy.Policy.PolicyRuleAction buildPartial() {
-        policy.Policy.PolicyRuleAction result = new policy.Policy.PolicyRuleAction(this);
-        if (polRuleActionVarBuilder_ == null) {
-          result.polRuleActionVar_ = polRuleActionVar_;
-        } else {
-          result.polRuleActionVar_ = polRuleActionVarBuilder_.build();
-        }
-        if (polRuleActionValBuilder_ == null) {
-          result.polRuleActionVal_ = polRuleActionVal_;
+      public policy.Policy.PolicyRuleEvent buildPartial() {
+        policy.Policy.PolicyRuleEvent result = new policy.Policy.PolicyRuleEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.polRuleActionVal_ = polRuleActionValBuilder_.build();
+          result.event_ = eventBuilder_.build();
         }
         onBuilt();
         return result;
@@ -4726,21 +2048,18 @@ public final class Policy {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof policy.Policy.PolicyRuleAction) {
-          return mergeFrom((policy.Policy.PolicyRuleAction)other);
+        if (other instanceof policy.Policy.PolicyRuleEvent) {
+          return mergeFrom((policy.Policy.PolicyRuleEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(policy.Policy.PolicyRuleAction other) {
-        if (other == policy.Policy.PolicyRuleAction.getDefaultInstance()) return this;
-        if (other.hasPolRuleActionVar()) {
-          mergePolRuleActionVar(other.getPolRuleActionVar());
-        }
-        if (other.hasPolRuleActionVal()) {
-          mergePolRuleActionVal(other.getPolRuleActionVal());
+      public Builder mergeFrom(policy.Policy.PolicyRuleEvent other) {
+        if (other == policy.Policy.PolicyRuleEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -4757,11 +2076,11 @@ public final class Policy {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        policy.Policy.PolicyRuleAction parsedMessage = null;
+        policy.Policy.PolicyRuleEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (policy.Policy.PolicyRuleAction) e.getUnfinishedMessage();
+          parsedMessage = (policy.Policy.PolicyRuleEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -4771,242 +2090,123 @@ public final class Policy {
         return this;
       }
 
-      private policy.Policy.PolicyRuleVariable polRuleActionVar_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> polRuleActionVarBuilder_;
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       * @return Whether the polRuleActionVar field is set.
-       */
-      public boolean hasPolRuleActionVar() {
-        return polRuleActionVarBuilder_ != null || polRuleActionVar_ != null;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       * @return The polRuleActionVar.
-       */
-      public policy.Policy.PolicyRuleVariable getPolRuleActionVar() {
-        if (polRuleActionVarBuilder_ == null) {
-          return polRuleActionVar_ == null ? policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
-        } else {
-          return polRuleActionVarBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder setPolRuleActionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleActionVarBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          polRuleActionVar_ = value;
-          onChanged();
-        } else {
-          polRuleActionVarBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder setPolRuleActionVar(
-          policy.Policy.PolicyRuleVariable.Builder builderForValue) {
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVar_ = builderForValue.build();
-          onChanged();
-        } else {
-          polRuleActionVarBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder mergePolRuleActionVar(policy.Policy.PolicyRuleVariable value) {
-        if (polRuleActionVarBuilder_ == null) {
-          if (polRuleActionVar_ != null) {
-            polRuleActionVar_ =
-              policy.Policy.PolicyRuleVariable.newBuilder(polRuleActionVar_).mergeFrom(value).buildPartial();
-          } else {
-            polRuleActionVar_ = value;
-          }
-          onChanged();
-        } else {
-          polRuleActionVarBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public Builder clearPolRuleActionVar() {
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVar_ = null;
-          onChanged();
-        } else {
-          polRuleActionVar_ = null;
-          polRuleActionVarBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariable.Builder getPolRuleActionVarBuilder() {
-        
-        onChanged();
-        return getPolRuleActionVarFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      public policy.Policy.PolicyRuleVariableOrBuilder getPolRuleActionVarOrBuilder() {
-        if (polRuleActionVarBuilder_ != null) {
-          return polRuleActionVarBuilder_.getMessageOrBuilder();
-        } else {
-          return polRuleActionVar_ == null ?
-              policy.Policy.PolicyRuleVariable.getDefaultInstance() : polRuleActionVar_;
-        }
-      }
-      /**
-       * <code>.policy.PolicyRuleVariable polRuleActionVar = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder> 
-          getPolRuleActionVarFieldBuilder() {
-        if (polRuleActionVarBuilder_ == null) {
-          polRuleActionVarBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleVariable, policy.Policy.PolicyRuleVariable.Builder, policy.Policy.PolicyRuleVariableOrBuilder>(
-                  getPolRuleActionVar(),
-                  getParentForChildren(),
-                  isClean());
-          polRuleActionVar_ = null;
-        }
-        return polRuleActionVarBuilder_;
-      }
-
-      private policy.Policy.PolicyRuleValue polRuleActionVal_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> polRuleActionValBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-       * @return Whether the polRuleActionVal field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasPolRuleActionVal() {
-        return polRuleActionValBuilder_ != null || polRuleActionVal_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
-       * @return The polRuleActionVal.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public policy.Policy.PolicyRuleValue getPolRuleActionVal() {
-        if (polRuleActionValBuilder_ == null) {
-          return polRuleActionVal_ == null ? policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return polRuleActionValBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setPolRuleActionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleActionValBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          polRuleActionVal_ = value;
+          event_ = value;
           onChanged();
         } else {
-          polRuleActionValBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setPolRuleActionVal(
-          policy.Policy.PolicyRuleValue.Builder builderForValue) {
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionVal_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          polRuleActionValBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergePolRuleActionVal(policy.Policy.PolicyRuleValue value) {
-        if (polRuleActionValBuilder_ == null) {
-          if (polRuleActionVal_ != null) {
-            polRuleActionVal_ =
-              policy.Policy.PolicyRuleValue.newBuilder(polRuleActionVal_).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 {
-            polRuleActionVal_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          polRuleActionValBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearPolRuleActionVal() {
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionVal_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          polRuleActionVal_ = null;
-          polRuleActionValBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public policy.Policy.PolicyRuleValue.Builder getPolRuleActionValBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getPolRuleActionValFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public policy.Policy.PolicyRuleValueOrBuilder getPolRuleActionValOrBuilder() {
-        if (polRuleActionValBuilder_ != null) {
-          return polRuleActionValBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return polRuleActionVal_ == null ?
-              policy.Policy.PolicyRuleValue.getDefaultInstance() : polRuleActionVal_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.policy.PolicyRuleValue polRuleActionVal = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder> 
-          getPolRuleActionValFieldBuilder() {
-        if (polRuleActionValBuilder_ == null) {
-          polRuleActionValBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              policy.Policy.PolicyRuleValue, policy.Policy.PolicyRuleValue.Builder, policy.Policy.PolicyRuleValueOrBuilder>(
-                  getPolRuleActionVal(),
+          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());
-          polRuleActionVal_ = null;
+          event_ = null;
         }
-        return polRuleActionValBuilder_;
+        return eventBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -5021,41 +2221,41 @@ public final class Policy {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleAction)
+      // @@protoc_insertion_point(builder_scope:policy.PolicyRuleEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:policy.PolicyRuleAction)
-    private static final policy.Policy.PolicyRuleAction DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleEvent)
+    private static final policy.Policy.PolicyRuleEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleAction();
+      DEFAULT_INSTANCE = new policy.Policy.PolicyRuleEvent();
     }
 
-    public static policy.Policy.PolicyRuleAction getDefaultInstance() {
+    public static policy.Policy.PolicyRuleEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<PolicyRuleAction>
-        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleAction>() {
+    private static final com.google.protobuf.Parser<PolicyRuleEvent>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleEvent>() {
       @java.lang.Override
-      public PolicyRuleAction parsePartialFrom(
+      public PolicyRuleEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new PolicyRuleAction(input, extensionRegistry);
+        return new PolicyRuleEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<PolicyRuleAction> parser() {
+    public static com.google.protobuf.Parser<PolicyRuleEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<PolicyRuleAction> getParserForType() {
+    public com.google.protobuf.Parser<PolicyRuleEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public policy.Policy.PolicyRuleAction getDefaultInstanceForType() {
+    public policy.Policy.PolicyRuleEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -5104,10 +2304,10 @@ public final class Policy {
     policy.Policy.PolicyRuleType getPolicyRuleType();
 
     /**
-     * <code>uint32 PolicyRulePriority = 3;</code>
-     * @return The policyRulePriority.
+     * <code>uint32 priority = 3;</code>
+     * @return The priority.
      */
-    int getPolicyRulePriority();
+    int getPriority();
 
     /**
      * <pre>
@@ -5141,153 +2341,155 @@ public final class Policy {
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    java.util.List<policy.Policy.PolicyRuleCondition> 
-        getPolRuleConditionListList();
+    java.util.List<policy.PolicyCondition.PolicyRuleCondition> 
+        getConditionListList();
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index);
+    policy.PolicyCondition.PolicyRuleCondition getConditionList(int index);
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    int getPolRuleConditionListCount();
+    int getConditionListCount();
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
-        getPolRuleConditionListOrBuilderList();
+    java.util.List<? extends policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+        getConditionListOrBuilderList();
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
-    policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+    policy.PolicyCondition.PolicyRuleConditionOrBuilder getConditionListOrBuilder(
         int index);
 
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The enum numeric value on the wire for booleanOperator.
      */
-    java.util.List<policy.Policy.PolicyRuleAction> 
-        getPolRuleActionListList();
+    int getBooleanOperatorValue();
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The booleanOperator.
      */
-    policy.Policy.PolicyRuleAction getPolRuleActionList(int index);
+    policy.PolicyCondition.BooleanOperator getBooleanOperator();
+
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    int getPolRuleActionListCount();
+    java.util.List<policy.PolicyAction.PolicyRuleAction> 
+        getActionListList();
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
-        getPolRuleActionListOrBuilderList();
+    policy.PolicyAction.PolicyRuleAction getActionList(int index);
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
-        int index);
-
+    int getActionListCount();
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceListList();
+    java.util.List<? extends policy.PolicyAction.PolicyRuleActionOrBuilder> 
+        getActionListOrBuilderList();
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
-    context.ContextOuterClass.ServiceId getServiceList(int index);
+    policy.PolicyAction.PolicyRuleActionOrBuilder getActionListOrBuilder(
+        int index);
+
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return Whether the serviceId field is set.
      */
-    int getServiceListCount();
+    boolean hasServiceId();
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return The serviceId.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceListOrBuilderList();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
-        int index);
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
 
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     java.util.List<context.ContextOuterClass.DeviceId> 
         getDeviceListList();
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     context.ContextOuterClass.DeviceId getDeviceList(int index);
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     int getDeviceListCount();
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
         getDeviceListOrBuilderList();
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
         int index);
@@ -5313,9 +2515,9 @@ public final class Policy {
     }
     private PolicyRule() {
       policyRuleType_ = 0;
-      polRuleConditionList_ = java.util.Collections.emptyList();
-      polRuleActionList_ = java.util.Collections.emptyList();
-      serviceList_ = java.util.Collections.emptyList();
+      conditionList_ = java.util.Collections.emptyList();
+      booleanOperator_ = 0;
+      actionList_ = java.util.Collections.emptyList();
       deviceList_ = java.util.Collections.emptyList();
     }
 
@@ -5371,7 +2573,7 @@ public final class Policy {
             }
             case 24: {
 
-              policyRulePriority_ = input.readUInt32();
+              priority_ = input.readUInt32();
               break;
             }
             case 34: {
@@ -5389,35 +2591,45 @@ public final class Policy {
             }
             case 42: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                polRuleConditionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleCondition>();
+                conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              polRuleConditionList_.add(
-                  input.readMessage(policy.Policy.PolicyRuleCondition.parser(), extensionRegistry));
+              conditionList_.add(
+                  input.readMessage(policy.PolicyCondition.PolicyRuleCondition.parser(), extensionRegistry));
               break;
             }
-            case 50: {
+            case 48: {
+              int rawValue = input.readEnum();
+
+              booleanOperator_ = rawValue;
+              break;
+            }
+            case 58: {
               if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                polRuleActionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleAction>();
+                actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>();
                 mutable_bitField0_ |= 0x00000002;
               }
-              polRuleActionList_.add(
-                  input.readMessage(policy.Policy.PolicyRuleAction.parser(), extensionRegistry));
+              actionList_.add(
+                  input.readMessage(policy.PolicyAction.PolicyRuleAction.parser(), extensionRegistry));
               break;
             }
-            case 58: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                serviceList_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000004;
+            case 66: {
+              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();
               }
-              serviceList_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+
               break;
             }
-            case 66: {
-              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
+            case 74: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                 deviceList_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
-                mutable_bitField0_ |= 0x00000008;
+                mutable_bitField0_ |= 0x00000004;
               }
               deviceList_.add(
                   input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
@@ -5439,15 +2651,12 @@ public final class Policy {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          polRuleConditionList_ = java.util.Collections.unmodifiableList(polRuleConditionList_);
+          conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
         }
         if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          polRuleActionList_ = java.util.Collections.unmodifiableList(polRuleActionList_);
+          actionList_ = java.util.Collections.unmodifiableList(actionList_);
         }
         if (((mutable_bitField0_ & 0x00000004) != 0)) {
-          serviceList_ = java.util.Collections.unmodifiableList(serviceList_);
-        }
-        if (((mutable_bitField0_ & 0x00000008) != 0)) {
           deviceList_ = java.util.Collections.unmodifiableList(deviceList_);
         }
         this.unknownFields = unknownFields.build();
@@ -5524,15 +2733,15 @@ public final class Policy {
       return result == null ? policy.Policy.PolicyRuleType.UNRECOGNIZED : result;
     }
 
-    public static final int POLICYRULEPRIORITY_FIELD_NUMBER = 3;
-    private int policyRulePriority_;
+    public static final int PRIORITY_FIELD_NUMBER = 3;
+    private int priority_;
     /**
-     * <code>uint32 PolicyRulePriority = 3;</code>
-     * @return The policyRulePriority.
+     * <code>uint32 priority = 3;</code>
+     * @return The priority.
      */
     @java.lang.Override
-    public int getPolicyRulePriority() {
-      return policyRulePriority_;
+    public int getPriority() {
+      return priority_;
     }
 
     public static final int EVENT_FIELD_NUMBER = 4;
@@ -5573,197 +2782,202 @@ public final class Policy {
       return getEvent();
     }
 
-    public static final int POLRULECONDITIONLIST_FIELD_NUMBER = 5;
-    private java.util.List<policy.Policy.PolicyRuleCondition> polRuleConditionList_;
+    public static final int CONDITIONLIST_FIELD_NUMBER = 5;
+    private java.util.List<policy.PolicyCondition.PolicyRuleCondition> conditionList_;
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public java.util.List<policy.Policy.PolicyRuleCondition> getPolRuleConditionListList() {
-      return polRuleConditionList_;
+    public java.util.List<policy.PolicyCondition.PolicyRuleCondition> getConditionListList() {
+      return conditionList_;
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
-        getPolRuleConditionListOrBuilderList() {
-      return polRuleConditionList_;
+    public java.util.List<? extends policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+        getConditionListOrBuilderList() {
+      return conditionList_;
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public int getPolRuleConditionListCount() {
-      return polRuleConditionList_.size();
+    public int getConditionListCount() {
+      return conditionList_.size();
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index) {
-      return polRuleConditionList_.get(index);
+    public policy.PolicyCondition.PolicyRuleCondition getConditionList(int index) {
+      return conditionList_.get(index);
     }
     /**
      * <pre>
      * One or more conditions must be met
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+     * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+    public policy.PolicyCondition.PolicyRuleConditionOrBuilder getConditionListOrBuilder(
         int index) {
-      return polRuleConditionList_.get(index);
+      return conditionList_.get(index);
     }
 
-    public static final int POLRULEACTIONLIST_FIELD_NUMBER = 6;
-    private java.util.List<policy.Policy.PolicyRuleAction> polRuleActionList_;
+    public static final int BOOLEANOPERATOR_FIELD_NUMBER = 6;
+    private int booleanOperator_;
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The enum numeric value on the wire for booleanOperator.
      */
-    @java.lang.Override
-    public java.util.List<policy.Policy.PolicyRuleAction> getPolRuleActionListList() {
-      return polRuleActionList_;
+    @java.lang.Override public int getBooleanOperatorValue() {
+      return booleanOperator_;
     }
     /**
      * <pre>
-     * One or more actions should be applied
+     * Evaluation operator to be used
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+     * @return The booleanOperator.
      */
-    @java.lang.Override
-    public java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
-        getPolRuleActionListOrBuilderList() {
-      return polRuleActionList_;
+    @java.lang.Override public policy.PolicyCondition.BooleanOperator getBooleanOperator() {
+      @SuppressWarnings("deprecation")
+      policy.PolicyCondition.BooleanOperator result = policy.PolicyCondition.BooleanOperator.valueOf(booleanOperator_);
+      return result == null ? policy.PolicyCondition.BooleanOperator.UNRECOGNIZED : result;
     }
+
+    public static final int ACTIONLIST_FIELD_NUMBER = 7;
+    private java.util.List<policy.PolicyAction.PolicyRuleAction> actionList_;
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public int getPolRuleActionListCount() {
-      return polRuleActionList_.size();
+    public java.util.List<policy.PolicyAction.PolicyRuleAction> getActionListList() {
+      return actionList_;
     }
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleAction getPolRuleActionList(int index) {
-      return polRuleActionList_.get(index);
+    public java.util.List<? extends policy.PolicyAction.PolicyRuleActionOrBuilder> 
+        getActionListOrBuilderList() {
+      return actionList_;
     }
     /**
      * <pre>
      * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
-        int index) {
-      return polRuleActionList_.get(index);
+    public int getActionListCount() {
+      return actionList_.size();
     }
-
-    public static final int SERVICELIST_FIELD_NUMBER = 7;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceList_;
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceListList() {
-      return serviceList_;
+    public policy.PolicyAction.PolicyRuleAction getActionList(int index) {
+      return actionList_.get(index);
     }
     /**
      * <pre>
-     * Affected services and devices
+     * One or more actions should be applied
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceListOrBuilderList() {
-      return serviceList_;
+    public policy.PolicyAction.PolicyRuleActionOrBuilder getActionListOrBuilder(
+        int index) {
+      return actionList_.get(index);
     }
+
+    public static final int SERVICEID_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public int getServiceListCount() {
-      return serviceList_.size();
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceList(int index) {
-      return serviceList_.get(index);
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
      * <pre>
-     * Affected services and devices
+     * Affected service and devices
      * </pre>
      *
-     * <code>repeated .context.ServiceId serviceList = 7;</code>
+     * <code>.context.ServiceId serviceId = 8;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
-        int index) {
-      return serviceList_.get(index);
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
 
-    public static final int DEVICELIST_FIELD_NUMBER = 8;
+    public static final int DEVICELIST_FIELD_NUMBER = 9;
     private java.util.List<context.ContextOuterClass.DeviceId> deviceList_;
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public java.util.List<context.ContextOuterClass.DeviceId> getDeviceListList() {
       return deviceList_;
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
@@ -5771,21 +2985,21 @@ public final class Policy {
       return deviceList_;
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public int getDeviceListCount() {
       return deviceList_.size();
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceId getDeviceList(int index) {
       return deviceList_.get(index);
     }
     /**
-     * <code>repeated .context.DeviceId deviceList = 8;</code>
+     * <code>repeated .context.DeviceId deviceList = 9;</code>
      */
     @java.lang.Override
     public context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
@@ -5813,23 +3027,26 @@ public final class Policy {
       if (policyRuleType_ != policy.Policy.PolicyRuleType.POLICYTYPE_DEVICE.getNumber()) {
         output.writeEnum(2, policyRuleType_);
       }
-      if (policyRulePriority_ != 0) {
-        output.writeUInt32(3, policyRulePriority_);
+      if (priority_ != 0) {
+        output.writeUInt32(3, priority_);
       }
       if (event_ != null) {
         output.writeMessage(4, getEvent());
       }
-      for (int i = 0; i < polRuleConditionList_.size(); i++) {
-        output.writeMessage(5, polRuleConditionList_.get(i));
+      for (int i = 0; i < conditionList_.size(); i++) {
+        output.writeMessage(5, conditionList_.get(i));
+      }
+      if (booleanOperator_ != policy.PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED.getNumber()) {
+        output.writeEnum(6, booleanOperator_);
       }
-      for (int i = 0; i < polRuleActionList_.size(); i++) {
-        output.writeMessage(6, polRuleActionList_.get(i));
+      for (int i = 0; i < actionList_.size(); i++) {
+        output.writeMessage(7, actionList_.get(i));
       }
-      for (int i = 0; i < serviceList_.size(); i++) {
-        output.writeMessage(7, serviceList_.get(i));
+      if (serviceId_ != null) {
+        output.writeMessage(8, getServiceId());
       }
       for (int i = 0; i < deviceList_.size(); i++) {
-        output.writeMessage(8, deviceList_.get(i));
+        output.writeMessage(9, deviceList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -5848,29 +3065,33 @@ public final class Policy {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(2, policyRuleType_);
       }
-      if (policyRulePriority_ != 0) {
+      if (priority_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeUInt32Size(3, policyRulePriority_);
+          .computeUInt32Size(3, priority_);
       }
       if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(4, getEvent());
       }
-      for (int i = 0; i < polRuleConditionList_.size(); i++) {
+      for (int i = 0; i < conditionList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, conditionList_.get(i));
+      }
+      if (booleanOperator_ != policy.PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, polRuleConditionList_.get(i));
+          .computeEnumSize(6, booleanOperator_);
       }
-      for (int i = 0; i < polRuleActionList_.size(); i++) {
+      for (int i = 0; i < actionList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, polRuleActionList_.get(i));
+          .computeMessageSize(7, actionList_.get(i));
       }
-      for (int i = 0; i < serviceList_.size(); i++) {
+      if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, serviceList_.get(i));
+          .computeMessageSize(8, getServiceId());
       }
       for (int i = 0; i < deviceList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(8, deviceList_.get(i));
+          .computeMessageSize(9, deviceList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -5893,19 +3114,23 @@ public final class Policy {
             .equals(other.getPolicyRuleId())) return false;
       }
       if (policyRuleType_ != other.policyRuleType_) return false;
-      if (getPolicyRulePriority()
-          != other.getPolicyRulePriority()) return false;
+      if (getPriority()
+          != other.getPriority()) return false;
       if (hasEvent() != other.hasEvent()) return false;
       if (hasEvent()) {
         if (!getEvent()
             .equals(other.getEvent())) return false;
       }
-      if (!getPolRuleConditionListList()
-          .equals(other.getPolRuleConditionListList())) return false;
-      if (!getPolRuleActionListList()
-          .equals(other.getPolRuleActionListList())) return false;
-      if (!getServiceListList()
-          .equals(other.getServiceListList())) return false;
+      if (!getConditionListList()
+          .equals(other.getConditionListList())) return false;
+      if (booleanOperator_ != other.booleanOperator_) return false;
+      if (!getActionListList()
+          .equals(other.getActionListList())) return false;
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
       if (!getDeviceListList()
           .equals(other.getDeviceListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
@@ -5925,23 +3150,25 @@ public final class Policy {
       }
       hash = (37 * hash) + POLICYRULETYPE_FIELD_NUMBER;
       hash = (53 * hash) + policyRuleType_;
-      hash = (37 * hash) + POLICYRULEPRIORITY_FIELD_NUMBER;
-      hash = (53 * hash) + getPolicyRulePriority();
+      hash = (37 * hash) + PRIORITY_FIELD_NUMBER;
+      hash = (53 * hash) + getPriority();
       if (hasEvent()) {
         hash = (37 * hash) + EVENT_FIELD_NUMBER;
         hash = (53 * hash) + getEvent().hashCode();
       }
-      if (getPolRuleConditionListCount() > 0) {
-        hash = (37 * hash) + POLRULECONDITIONLIST_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleConditionListList().hashCode();
+      if (getConditionListCount() > 0) {
+        hash = (37 * hash) + CONDITIONLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getConditionListList().hashCode();
       }
-      if (getPolRuleActionListCount() > 0) {
-        hash = (37 * hash) + POLRULEACTIONLIST_FIELD_NUMBER;
-        hash = (53 * hash) + getPolRuleActionListList().hashCode();
+      hash = (37 * hash) + BOOLEANOPERATOR_FIELD_NUMBER;
+      hash = (53 * hash) + booleanOperator_;
+      if (getActionListCount() > 0) {
+        hash = (37 * hash) + ACTIONLIST_FIELD_NUMBER;
+        hash = (53 * hash) + getActionListList().hashCode();
       }
-      if (getServiceListCount() > 0) {
-        hash = (37 * hash) + SERVICELIST_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceListList().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICEID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
       }
       if (getDeviceListCount() > 0) {
         hash = (37 * hash) + DEVICELIST_FIELD_NUMBER;
@@ -6082,9 +3309,8 @@ public final class Policy {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPolRuleConditionListFieldBuilder();
-          getPolRuleActionListFieldBuilder();
-          getServiceListFieldBuilder();
+          getConditionListFieldBuilder();
+          getActionListFieldBuilder();
           getDeviceListFieldBuilder();
         }
       }
@@ -6099,7 +3325,7 @@ public final class Policy {
         }
         policyRuleType_ = 0;
 
-        policyRulePriority_ = 0;
+        priority_ = 0;
 
         if (eventBuilder_ == null) {
           event_ = null;
@@ -6107,27 +3333,29 @@ public final class Policy {
           event_ = null;
           eventBuilder_ = null;
         }
-        if (polRuleConditionListBuilder_ == null) {
-          polRuleConditionList_ = java.util.Collections.emptyList();
+        if (conditionListBuilder_ == null) {
+          conditionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          polRuleConditionListBuilder_.clear();
+          conditionListBuilder_.clear();
         }
-        if (polRuleActionListBuilder_ == null) {
-          polRuleActionList_ = java.util.Collections.emptyList();
+        booleanOperator_ = 0;
+
+        if (actionListBuilder_ == null) {
+          actionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
         } else {
-          polRuleActionListBuilder_.clear();
+          actionListBuilder_.clear();
         }
-        if (serviceListBuilder_ == null) {
-          serviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
         } else {
-          serviceListBuilder_.clear();
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
         if (deviceListBuilder_ == null) {
           deviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+          bitField0_ = (bitField0_ & ~0x00000004);
         } else {
           deviceListBuilder_.clear();
         }
@@ -6164,43 +3392,40 @@ public final class Policy {
           result.policyRuleId_ = policyRuleIdBuilder_.build();
         }
         result.policyRuleType_ = policyRuleType_;
-        result.policyRulePriority_ = policyRulePriority_;
+        result.priority_ = priority_;
         if (eventBuilder_ == null) {
           result.event_ = event_;
         } else {
           result.event_ = eventBuilder_.build();
         }
-        if (polRuleConditionListBuilder_ == null) {
+        if (conditionListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            polRuleConditionList_ = java.util.Collections.unmodifiableList(polRuleConditionList_);
+            conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.polRuleConditionList_ = polRuleConditionList_;
+          result.conditionList_ = conditionList_;
         } else {
-          result.polRuleConditionList_ = polRuleConditionListBuilder_.build();
+          result.conditionList_ = conditionListBuilder_.build();
         }
-        if (polRuleActionListBuilder_ == null) {
+        result.booleanOperator_ = booleanOperator_;
+        if (actionListBuilder_ == null) {
           if (((bitField0_ & 0x00000002) != 0)) {
-            polRuleActionList_ = java.util.Collections.unmodifiableList(polRuleActionList_);
+            actionList_ = java.util.Collections.unmodifiableList(actionList_);
             bitField0_ = (bitField0_ & ~0x00000002);
           }
-          result.polRuleActionList_ = polRuleActionList_;
+          result.actionList_ = actionList_;
         } else {
-          result.polRuleActionList_ = polRuleActionListBuilder_.build();
+          result.actionList_ = actionListBuilder_.build();
         }
-        if (serviceListBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
-            serviceList_ = java.util.Collections.unmodifiableList(serviceList_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.serviceList_ = serviceList_;
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
         } else {
-          result.serviceList_ = serviceListBuilder_.build();
+          result.serviceId_ = serviceIdBuilder_.build();
         }
         if (deviceListBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) != 0)) {
+          if (((bitField0_ & 0x00000004) != 0)) {
             deviceList_ = java.util.Collections.unmodifiableList(deviceList_);
-            bitField0_ = (bitField0_ & ~0x00000008);
+            bitField0_ = (bitField0_ & ~0x00000004);
           }
           result.deviceList_ = deviceList_;
         } else {
@@ -6260,95 +3485,75 @@ public final class Policy {
         if (other.policyRuleType_ != 0) {
           setPolicyRuleTypeValue(other.getPolicyRuleTypeValue());
         }
-        if (other.getPolicyRulePriority() != 0) {
-          setPolicyRulePriority(other.getPolicyRulePriority());
+        if (other.getPriority() != 0) {
+          setPriority(other.getPriority());
         }
         if (other.hasEvent()) {
           mergeEvent(other.getEvent());
         }
-        if (polRuleConditionListBuilder_ == null) {
-          if (!other.polRuleConditionList_.isEmpty()) {
-            if (polRuleConditionList_.isEmpty()) {
-              polRuleConditionList_ = other.polRuleConditionList_;
+        if (conditionListBuilder_ == null) {
+          if (!other.conditionList_.isEmpty()) {
+            if (conditionList_.isEmpty()) {
+              conditionList_ = other.conditionList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensurePolRuleConditionListIsMutable();
-              polRuleConditionList_.addAll(other.polRuleConditionList_);
+              ensureConditionListIsMutable();
+              conditionList_.addAll(other.conditionList_);
             }
             onChanged();
           }
         } else {
-          if (!other.polRuleConditionList_.isEmpty()) {
-            if (polRuleConditionListBuilder_.isEmpty()) {
-              polRuleConditionListBuilder_.dispose();
-              polRuleConditionListBuilder_ = null;
-              polRuleConditionList_ = other.polRuleConditionList_;
+          if (!other.conditionList_.isEmpty()) {
+            if (conditionListBuilder_.isEmpty()) {
+              conditionListBuilder_.dispose();
+              conditionListBuilder_ = null;
+              conditionList_ = other.conditionList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              polRuleConditionListBuilder_ = 
+              conditionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPolRuleConditionListFieldBuilder() : null;
+                   getConditionListFieldBuilder() : null;
             } else {
-              polRuleConditionListBuilder_.addAllMessages(other.polRuleConditionList_);
+              conditionListBuilder_.addAllMessages(other.conditionList_);
             }
           }
         }
-        if (polRuleActionListBuilder_ == null) {
-          if (!other.polRuleActionList_.isEmpty()) {
-            if (polRuleActionList_.isEmpty()) {
-              polRuleActionList_ = other.polRuleActionList_;
+        if (other.booleanOperator_ != 0) {
+          setBooleanOperatorValue(other.getBooleanOperatorValue());
+        }
+        if (actionListBuilder_ == null) {
+          if (!other.actionList_.isEmpty()) {
+            if (actionList_.isEmpty()) {
+              actionList_ = other.actionList_;
               bitField0_ = (bitField0_ & ~0x00000002);
             } else {
-              ensurePolRuleActionListIsMutable();
-              polRuleActionList_.addAll(other.polRuleActionList_);
+              ensureActionListIsMutable();
+              actionList_.addAll(other.actionList_);
             }
             onChanged();
           }
         } else {
-          if (!other.polRuleActionList_.isEmpty()) {
-            if (polRuleActionListBuilder_.isEmpty()) {
-              polRuleActionListBuilder_.dispose();
-              polRuleActionListBuilder_ = null;
-              polRuleActionList_ = other.polRuleActionList_;
+          if (!other.actionList_.isEmpty()) {
+            if (actionListBuilder_.isEmpty()) {
+              actionListBuilder_.dispose();
+              actionListBuilder_ = null;
+              actionList_ = other.actionList_;
               bitField0_ = (bitField0_ & ~0x00000002);
-              polRuleActionListBuilder_ = 
+              actionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getPolRuleActionListFieldBuilder() : null;
+                   getActionListFieldBuilder() : null;
             } else {
-              polRuleActionListBuilder_.addAllMessages(other.polRuleActionList_);
+              actionListBuilder_.addAllMessages(other.actionList_);
             }
           }
         }
-        if (serviceListBuilder_ == null) {
-          if (!other.serviceList_.isEmpty()) {
-            if (serviceList_.isEmpty()) {
-              serviceList_ = other.serviceList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureServiceListIsMutable();
-              serviceList_.addAll(other.serviceList_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceList_.isEmpty()) {
-            if (serviceListBuilder_.isEmpty()) {
-              serviceListBuilder_.dispose();
-              serviceListBuilder_ = null;
-              serviceList_ = other.serviceList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              serviceListBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceListFieldBuilder() : null;
-            } else {
-              serviceListBuilder_.addAllMessages(other.serviceList_);
-            }
-          }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
         if (deviceListBuilder_ == null) {
           if (!other.deviceList_.isEmpty()) {
             if (deviceList_.isEmpty()) {
               deviceList_ = other.deviceList_;
-              bitField0_ = (bitField0_ & ~0x00000008);
+              bitField0_ = (bitField0_ & ~0x00000004);
             } else {
               ensureDeviceListIsMutable();
               deviceList_.addAll(other.deviceList_);
@@ -6361,7 +3566,7 @@ public final class Policy {
               deviceListBuilder_.dispose();
               deviceListBuilder_ = null;
               deviceList_ = other.deviceList_;
-              bitField0_ = (bitField0_ & ~0x00000008);
+              bitField0_ = (bitField0_ & ~0x00000004);
               deviceListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                    getDeviceListFieldBuilder() : null;
@@ -6609,33 +3814,33 @@ public final class Policy {
         return this;
       }
 
-      private int policyRulePriority_ ;
+      private int priority_ ;
       /**
-       * <code>uint32 PolicyRulePriority = 3;</code>
-       * @return The policyRulePriority.
+       * <code>uint32 priority = 3;</code>
+       * @return The priority.
        */
       @java.lang.Override
-      public int getPolicyRulePriority() {
-        return policyRulePriority_;
+      public int getPriority() {
+        return priority_;
       }
       /**
-       * <code>uint32 PolicyRulePriority = 3;</code>
-       * @param value The policyRulePriority to set.
+       * <code>uint32 priority = 3;</code>
+       * @param value The priority to set.
        * @return This builder for chaining.
        */
-      public Builder setPolicyRulePriority(int value) {
+      public Builder setPriority(int value) {
         
-        policyRulePriority_ = value;
+        priority_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>uint32 PolicyRulePriority = 3;</code>
+       * <code>uint32 priority = 3;</code>
        * @return This builder for chaining.
        */
-      public Builder clearPolicyRulePriority() {
+      public Builder clearPriority() {
         
-        policyRulePriority_ = 0;
+        priority_ = 0;
         onChanged();
         return this;
       }
@@ -6795,30 +4000,30 @@ public final class Policy {
         return eventBuilder_;
       }
 
-      private java.util.List<policy.Policy.PolicyRuleCondition> polRuleConditionList_ =
+      private java.util.List<policy.PolicyCondition.PolicyRuleCondition> conditionList_ =
         java.util.Collections.emptyList();
-      private void ensurePolRuleConditionListIsMutable() {
+      private void ensureConditionListIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          polRuleConditionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleCondition>(polRuleConditionList_);
+          conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>(conditionList_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder> polRuleConditionListBuilder_;
+          policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder> conditionListBuilder_;
 
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleCondition> getPolRuleConditionListList() {
-        if (polRuleConditionListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(polRuleConditionList_);
+      public java.util.List<policy.PolicyCondition.PolicyRuleCondition> getConditionListList() {
+        if (conditionListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(conditionList_);
         } else {
-          return polRuleConditionListBuilder_.getMessageList();
+          return conditionListBuilder_.getMessageList();
         }
       }
       /**
@@ -6826,13 +4031,13 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public int getPolRuleConditionListCount() {
-        if (polRuleConditionListBuilder_ == null) {
-          return polRuleConditionList_.size();
+      public int getConditionListCount() {
+        if (conditionListBuilder_ == null) {
+          return conditionList_.size();
         } else {
-          return polRuleConditionListBuilder_.getCount();
+          return conditionListBuilder_.getCount();
         }
       }
       /**
@@ -6840,13 +4045,13 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition getPolRuleConditionList(int index) {
-        if (polRuleConditionListBuilder_ == null) {
-          return polRuleConditionList_.get(index);
+      public policy.PolicyCondition.PolicyRuleCondition getConditionList(int index) {
+        if (conditionListBuilder_ == null) {
+          return conditionList_.get(index);
         } else {
-          return polRuleConditionListBuilder_.getMessage(index);
+          return conditionListBuilder_.getMessage(index);
         }
       }
       /**
@@ -6854,19 +4059,19 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder setPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition value) {
-        if (polRuleConditionListBuilder_ == null) {
+      public Builder setConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition value) {
+        if (conditionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.set(index, value);
+          ensureConditionListIsMutable();
+          conditionList_.set(index, value);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.setMessage(index, value);
+          conditionListBuilder_.setMessage(index, value);
         }
         return this;
       }
@@ -6875,16 +4080,16 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder setPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition.Builder builderForValue) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.set(index, builderForValue.build());
+      public Builder setConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition.Builder builderForValue) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleConditionListBuilder_.setMessage(index, builderForValue.build());
+          conditionListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -6893,18 +4098,18 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(policy.Policy.PolicyRuleCondition value) {
-        if (polRuleConditionListBuilder_ == null) {
+      public Builder addConditionList(policy.PolicyCondition.PolicyRuleCondition value) {
+        if (conditionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(value);
+          ensureConditionListIsMutable();
+          conditionList_.add(value);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(value);
+          conditionListBuilder_.addMessage(value);
         }
         return this;
       }
@@ -6913,19 +4118,19 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition value) {
-        if (polRuleConditionListBuilder_ == null) {
+      public Builder addConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition value) {
+        if (conditionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(index, value);
+          ensureConditionListIsMutable();
+          conditionList_.add(index, value);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(index, value);
+          conditionListBuilder_.addMessage(index, value);
         }
         return this;
       }
@@ -6934,16 +4139,16 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(
-          policy.Policy.PolicyRuleCondition.Builder builderForValue) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(builderForValue.build());
+      public Builder addConditionList(
+          policy.PolicyCondition.PolicyRuleCondition.Builder builderForValue) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.add(builderForValue.build());
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(builderForValue.build());
+          conditionListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
@@ -6952,16 +4157,16 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addPolRuleConditionList(
-          int index, policy.Policy.PolicyRuleCondition.Builder builderForValue) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.add(index, builderForValue.build());
+      public Builder addConditionList(
+          int index, policy.PolicyCondition.PolicyRuleCondition.Builder builderForValue) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addMessage(index, builderForValue.build());
+          conditionListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -6970,17 +4175,17 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder addAllPolRuleConditionList(
-          java.lang.Iterable<? extends policy.Policy.PolicyRuleCondition> values) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
+      public Builder addAllConditionList(
+          java.lang.Iterable<? extends policy.PolicyCondition.PolicyRuleCondition> values) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, polRuleConditionList_);
+              values, conditionList_);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.addAllMessages(values);
+          conditionListBuilder_.addAllMessages(values);
         }
         return this;
       }
@@ -6989,15 +4194,15 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder clearPolRuleConditionList() {
-        if (polRuleConditionListBuilder_ == null) {
-          polRuleConditionList_ = java.util.Collections.emptyList();
+      public Builder clearConditionList() {
+        if (conditionListBuilder_ == null) {
+          conditionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.clear();
+          conditionListBuilder_.clear();
         }
         return this;
       }
@@ -7006,15 +4211,15 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public Builder removePolRuleConditionList(int index) {
-        if (polRuleConditionListBuilder_ == null) {
-          ensurePolRuleConditionListIsMutable();
-          polRuleConditionList_.remove(index);
+      public Builder removeConditionList(int index) {
+        if (conditionListBuilder_ == null) {
+          ensureConditionListIsMutable();
+          conditionList_.remove(index);
           onChanged();
         } else {
-          polRuleConditionListBuilder_.remove(index);
+          conditionListBuilder_.remove(index);
         }
         return this;
       }
@@ -7023,24 +4228,24 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition.Builder getPolRuleConditionListBuilder(
+      public policy.PolicyCondition.PolicyRuleCondition.Builder getConditionListBuilder(
           int index) {
-        return getPolRuleConditionListFieldBuilder().getBuilder(index);
+        return getConditionListFieldBuilder().getBuilder(index);
       }
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleConditionOrBuilder getPolRuleConditionListOrBuilder(
+      public policy.PolicyCondition.PolicyRuleConditionOrBuilder getConditionListOrBuilder(
           int index) {
-        if (polRuleConditionListBuilder_ == null) {
-          return polRuleConditionList_.get(index);  } else {
-          return polRuleConditionListBuilder_.getMessageOrBuilder(index);
+        if (conditionListBuilder_ == null) {
+          return conditionList_.get(index);  } else {
+          return conditionListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
@@ -7048,14 +4253,14 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public java.util.List<? extends policy.Policy.PolicyRuleConditionOrBuilder> 
-           getPolRuleConditionListOrBuilderList() {
-        if (polRuleConditionListBuilder_ != null) {
-          return polRuleConditionListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+           getConditionListOrBuilderList() {
+        if (conditionListBuilder_ != null) {
+          return conditionListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(polRuleConditionList_);
+          return java.util.Collections.unmodifiableList(conditionList_);
         }
       }
       /**
@@ -7063,74 +4268,148 @@ public final class Policy {
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition.Builder addPolRuleConditionListBuilder() {
-        return getPolRuleConditionListFieldBuilder().addBuilder(
-            policy.Policy.PolicyRuleCondition.getDefaultInstance());
+      public policy.PolicyCondition.PolicyRuleCondition.Builder addConditionListBuilder() {
+        return getConditionListFieldBuilder().addBuilder(
+            policy.PolicyCondition.PolicyRuleCondition.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public policy.Policy.PolicyRuleCondition.Builder addPolRuleConditionListBuilder(
+      public policy.PolicyCondition.PolicyRuleCondition.Builder addConditionListBuilder(
           int index) {
-        return getPolRuleConditionListFieldBuilder().addBuilder(
-            index, policy.Policy.PolicyRuleCondition.getDefaultInstance());
+        return getConditionListFieldBuilder().addBuilder(
+            index, policy.PolicyCondition.PolicyRuleCondition.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more conditions must be met
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleCondition polRuleConditionList = 5;</code>
+       * <code>repeated .policy.PolicyRuleCondition conditionList = 5;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleCondition.Builder> 
-           getPolRuleConditionListBuilderList() {
-        return getPolRuleConditionListFieldBuilder().getBuilderList();
+      public java.util.List<policy.PolicyCondition.PolicyRuleCondition.Builder> 
+           getConditionListBuilderList() {
+        return getConditionListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder> 
-          getPolRuleConditionListFieldBuilder() {
-        if (polRuleConditionListBuilder_ == null) {
-          polRuleConditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              policy.Policy.PolicyRuleCondition, policy.Policy.PolicyRuleCondition.Builder, policy.Policy.PolicyRuleConditionOrBuilder>(
-                  polRuleConditionList_,
+          policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder> 
+          getConditionListFieldBuilder() {
+        if (conditionListBuilder_ == null) {
+          conditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder>(
+                  conditionList_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          polRuleConditionList_ = null;
+          conditionList_ = null;
+        }
+        return conditionListBuilder_;
+      }
+
+      private int booleanOperator_ = 0;
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @return The enum numeric value on the wire for booleanOperator.
+       */
+      @java.lang.Override public int getBooleanOperatorValue() {
+        return booleanOperator_;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @param value The enum numeric value on the wire for booleanOperator to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBooleanOperatorValue(int value) {
+        
+        booleanOperator_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @return The booleanOperator.
+       */
+      @java.lang.Override
+      public policy.PolicyCondition.BooleanOperator getBooleanOperator() {
+        @SuppressWarnings("deprecation")
+        policy.PolicyCondition.BooleanOperator result = policy.PolicyCondition.BooleanOperator.valueOf(booleanOperator_);
+        return result == null ? policy.PolicyCondition.BooleanOperator.UNRECOGNIZED : result;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @param value The booleanOperator to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBooleanOperator(policy.PolicyCondition.BooleanOperator value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-        return polRuleConditionListBuilder_;
+        
+        booleanOperator_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Evaluation operator to be used
+       * </pre>
+       *
+       * <code>.policy.BooleanOperator booleanOperator = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBooleanOperator() {
+        
+        booleanOperator_ = 0;
+        onChanged();
+        return this;
       }
 
-      private java.util.List<policy.Policy.PolicyRuleAction> polRuleActionList_ =
+      private java.util.List<policy.PolicyAction.PolicyRuleAction> actionList_ =
         java.util.Collections.emptyList();
-      private void ensurePolRuleActionListIsMutable() {
+      private void ensureActionListIsMutable() {
         if (!((bitField0_ & 0x00000002) != 0)) {
-          polRuleActionList_ = new java.util.ArrayList<policy.Policy.PolicyRuleAction>(polRuleActionList_);
+          actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>(actionList_);
           bitField0_ |= 0x00000002;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder> polRuleActionListBuilder_;
+          policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder> actionListBuilder_;
 
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleAction> getPolRuleActionListList() {
-        if (polRuleActionListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(polRuleActionList_);
+      public java.util.List<policy.PolicyAction.PolicyRuleAction> getActionListList() {
+        if (actionListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(actionList_);
         } else {
-          return polRuleActionListBuilder_.getMessageList();
+          return actionListBuilder_.getMessageList();
         }
       }
       /**
@@ -7138,13 +4417,13 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public int getPolRuleActionListCount() {
-        if (polRuleActionListBuilder_ == null) {
-          return polRuleActionList_.size();
+      public int getActionListCount() {
+        if (actionListBuilder_ == null) {
+          return actionList_.size();
         } else {
-          return polRuleActionListBuilder_.getCount();
+          return actionListBuilder_.getCount();
         }
       }
       /**
@@ -7152,13 +4431,13 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction getPolRuleActionList(int index) {
-        if (polRuleActionListBuilder_ == null) {
-          return polRuleActionList_.get(index);
+      public policy.PolicyAction.PolicyRuleAction getActionList(int index) {
+        if (actionListBuilder_ == null) {
+          return actionList_.get(index);
         } else {
-          return polRuleActionListBuilder_.getMessage(index);
+          return actionListBuilder_.getMessage(index);
         }
       }
       /**
@@ -7166,19 +4445,19 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder setPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction value) {
-        if (polRuleActionListBuilder_ == null) {
+      public Builder setActionList(
+          int index, policy.PolicyAction.PolicyRuleAction value) {
+        if (actionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.set(index, value);
+          ensureActionListIsMutable();
+          actionList_.set(index, value);
           onChanged();
         } else {
-          polRuleActionListBuilder_.setMessage(index, value);
+          actionListBuilder_.setMessage(index, value);
         }
         return this;
       }
@@ -7187,16 +4466,16 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder setPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction.Builder builderForValue) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.set(index, builderForValue.build());
+      public Builder setActionList(
+          int index, policy.PolicyAction.PolicyRuleAction.Builder builderForValue) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleActionListBuilder_.setMessage(index, builderForValue.build());
+          actionListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -7205,18 +4484,18 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(policy.Policy.PolicyRuleAction value) {
-        if (polRuleActionListBuilder_ == null) {
+      public Builder addActionList(policy.PolicyAction.PolicyRuleAction value) {
+        if (actionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(value);
+          ensureActionListIsMutable();
+          actionList_.add(value);
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(value);
+          actionListBuilder_.addMessage(value);
         }
         return this;
       }
@@ -7225,19 +4504,19 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction value) {
-        if (polRuleActionListBuilder_ == null) {
+      public Builder addActionList(
+          int index, policy.PolicyAction.PolicyRuleAction value) {
+        if (actionListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(index, value);
+          ensureActionListIsMutable();
+          actionList_.add(index, value);
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(index, value);
+          actionListBuilder_.addMessage(index, value);
         }
         return this;
       }
@@ -7246,16 +4525,16 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(
-          policy.Policy.PolicyRuleAction.Builder builderForValue) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(builderForValue.build());
+      public Builder addActionList(
+          policy.PolicyAction.PolicyRuleAction.Builder builderForValue) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.add(builderForValue.build());
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(builderForValue.build());
+          actionListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
@@ -7264,16 +4543,16 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addPolRuleActionList(
-          int index, policy.Policy.PolicyRuleAction.Builder builderForValue) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.add(index, builderForValue.build());
+      public Builder addActionList(
+          int index, policy.PolicyAction.PolicyRuleAction.Builder builderForValue) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          polRuleActionListBuilder_.addMessage(index, builderForValue.build());
+          actionListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
@@ -7282,17 +4561,17 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder addAllPolRuleActionList(
-          java.lang.Iterable<? extends policy.Policy.PolicyRuleAction> values) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
+      public Builder addAllActionList(
+          java.lang.Iterable<? extends policy.PolicyAction.PolicyRuleAction> values) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, polRuleActionList_);
+              values, actionList_);
           onChanged();
         } else {
-          polRuleActionListBuilder_.addAllMessages(values);
+          actionListBuilder_.addAllMessages(values);
         }
         return this;
       }
@@ -7301,15 +4580,15 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder clearPolRuleActionList() {
-        if (polRuleActionListBuilder_ == null) {
-          polRuleActionList_ = java.util.Collections.emptyList();
+      public Builder clearActionList() {
+        if (actionListBuilder_ == null) {
+          actionList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
         } else {
-          polRuleActionListBuilder_.clear();
+          actionListBuilder_.clear();
         }
         return this;
       }
@@ -7318,15 +4597,15 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public Builder removePolRuleActionList(int index) {
-        if (polRuleActionListBuilder_ == null) {
-          ensurePolRuleActionListIsMutable();
-          polRuleActionList_.remove(index);
+      public Builder removeActionList(int index) {
+        if (actionListBuilder_ == null) {
+          ensureActionListIsMutable();
+          actionList_.remove(index);
           onChanged();
         } else {
-          polRuleActionListBuilder_.remove(index);
+          actionListBuilder_.remove(index);
         }
         return this;
       }
@@ -7335,24 +4614,24 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction.Builder getPolRuleActionListBuilder(
+      public policy.PolicyAction.PolicyRuleAction.Builder getActionListBuilder(
           int index) {
-        return getPolRuleActionListFieldBuilder().getBuilder(index);
+        return getActionListFieldBuilder().getBuilder(index);
       }
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleActionOrBuilder getPolRuleActionListOrBuilder(
+      public policy.PolicyAction.PolicyRuleActionOrBuilder getActionListOrBuilder(
           int index) {
-        if (polRuleActionListBuilder_ == null) {
-          return polRuleActionList_.get(index);  } else {
-          return polRuleActionListBuilder_.getMessageOrBuilder(index);
+        if (actionListBuilder_ == null) {
+          return actionList_.get(index);  } else {
+          return actionListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
@@ -7360,14 +4639,14 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public java.util.List<? extends policy.Policy.PolicyRuleActionOrBuilder> 
-           getPolRuleActionListOrBuilderList() {
-        if (polRuleActionListBuilder_ != null) {
-          return polRuleActionListBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends policy.PolicyAction.PolicyRuleActionOrBuilder> 
+           getActionListOrBuilderList() {
+        if (actionListBuilder_ != null) {
+          return actionListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(polRuleActionList_);
+          return java.util.Collections.unmodifiableList(actionList_);
         }
       }
       /**
@@ -7375,368 +4654,211 @@ public final class Policy {
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction.Builder addPolRuleActionListBuilder() {
-        return getPolRuleActionListFieldBuilder().addBuilder(
-            policy.Policy.PolicyRuleAction.getDefaultInstance());
+      public policy.PolicyAction.PolicyRuleAction.Builder addActionListBuilder() {
+        return getActionListFieldBuilder().addBuilder(
+            policy.PolicyAction.PolicyRuleAction.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public policy.Policy.PolicyRuleAction.Builder addPolRuleActionListBuilder(
+      public policy.PolicyAction.PolicyRuleAction.Builder addActionListBuilder(
           int index) {
-        return getPolRuleActionListFieldBuilder().addBuilder(
-            index, policy.Policy.PolicyRuleAction.getDefaultInstance());
+        return getActionListFieldBuilder().addBuilder(
+            index, policy.PolicyAction.PolicyRuleAction.getDefaultInstance());
       }
       /**
        * <pre>
        * One or more actions should be applied
        * </pre>
        *
-       * <code>repeated .policy.PolicyRuleAction polRuleActionList = 6;</code>
+       * <code>repeated .policy.PolicyRuleAction actionList = 7;</code>
        */
-      public java.util.List<policy.Policy.PolicyRuleAction.Builder> 
-           getPolRuleActionListBuilderList() {
-        return getPolRuleActionListFieldBuilder().getBuilderList();
+      public java.util.List<policy.PolicyAction.PolicyRuleAction.Builder> 
+           getActionListBuilderList() {
+        return getActionListFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder> 
-          getPolRuleActionListFieldBuilder() {
-        if (polRuleActionListBuilder_ == null) {
-          polRuleActionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              policy.Policy.PolicyRuleAction, policy.Policy.PolicyRuleAction.Builder, policy.Policy.PolicyRuleActionOrBuilder>(
-                  polRuleActionList_,
+          policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder> 
+          getActionListFieldBuilder() {
+        if (actionListBuilder_ == null) {
+          actionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder>(
+                  actionList_,
                   ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
                   isClean());
-          polRuleActionList_ = null;
+          actionList_ = null;
         }
-        return polRuleActionListBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceList_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceListIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
-          serviceList_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceList_);
-          bitField0_ |= 0x00000004;
-         }
+        return actionListBuilder_;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceListBuilder_;
-
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceListList() {
-        if (serviceListBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceList_);
-        } else {
-          return serviceListBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public int getServiceListCount() {
-        if (serviceListBuilder_ == null) {
-          return serviceList_.size();
-        } else {
-          return serviceListBuilder_.getCount();
-        }
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId getServiceList(int index) {
-        if (serviceListBuilder_ == null) {
-          return serviceList_.get(index);
-        } else {
-          return serviceListBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public Builder setServiceList(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceListIsMutable();
-          serviceList_.set(index, value);
-          onChanged();
-        } else {
-          serviceListBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
+      private context.ContextOuterClass.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
+       * @return Whether the serviceId field is set.
        */
-      public Builder setServiceList(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceListBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
+       * @return The serviceId.
        */
-      public Builder addServiceList(context.ContextOuterClass.ServiceId value) {
-        if (serviceListBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceListIsMutable();
-          serviceList_.add(value);
-          onChanged();
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          serviceListBuilder_.addMessage(value);
+          return serviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder addServiceList(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceListBuilder_ == null) {
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureServiceListIsMutable();
-          serviceList_.add(index, value);
+          serviceId_ = value;
           onChanged();
         } else {
-          serviceListBuilder_.addMessage(index, value);
+          serviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder addServiceList(
+      public Builder setServiceId(
           context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceListBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public Builder addServiceList(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceListBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public Builder addAllServiceList(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceList_);
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          serviceListBuilder_.addAllMessages(values);
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder clearServiceList() {
-        if (serviceListBuilder_ == null) {
-          serviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+      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 {
-          serviceListBuilder_.clear();
+          serviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public Builder removeServiceList(int index) {
-        if (serviceListBuilder_ == null) {
-          ensureServiceListIsMutable();
-          serviceList_.remove(index);
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
           onChanged();
         } else {
-          serviceListBuilder_.remove(index);
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
        * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceListBuilder(
-          int index) {
-        return getServiceListFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceListOrBuilder(
-          int index) {
-        if (serviceListBuilder_ == null) {
-          return serviceList_.get(index);  } else {
-          return serviceListBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
        * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceListOrBuilderList() {
-        if (serviceListBuilder_ != null) {
-          return serviceListBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(serviceList_);
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         }
       }
       /**
        * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addServiceListBuilder() {
-        return getServiceListFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <pre>
-       * Affected services and devices
-       * </pre>
-       *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addServiceListBuilder(
-          int index) {
-        return getServiceListFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <pre>
-       * Affected services and devices
+       * Affected service and devices
        * </pre>
        *
-       * <code>repeated .context.ServiceId serviceList = 7;</code>
+       * <code>.context.ServiceId serviceId = 8;</code>
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceListBuilderList() {
-        return getServiceListFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
+      private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceListFieldBuilder() {
-        if (serviceListBuilder_ == null) {
-          serviceListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
               context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceList_,
-                  ((bitField0_ & 0x00000004) != 0),
+                  getServiceId(),
                   getParentForChildren(),
                   isClean());
-          serviceList_ = null;
+          serviceId_ = null;
         }
-        return serviceListBuilder_;
+        return serviceIdBuilder_;
       }
 
       private java.util.List<context.ContextOuterClass.DeviceId> deviceList_ =
         java.util.Collections.emptyList();
       private void ensureDeviceListIsMutable() {
-        if (!((bitField0_ & 0x00000008) != 0)) {
+        if (!((bitField0_ & 0x00000004) != 0)) {
           deviceList_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceList_);
-          bitField0_ |= 0x00000008;
+          bitField0_ |= 0x00000004;
          }
       }
 
@@ -7744,7 +4866,7 @@ public final class Policy {
           context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceListBuilder_;
 
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public java.util.List<context.ContextOuterClass.DeviceId> getDeviceListList() {
         if (deviceListBuilder_ == null) {
@@ -7754,7 +4876,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public int getDeviceListCount() {
         if (deviceListBuilder_ == null) {
@@ -7764,7 +4886,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId getDeviceList(int index) {
         if (deviceListBuilder_ == null) {
@@ -7774,7 +4896,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder setDeviceList(
           int index, context.ContextOuterClass.DeviceId value) {
@@ -7791,7 +4913,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder setDeviceList(
           int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -7805,7 +4927,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(context.ContextOuterClass.DeviceId value) {
         if (deviceListBuilder_ == null) {
@@ -7821,7 +4943,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(
           int index, context.ContextOuterClass.DeviceId value) {
@@ -7838,7 +4960,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(
           context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -7852,7 +4974,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addDeviceList(
           int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
@@ -7866,7 +4988,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder addAllDeviceList(
           java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
@@ -7881,12 +5003,12 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder clearDeviceList() {
         if (deviceListBuilder_ == null) {
           deviceList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+          bitField0_ = (bitField0_ & ~0x00000004);
           onChanged();
         } else {
           deviceListBuilder_.clear();
@@ -7894,7 +5016,7 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public Builder removeDeviceList(int index) {
         if (deviceListBuilder_ == null) {
@@ -7907,14 +5029,14 @@ public final class Policy {
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder getDeviceListBuilder(
           int index) {
         return getDeviceListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceIdOrBuilder getDeviceListOrBuilder(
           int index) {
@@ -7924,7 +5046,7 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
            getDeviceListOrBuilderList() {
@@ -7935,14 +5057,14 @@ public final class Policy {
         }
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder addDeviceListBuilder() {
         return getDeviceListFieldBuilder().addBuilder(
             context.ContextOuterClass.DeviceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public context.ContextOuterClass.DeviceId.Builder addDeviceListBuilder(
           int index) {
@@ -7950,7 +5072,7 @@ public final class Policy {
             index, context.ContextOuterClass.DeviceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.DeviceId deviceList = 8;</code>
+       * <code>repeated .context.DeviceId deviceList = 9;</code>
        */
       public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
            getDeviceListBuilderList() {
@@ -7963,7 +5085,7 @@ public final class Policy {
           deviceListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
                   deviceList_,
-                  ((bitField0_ & 0x00000008) != 0),
+                  ((bitField0_ & 0x00000004) != 0),
                   getParentForChildren(),
                   isClean());
           deviceList_ = null;
@@ -8834,31 +5956,11 @@ public final class Policy {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_policy_PolicyRuleState_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleVariable_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleVariable_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleValue_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleValue_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_policy_PolicyRuleEvent_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_policy_PolicyRuleEvent_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleCondition_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleCondition_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_policy_PolicyRuleAction_descriptor;
-  private static final 
-    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_policy_PolicyRuleAction_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_policy_PolicyRule_descriptor;
   private static final 
@@ -8878,50 +5980,45 @@ public final class Policy {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\014policy.proto\022\006policy\032\rcontext.proto\"+\n" +
-      "\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.context.Uu" +
-      "id\"b\n\017PolicyRuleState\022#\n\014policyRuleId\030\001 " +
-      "\001(\0132\r.context.Uuid\022*\n\017policyRuleState\030\002 " +
-      "\001(\0162\021.policy.RuleState\"0\n\022PolicyRuleVari" +
-      "able\022\032\n\022policyRuleVariable\030\001 \001(\t\"*\n\017Poli" +
-      "cyRuleValue\022\027\n\017policyRuleValue\030\001 \001(\t\"0\n\017" +
-      "PolicyRuleEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
-      ".Event\"\204\001\n\023PolicyRuleCondition\0227\n\023polRul" +
-      "eConditionVar\030\001 \001(\0132\032.policy.PolicyRuleV" +
-      "ariable\0224\n\023polRuleConditionVal\030\002 \001(\0132\027.p" +
-      "olicy.PolicyRuleValue\"{\n\020PolicyRuleActio" +
-      "n\0224\n\020polRuleActionVar\030\001 \001(\0132\032.policy.Pol" +
-      "icyRuleVariable\0221\n\020polRuleActionVal\030\002 \001(" +
-      "\0132\027.policy.PolicyRuleValue\"\354\002\n\nPolicyRul" +
-      "e\022*\n\014policyRuleId\030\001 \001(\0132\024.policy.PolicyR" +
-      "uleId\022.\n\016policyRuleType\030\002 \001(\0162\026.policy.P" +
-      "olicyRuleType\022\032\n\022PolicyRulePriority\030\003 \001(" +
-      "\r\022&\n\005event\030\004 \001(\0132\027.policy.PolicyRuleEven" +
-      "t\0229\n\024polRuleConditionList\030\005 \003(\0132\033.policy" +
-      ".PolicyRuleCondition\0223\n\021polRuleActionLis" +
-      "t\030\006 \003(\0132\030.policy.PolicyRuleAction\022\'\n\013ser" +
-      "viceList\030\007 \003(\0132\022.context.ServiceId\022%\n\nde" +
-      "viceList\030\010 \003(\0132\021.context.DeviceId\"<\n\016Pol" +
-      "icyRuleList\022*\n\016policyRuleList\030\001 \003(\0132\022.po" +
-      "licy.PolicyRule*G\n\tRuleState\022\023\n\017POLICY_I" +
-      "NACTIVE\020\000\022\022\n\016POLICY_PLANNED\020\001\022\021\n\rPOLICY_" +
-      "ACTIVE\020\002*?\n\016PolicyRuleType\022\025\n\021POLICYTYPE" +
-      "_DEVICE\020\000\022\026\n\022POLICYTYPE_NETWORK\020\0012\214\003\n\rPo" +
-      "licyService\022:\n\tPolicyAdd\022\022.policy.Policy" +
-      "Rule\032\027.policy.PolicyRuleState\"\000\022=\n\014Polic" +
-      "yUpdate\022\022.policy.PolicyRule\032\027.policy.Pol" +
-      "icyRuleState\"\000\022=\n\014PolicyDelete\022\022.policy." +
-      "PolicyRule\032\027.policy.PolicyRuleState\"\000\0227\n" +
-      "\tGetPolicy\022\024.policy.PolicyRuleId\032\022.polic" +
-      "y.PolicyRule\"\000\022B\n\023GetPolicyByDeviceId\022\021." +
-      "context.DeviceId\032\026.policy.PolicyRuleList" +
-      "\"\000\022D\n\024GetPolicyByServiceId\022\022.context.Ser" +
-      "viceId\032\026.policy.PolicyRuleList\"\000b\006proto3"
+      "\n\014policy.proto\022\006policy\032\rcontext.proto\032\026p" +
+      "olicy-condition.proto\032\023policy-action.pro" +
+      "to\"+\n\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.conte" +
+      "xt.Uuid\"b\n\017PolicyRuleState\022#\n\014policyRule" +
+      "Id\030\001 \001(\0132\r.context.Uuid\022*\n\017policyRuleSta" +
+      "te\030\002 \001(\0162\021.policy.RuleState\"0\n\017PolicyRul" +
+      "eEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\"\204\003" +
+      "\n\nPolicyRule\022*\n\014policyRuleId\030\001 \001(\0132\024.pol" +
+      "icy.PolicyRuleId\022.\n\016policyRuleType\030\002 \001(\016" +
+      "2\026.policy.PolicyRuleType\022\020\n\010priority\030\003 \001" +
+      "(\r\022&\n\005event\030\004 \001(\0132\027.policy.PolicyRuleEve" +
+      "nt\0222\n\rconditionList\030\005 \003(\0132\033.policy.Polic" +
+      "yRuleCondition\0220\n\017booleanOperator\030\006 \001(\0162" +
+      "\027.policy.BooleanOperator\022,\n\nactionList\030\007" +
+      " \003(\0132\030.policy.PolicyRuleAction\022%\n\tservic" +
+      "eId\030\010 \001(\0132\022.context.ServiceId\022%\n\ndeviceL" +
+      "ist\030\t \003(\0132\021.context.DeviceId\"<\n\016PolicyRu" +
+      "leList\022*\n\016policyRuleList\030\001 \003(\0132\022.policy." +
+      "PolicyRule*G\n\tRuleState\022\023\n\017POLICY_INACTI" +
+      "VE\020\000\022\022\n\016POLICY_PLANNED\020\001\022\021\n\rPOLICY_ACTIV" +
+      "E\020\002*?\n\016PolicyRuleType\022\025\n\021POLICYTYPE_DEVI" +
+      "CE\020\000\022\026\n\022POLICYTYPE_NETWORK\020\0012\214\003\n\rPolicyS" +
+      "ervice\022:\n\tPolicyAdd\022\022.policy.PolicyRule\032" +
+      "\027.policy.PolicyRuleState\"\000\022=\n\014PolicyUpda" +
+      "te\022\022.policy.PolicyRule\032\027.policy.PolicyRu" +
+      "leState\"\000\022=\n\014PolicyDelete\022\022.policy.Polic" +
+      "yRule\032\027.policy.PolicyRuleState\"\000\0227\n\tGetP" +
+      "olicy\022\024.policy.PolicyRuleId\032\022.policy.Pol" +
+      "icyRule\"\000\022B\n\023GetPolicyByDeviceId\022\021.conte" +
+      "xt.DeviceId\032\026.policy.PolicyRuleList\"\000\022D\n" +
+      "\024GetPolicyByServiceId\022\022.context.ServiceI" +
+      "d\032\026.policy.PolicyRuleList\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
           context.ContextOuterClass.getDescriptor(),
+          policy.PolicyCondition.getDescriptor(),
+          policy.PolicyAction.getDescriptor(),
         });
     internal_static_policy_PolicyRuleId_descriptor =
       getDescriptor().getMessageTypes().get(0);
@@ -8935,49 +6032,27 @@ public final class Policy {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleState_descriptor,
         new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", });
-    internal_static_policy_PolicyRuleVariable_descriptor =
-      getDescriptor().getMessageTypes().get(2);
-    internal_static_policy_PolicyRuleVariable_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleVariable_descriptor,
-        new java.lang.String[] { "PolicyRuleVariable", });
-    internal_static_policy_PolicyRuleValue_descriptor =
-      getDescriptor().getMessageTypes().get(3);
-    internal_static_policy_PolicyRuleValue_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleValue_descriptor,
-        new java.lang.String[] { "PolicyRuleValue", });
     internal_static_policy_PolicyRuleEvent_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(2);
     internal_static_policy_PolicyRuleEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleEvent_descriptor,
         new java.lang.String[] { "Event", });
-    internal_static_policy_PolicyRuleCondition_descriptor =
-      getDescriptor().getMessageTypes().get(5);
-    internal_static_policy_PolicyRuleCondition_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleCondition_descriptor,
-        new java.lang.String[] { "PolRuleConditionVar", "PolRuleConditionVal", });
-    internal_static_policy_PolicyRuleAction_descriptor =
-      getDescriptor().getMessageTypes().get(6);
-    internal_static_policy_PolicyRuleAction_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_policy_PolicyRuleAction_descriptor,
-        new java.lang.String[] { "PolRuleActionVar", "PolRuleActionVal", });
     internal_static_policy_PolicyRule_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(3);
     internal_static_policy_PolicyRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRule_descriptor,
-        new java.lang.String[] { "PolicyRuleId", "PolicyRuleType", "PolicyRulePriority", "Event", "PolRuleConditionList", "PolRuleActionList", "ServiceList", "DeviceList", });
+        new java.lang.String[] { "PolicyRuleId", "PolicyRuleType", "Priority", "Event", "ConditionList", "BooleanOperator", "ActionList", "ServiceId", "DeviceList", });
     internal_static_policy_PolicyRuleList_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_policy_PolicyRuleList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleList_descriptor,
         new java.lang.String[] { "PolicyRuleList", });
     context.ContextOuterClass.getDescriptor();
+    policy.PolicyCondition.getDescriptor();
+    policy.PolicyAction.getDescriptor();
   }
 
   // @@protoc_insertion_point(outer_class_scope)
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyAction.java b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..1baaf538dc031be9443984f640826ccd893290e4
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyAction.java
@@ -0,0 +1,932 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: policy-action.proto
+
+package policy;
+
+public final class PolicyAction {
+  private PolicyAction() {}
+  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 policy.PolicyRuleActionEnum}
+   */
+  public enum PolicyRuleActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>POLICYRULE_ACTION_NO_ACTION = 0;</code>
+     */
+    POLICYRULE_ACTION_NO_ACTION(0),
+    /**
+     * <code>POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;</code>
+     */
+    POLICYRULE_ACTION_SET_DEVICE_STATUS(1),
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;</code>
+     */
+    POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE(2),
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;</code>
+     */
+    POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>POLICYRULE_ACTION_NO_ACTION = 0;</code>
+     */
+    public static final int POLICYRULE_ACTION_NO_ACTION_VALUE = 0;
+    /**
+     * <code>POLICYRULE_ACTION_SET_DEVICE_STATUS = 1;</code>
+     */
+    public static final int POLICYRULE_ACTION_SET_DEVICE_STATUS_VALUE = 1;
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE = 2;</code>
+     */
+    public static final int POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE_VALUE = 2;
+    /**
+     * <code>POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT = 3;</code>
+     */
+    public static final int POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT_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 PolicyRuleActionEnum 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 PolicyRuleActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return POLICYRULE_ACTION_NO_ACTION;
+        case 1: return POLICYRULE_ACTION_SET_DEVICE_STATUS;
+        case 2: return POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE;
+        case 3: return POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<PolicyRuleActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        PolicyRuleActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<PolicyRuleActionEnum>() {
+            public PolicyRuleActionEnum findValueByNumber(int number) {
+              return PolicyRuleActionEnum.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 policy.PolicyAction.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final PolicyRuleActionEnum[] VALUES = values();
+
+    public static PolicyRuleActionEnum 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 PolicyRuleActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:policy.PolicyRuleActionEnum)
+  }
+
+  public interface PolicyRuleActionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleAction)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    int getActionValue();
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The action.
+     */
+    policy.PolicyAction.PolicyRuleActionEnum getAction();
+
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return A list containing the parameters.
+     */
+    java.util.List<java.lang.String>
+        getParametersList();
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return The count of parameters.
+     */
+    int getParametersCount();
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the element to return.
+     * @return The parameters at the given index.
+     */
+    java.lang.String getParameters(int index);
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the parameters at the given index.
+     */
+    com.google.protobuf.ByteString
+        getParametersBytes(int index);
+  }
+  /**
+   * <pre>
+   * Action
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleAction}
+   */
+  public static final class PolicyRuleAction extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleAction)
+      PolicyRuleActionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleAction.newBuilder() to construct.
+    private PolicyRuleAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleAction() {
+      action_ = 0;
+      parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleAction();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleAction(
+        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 8: {
+              int rawValue = input.readEnum();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                parameters_ = new com.google.protobuf.LazyStringArrayList();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              parameters_.add(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)) {
+          parameters_ = parameters_.getUnmodifiableView();
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return policy.PolicyAction.internal_static_policy_PolicyRuleAction_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.PolicyAction.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.PolicyAction.PolicyRuleAction.class, policy.PolicyAction.PolicyRuleAction.Builder.class);
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public policy.PolicyAction.PolicyRuleActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      policy.PolicyAction.PolicyRuleActionEnum result = policy.PolicyAction.PolicyRuleActionEnum.valueOf(action_);
+      return result == null ? policy.PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int PARAMETERS_FIELD_NUMBER = 2;
+    private com.google.protobuf.LazyStringList parameters_;
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return A list containing the parameters.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getParametersList() {
+      return parameters_;
+    }
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @return The count of parameters.
+     */
+    public int getParametersCount() {
+      return parameters_.size();
+    }
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the element to return.
+     * @return The parameters at the given index.
+     */
+    public java.lang.String getParameters(int index) {
+      return parameters_.get(index);
+    }
+    /**
+     * <code>repeated string parameters = 2;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the parameters at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getParametersBytes(int index) {
+      return parameters_.getByteString(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 (action_ != policy.PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION.getNumber()) {
+        output.writeEnum(1, action_);
+      }
+      for (int i = 0; i < parameters_.size(); i++) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, parameters_.getRaw(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (action_ != policy.PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, action_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < parameters_.size(); i++) {
+          dataSize += computeStringSizeNoTag(parameters_.getRaw(i));
+        }
+        size += dataSize;
+        size += 1 * getParametersList().size();
+      }
+      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 policy.PolicyAction.PolicyRuleAction)) {
+        return super.equals(obj);
+      }
+      policy.PolicyAction.PolicyRuleAction other = (policy.PolicyAction.PolicyRuleAction) obj;
+
+      if (action_ != other.action_) return false;
+      if (!getParametersList()
+          .equals(other.getParametersList())) 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) + ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + action_;
+      if (getParametersCount() > 0) {
+        hash = (37 * hash) + PARAMETERS_FIELD_NUMBER;
+        hash = (53 * hash) + getParametersList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyAction.PolicyRuleAction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.PolicyAction.PolicyRuleAction 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 policy.PolicyAction.PolicyRuleAction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.PolicyAction.PolicyRuleAction 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 policy.PolicyAction.PolicyRuleAction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.PolicyAction.PolicyRuleAction 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(policy.PolicyAction.PolicyRuleAction 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>
+     * Action
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleAction}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleAction)
+        policy.PolicyAction.PolicyRuleActionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.PolicyAction.internal_static_policy_PolicyRuleAction_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.PolicyAction.internal_static_policy_PolicyRuleAction_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.PolicyAction.PolicyRuleAction.class, policy.PolicyAction.PolicyRuleAction.Builder.class);
+      }
+
+      // Construct using policy.PolicyAction.PolicyRuleAction.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();
+        action_ = 0;
+
+        parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.PolicyAction.internal_static_policy_PolicyRuleAction_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleAction getDefaultInstanceForType() {
+        return policy.PolicyAction.PolicyRuleAction.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleAction build() {
+        policy.PolicyAction.PolicyRuleAction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleAction buildPartial() {
+        policy.PolicyAction.PolicyRuleAction result = new policy.PolicyAction.PolicyRuleAction(this);
+        int from_bitField0_ = bitField0_;
+        result.action_ = action_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          parameters_ = parameters_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.parameters_ = parameters_;
+        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 policy.PolicyAction.PolicyRuleAction) {
+          return mergeFrom((policy.PolicyAction.PolicyRuleAction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.PolicyAction.PolicyRuleAction other) {
+        if (other == policy.PolicyAction.PolicyRuleAction.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
+        }
+        if (!other.parameters_.isEmpty()) {
+          if (parameters_.isEmpty()) {
+            parameters_ = other.parameters_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureParametersIsMutable();
+            parameters_.addAll(other.parameters_);
+          }
+          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 {
+        policy.PolicyAction.PolicyRuleAction parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.PolicyAction.PolicyRuleAction) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private int action_ = 0;
+      /**
+       * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @return The enum numeric value on the wire for action.
+       */
+      @java.lang.Override public int getActionValue() {
+        return action_;
+      }
+      /**
+       * <code>.policy.PolicyRuleActionEnum 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>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @return The action.
+       */
+      @java.lang.Override
+      public policy.PolicyAction.PolicyRuleActionEnum getAction() {
+        @SuppressWarnings("deprecation")
+        policy.PolicyAction.PolicyRuleActionEnum result = policy.PolicyAction.PolicyRuleActionEnum.valueOf(action_);
+        return result == null ? policy.PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @param value The action to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAction(policy.PolicyAction.PolicyRuleActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        action_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.PolicyRuleActionEnum action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAction() {
+        
+        action_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.LazyStringList parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureParametersIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          parameters_ = new com.google.protobuf.LazyStringArrayList(parameters_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @return A list containing the parameters.
+       */
+      public com.google.protobuf.ProtocolStringList
+          getParametersList() {
+        return parameters_.getUnmodifiableView();
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @return The count of parameters.
+       */
+      public int getParametersCount() {
+        return parameters_.size();
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param index The index of the element to return.
+       * @return The parameters at the given index.
+       */
+      public java.lang.String getParameters(int index) {
+        return parameters_.get(index);
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param index The index of the value to return.
+       * @return The bytes of the parameters at the given index.
+       */
+      public com.google.protobuf.ByteString
+          getParametersBytes(int index) {
+        return parameters_.getByteString(index);
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param index The index to set the value at.
+       * @param value The parameters to set.
+       * @return This builder for chaining.
+       */
+      public Builder setParameters(
+          int index, java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureParametersIsMutable();
+        parameters_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param value The parameters to add.
+       * @return This builder for chaining.
+       */
+      public Builder addParameters(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureParametersIsMutable();
+        parameters_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param values The parameters to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllParameters(
+          java.lang.Iterable<java.lang.String> values) {
+        ensureParametersIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, parameters_);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearParameters() {
+        parameters_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated string parameters = 2;</code>
+       * @param value The bytes of the parameters to add.
+       * @return This builder for chaining.
+       */
+      public Builder addParametersBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        ensureParametersIsMutable();
+        parameters_.add(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:policy.PolicyRuleAction)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleAction)
+    private static final policy.PolicyAction.PolicyRuleAction DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.PolicyAction.PolicyRuleAction();
+    }
+
+    public static policy.PolicyAction.PolicyRuleAction getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleAction>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleAction>() {
+      @java.lang.Override
+      public PolicyRuleAction parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleAction(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleAction> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleAction> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.PolicyAction.PolicyRuleAction getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleAction_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleAction_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\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" +
+      "N_NO_ACTION\020\000\022\'\n#POLICYRULE_ACTION_SET_D" +
+      "EVICE_STATUS\020\001\022,\n(POLICYRULE_ACTION_ADD_" +
+      "SERVICE_CONFIGRULE\020\002\022,\n(POLICYRULE_ACTIO" +
+      "N_ADD_SERVICE_CONSTRAINT\020\003b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_policy_PolicyRuleAction_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_policy_PolicyRuleAction_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleAction_descriptor,
+        new java.lang.String[] { "Action", "Parameters", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java b/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
new file mode 100644
index 0000000000000000000000000000000000000000..2bde987ea6b48fa4a5285775a235d26892ee3b81
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/policy/PolicyCondition.java
@@ -0,0 +1,1362 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: policy-condition.proto
+
+package policy;
+
+public final class PolicyCondition {
+  private PolicyCondition() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * <pre>
+   * Operator to be used when comparing Kpis with condition values
+   * </pre>
+   *
+   * Protobuf enum {@code policy.NumericalOperator}
+   */
+  public enum NumericalOperator
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * Kpi numerical operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_UNDEFINED(0),
+    /**
+     * <pre>
+     * Kpi is equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_EQUAL(1),
+    /**
+     * <pre>
+     * Kpi is not equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL(2),
+    /**
+     * <pre>
+     * Kpi is less than value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_LESS_THAN(3),
+    /**
+     * <pre>
+     * Kpi is less than or equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL(4),
+    /**
+     * <pre>
+     * Kpi is greater than value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN(5),
+    /**
+     * <pre>
+     * Kpi is less than or equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6;</code>
+     */
+    POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL(6),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <pre>
+     * Kpi numerical operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_UNDEFINED_VALUE = 0;
+    /**
+     * <pre>
+     * Kpi is equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_EQUAL_VALUE = 1;
+    /**
+     * <pre>
+     * Kpi is not equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL_VALUE = 2;
+    /**
+     * <pre>
+     * Kpi is less than value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_VALUE = 3;
+    /**
+     * <pre>
+     * Kpi is less than or equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL_VALUE = 4;
+    /**
+     * <pre>
+     * Kpi is greater than value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_VALUE = 5;
+    /**
+     * <pre>
+     * Kpi is less than or equal with value
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6;</code>
+     */
+    public static final int POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL_VALUE = 6;
+
+
+    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 NumericalOperator 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 NumericalOperator forNumber(int value) {
+      switch (value) {
+        case 0: return POLICYRULE_CONDITION_NUMERICAL_UNDEFINED;
+        case 1: return POLICYRULE_CONDITION_NUMERICAL_EQUAL;
+        case 2: return POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL;
+        case 3: return POLICYRULE_CONDITION_NUMERICAL_LESS_THAN;
+        case 4: return POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL;
+        case 5: return POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN;
+        case 6: return POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<NumericalOperator>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        NumericalOperator> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<NumericalOperator>() {
+            public NumericalOperator findValueByNumber(int number) {
+              return NumericalOperator.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 policy.PolicyCondition.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final NumericalOperator[] VALUES = values();
+
+    public static NumericalOperator 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 NumericalOperator(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:policy.NumericalOperator)
+  }
+
+  /**
+   * <pre>
+   * Operator to be used when evaluating each condition
+   * </pre>
+   *
+   * Protobuf enum {@code policy.BooleanOperator}
+   */
+  public enum BooleanOperator
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * Boolean operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;</code>
+     */
+    POLICYRULE_CONDITION_BOOLEAN_UNDEFINED(0),
+    /**
+     * <pre>
+     * Boolean AND operator
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_AND = 1;</code>
+     */
+    POLICYRULE_CONDITION_BOOLEAN_AND(1),
+    /**
+     * <pre>
+     * Boolean OR operator
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_OR = 2;</code>
+     */
+    POLICYRULE_CONDITION_BOOLEAN_OR(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <pre>
+     * Boolean operator undefined
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;</code>
+     */
+    public static final int POLICYRULE_CONDITION_BOOLEAN_UNDEFINED_VALUE = 0;
+    /**
+     * <pre>
+     * Boolean AND operator
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_AND = 1;</code>
+     */
+    public static final int POLICYRULE_CONDITION_BOOLEAN_AND_VALUE = 1;
+    /**
+     * <pre>
+     * Boolean OR operator
+     * </pre>
+     *
+     * <code>POLICYRULE_CONDITION_BOOLEAN_OR = 2;</code>
+     */
+    public static final int POLICYRULE_CONDITION_BOOLEAN_OR_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 BooleanOperator 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 BooleanOperator forNumber(int value) {
+      switch (value) {
+        case 0: return POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+        case 1: return POLICYRULE_CONDITION_BOOLEAN_AND;
+        case 2: return POLICYRULE_CONDITION_BOOLEAN_OR;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<BooleanOperator>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        BooleanOperator> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<BooleanOperator>() {
+            public BooleanOperator findValueByNumber(int number) {
+              return BooleanOperator.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 policy.PolicyCondition.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final BooleanOperator[] VALUES = values();
+
+    public static BooleanOperator 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 BooleanOperator(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:policy.BooleanOperator)
+  }
+
+  public interface PolicyRuleConditionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:policy.PolicyRuleCondition)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiId kpiId = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    boolean hasKpiId();
+    /**
+     * <code>.monitoring.KpiId kpiId = 1;</code>
+     * @return The kpiId.
+     */
+    monitoring.Monitoring.KpiId getKpiId();
+    /**
+     * <code>.monitoring.KpiId kpiId = 1;</code>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+
+    /**
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The enum numeric value on the wire for numericalOperator.
+     */
+    int getNumericalOperatorValue();
+    /**
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The numericalOperator.
+     */
+    policy.PolicyCondition.NumericalOperator getNumericalOperator();
+
+    /**
+     * <code>.monitoring.KpiValue kpiValue = 3;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    boolean hasKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpiValue = 3;</code>
+     * @return The kpiValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpiValue = 3;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+  }
+  /**
+   * <pre>
+   * Condition
+   * </pre>
+   *
+   * Protobuf type {@code policy.PolicyRuleCondition}
+   */
+  public static final class PolicyRuleCondition extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:policy.PolicyRuleCondition)
+      PolicyRuleConditionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use PolicyRuleCondition.newBuilder() to construct.
+    private PolicyRuleCondition(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private PolicyRuleCondition() {
+      numericalOperator_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new PolicyRuleCondition();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private PolicyRuleCondition(
+        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 16: {
+              int rawValue = input.readEnum();
+
+              numericalOperator_ = rawValue;
+              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 policy.PolicyCondition.internal_static_policy_PolicyRuleCondition_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return policy.PolicyCondition.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              policy.PolicyCondition.PolicyRuleCondition.class, policy.PolicyCondition.PolicyRuleCondition.Builder.class);
+    }
+
+    public static final int KPIID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiId kpiId_;
+    /**
+     * <code>.monitoring.KpiId kpiId = 1;</code>
+     * @return Whether the kpiId field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiId() {
+      return kpiId_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiId kpiId = 1;</code>
+     * @return The kpiId.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiId() {
+      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    }
+    /**
+     * <code>.monitoring.KpiId kpiId = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
+      return getKpiId();
+    }
+
+    public static final int NUMERICALOPERATOR_FIELD_NUMBER = 2;
+    private int numericalOperator_;
+    /**
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The enum numeric value on the wire for numericalOperator.
+     */
+    @java.lang.Override public int getNumericalOperatorValue() {
+      return numericalOperator_;
+    }
+    /**
+     * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+     * @return The numericalOperator.
+     */
+    @java.lang.Override public policy.PolicyCondition.NumericalOperator getNumericalOperator() {
+      @SuppressWarnings("deprecation")
+      policy.PolicyCondition.NumericalOperator result = policy.PolicyCondition.NumericalOperator.valueOf(numericalOperator_);
+      return result == null ? policy.PolicyCondition.NumericalOperator.UNRECOGNIZED : result;
+    }
+
+    public static final int KPIVALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
+    /**
+     * <code>.monitoring.KpiValue kpiValue = 3;</code>
+     * @return Whether the kpiValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiValue = 3;</code>
+     * @return The kpiValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiValue() {
+      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiValue = 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 (numericalOperator_ != policy.PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED.getNumber()) {
+        output.writeEnum(2, numericalOperator_);
+      }
+      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 (numericalOperator_ != policy.PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, numericalOperator_);
+      }
+      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 policy.PolicyCondition.PolicyRuleCondition)) {
+        return super.equals(obj);
+      }
+      policy.PolicyCondition.PolicyRuleCondition other = (policy.PolicyCondition.PolicyRuleCondition) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) return false;
+      }
+      if (numericalOperator_ != other.numericalOperator_) 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) + KPIID_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiId().hashCode();
+      }
+      hash = (37 * hash) + NUMERICALOPERATOR_FIELD_NUMBER;
+      hash = (53 * hash) + numericalOperator_;
+      if (hasKpiValue()) {
+        hash = (37 * hash) + KPIVALUE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValue().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition 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 policy.PolicyCondition.PolicyRuleCondition parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition 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 policy.PolicyCondition.PolicyRuleCondition parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static policy.PolicyCondition.PolicyRuleCondition 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(policy.PolicyCondition.PolicyRuleCondition 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>
+     * Condition
+     * </pre>
+     *
+     * Protobuf type {@code policy.PolicyRuleCondition}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:policy.PolicyRuleCondition)
+        policy.PolicyCondition.PolicyRuleConditionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return policy.PolicyCondition.internal_static_policy_PolicyRuleCondition_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return policy.PolicyCondition.internal_static_policy_PolicyRuleCondition_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                policy.PolicyCondition.PolicyRuleCondition.class, policy.PolicyCondition.PolicyRuleCondition.Builder.class);
+      }
+
+      // Construct using policy.PolicyCondition.PolicyRuleCondition.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;
+        }
+        numericalOperator_ = 0;
+
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return policy.PolicyCondition.internal_static_policy_PolicyRuleCondition_descriptor;
+      }
+
+      @java.lang.Override
+      public policy.PolicyCondition.PolicyRuleCondition getDefaultInstanceForType() {
+        return policy.PolicyCondition.PolicyRuleCondition.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public policy.PolicyCondition.PolicyRuleCondition build() {
+        policy.PolicyCondition.PolicyRuleCondition result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public policy.PolicyCondition.PolicyRuleCondition buildPartial() {
+        policy.PolicyCondition.PolicyRuleCondition result = new policy.PolicyCondition.PolicyRuleCondition(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.numericalOperator_ = numericalOperator_;
+        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 policy.PolicyCondition.PolicyRuleCondition) {
+          return mergeFrom((policy.PolicyCondition.PolicyRuleCondition)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(policy.PolicyCondition.PolicyRuleCondition other) {
+        if (other == policy.PolicyCondition.PolicyRuleCondition.getDefaultInstance()) return this;
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.numericalOperator_ != 0) {
+          setNumericalOperatorValue(other.getNumericalOperatorValue());
+        }
+        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 {
+        policy.PolicyCondition.PolicyRuleCondition parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (policy.PolicyCondition.PolicyRuleCondition) 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 kpiId = 1;</code>
+       * @return Whether the kpiId field is set.
+       */
+      public boolean hasKpiId() {
+        return kpiIdBuilder_ != null || kpiId_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiId kpiId = 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 kpiId = 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 kpiId = 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 kpiId = 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 kpiId = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiId kpiId = 1;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpiId = 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 kpiId = 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 int numericalOperator_ = 0;
+      /**
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @return The enum numeric value on the wire for numericalOperator.
+       */
+      @java.lang.Override public int getNumericalOperatorValue() {
+        return numericalOperator_;
+      }
+      /**
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @param value The enum numeric value on the wire for numericalOperator to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNumericalOperatorValue(int value) {
+        
+        numericalOperator_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @return The numericalOperator.
+       */
+      @java.lang.Override
+      public policy.PolicyCondition.NumericalOperator getNumericalOperator() {
+        @SuppressWarnings("deprecation")
+        policy.PolicyCondition.NumericalOperator result = policy.PolicyCondition.NumericalOperator.valueOf(numericalOperator_);
+        return result == null ? policy.PolicyCondition.NumericalOperator.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @param value The numericalOperator to set.
+       * @return This builder for chaining.
+       */
+      public Builder setNumericalOperator(policy.PolicyCondition.NumericalOperator value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        numericalOperator_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.policy.NumericalOperator numericalOperator = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearNumericalOperator() {
+        
+        numericalOperator_ = 0;
+        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 kpiValue = 3;</code>
+       * @return Whether the kpiValue field is set.
+       */
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiValue = 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 kpiValue = 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 kpiValue = 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 kpiValue = 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 kpiValue = 3;</code>
+       */
+      public Builder clearKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          kpiValue_ = null;
+          onChanged();
+        } else {
+          kpiValue_ = null;
+          kpiValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiValue = 3;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+        
+        onChanged();
+        return getKpiValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiValue = 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 kpiValue = 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:policy.PolicyRuleCondition)
+    }
+
+    // @@protoc_insertion_point(class_scope:policy.PolicyRuleCondition)
+    private static final policy.PolicyCondition.PolicyRuleCondition DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new policy.PolicyCondition.PolicyRuleCondition();
+    }
+
+    public static policy.PolicyCondition.PolicyRuleCondition getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<PolicyRuleCondition>
+        PARSER = new com.google.protobuf.AbstractParser<PolicyRuleCondition>() {
+      @java.lang.Override
+      public PolicyRuleCondition parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new PolicyRuleCondition(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<PolicyRuleCondition> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<PolicyRuleCondition> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public policy.PolicyCondition.PolicyRuleCondition getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_policy_PolicyRuleCondition_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_policy_PolicyRuleCondition_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\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" +
+      "or\022&\n\010kpiValue\030\003 \001(\0132\024.monitoring.KpiVal" +
+      "ue*\343\002\n\021NumericalOperator\022,\n(POLICYRULE_C" +
+      "ONDITION_NUMERICAL_UNDEFINED\020\000\022(\n$POLICY" +
+      "RULE_CONDITION_NUMERICAL_EQUAL\020\001\022,\n(POLI" +
+      "CYRULE_CONDITION_NUMERICAL_NOT_EQUAL\020\002\022," +
+      "\n(POLICYRULE_CONDITION_NUMERICAL_LESS_TH" +
+      "AN\020\003\0222\n.POLICYRULE_CONDITION_NUMERICAL_L" +
+      "ESS_THAN_EQUAL\020\004\022/\n+POLICYRULE_CONDITION" +
+      "_NUMERICAL_GREATER_THAN\020\005\0225\n1POLICYRULE_" +
+      "CONDITION_NUMERICAL_GREATER_THAN_EQUAL\020\006" +
+      "*\210\001\n\017BooleanOperator\022*\n&POLICYRULE_CONDI" +
+      "TION_BOOLEAN_UNDEFINED\020\000\022$\n POLICYRULE_C" +
+      "ONDITION_BOOLEAN_AND\020\001\022#\n\037POLICYRULE_CON" +
+      "DITION_BOOLEAN_OR\020\002b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          monitoring.Monitoring.getDescriptor(),
+        });
+    internal_static_policy_PolicyRuleCondition_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_policy_PolicyRuleCondition_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_policy_PolicyRuleCondition_descriptor,
+        new java.lang.String[] { "KpiId", "NumericalOperator", "KpiValue", });
+    monitoring.Monitoring.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}