diff --git a/docs/grpc/index.html b/docs/grpc/index.html
index 7d456a87fc..032d5e867a 100644
--- a/docs/grpc/index.html
+++ b/docs/grpc/index.html
@@ -12458,14 +12458,14 @@
CreateObligationRequest
- id |
+ namespace_id |
string |
|
|
- fqn |
+ namespace_fqn |
string |
|
|
@@ -12535,14 +12535,14 @@ CreateObligationValueRe
- id |
+ obligation_id |
string |
|
|
- fqn |
+ obligation_fqn |
string |
|
|
@@ -12991,14 +12991,14 @@ ListObligationsRequest
- id |
+ namespace_id |
string |
|
|
- fqn |
+ namespace_fqn |
string |
|
|
@@ -13202,7 +13202,8 @@ UpdateObligationValueRe
metadata |
common.MetadataMutable |
|
- |
+ Optional
+Common metadata |
diff --git a/docs/openapi/policy/objects.openapi.yaml b/docs/openapi/policy/objects.openapi.yaml
index 20ef30c220..06b4f56575 100644
--- a/docs/openapi/policy/objects.openapi.yaml
+++ b/docs/openapi/policy/objects.openapi.yaml
@@ -788,6 +788,8 @@ components:
title: pep
$ref: '#/components/schemas/policy.PolicyEnforcementPoint'
title: RequestContext
+ required:
+ - pep
additionalProperties: false
description: Holds the context needed for obligation fulfillment
policy.ResourceMapping:
diff --git a/docs/openapi/policy/obligations/obligations.openapi.yaml b/docs/openapi/policy/obligations/obligations.openapi.yaml
index 27e973293b..5b5e2a779b 100644
--- a/docs/openapi/policy/obligations/obligations.openapi.yaml
+++ b/docs/openapi/policy/obligations/obligations.openapi.yaml
@@ -1140,6 +1140,8 @@ components:
title: pep
$ref: '#/components/schemas/policy.PolicyEnforcementPoint'
title: RequestContext
+ required:
+ - pep
additionalProperties: false
description: Holds the context needed for obligation fulfillment
policy.ResourceMapping:
@@ -1384,30 +1386,35 @@ components:
additionalProperties: false
policy.obligations.CreateObligationRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
- title: id
- required:
- - id
properties:
+ namespaceId:
+ type: string
+ title: namespace_id
+ format: uuid
+ namespaceFqn:
+ type: string
+ title: namespace_fqn
+ minLength: 1
+ format: uri
name:
type: string
title: name
+ maxLength: 253
+ description: |+
+ Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
values:
type: array
items:
type: string
+ maxLength: 253
+ pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$
+ uniqueItems: true
title: values
+ uniqueItems: true
description: Optional
metadata:
title: metadata
@@ -1416,6 +1423,8 @@ components:
Common metadata
$ref: '#/components/schemas/common.MetadataMutable'
title: CreateObligationRequest
+ required:
+ - name
additionalProperties: false
policy.obligations.CreateObligationResponse:
type: object
@@ -1427,25 +1436,26 @@ components:
additionalProperties: false
policy.obligations.CreateObligationValueRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
- title: id
- required:
- - id
properties:
+ obligationId:
+ type: string
+ title: obligation_id
+ format: uuid
+ obligationFqn:
+ type: string
+ title: obligation_fqn
+ minLength: 1
+ format: uri
value:
type: string
title: value
+ maxLength: 253
+ description: |+
+ Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
triggers:
type: array
items:
@@ -1461,6 +1471,8 @@ components:
Common metadata
$ref: '#/components/schemas/common.MetadataMutable'
title: CreateObligationValueRequest
+ required:
+ - value
additionalProperties: false
policy.obligations.CreateObligationValueResponse:
type: object
@@ -1472,21 +1484,16 @@ components:
additionalProperties: false
policy.obligations.DeleteObligationRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
+ properties:
+ id:
+ type: string
title: id
- required:
- - id
+ format: uuid
+ fqn:
+ type: string
+ title: fqn
+ minLength: 1
+ format: uri
title: DeleteObligationRequest
additionalProperties: false
policy.obligations.DeleteObligationResponse:
@@ -1499,21 +1506,16 @@ components:
additionalProperties: false
policy.obligations.DeleteObligationValueRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
+ properties:
+ id:
+ type: string
title: id
- required:
- - id
+ format: uuid
+ fqn:
+ type: string
+ title: fqn
+ minLength: 1
+ format: uri
title: DeleteObligationValueRequest
additionalProperties: false
policy.obligations.DeleteObligationValueResponse:
@@ -1526,21 +1528,16 @@ components:
additionalProperties: false
policy.obligations.GetObligationRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
+ properties:
+ id:
+ type: string
title: id
- required:
- - id
+ format: uuid
+ fqn:
+ type: string
+ title: fqn
+ minLength: 1
+ format: uri
title: GetObligationRequest
additionalProperties: false
description: Definitions
@@ -1554,21 +1551,16 @@ components:
additionalProperties: false
policy.obligations.GetObligationValueRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
+ properties:
+ id:
+ type: string
title: id
- required:
- - id
+ format: uuid
+ fqn:
+ type: string
+ title: fqn
+ minLength: 1
+ format: uri
title: GetObligationValueRequest
additionalProperties: false
description: Values
@@ -1587,7 +1579,15 @@ components:
type: array
items:
type: string
+ minLength: 1
+ format: uri
+ maxItems: 250
+ minItems: 1
+ uniqueItems: true
title: fqns
+ maxItems: 250
+ minItems: 1
+ uniqueItems: true
title: GetObligationValuesByFQNsRequest
additionalProperties: false
policy.obligations.GetObligationValuesByFQNsResponse:
@@ -1619,7 +1619,15 @@ components:
type: array
items:
type: string
+ minLength: 1
+ format: uri
+ maxItems: 250
+ minItems: 1
+ uniqueItems: true
title: fqns
+ maxItems: 250
+ minItems: 1
+ uniqueItems: true
title: GetObligationsByFQNsRequest
additionalProperties: false
policy.obligations.GetObligationsByFQNsResponse:
@@ -1646,22 +1654,16 @@ components:
additionalProperties: false
policy.obligations.ListObligationsRequest:
type: object
- oneOf:
- - properties:
- fqn:
- type: string
- title: fqn
- title: fqn
- required:
- - fqn
- - properties:
- id:
- type: string
- title: id
- title: id
- required:
- - id
properties:
+ namespaceId:
+ type: string
+ title: namespace_id
+ format: uuid
+ namespaceFqn:
+ type: string
+ title: namespace_fqn
+ minLength: 1
+ format: uri
pagination:
title: pagination
description: Optional
@@ -1705,11 +1707,19 @@ components:
id:
type: string
title: id
+ format: uuid
description: Required
name:
type: string
title: name
- description: Optional
+ maxLength: 253
+ description: |+
+ Optional
+ Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
metadata:
title: metadata
$ref: '#/components/schemas/common.MetadataMutable'
@@ -1732,11 +1742,19 @@ components:
id:
type: string
title: id
+ format: uuid
description: Required
value:
type: string
title: value
- description: Optional
+ maxLength: 253
+ description: |+
+ Optional
+ Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
triggers:
type: array
items:
@@ -1747,6 +1765,9 @@ components:
Obligation Triggers provided here will replace all existing records in the database.
metadata:
title: metadata
+ description: |-
+ Optional
+ Common metadata
$ref: '#/components/schemas/common.MetadataMutable'
metadataUpdateBehavior:
title: metadata_update_behavior
diff --git a/lib/identifier/obligations.go b/lib/identifier/obligations.go
new file mode 100644
index 0000000000..a9056d7c0a
--- /dev/null
+++ b/lib/identifier/obligations.go
@@ -0,0 +1,25 @@
+package identifier
+
+import "strings"
+
+func BreakOblFQN(fqn string) (string, string) {
+ nsFQN := strings.Split(fqn, "/obl/")[0]
+ parts := strings.Split(fqn, "/")
+ oblName := strings.ToLower(parts[len(parts)-1])
+ return nsFQN, oblName
+}
+
+func BreakOblValFQN(fqn string) (string, string, string) {
+ parts := strings.Split(fqn, "/value/")
+ nsFQN, oblName := BreakOblFQN(parts[0])
+ oblVal := strings.ToLower(parts[len(parts)-1])
+ return nsFQN, oblName, oblVal
+}
+
+func BuildOblFQN(nsFQN, oblName string) string {
+ return nsFQN + "/obl/" + strings.ToLower(oblName)
+}
+
+func BuildOblValFQN(nsFQN, oblName, oblVal string) string {
+ return BuildOblFQN(nsFQN, oblName) + "/value/" + strings.ToLower(oblVal)
+}
diff --git a/lib/identifier/obligations_test.go b/lib/identifier/obligations_test.go
new file mode 100644
index 0000000000..eb7ce07ed4
--- /dev/null
+++ b/lib/identifier/obligations_test.go
@@ -0,0 +1,50 @@
+package identifier
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestBreakOblFQN(t *testing.T) {
+ validFQN := "https://namespace.com/obl/drm"
+ nsFQN, oblName := BreakOblFQN(validFQN)
+ require.Equal(t, "https://namespace.com", nsFQN)
+ require.Equal(t, "drm", oblName)
+
+ invalidFQN := ""
+ nsFQN, oblName = BreakOblFQN(invalidFQN)
+ require.Empty(t, nsFQN)
+ require.Empty(t, oblName)
+}
+
+func TestBreakOblValFQN(t *testing.T) {
+ validFQN := "https://namespace.com/obl/drm/value/watermark"
+ nsFQN, oblName, valName := BreakOblValFQN(validFQN)
+ require.Equal(t, "https://namespace.com", nsFQN)
+ require.Equal(t, "drm", oblName)
+ require.Equal(t, "watermark", valName)
+
+ invalidFQN := ""
+ nsFQN, oblName, valName = BreakOblValFQN(invalidFQN)
+ require.Empty(t, nsFQN)
+ require.Empty(t, oblName)
+ require.Empty(t, valName)
+}
+
+func TestBuildOblFQN(t *testing.T) {
+ nsFQN := "https://namespace.com"
+ oblName := "drm"
+ expectedFQN := nsFQN + "/obl/" + oblName
+ fqn := BuildOblFQN(nsFQN, oblName)
+ require.Equal(t, expectedFQN, fqn)
+}
+
+func TestBuildOblValFQN(t *testing.T) {
+ nsFQN := "https://namespace.com"
+ oblName := "drm"
+ valName := "watermark"
+ expectedFQN := nsFQN + "/obl/" + oblName + "/value/" + valName
+ fqn := BuildOblValFQN(nsFQN, oblName, valName)
+ require.Equal(t, expectedFQN, fqn)
+}
diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go
index 0c5afad662..f17639654a 100644
--- a/protocol/go/policy/objects.pb.go
+++ b/protocol/go/policy/objects.pb.go
@@ -3468,208 +3468,209 @@ var file_policy_objects_proto_rawDesc = []byte{
0x79, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x69, 0x6e,
0x74, 0x12, 0x24, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x08, 0x63,
- 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x42, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x70, 0x65, 0x70,
+ 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x65, 0x70,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e,
- 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x03, 0x70, 0x65, 0x70, 0x22, 0xd2, 0x01, 0x0a, 0x0a,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
- 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
- 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66,
- 0x71, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x22, 0xe2, 0x01, 0x0a, 0x0f, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35,
- 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x08, 0x74, 0x72, 0x69,
- 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x05, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
- 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa7, 0x02, 0x0a, 0x11, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x10, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
- 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22,
- 0x61, 0x0a, 0x06, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x61, 0x73,
- 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64,
- 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x61, 0x73,
- 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55,
- 0x72, 0x69, 0x22, 0x29, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43,
- 0x74, 0x78, 0x12, 0x19, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x70, 0x65, 0x6d, 0x22, 0x50, 0x0a,
- 0x0d, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x1e,
- 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07,
- 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1f,
- 0x0a, 0x0b, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22,
- 0xd1, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65,
- 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
- 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f,
- 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
- 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
- 0x68, 0x6d, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
- 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65,
- 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65,
- 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a,
- 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0c, 0x70, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x3d, 0x0a, 0x0f, 0x70, 0x72,
- 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x07, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x72, 0x69,
- 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76,
- 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f,
- 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50,
- 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70,
- 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a,
- 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c,
- 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
- 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, 0x0c, 0x53, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x0a, 0x6b,
- 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
- 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74,
- 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a,
- 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32,
- 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65,
- 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79,
- 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x43,
- 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63,
- 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,
- 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,
- 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
- 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x2a, 0xb3, 0x01, 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x28,
- 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45,
- 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
- 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52,
- 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
- 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x4f, 0x46, 0x10, 0x01, 0x12, 0x23, 0x0a,
- 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f,
- 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x4f, 0x46,
- 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f,
- 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48,
- 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x03, 0x2a, 0xca, 0x01, 0x0a, 0x1a, 0x53,
- 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65,
- 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42,
- 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45,
- 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
- 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x55, 0x42, 0x4a,
- 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52,
- 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x28,
- 0x0a, 0x24, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e,
- 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f,
- 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a,
- 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52,
- 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e,
- 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x03, 0x2a, 0x90, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x64,
- 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65,
- 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f,
- 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45,
- 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
- 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42,
- 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d,
- 0x5f, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54,
- 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45,
- 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4f, 0x52, 0x10, 0x02, 0x2a, 0x5d, 0x0a, 0x0a, 0x53, 0x6f,
- 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4f, 0x55, 0x52,
- 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
- 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f,
- 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12,
- 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45,
- 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x2a, 0x88, 0x02, 0x0a, 0x13, 0x4b, 0x61,
- 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75,
- 0x6d, 0x12, 0x27, 0x0a, 0x23, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f,
- 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53,
- 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41,
- 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47,
- 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01,
- 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b,
- 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f,
- 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55,
- 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55,
- 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x10, 0x05,
- 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b,
- 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53,
- 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41,
- 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47,
- 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31,
- 0x52, 0x31, 0x10, 0x07, 0x2a, 0x9b, 0x01, 0x0a, 0x09, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
- 0x68, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f,
- 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a,
- 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32,
- 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54,
- 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x15, 0x0a,
- 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x32,
- 0x35, 0x36, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48,
- 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x33, 0x38, 0x34, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x41,
- 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x35, 0x32, 0x31,
- 0x10, 0x05, 0x2a, 0x56, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
- 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e,
- 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4b,
- 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45,
- 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53,
- 0x5f, 0x52, 0x4f, 0x54, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x94, 0x01, 0x0a, 0x07, 0x4b,
- 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f,
- 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
- 0x12, 0x1c, 0x0a, 0x18, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x4e,
- 0x46, 0x49, 0x47, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x01, 0x12, 0x1e,
- 0x0a, 0x1a, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49,
- 0x44, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x13,
- 0x0a, 0x0f, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54,
- 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f,
- 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10,
- 0x04, 0x42, 0x82, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x42, 0x0c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
- 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65,
- 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xca,
- 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xe2, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06,
- 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03,
+ 0x70, 0x65, 0x70, 0x22, 0xd2, 0x01, 0x0a, 0x0a, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
+ 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18,
+ 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe2, 0x01, 0x0a, 0x0f, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x0a,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
+ 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a,
+ 0x03, 0x66, 0x71, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12,
+ 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa7, 0x02,
+ 0x0a, 0x11, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x10, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x36, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
+ 0x78, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+ 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x06, 0x4b, 0x61, 0x73, 0x4b, 0x65,
+ 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41,
+ 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x22, 0x29, 0x0a, 0x0c, 0x50, 0x75,
+ 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x19, 0x0a, 0x03, 0x70, 0x65,
+ 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01,
+ 0x52, 0x03, 0x70, 0x65, 0x6d, 0x22, 0x50, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65,
+ 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x1e, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52,
+ 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,
+ 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x72, 0x61,
+ 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xd1, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x79, 0x6d,
+ 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79,
+ 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64,
+ 0x12, 0x36, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
+ 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41,
+ 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
+ 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65,
+ 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b,
+ 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
+ 0x79, 0x43, 0x74, 0x78, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43,
+ 0x74, 0x78, 0x12, 0x3d, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65,
+ 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43,
+ 0x74, 0x78, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74,
+ 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f,
+ 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18,
+ 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2c, 0x0a,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, 0x0c,
+ 0x53, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06,
+ 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65,
+ 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64,
+ 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01,
+ 0x28, 0x0c, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72,
+ 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79,
+ 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e,
+ 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c,
+ 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0xb3, 0x01, 0x0a,
+ 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79,
+ 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42,
+ 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e,
+ 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
+ 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55,
+ 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c,
+ 0x5f, 0x4f, 0x46, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55,
+ 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55,
+ 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x4f, 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x54,
+ 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50,
+ 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59,
+ 0x10, 0x03, 0x2a, 0xca, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61,
+ 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75,
+ 0x6d, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50,
+ 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e,
+ 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
+ 0x12, 0x24, 0x0a, 0x20, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50,
+ 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55,
+ 0x4d, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43,
+ 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54,
+ 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02,
+ 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50,
+ 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55,
+ 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x03, 0x2a,
+ 0x90, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f,
+ 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27,
+ 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41,
+ 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50,
+ 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4e,
+ 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54,
+ 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x22,
+ 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c,
+ 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4f, 0x52,
+ 0x10, 0x02, 0x2a, 0x5d, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
+ 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
+ 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a,
+ 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54,
+ 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43,
+ 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10,
+ 0x02, 0x2a, 0x88, 0x02, 0x0a, 0x13, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x23, 0x4b, 0x41, 0x53,
+ 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f,
+ 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
+ 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43,
+ 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53,
+ 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f,
+ 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45,
+ 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x28,
+ 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59,
+ 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43,
+ 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f,
+ 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45,
+ 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31,
+ 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43,
+ 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43,
+ 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x10, 0x07, 0x2a, 0x9b, 0x01, 0x0a,
+ 0x09, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c,
+ 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
+ 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54,
+ 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x16, 0x0a,
+ 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34,
+ 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54,
+ 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11,
+ 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x33, 0x38,
+ 0x34, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d,
+ 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x35, 0x32, 0x31, 0x10, 0x05, 0x2a, 0x56, 0x0a, 0x09, 0x4b, 0x65,
+ 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53,
+ 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
+ 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55,
+ 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4b, 0x45,
+ 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x54, 0x41, 0x54, 0x45, 0x44,
+ 0x10, 0x02, 0x2a, 0x94, 0x01, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18,
+ 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
+ 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x4b, 0x45, 0x59, 0x5f,
+ 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x52, 0x4f, 0x4f, 0x54,
+ 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f,
+ 0x44, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4f, 0x54,
+ 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f,
+ 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x4b,
+ 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b,
+ 0x45, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x42, 0x82, 0x01, 0x0a, 0x0a, 0x63, 0x6f,
+ 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61,
+ 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67,
+ 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, 0x02,
+ 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xca, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0xe2, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x62, 0x06,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
diff --git a/protocol/go/policy/obligations/obligations.pb.go b/protocol/go/policy/obligations/obligations.pb.go
index 3d12936ee7..8808110e56 100644
--- a/protocol/go/policy/obligations/obligations.pb.go
+++ b/protocol/go/policy/obligations/obligations.pb.go
@@ -29,11 +29,8 @@ type GetObligationRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Types that are assignable to Identifier:
- //
- // *GetObligationRequest_Id
- // *GetObligationRequest_Fqn
- Identifier isGetObligationRequest_Identifier `protobuf_oneof:"identifier"`
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3" json:"fqn,omitempty"`
}
func (x *GetObligationRequest) Reset() {
@@ -68,43 +65,20 @@ func (*GetObligationRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{0}
}
-func (m *GetObligationRequest) GetIdentifier() isGetObligationRequest_Identifier {
- if m != nil {
- return m.Identifier
- }
- return nil
-}
-
func (x *GetObligationRequest) GetId() string {
- if x, ok := x.GetIdentifier().(*GetObligationRequest_Id); ok {
+ if x != nil {
return x.Id
}
return ""
}
func (x *GetObligationRequest) GetFqn() string {
- if x, ok := x.GetIdentifier().(*GetObligationRequest_Fqn); ok {
+ if x != nil {
return x.Fqn
}
return ""
}
-type isGetObligationRequest_Identifier interface {
- isGetObligationRequest_Identifier()
-}
-
-type GetObligationRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type GetObligationRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*GetObligationRequest_Id) isGetObligationRequest_Identifier() {}
-
-func (*GetObligationRequest_Fqn) isGetObligationRequest_Identifier() {}
-
type ValueTriggerRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -317,14 +291,9 @@ type CreateObligationRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Required
- //
- // Types that are assignable to NamespaceIdentifier:
- //
- // *CreateObligationRequest_Id
- // *CreateObligationRequest_Fqn
- NamespaceIdentifier isCreateObligationRequest_NamespaceIdentifier `protobuf_oneof:"namespace_identifier"`
- Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"`
+ NamespaceFqn string `protobuf:"bytes,2,opt,name=namespace_fqn,json=namespaceFqn,proto3" json:"namespace_fqn,omitempty"`
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
// Optional
Values []string `protobuf:"bytes,4,rep,name=values,proto3" json:"values,omitempty"`
// Optional
@@ -364,23 +333,16 @@ func (*CreateObligationRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{5}
}
-func (m *CreateObligationRequest) GetNamespaceIdentifier() isCreateObligationRequest_NamespaceIdentifier {
- if m != nil {
- return m.NamespaceIdentifier
- }
- return nil
-}
-
-func (x *CreateObligationRequest) GetId() string {
- if x, ok := x.GetNamespaceIdentifier().(*CreateObligationRequest_Id); ok {
- return x.Id
+func (x *CreateObligationRequest) GetNamespaceId() string {
+ if x != nil {
+ return x.NamespaceId
}
return ""
}
-func (x *CreateObligationRequest) GetFqn() string {
- if x, ok := x.GetNamespaceIdentifier().(*CreateObligationRequest_Fqn); ok {
- return x.Fqn
+func (x *CreateObligationRequest) GetNamespaceFqn() string {
+ if x != nil {
+ return x.NamespaceFqn
}
return ""
}
@@ -406,22 +368,6 @@ func (x *CreateObligationRequest) GetMetadata() *common.MetadataMutable {
return nil
}
-type isCreateObligationRequest_NamespaceIdentifier interface {
- isCreateObligationRequest_NamespaceIdentifier()
-}
-
-type CreateObligationRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type CreateObligationRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*CreateObligationRequest_Id) isCreateObligationRequest_NamespaceIdentifier() {}
-
-func (*CreateObligationRequest_Fqn) isCreateObligationRequest_NamespaceIdentifier() {}
-
type CreateObligationResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -594,11 +540,8 @@ type DeleteObligationRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Types that are assignable to Identifier:
- //
- // *DeleteObligationRequest_Id
- // *DeleteObligationRequest_Fqn
- Identifier isDeleteObligationRequest_Identifier `protobuf_oneof:"identifier"`
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3" json:"fqn,omitempty"`
}
func (x *DeleteObligationRequest) Reset() {
@@ -633,43 +576,20 @@ func (*DeleteObligationRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{9}
}
-func (m *DeleteObligationRequest) GetIdentifier() isDeleteObligationRequest_Identifier {
- if m != nil {
- return m.Identifier
- }
- return nil
-}
-
func (x *DeleteObligationRequest) GetId() string {
- if x, ok := x.GetIdentifier().(*DeleteObligationRequest_Id); ok {
+ if x != nil {
return x.Id
}
return ""
}
func (x *DeleteObligationRequest) GetFqn() string {
- if x, ok := x.GetIdentifier().(*DeleteObligationRequest_Fqn); ok {
+ if x != nil {
return x.Fqn
}
return ""
}
-type isDeleteObligationRequest_Identifier interface {
- isDeleteObligationRequest_Identifier()
-}
-
-type DeleteObligationRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type DeleteObligationRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*DeleteObligationRequest_Id) isDeleteObligationRequest_Identifier() {}
-
-func (*DeleteObligationRequest_Fqn) isDeleteObligationRequest_Identifier() {}
-
type DeleteObligationResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -722,14 +642,8 @@ type ListObligationsRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Optional
- // Namespace ID or FQN
- //
- // Types that are assignable to NamespaceIdentifier:
- //
- // *ListObligationsRequest_Id
- // *ListObligationsRequest_Fqn
- NamespaceIdentifier isListObligationsRequest_NamespaceIdentifier `protobuf_oneof:"namespace_identifier"`
+ NamespaceId string `protobuf:"bytes,1,opt,name=namespace_id,json=namespaceId,proto3" json:"namespace_id,omitempty"`
+ NamespaceFqn string `protobuf:"bytes,2,opt,name=namespace_fqn,json=namespaceFqn,proto3" json:"namespace_fqn,omitempty"`
// Optional
Pagination *policy.PageRequest `protobuf:"bytes,10,opt,name=pagination,proto3" json:"pagination,omitempty"`
}
@@ -766,23 +680,16 @@ func (*ListObligationsRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{11}
}
-func (m *ListObligationsRequest) GetNamespaceIdentifier() isListObligationsRequest_NamespaceIdentifier {
- if m != nil {
- return m.NamespaceIdentifier
- }
- return nil
-}
-
-func (x *ListObligationsRequest) GetId() string {
- if x, ok := x.GetNamespaceIdentifier().(*ListObligationsRequest_Id); ok {
- return x.Id
+func (x *ListObligationsRequest) GetNamespaceId() string {
+ if x != nil {
+ return x.NamespaceId
}
return ""
}
-func (x *ListObligationsRequest) GetFqn() string {
- if x, ok := x.GetNamespaceIdentifier().(*ListObligationsRequest_Fqn); ok {
- return x.Fqn
+func (x *ListObligationsRequest) GetNamespaceFqn() string {
+ if x != nil {
+ return x.NamespaceFqn
}
return ""
}
@@ -794,22 +701,6 @@ func (x *ListObligationsRequest) GetPagination() *policy.PageRequest {
return nil
}
-type isListObligationsRequest_NamespaceIdentifier interface {
- isListObligationsRequest_NamespaceIdentifier()
-}
-
-type ListObligationsRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type ListObligationsRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*ListObligationsRequest_Id) isListObligationsRequest_NamespaceIdentifier() {}
-
-func (*ListObligationsRequest_Fqn) isListObligationsRequest_NamespaceIdentifier() {}
-
type ListObligationsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -871,11 +762,8 @@ type GetObligationValueRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Types that are assignable to Identifier:
- //
- // *GetObligationValueRequest_Id
- // *GetObligationValueRequest_Fqn
- Identifier isGetObligationValueRequest_Identifier `protobuf_oneof:"identifier"`
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3" json:"fqn,omitempty"`
}
func (x *GetObligationValueRequest) Reset() {
@@ -910,43 +798,20 @@ func (*GetObligationValueRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{13}
}
-func (m *GetObligationValueRequest) GetIdentifier() isGetObligationValueRequest_Identifier {
- if m != nil {
- return m.Identifier
- }
- return nil
-}
-
func (x *GetObligationValueRequest) GetId() string {
- if x, ok := x.GetIdentifier().(*GetObligationValueRequest_Id); ok {
+ if x != nil {
return x.Id
}
return ""
}
func (x *GetObligationValueRequest) GetFqn() string {
- if x, ok := x.GetIdentifier().(*GetObligationValueRequest_Fqn); ok {
+ if x != nil {
return x.Fqn
}
return ""
}
-type isGetObligationValueRequest_Identifier interface {
- isGetObligationValueRequest_Identifier()
-}
-
-type GetObligationValueRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type GetObligationValueRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*GetObligationValueRequest_Id) isGetObligationValueRequest_Identifier() {}
-
-func (*GetObligationValueRequest_Fqn) isGetObligationValueRequest_Identifier() {}
-
type GetObligationValueResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1093,14 +958,9 @@ type CreateObligationValueRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Required
- //
- // Types that are assignable to ObligationIdentifier:
- //
- // *CreateObligationValueRequest_Id
- // *CreateObligationValueRequest_Fqn
- ObligationIdentifier isCreateObligationValueRequest_ObligationIdentifier `protobuf_oneof:"obligation_identifier"`
- Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
+ ObligationId string `protobuf:"bytes,1,opt,name=obligation_id,json=obligationId,proto3" json:"obligation_id,omitempty"`
+ ObligationFqn string `protobuf:"bytes,2,opt,name=obligation_fqn,json=obligationFqn,proto3" json:"obligation_fqn,omitempty"`
+ Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"`
// Optional
// Combination of action and attribute_value that will trigger this obligation value policy decisioning.
Triggers []*ValueTriggerRequest `protobuf:"bytes,4,rep,name=triggers,proto3" json:"triggers,omitempty"`
@@ -1141,23 +1001,16 @@ func (*CreateObligationValueRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{17}
}
-func (m *CreateObligationValueRequest) GetObligationIdentifier() isCreateObligationValueRequest_ObligationIdentifier {
- if m != nil {
- return m.ObligationIdentifier
- }
- return nil
-}
-
-func (x *CreateObligationValueRequest) GetId() string {
- if x, ok := x.GetObligationIdentifier().(*CreateObligationValueRequest_Id); ok {
- return x.Id
+func (x *CreateObligationValueRequest) GetObligationId() string {
+ if x != nil {
+ return x.ObligationId
}
return ""
}
-func (x *CreateObligationValueRequest) GetFqn() string {
- if x, ok := x.GetObligationIdentifier().(*CreateObligationValueRequest_Fqn); ok {
- return x.Fqn
+func (x *CreateObligationValueRequest) GetObligationFqn() string {
+ if x != nil {
+ return x.ObligationFqn
}
return ""
}
@@ -1183,22 +1036,6 @@ func (x *CreateObligationValueRequest) GetMetadata() *common.MetadataMutable {
return nil
}
-type isCreateObligationValueRequest_ObligationIdentifier interface {
- isCreateObligationValueRequest_ObligationIdentifier()
-}
-
-type CreateObligationValueRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type CreateObligationValueRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*CreateObligationValueRequest_Id) isCreateObligationValueRequest_ObligationIdentifier() {}
-
-func (*CreateObligationValueRequest_Fqn) isCreateObligationValueRequest_ObligationIdentifier() {}
-
type CreateObligationValueResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1257,7 +1094,9 @@ type UpdateObligationValueRequest struct {
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
// Optional
// Obligation Triggers provided here will replace all existing records in the database.
- Triggers []*ValueTriggerRequest `protobuf:"bytes,3,rep,name=triggers,proto3" json:"triggers,omitempty"`
+ Triggers []*ValueTriggerRequest `protobuf:"bytes,3,rep,name=triggers,proto3" json:"triggers,omitempty"`
+ // Optional
+ // Common metadata
Metadata *common.MetadataMutable `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"`
MetadataUpdateBehavior common.MetadataUpdateEnum `protobuf:"varint,101,opt,name=metadata_update_behavior,json=metadataUpdateBehavior,proto3,enum=common.MetadataUpdateEnum" json:"metadata_update_behavior,omitempty"`
}
@@ -1381,11 +1220,8 @@ type DeleteObligationValueRequest struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
- // Types that are assignable to Identifier:
- //
- // *DeleteObligationValueRequest_Id
- // *DeleteObligationValueRequest_Fqn
- Identifier isDeleteObligationValueRequest_Identifier `protobuf_oneof:"identifier"`
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3" json:"fqn,omitempty"`
}
func (x *DeleteObligationValueRequest) Reset() {
@@ -1420,43 +1256,20 @@ func (*DeleteObligationValueRequest) Descriptor() ([]byte, []int) {
return file_policy_obligations_obligations_proto_rawDescGZIP(), []int{21}
}
-func (m *DeleteObligationValueRequest) GetIdentifier() isDeleteObligationValueRequest_Identifier {
- if m != nil {
- return m.Identifier
- }
- return nil
-}
-
func (x *DeleteObligationValueRequest) GetId() string {
- if x, ok := x.GetIdentifier().(*DeleteObligationValueRequest_Id); ok {
+ if x != nil {
return x.Id
}
return ""
}
func (x *DeleteObligationValueRequest) GetFqn() string {
- if x, ok := x.GetIdentifier().(*DeleteObligationValueRequest_Fqn); ok {
+ if x != nil {
return x.Fqn
}
return ""
}
-type isDeleteObligationValueRequest_Identifier interface {
- isDeleteObligationValueRequest_Identifier()
-}
-
-type DeleteObligationValueRequest_Id struct {
- Id string `protobuf:"bytes,1,opt,name=id,proto3,oneof"`
-}
-
-type DeleteObligationValueRequest_Fqn struct {
- Fqn string `protobuf:"bytes,2,opt,name=fqn,proto3,oneof"`
-}
-
-func (*DeleteObligationValueRequest_Id) isDeleteObligationValueRequest_Identifier() {}
-
-func (*DeleteObligationValueRequest_Fqn) isDeleteObligationValueRequest_Identifier() {}
-
type DeleteObligationValueResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1745,340 +1558,440 @@ var file_policy_obligations_obligations_proto_rawDesc = []byte{
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x73, 0x65,
0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62,
0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69,
- 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x14, 0x47, 0x65,
+ 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x60, 0x0a, 0x14, 0x47, 0x65,
0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
- 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
- 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0xcb, 0x01, 0x0a, 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38,
- 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
- 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64,
- 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01,
- 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e,
- 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8,
- 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x78, 0x74, 0x22, 0x4b, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a,
- 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0x31, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04,
- 0x66, 0x71, 0x6e, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x12, 0x66, 0x71, 0x6e, 0x5f, 0x6f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
+ 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03,
+ 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05,
+ 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x3a, 0x10, 0xba, 0x48, 0x0d, 0x22,
+ 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0xcb, 0x01, 0x0a,
+ 0x13, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64,
+ 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06,
+ 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48,
+ 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+ 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78,
+ 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x4b, 0x0a, 0x15, 0x47, 0x65,
+ 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01,
+ 0x20, 0x03, 0x28, 0x09, 0x42, 0x16, 0xba, 0x48, 0x13, 0x92, 0x01, 0x10, 0x08, 0x01, 0x10, 0xfa,
+ 0x01, 0x18, 0x01, 0x22, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x04, 0x66, 0x71,
+ 0x6e, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x71, 0x6e, 0x4f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x15, 0x46,
- 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb8, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02,
- 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48,
- 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x16, 0x0a, 0x14, 0x6e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22,
- 0x4e, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
- 0xc8, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
- 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,
- 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e,
- 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x18, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4d, 0x0a, 0x17, 0x44, 0x65,
- 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69,
- 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x18, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x12, 0x66, 0x71, 0x6e, 0x5f, 0x6f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d,
+ 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x71, 0x6e, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x15, 0x46, 0x71, 0x6e,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
+ 0x38, 0x01, 0x22, 0xd4, 0x04, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b,
+ 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0xa7, 0x02, 0x0a,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x92, 0x02, 0xba, 0x48,
+ 0x8e, 0x02, 0xba, 0x01, 0x82, 0x02, 0x0a, 0x16, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xaa,
+ 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c,
+ 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65,
+ 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
+ 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69,
+ 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
+ 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
+ 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01,
+ 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x3e, 0xba, 0x48, 0x3b, 0x92, 0x01, 0x38, 0x08, 0x00,
+ 0x18, 0x01, 0x22, 0x32, 0x72, 0x30, 0x18, 0xfd, 0x01, 0x32, 0x2b, 0x5e, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
+ 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
+ 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x33,
+ 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x4e, 0x0a, 0x18, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x0a, 0x16, 0x4c, 0x69,
- 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x80, 0x04, 0x0a, 0x17, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12,
+ 0xbf, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xaa,
+ 0x02, 0xba, 0x48, 0xa6, 0x02, 0xba, 0x01, 0x9a, 0x02, 0x0a, 0x16, 0x6f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x12, 0xaa, 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61,
+ 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70,
+ 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63,
+ 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73,
+ 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c,
+ 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x53,
+ 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61,
+ 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a, 0x20, 0x74,
+ 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d,
+ 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
+ 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x18,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x63, 0x0a, 0x17,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69,
+ 0x64, 0x12, 0x1c, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a,
+ 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x3a,
+ 0x10, 0xba, 0x48, 0x0d, 0x22, 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x10,
+ 0x01, 0x22, 0x4e, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a,
+ 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0xd1, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61,
0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42,
- 0x16, 0x0a, 0x14, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65,
- 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67,
- 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22,
- 0x4f, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12,
- 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66,
- 0x71, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
- 0x22, 0x4b, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x36, 0x0a,
- 0x20, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52,
- 0x04, 0x66, 0x71, 0x6e, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46,
- 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x66,
- 0x71, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x10, 0x46, 0x71, 0x6e, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a,
- 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
- 0x22, 0xed, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
- 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a,
- 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x17, 0x0a, 0x15, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a,
+ 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f,
+ 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x65, 0x0a,
+ 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
+ 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66,
+ 0x71, 0x6e, 0x3a, 0x10, 0xba, 0x48, 0x0d, 0x22, 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66,
+ 0x71, 0x6e, 0x10, 0x01, 0x22, 0x4b, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x22, 0x4e, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x42, 0x16, 0xba, 0x48, 0x13, 0x92, 0x01, 0x10, 0x08, 0x01, 0x10, 0xfa, 0x01,
+ 0x18, 0x01, 0x22, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x04, 0x66, 0x71, 0x6e,
+ 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x66, 0x71, 0x6e, 0x5f, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61,
+ 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x10, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d,
+ 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd1, 0x04, 0x0a,
+ 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a,
+ 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0c,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0e,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01,
+ 0x52, 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x71, 0x6e, 0x12,
+ 0xac, 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42,
+ 0x95, 0x02, 0xba, 0x48, 0x91, 0x02, 0xba, 0x01, 0x85, 0x02, 0x0a, 0x17, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x12, 0xac, 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20,
+ 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20,
+ 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
+ 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73,
+ 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73,
+ 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f,
+ 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b,
+ 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8,
+ 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43,
+ 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67,
+ 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67,
+ 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+ 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x26, 0xba, 0x48, 0x23, 0x22, 0x21, 0x0a,
+ 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x0a, 0x0e,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x01,
0x22, 0x4e, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x22, 0x94, 0x02, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x22, 0xcf, 0x04, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
- 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67,
- 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+ 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
+ 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0xc4, 0x02, 0x0a, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xad, 0x02, 0xba, 0x48,
+ 0xa9, 0x02, 0xba, 0x01, 0x9d, 0x02, 0x0a, 0x17, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12,
+ 0xac, 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c,
+ 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68,
+ 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f,
+ 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c,
+ 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x53,
+ 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61,
+ 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a, 0x20, 0x74,
+ 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x03,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54,
+ 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74,
+ 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
+ 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a,
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52,
- 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42,
- 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x52, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74,
- 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x03, 0x66, 0x71, 0x6e,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x0c, 0x0a,
- 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd4, 0x02, 0x0a, 0x1b,
- 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
- 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x10, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49,
- 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06,
- 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
- 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
- 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d,
- 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
- 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x63,
- 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e,
- 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x33, 0x0a,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x22, 0x53, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07,
- 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76,
- 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67,
- 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
- 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67,
- 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x32, 0xc6, 0x0c, 0x0a, 0x07,
- 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
- 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47,
- 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03,
- 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x12, 0x2f, 0x2e, 0x70, 0x6f,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69,
+ 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x22, 0x68, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
+ 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03,
+ 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05,
+ 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x3a, 0x10, 0xba, 0x48, 0x0d, 0x22,
+ 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x4e, 0x0a, 0x1d,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd4, 0x02, 0x0a,
+ 0x1b, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72,
+ 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x10,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+ 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42,
+ 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x0a, 0x07,
+ 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f,
+ 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x33,
+ 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52,
+ 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
+ 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67,
+ 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x32, 0xc6, 0x0c, 0x0a,
+ 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42,
- 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73,
+ 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x03, 0x90, 0x02, 0x01, 0x12, 0x7e, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x12, 0x2f, 0x2e, 0x70,
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03,
- 0x90, 0x02, 0x01, 0x12, 0x6f, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62,
+ 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x03, 0x90, 0x02, 0x01, 0x12, 0x6f, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62,
0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
+ 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f,
0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65,
+ 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2d, 0x2e, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6f, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2d, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70,
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01,
- 0x12, 0x8d, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x12, 0x34,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62,
- 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46,
- 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01,
- 0x12, 0x7e, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x7e, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
- 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x7b, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64,
- 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67,
- 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02,
+ 0x01, 0x12, 0x8d, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x12,
+ 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79,
+ 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02,
+ 0x01, 0x12, 0x7e, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x12, 0x7b, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41,
0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
- 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84, 0x01,
- 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54,
- 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x42, 0xcf, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42,
- 0x10, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74,
- 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
- 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d,
- 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2,
- 0x02, 0x03, 0x50, 0x4f, 0x58, 0xaa, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xca, 0x02, 0x12, 0x50, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x5c, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xe2,
- 0x02, 0x1e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0xea, 0x02, 0x13, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
+ 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x84,
+ 0x01, 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
+ 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xcf, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x42, 0x10, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f,
+ 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72,
+ 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0xa2, 0x02, 0x03, 0x50, 0x4f, 0x58, 0xaa, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xca, 0x02, 0x12, 0x50, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0xe2, 0x02, 0x1e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0xea, 0x02, 0x13, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x4f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -2533,34 +2446,6 @@ func file_policy_obligations_obligations_proto_init() {
}
}
}
- file_policy_obligations_obligations_proto_msgTypes[0].OneofWrappers = []interface{}{
- (*GetObligationRequest_Id)(nil),
- (*GetObligationRequest_Fqn)(nil),
- }
- file_policy_obligations_obligations_proto_msgTypes[5].OneofWrappers = []interface{}{
- (*CreateObligationRequest_Id)(nil),
- (*CreateObligationRequest_Fqn)(nil),
- }
- file_policy_obligations_obligations_proto_msgTypes[9].OneofWrappers = []interface{}{
- (*DeleteObligationRequest_Id)(nil),
- (*DeleteObligationRequest_Fqn)(nil),
- }
- file_policy_obligations_obligations_proto_msgTypes[11].OneofWrappers = []interface{}{
- (*ListObligationsRequest_Id)(nil),
- (*ListObligationsRequest_Fqn)(nil),
- }
- file_policy_obligations_obligations_proto_msgTypes[13].OneofWrappers = []interface{}{
- (*GetObligationValueRequest_Id)(nil),
- (*GetObligationValueRequest_Fqn)(nil),
- }
- file_policy_obligations_obligations_proto_msgTypes[17].OneofWrappers = []interface{}{
- (*CreateObligationValueRequest_Id)(nil),
- (*CreateObligationValueRequest_Fqn)(nil),
- }
- file_policy_obligations_obligations_proto_msgTypes[21].OneofWrappers = []interface{}{
- (*DeleteObligationValueRequest_Id)(nil),
- (*DeleteObligationValueRequest_Fqn)(nil),
- }
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
diff --git a/service/integration/obligation_triggers_test.go b/service/integration/obligation_triggers_test.go
index 4beda8adeb..5533790232 100644
--- a/service/integration/obligation_triggers_test.go
+++ b/service/integration/obligation_triggers_test.go
@@ -81,19 +81,15 @@ func (s *ObligationTriggersSuite) SetupSuite() {
// Create an obligation
s.obligation, err = s.db.PolicyClient.CreateObligation(s.ctx, &obligations.CreateObligationRequest{
- Name: obligationName,
- NamespaceIdentifier: &obligations.CreateObligationRequest_Id{
- Id: s.namespace.GetId(),
- },
+ Name: obligationName,
+ NamespaceId: s.namespace.GetId(),
})
s.Require().NoError(err)
// Create an obligation value
s.obligationValue, err = s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: s.obligation.GetId(),
- },
- Value: obligationValue,
+ ObligationId: s.obligation.GetId(),
+ Value: obligationValue,
})
s.Require().NoError(err)
}
@@ -103,9 +99,7 @@ func (s *ObligationTriggersSuite) TearDownSuite() {
ctx := context.Background()
_, err = s.db.PolicyClient.DeleteObligation(ctx, &obligations.DeleteObligationRequest{
- Identifier: &obligations.DeleteObligationRequest_Id{
- Id: s.obligation.GetId(),
- },
+ Id: s.obligation.GetId(),
})
s.Require().NoError(err)
diff --git a/service/integration/obligations_test.go b/service/integration/obligations_test.go
index 8ee8492da3..709fb19df6 100644
--- a/service/integration/obligations_test.go
+++ b/service/integration/obligations_test.go
@@ -7,12 +7,12 @@ import (
"testing"
"time"
+ "github.com/opentdf/platform/lib/identifier"
"github.com/opentdf/platform/protocol/go/common"
"github.com/opentdf/platform/protocol/go/policy"
"github.com/opentdf/platform/protocol/go/policy/obligations"
"github.com/opentdf/platform/service/internal/fixtures"
"github.com/opentdf/platform/service/pkg/db"
- policydb "github.com/opentdf/platform/service/policy/db"
"github.com/stretchr/testify/suite"
)
@@ -104,10 +104,8 @@ func (s *ObligationsSuite) Test_CreateObligation_Succeeds() {
func (s *ObligationsSuite) Test_CreateObligation_Fails() {
// Invalid namespace ID
obl, err := s.db.PolicyClient.CreateObligation(s.ctx, &obligations.CreateObligationRequest{
- NamespaceIdentifier: &obligations.CreateObligationRequest_Id{
- Id: invalidUUID,
- },
- Name: oblName,
+ NamespaceId: invalidUUID,
+ Name: oblName,
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(obl)
@@ -117,10 +115,8 @@ func (s *ObligationsSuite) Test_CreateObligation_Fails() {
obl = s.createObligation(namespaceID, oblName, nil)
pending, err := s.db.PolicyClient.CreateObligation(s.ctx, &obligations.CreateObligationRequest{
- NamespaceIdentifier: &obligations.CreateObligationRequest_Id{
- Id: namespaceID,
- },
- Name: oblName,
+ NamespaceId: namespaceID,
+ Name: oblName,
})
s.Require().ErrorIs(err, db.ErrUniqueConstraintViolation)
s.Nil(pending)
@@ -136,9 +132,7 @@ func (s *ObligationsSuite) Test_GetObligation_Succeeds() {
// Valid ID
obl, err := s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: createdObl.GetId(),
- },
+ Id: createdObl.GetId(),
})
s.Require().NoError(err)
s.assertObligationBasics(obl, oblName, namespaceID, namespace.Name, namespaceFQN)
@@ -146,9 +140,7 @@ func (s *ObligationsSuite) Test_GetObligation_Succeeds() {
// Valid FQN
obl, err = s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Fqn{
- Fqn: namespaceFQN + "/obl/" + oblName,
- },
+ Fqn: namespaceFQN + "/obl/" + oblName,
})
s.Require().NoError(err)
s.assertObligationBasics(obl, oblName, namespaceID, namespace.Name, namespaceFQN)
@@ -169,9 +161,7 @@ func (s *ObligationsSuite) Test_GetObligation_WithTriggers_Succeeds() {
// Get obligation by ID and verify triggers are returned
obl, err := s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: createdObl.GetId(),
- },
+ Id: createdObl.GetId(),
})
s.Require().NoError(err)
s.assertObligationBasics(obl, oblName+"-with-triggers", namespaceID, namespace.Name, namespaceFQN)
@@ -186,18 +176,14 @@ func (s *ObligationsSuite) Test_GetObligation_WithTriggers_Succeeds() {
func (s *ObligationsSuite) Test_GetObligation_Fails() {
// Invalid ID
obl, err := s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: invalidUUID,
- },
+ Id: invalidUUID,
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(obl)
// Invalid FQN
obl, err = s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Fqn{
- Fqn: invalidFQN,
- },
+ Fqn: invalidFQN,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(obl)
@@ -436,9 +422,7 @@ func (s *ObligationsSuite) Test_ListObligations_Succeeds() {
// Test 2: List obligations by namespace ID
oblList, _, err = s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
- NamespaceIdentifier: &obligations.ListObligationsRequest_Id{
- Id: namespaceID,
- },
+ NamespaceId: namespaceID,
})
s.Require().NoError(err)
s.NotNil(oblList)
@@ -451,9 +435,7 @@ func (s *ObligationsSuite) Test_ListObligations_Succeeds() {
// Test 3: List obligations by namespace FQN
oblList, _, err = s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
- NamespaceIdentifier: &obligations.ListObligationsRequest_Fqn{
- Fqn: namespaceFQN,
- },
+ NamespaceFqn: namespaceFQN,
})
s.Require().NoError(err)
s.NotNil(oblList)
@@ -466,9 +448,7 @@ func (s *ObligationsSuite) Test_ListObligations_Succeeds() {
// Test 4: List obligations with invalid namespace FQN (should return empty)
oblList, _, err = s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
- NamespaceIdentifier: &obligations.ListObligationsRequest_Fqn{
- Fqn: invalidFQN,
- },
+ NamespaceFqn: invalidFQN,
})
s.Require().NoError(err)
s.NotNil(oblList)
@@ -481,9 +461,7 @@ func (s *ObligationsSuite) Test_ListObligations_Succeeds() {
func (s *ObligationsSuite) Test_ListObligations_Fails() {
// Attempt to list obligations with an invalid namespace ID
oblList, _, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
- NamespaceIdentifier: &obligations.ListObligationsRequest_Id{
- Id: invalidUUID,
- },
+ NamespaceId: invalidUUID,
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(oblList)
@@ -571,9 +549,7 @@ func (s *ObligationsSuite) Test_ListObligations_WithTriggers_Succeeds() {
// Test 2: List obligations by namespace ID and verify triggers
oblList, _, err = s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
- NamespaceIdentifier: &obligations.ListObligationsRequest_Id{
- Id: namespaceID,
- },
+ NamespaceId: namespaceID,
})
s.Require().NoError(err)
s.NotNil(oblList)
@@ -585,9 +561,7 @@ func (s *ObligationsSuite) Test_ListObligations_WithTriggers_Succeeds() {
// Test 3: List obligations by namespace FQN and verify triggers
oblList, _, err = s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
- NamespaceIdentifier: &obligations.ListObligationsRequest_Fqn{
- Fqn: namespaceFQN,
- },
+ NamespaceFqn: namespaceFQN,
})
s.Require().NoError(err)
s.NotNil(oblList)
@@ -692,18 +666,14 @@ func (s *ObligationsSuite) Test_DeleteObligation_Succeeds() {
// Get the obligation to ensure it exists
obl, err := s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: createdObl.GetId(),
- },
+ Id: createdObl.GetId(),
})
s.Require().NoError(err)
s.NotNil(obl)
// Delete the obligation by ID
obl, err = s.db.PolicyClient.DeleteObligation(s.ctx, &obligations.DeleteObligationRequest{
- Identifier: &obligations.DeleteObligationRequest_Id{
- Id: createdObl.GetId(),
- },
+ Id: createdObl.GetId(),
})
s.Require().NoError(err)
s.NotNil(obl)
@@ -711,9 +681,7 @@ func (s *ObligationsSuite) Test_DeleteObligation_Succeeds() {
// Attempt to get the obligation again to ensure it has been deleted
obl, err = s.db.PolicyClient.GetObligation(s.ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: createdObl.GetId(),
- },
+ Id: createdObl.GetId(),
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(obl)
@@ -721,11 +689,9 @@ func (s *ObligationsSuite) Test_DeleteObligation_Succeeds() {
createdObl = s.createObligation(namespaceID, oblName, oblVals)
// Delete the obligation by FQN
- fqn := policydb.BuildOblFQN(namespaceFQN, oblName)
+ fqn := identifier.BuildOblFQN(namespaceFQN, oblName)
obl, err = s.db.PolicyClient.DeleteObligation(s.ctx, &obligations.DeleteObligationRequest{
- Identifier: &obligations.DeleteObligationRequest_Fqn{
- Fqn: fqn,
- },
+ Fqn: fqn,
})
s.Require().NoError(err)
s.NotNil(obl)
@@ -735,9 +701,7 @@ func (s *ObligationsSuite) Test_DeleteObligation_Succeeds() {
func (s *ObligationsSuite) Test_DeleteObligation_Fails() {
// Attempt to delete an obligation with an invalid ID
obl, err := s.db.PolicyClient.DeleteObligation(s.ctx, &obligations.DeleteObligationRequest{
- Identifier: &obligations.DeleteObligationRequest_Id{
- Id: invalidUUID,
- },
+ Id: invalidUUID,
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(obl)
@@ -755,10 +719,8 @@ func (s *ObligationsSuite) Test_CreateObligationValue_Succeeds() {
// Test 1: Create obligation value by obligation ID
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: createdObl.GetId(),
- },
- Value: oblValPrefix + "test-1",
+ ObligationId: createdObl.GetId(),
+ Value: oblValPrefix + "test-1",
Metadata: &common.MetadataMutable{
Labels: map[string]string{"test": "value"},
},
@@ -769,12 +731,10 @@ func (s *ObligationsSuite) Test_CreateObligationValue_Succeeds() {
s.assertObligationValueBasics(oblValue, oblValPrefix+"test-1", namespaceID, namespace.Name, namespaceFQN)
// Test 2: Create obligation value by obligation FQN
- oblFQN := policydb.BuildOblFQN(namespaceFQN, oblName)
+ oblFQN := identifier.BuildOblFQN(namespaceFQN, oblName)
oblValue2, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Fqn{
- Fqn: oblFQN,
- },
- Value: oblValPrefix + "test-2",
+ ObligationFqn: oblFQN,
+ Value: oblValPrefix + "test-2",
})
s.Require().NoError(err)
s.NotNil(oblValue2)
@@ -791,10 +751,8 @@ func (s *ObligationsSuite) Test_CreateObligationValue_WithTriggers_IDs_Succeeds(
// Create the obligation value with a trigger
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: triggerSetup.createdObl.GetId(),
- },
- Value: oblValPrefix + "test-1",
+ ObligationId: triggerSetup.createdObl.GetId(),
+ Value: oblValPrefix + "test-1",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
@@ -842,10 +800,8 @@ func (s *ObligationsSuite) Test_CreateObligationValue_WithTriggers_FQNsNames_Suc
// Create the obligation value with a trigger
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: triggerSetup.createdObl.GetId(),
- },
- Value: oblValPrefix + "test-1",
+ ObligationId: triggerSetup.createdObl.GetId(),
+ Value: oblValPrefix + "test-1",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Name: triggerSetup.action.GetName()},
@@ -889,30 +845,24 @@ func (s *ObligationsSuite) Test_CreateObligationValue_WithTriggers_FQNsNames_Suc
func (s *ObligationsSuite) Test_CreateObligationValue_Fails() {
// Test 1: Invalid obligation ID
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: invalidUUID,
- },
- Value: oblValPrefix + "test",
+ ObligationId: invalidUUID,
+ Value: oblValPrefix + "test",
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(oblValue)
// Test 2: Non-existent obligation ID
oblValue, err = s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: invalidID,
- },
- Value: oblValPrefix + "test",
+ ObligationId: invalidID,
+ Value: oblValPrefix + "test",
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(oblValue)
// Test 3: Invalid obligation FQN
oblValue, err = s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Fqn{
- Fqn: invalidFQN,
- },
- Value: oblValPrefix + "test",
+ ObligationFqn: invalidFQN,
+ Value: oblValPrefix + "test",
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(oblValue)
@@ -920,13 +870,11 @@ func (s *ObligationsSuite) Test_CreateObligationValue_Fails() {
// Test 4: Non-existent obligation name in valid namespace
namespaceID, namespaceFQN, _ := s.getNamespaceData(nsExampleCom)
createdObl := s.createObligation(namespaceID, oblName, nil)
- nonExistentFQN := policydb.BuildOblFQN(namespaceFQN, "non-existent-obligation")
+ nonExistentFQN := identifier.BuildOblFQN(namespaceFQN, "non-existent-obligation")
oblValue, err = s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Fqn{
- Fqn: nonExistentFQN,
- },
- Value: oblValPrefix + "test",
+ ObligationFqn: nonExistentFQN,
+ Value: oblValPrefix + "test",
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(oblValue)
@@ -945,9 +893,7 @@ func (s *ObligationsSuite) Test_GetObligationValue_Succeeds() {
// Test 1: Get obligation value by ID
retrievedValue, err := s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: oblValue.GetId(),
- },
+ Id: oblValue.GetId(),
})
s.Require().NoError(err)
s.NotNil(retrievedValue)
@@ -955,11 +901,9 @@ func (s *ObligationsSuite) Test_GetObligationValue_Succeeds() {
s.assertObligationValueBasics(retrievedValue, oblValPrefix+"get-test", namespaceID, namespace.Name, namespaceFQN)
// Test 2: Get obligation value by FQN
- oblValFQN := policydb.BuildOblValFQN(namespaceFQN, oblName, oblValPrefix+"get-test")
+ oblValFQN := identifier.BuildOblValFQN(namespaceFQN, oblName, oblValPrefix+"get-test")
retrievedValue2, err := s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Fqn{
- Fqn: oblValFQN,
- },
+ Fqn: oblValFQN,
})
s.Require().NoError(err)
s.NotNil(retrievedValue2)
@@ -980,9 +924,7 @@ func (s *ObligationsSuite) Test_GetObligationValue_WithTriggers_Succeeds() {
// Test 1: Get obligation value by ID and verify triggers are returned
retrievedValue, err := s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: oblValue.GetId(),
- },
+ Id: oblValue.GetId(),
})
s.Require().NoError(err)
s.NotNil(retrievedValue)
@@ -998,11 +940,9 @@ func (s *ObligationsSuite) Test_GetObligationValue_WithTriggers_Succeeds() {
})
// Test 2: Get obligation value by FQN and verify triggers are returned
- oblValFQN := policydb.BuildOblValFQN(namespaceFQN, oblName+"-val-triggers", oblValPrefix+"get-trigger-test")
+ oblValFQN := identifier.BuildOblValFQN(namespaceFQN, oblName+"-val-triggers", oblValPrefix+"get-trigger-test")
retrievedValue2, err := s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Fqn{
- Fqn: oblValFQN,
- },
+ Fqn: oblValFQN,
})
s.Require().NoError(err)
s.NotNil(retrievedValue2)
@@ -1021,27 +961,21 @@ func (s *ObligationsSuite) Test_GetObligationValue_WithTriggers_Succeeds() {
func (s *ObligationsSuite) Test_GetObligationValue_Fails() {
// Test 1: Invalid value ID
retrievedValue, err := s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: invalidUUID,
- },
+ Id: invalidUUID,
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(retrievedValue)
// Test 2: Non-existent value ID
retrievedValue, err = s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: invalidID,
- },
+ Id: invalidID,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(retrievedValue)
// Test 3: Invalid value FQN
retrievedValue, err = s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Fqn{
- Fqn: invalidFQN,
- },
+ Fqn: invalidFQN,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(retrievedValue)
@@ -1049,22 +983,18 @@ func (s *ObligationsSuite) Test_GetObligationValue_Fails() {
// Test 4: Non-existent value name in valid obligation
namespaceID, namespaceFQN, _ := s.getNamespaceData(nsExampleCom)
createdObl := s.createObligation(namespaceID, oblName, nil)
- nonExistentValFQN := policydb.BuildOblValFQN(namespaceFQN, oblName, "non-existent-value")
+ nonExistentValFQN := identifier.BuildOblValFQN(namespaceFQN, oblName, "non-existent-value")
retrievedValue, err = s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Fqn{
- Fqn: nonExistentValFQN,
- },
+ Fqn: nonExistentValFQN,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(retrievedValue)
// Test 5: Non-existent obligation name in valid namespace
- nonExistentOblFQN := policydb.BuildOblValFQN(namespaceFQN, "non-existent-obligation", oblValPrefix+"test")
+ nonExistentOblFQN := identifier.BuildOblValFQN(namespaceFQN, "non-existent-obligation", oblValPrefix+"test")
retrievedValue, err = s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Fqn{
- Fqn: nonExistentOblFQN,
- },
+ Fqn: nonExistentOblFQN,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(retrievedValue)
@@ -1088,9 +1018,9 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Succeeds() {
// Test 1: Get multiple obligation values by FQNs
fqns := []string{
- policydb.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val1"),
- policydb.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val2"),
- policydb.BuildOblValFQN(namespaceFQN2, oblName+"-2", oblValPrefix+"val3"),
+ identifier.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val1"),
+ identifier.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val2"),
+ identifier.BuildOblValFQN(namespaceFQN2, oblName+"-2", oblValPrefix+"val3"),
}
oblValueList, err := s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
@@ -1128,7 +1058,7 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Succeeds() {
s.Equal(oblName+"-2", val3.GetObligation().GetName())
// Test 2: Get single obligation value by FQN
- singleFQN := []string{policydb.BuildOblValFQN(namespaceFQN2, oblName+"-2", oblValPrefix+"val4")}
+ singleFQN := []string{identifier.BuildOblValFQN(namespaceFQN2, oblName+"-2", oblValPrefix+"val4")}
oblValueList, err = s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
Fqns: singleFQN,
})
@@ -1148,8 +1078,8 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Succeeds() {
// Test 4: Get all values from a single obligation
allValuesFromObl1 := []string{
- policydb.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val1"),
- policydb.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val2"),
+ identifier.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val1"),
+ identifier.BuildOblValFQN(namespaceFQN1, oblName+"-1", oblValPrefix+"val2"),
}
oblValueList, err = s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
Fqns: allValuesFromObl1,
@@ -1209,9 +1139,9 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_WithTriggers_Succeeds(
}
oblVal2 := s.createObligationValueWithTriggers(obl2.GetId(), oblValPrefix+"trigger-val3", obl2Triggers) // Test 1: Get multiple obligation values by FQNs and verify triggers are returned
fqns := []string{
- policydb.BuildOblValFQN(namespaceFQN1, oblName+"-vals-triggers-1", oblValPrefix+"trigger-val1"),
- policydb.BuildOblValFQN(namespaceFQN1, oblName+"-vals-triggers-1", oblValPrefix+"trigger-val2"),
- policydb.BuildOblValFQN(namespaceFQN2, oblName+"-vals-triggers-2", oblValPrefix+"trigger-val3"),
+ identifier.BuildOblValFQN(namespaceFQN1, oblName+"-vals-triggers-1", oblValPrefix+"trigger-val1"),
+ identifier.BuildOblValFQN(namespaceFQN1, oblName+"-vals-triggers-1", oblValPrefix+"trigger-val2"),
+ identifier.BuildOblValFQN(namespaceFQN2, oblName+"-vals-triggers-2", oblValPrefix+"trigger-val3"),
}
defer s.deleteObligations([]string{obl1.GetId(), obl2.GetId()})
@@ -1259,7 +1189,7 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_WithTriggers_Succeeds(
s.Equal(oblName+"-vals-triggers-2", val3.GetObligation().GetName())
// Test 2: Get single obligation value by FQN and verify triggers
- singleFQN := []string{policydb.BuildOblValFQN(namespaceFQN1, oblName+"-vals-triggers-1", oblValPrefix+"trigger-val1")}
+ singleFQN := []string{identifier.BuildOblValFQN(namespaceFQN1, oblName+"-vals-triggers-1", oblValPrefix+"trigger-val1")}
oblValueList, err = s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
Fqns: singleFQN,
})
@@ -1297,7 +1227,7 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Fails() {
s.Empty(oblValueList)
// Test 2: Mix of valid and invalid FQNs should return only valid ones
- validFQN := policydb.BuildOblValFQN(namespaceFQN, oblName, oblValPrefix+"test-value")
+ validFQN := identifier.BuildOblValFQN(namespaceFQN, oblName, oblValPrefix+"test-value")
mixedFQNs := []string{
validFQN,
invalidFQN,
@@ -1313,7 +1243,7 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Fails() {
// Test 3: Non-existent obligation value names should return empty result
nonExistentFQNs := []string{
- policydb.BuildOblValFQN(namespaceFQN, oblName, "nonexistent-value"),
+ identifier.BuildOblValFQN(namespaceFQN, oblName, "nonexistent-value"),
}
oblValueList, err = s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
Fqns: nonExistentFQNs,
@@ -1324,7 +1254,7 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Fails() {
// Test 4: Non-existent obligation names should return empty result
nonExistentOblFQNs := []string{
- policydb.BuildOblValFQN(namespaceFQN, "nonexistent-obligation", oblValPrefix+"test-value"),
+ identifier.BuildOblValFQN(namespaceFQN, "nonexistent-obligation", oblValPrefix+"test-value"),
}
oblValueList, err = s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
Fqns: nonExistentOblFQNs,
@@ -1335,7 +1265,7 @@ func (s *ObligationsSuite) Test_GetObligationValuesByFQNs_Fails() {
// Test 5: Non-existent namespace should return empty result
nonExistentNsFQNs := []string{
- policydb.BuildOblValFQN("https://nonexistent.com", oblName, oblValPrefix+"test-value"),
+ identifier.BuildOblValFQN("https://nonexistent.com", oblName, oblValPrefix+"test-value"),
}
oblValueList, err = s.db.PolicyClient.GetObligationValuesByFQNs(s.ctx, &obligations.GetObligationValuesByFQNsRequest{
Fqns: nonExistentNsFQNs,
@@ -1425,10 +1355,8 @@ func (s *ObligationsSuite) Test_UpdateObligationValue_WithTriggers_Succeeds() {
defer s.deleteObligations([]string{triggerSetup.createdObl.GetId()})
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: triggerSetup.createdObl.GetId(),
- },
- Value: oblValPrefix + "test-1",
+ ObligationId: triggerSetup.createdObl.GetId(),
+ Value: oblValPrefix + "test-1",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: triggerSetup.action.GetId()},
@@ -1507,9 +1435,7 @@ func (s *ObligationsSuite) Test_UpdateObligationValue_WithTriggers_Succeeds() {
// Ensure oblValue has new triggers after update
oblValueAfterUpdate, err := s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: oblValue.GetId(),
- },
+ Id: oblValue.GetId(),
})
s.Require().NoError(err)
s.NotNil(oblValueAfterUpdate)
@@ -1548,9 +1474,7 @@ func (s *ObligationsSuite) Test_UpdateObligationValue_WithTriggers_Succeeds() {
s.Require().Equal(oblValue.GetTriggers()[1].GetAttributeValue().GetFqn(), updatedOblValue.GetTriggers()[0].GetAttributeValue().GetFqn())
oblValueAfterUpdate, err = s.db.PolicyClient.GetObligationValue(s.ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: oblValue.GetId(),
- },
+ Id: oblValue.GetId(),
})
s.Require().NoError(err)
s.NotNil(oblValueAfterUpdate)
@@ -1610,20 +1534,16 @@ func (s *ObligationsSuite) Test_DeleteObligationValue_Succeeds() {
// Delete by value ID
deleted, err := s.db.PolicyClient.DeleteObligationValue(s.ctx, &obligations.DeleteObligationValueRequest{
- Identifier: &obligations.DeleteObligationValueRequest_Id{
- Id: oblValues[0].GetId(),
- },
+ Id: oblValues[0].GetId(),
})
s.Require().NoError(err)
s.NotNil(deleted)
s.Equal(oblValues[0].GetId(), deleted.GetId())
// Delete by FQN + value name
- oblValFQN := policydb.BuildOblValFQN(namespaceFQN, oblName, values[1])
+ oblValFQN := identifier.BuildOblValFQN(namespaceFQN, oblName, values[1])
deleted2, err := s.db.PolicyClient.DeleteObligationValue(s.ctx, &obligations.DeleteObligationValueRequest{
- Identifier: &obligations.DeleteObligationValueRequest_Fqn{
- Fqn: oblValFQN,
- },
+ Fqn: oblValFQN,
})
s.Require().NoError(err)
s.NotNil(deleted2)
@@ -1636,27 +1556,21 @@ func (s *ObligationsSuite) Test_DeleteObligationValue_Succeeds() {
func (s *ObligationsSuite) Test_DeleteObligationValue_Fails() {
// Invalid value ID
deleted, err := s.db.PolicyClient.DeleteObligationValue(s.ctx, &obligations.DeleteObligationValueRequest{
- Identifier: &obligations.DeleteObligationValueRequest_Id{
- Id: invalidUUID,
- },
+ Id: invalidUUID,
})
s.Require().ErrorIs(err, db.ErrUUIDInvalid)
s.Nil(deleted)
// Non-existent value ID
deleted, err = s.db.PolicyClient.DeleteObligationValue(s.ctx, &obligations.DeleteObligationValueRequest{
- Identifier: &obligations.DeleteObligationValueRequest_Id{
- Id: invalidID,
- },
+ Id: invalidID,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(deleted)
// Invalid value FQN
deleted, err = s.db.PolicyClient.DeleteObligationValue(s.ctx, &obligations.DeleteObligationValueRequest{
- Identifier: &obligations.DeleteObligationValueRequest_Fqn{
- Fqn: invalidFQN,
- },
+ Fqn: invalidFQN,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(deleted)
@@ -1664,11 +1578,9 @@ func (s *ObligationsSuite) Test_DeleteObligationValue_Fails() {
// Non-existent value name in valid obligation
namespaceID, namespaceFQN, _ := s.getNamespaceData(nsExampleCom)
createdObl := s.createObligation(namespaceID, oblName, nil)
- nonExistentValFQN := policydb.BuildOblValFQN(namespaceFQN, oblName, "non-existent-value")
+ nonExistentValFQN := identifier.BuildOblValFQN(namespaceFQN, oblName, "non-existent-value")
deleted, err = s.db.PolicyClient.DeleteObligationValue(s.ctx, &obligations.DeleteObligationValueRequest{
- Identifier: &obligations.DeleteObligationValueRequest_Fqn{
- Fqn: nonExistentValFQN,
- },
+ Fqn: nonExistentValFQN,
})
s.Require().ErrorIs(err, db.ErrNotFound)
s.Nil(deleted)
@@ -1772,11 +1684,9 @@ func (s *ObligationsSuite) assertTriggers(oblVal *policy.ObligationValue, expect
func (s *ObligationsSuite) createObligation(namespaceID, name string, values []string) *policy.Obligation {
obl, err := s.db.PolicyClient.CreateObligation(s.ctx, &obligations.CreateObligationRequest{
- NamespaceIdentifier: &obligations.CreateObligationRequest_Id{
- Id: namespaceID,
- },
- Name: name,
- Values: values,
+ NamespaceId: namespaceID,
+ Name: name,
+ Values: values,
})
s.Require().NoError(err)
return obl
@@ -1784,11 +1694,9 @@ func (s *ObligationsSuite) createObligation(namespaceID, name string, values []s
func (s *ObligationsSuite) createObligationByFQN(namespaceFQN, name string, values []string) *policy.Obligation {
obl, err := s.db.PolicyClient.CreateObligation(s.ctx, &obligations.CreateObligationRequest{
- NamespaceIdentifier: &obligations.CreateObligationRequest_Fqn{
- Fqn: namespaceFQN,
- },
- Name: name,
- Values: values,
+ NamespaceFqn: namespaceFQN,
+ Name: name,
+ Values: values,
})
s.Require().NoError(err)
return obl
@@ -1796,9 +1704,7 @@ func (s *ObligationsSuite) createObligationByFQN(namespaceFQN, name string, valu
func (s *ObligationsSuite) deleteObligation(oblID string) {
_, err := s.db.PolicyClient.DeleteObligation(s.ctx, &obligations.DeleteObligationRequest{
- Identifier: &obligations.DeleteObligationRequest_Id{
- Id: oblID,
- },
+ Id: oblID,
})
s.Require().NoError(err)
}
@@ -1844,11 +1750,9 @@ func (s *ObligationsSuite) createObligationValueWithTriggers(obligationID string
}
oblValue, err := s.db.PolicyClient.CreateObligationValue(s.ctx, &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{
- Id: obligationID,
- },
- Value: value,
- Triggers: triggers,
+ ObligationId: obligationID,
+ Value: value,
+ Triggers: triggers,
})
s.Require().NoError(err)
return oblValue
diff --git a/service/policy/db/obligations.go b/service/policy/db/obligations.go
index ffd6245bf6..1c0c6438ba 100644
--- a/service/policy/db/obligations.go
+++ b/service/policy/db/obligations.go
@@ -6,6 +6,7 @@ import (
"fmt"
"strings"
+ "github.com/opentdf/platform/lib/identifier"
"github.com/opentdf/platform/protocol/go/common"
"github.com/opentdf/platform/protocol/go/policy"
"github.com/opentdf/platform/protocol/go/policy/obligations"
@@ -22,11 +23,14 @@ func (c PolicyDBClient) CreateObligation(ctx context.Context, r *obligations.Cre
if err != nil {
return nil, err
}
- name := r.GetName()
+ name := strings.ToLower(r.GetName())
values := r.GetValues()
+ for idx, val := range values {
+ values[idx] = strings.ToLower(val)
+ }
queryParams := createObligationParams{
- NamespaceID: r.GetId(),
- NamespaceFqn: r.GetFqn(),
+ NamespaceID: r.GetNamespaceId(),
+ NamespaceFqn: r.GetNamespaceFqn(),
Name: name,
Metadata: metadataJSON,
Values: values,
@@ -62,30 +66,8 @@ func (c PolicyDBClient) CreateObligation(ctx context.Context, r *obligations.Cre
}, nil
}
-func breakOblFQN(fqn string) (string, string) {
- nsFQN := strings.Split(fqn, "/obl/")[0]
- parts := strings.Split(fqn, "/")
- oblName := parts[len(parts)-1]
- return nsFQN, oblName
-}
-
-func breakOblValFQN(fqn string) (string, string, string) {
- parts := strings.Split(fqn, "/value/")
- nsFQN, oblName := breakOblFQN(parts[0])
- oblVal := parts[len(parts)-1]
- return nsFQN, oblName, oblVal
-}
-
-func BuildOblFQN(nsFQN, oblName string) string {
- return nsFQN + "/obl/" + oblName
-}
-
-func BuildOblValFQN(nsFQN, oblName, oblVal string) string {
- return nsFQN + "/obl/" + oblName + "/value/" + oblVal
-}
-
func (c PolicyDBClient) GetObligation(ctx context.Context, r *obligations.GetObligationRequest) (*policy.Obligation, error) {
- nsFQN, oblName := breakOblFQN(r.GetFqn())
+ nsFQN, oblName := identifier.BreakOblFQN(r.GetFqn())
queryParams := getObligationParams{
ID: r.GetId(),
Name: oblName,
@@ -125,7 +107,7 @@ func (c PolicyDBClient) GetObligationsByFQNs(ctx context.Context, r *obligations
nsFQNs := make([]string, 0, len(r.GetFqns()))
oblNames := make([]string, 0, len(r.GetFqns()))
for _, fqn := range r.GetFqns() {
- nsFQN, oblName := breakOblFQN(fqn)
+ nsFQN, oblName := identifier.BreakOblFQN(fqn)
nsFQNs = append(nsFQNs, nsFQN)
oblNames = append(oblNames, oblName)
}
@@ -178,8 +160,8 @@ func (c PolicyDBClient) ListObligations(ctx context.Context, r *obligations.List
}
rows, err := c.queries.listObligations(ctx, listObligationsParams{
- NamespaceID: r.GetId(),
- NamespaceFqn: r.GetFqn(),
+ NamespaceID: r.GetNamespaceId(),
+ NamespaceFqn: r.GetNamespaceFqn(),
Limit: limit,
Offset: offset,
})
@@ -231,12 +213,8 @@ func (c PolicyDBClient) ListObligations(ctx context.Context, r *obligations.List
func (c PolicyDBClient) UpdateObligation(ctx context.Context, r *obligations.UpdateObligationRequest) (*policy.Obligation, error) {
id := r.GetId()
- name := r.GetName()
- obl, err := c.GetObligation(ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: id,
- },
- })
+ name := strings.ToLower(r.GetName())
+ obl, err := c.GetObligation(ctx, &obligations.GetObligationRequest{Id: id})
if err != nil {
return nil, err
}
@@ -278,7 +256,7 @@ func (c PolicyDBClient) UpdateObligation(ctx context.Context, r *obligations.Upd
}
func (c PolicyDBClient) DeleteObligation(ctx context.Context, r *obligations.DeleteObligationRequest) (*policy.Obligation, error) {
- nsFQN, oblName := breakOblFQN(r.GetFqn())
+ nsFQN, oblName := identifier.BreakOblFQN(r.GetFqn())
queryParams := deleteObligationParams{
ID: r.GetId(),
NamespaceFqn: nsFQN,
@@ -303,15 +281,15 @@ func (c PolicyDBClient) DeleteObligation(ctx context.Context, r *obligations.Del
///
func (c PolicyDBClient) CreateObligationValue(ctx context.Context, r *obligations.CreateObligationValueRequest) (*policy.ObligationValue, error) {
- nsFQN, oblName := breakOblFQN(r.GetFqn())
- value := r.GetValue()
+ nsFQN, oblName := identifier.BreakOblFQN(r.GetObligationFqn())
+ value := strings.ToLower(r.GetValue())
metadataJSON, _, err := db.MarshalCreateMetadata(r.GetMetadata())
if err != nil {
return nil, err
}
queryParams := createObligationValueParams{
- ID: r.GetId(),
+ ID: r.GetObligationId(),
Name: oblName,
NamespaceFqn: nsFQN,
Value: value,
@@ -370,7 +348,7 @@ func (c PolicyDBClient) CreateObligationValue(ctx context.Context, r *obligation
}
func (c PolicyDBClient) GetObligationValue(ctx context.Context, r *obligations.GetObligationValueRequest) (*policy.ObligationValue, error) {
- nsFQN, oblName, oblVal := breakOblValFQN(r.GetFqn())
+ nsFQN, oblName, oblVal := identifier.BreakOblValFQN(r.GetFqn())
queryParams := getObligationValueParams{
ID: r.GetId(),
Name: oblName,
@@ -418,7 +396,7 @@ func (c PolicyDBClient) GetObligationValuesByFQNs(ctx context.Context, r *obliga
oblNames := make([]string, 0, len(r.GetFqns()))
oblVals := make([]string, 0, len(r.GetFqns()))
for _, fqn := range r.GetFqns() {
- nsFQN, oblName, oblVal := breakOblValFQN(fqn)
+ nsFQN, oblName, oblVal := identifier.BreakOblValFQN(fqn)
nsFQNs = append(nsFQNs, nsFQN)
oblNames = append(oblNames, oblName)
oblVals = append(oblVals, oblVal)
@@ -472,12 +450,8 @@ func (c PolicyDBClient) GetObligationValuesByFQNs(ctx context.Context, r *obliga
func (c PolicyDBClient) UpdateObligationValue(ctx context.Context, r *obligations.UpdateObligationValueRequest) (*policy.ObligationValue, error) {
id := r.GetId()
- value := r.GetValue()
- oblVal, err := c.GetObligationValue(ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: id,
- },
- })
+ value := strings.ToLower(r.GetValue())
+ oblVal, err := c.GetObligationValue(ctx, &obligations.GetObligationValueRequest{Id: id})
if err != nil {
return nil, err
}
@@ -544,7 +518,7 @@ func (c PolicyDBClient) UpdateObligationValue(ctx context.Context, r *obligation
}
func (c PolicyDBClient) DeleteObligationValue(ctx context.Context, r *obligations.DeleteObligationValueRequest) (*policy.ObligationValue, error) {
- nsFQN, oblName, valName := breakOblValFQN(r.GetFqn())
+ nsFQN, oblName, valName := identifier.BreakOblValFQN(r.GetFqn())
queryParams := deleteObligationValueParams{
ID: r.GetId(),
NamespaceFqn: nsFQN,
@@ -579,15 +553,11 @@ func (c PolicyDBClient) CreateObligationTrigger(ctx context.Context, r *obligati
var oblValReq *obligations.GetObligationValueRequest
if r.GetObligationValue().GetId() != "" {
oblValReq = &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: r.GetObligationValue().GetId(),
- },
+ Id: r.GetObligationValue().GetId(),
}
} else {
oblValReq = &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Fqn{
- Fqn: r.GetObligationValue().GetFqn(),
- },
+ Fqn: r.GetObligationValue().GetFqn(),
}
}
diff --git a/service/policy/objects.proto b/service/policy/objects.proto
index 0a71a69b49..81b39f84c8 100644
--- a/service/policy/objects.proto
+++ b/service/policy/objects.proto
@@ -469,7 +469,7 @@ message PolicyEnforcementPoint {
// Holds the context needed for obligation fulfillment
message RequestContext {
- PolicyEnforcementPoint pep = 1;
+ PolicyEnforcementPoint pep = 1 [(buf.validate.field).required = true];
}
message Obligation {
diff --git a/service/policy/obligations/obligations.go b/service/policy/obligations/obligations.go
index 28da21ff8b..fc153798b9 100644
--- a/service/policy/obligations/obligations.go
+++ b/service/policy/obligations/obligations.go
@@ -6,6 +6,7 @@ import (
"log/slog"
"connectrpc.com/connect"
+ "github.com/opentdf/platform/lib/identifier"
"github.com/opentdf/platform/protocol/go/policy"
"github.com/opentdf/platform/protocol/go/policy/obligations"
"github.com/opentdf/platform/protocol/go/policy/obligations/obligationsconnect"
@@ -131,11 +132,12 @@ func (s *Service) CreateObligation(ctx context.Context, req *connect.Request[obl
}
func (s *Service) GetObligation(ctx context.Context, req *connect.Request[obligations.GetObligationRequest]) (*connect.Response[obligations.GetObligationResponse], error) {
- s.logger.DebugContext(ctx, "getting obligation", slog.Any("identifier", req.Msg.GetIdentifier()))
+ identifier := req.Msg.GetId() + req.Msg.GetFqn()
+ s.logger.DebugContext(ctx, "getting obligation", slog.Any("identifier", identifier))
obl, err := s.dbClient.GetObligation(ctx, req.Msg)
if err != nil {
- return nil, db.StatusifyError(ctx, s.logger, err, db.ErrTextGetRetrievalFailed, slog.Any("identifier", req.Msg.GetIdentifier()))
+ return nil, db.StatusifyError(ctx, s.logger, err, db.ErrTextGetRetrievalFailed, slog.Any("identifier", identifier))
}
rsp := &obligations.GetObligationResponse{Obligation: obl}
return connect.NewResponse(rsp), nil
@@ -150,7 +152,7 @@ func (s *Service) GetObligationsByFQNs(ctx context.Context, req *connect.Request
}
obls := make(map[string]*policy.Obligation)
for _, obl := range os {
- obls[policydb.BuildOblFQN(obl.GetNamespace().GetFqn(), obl.GetName())] = obl
+ obls[identifier.BuildOblFQN(obl.GetNamespace().GetFqn(), obl.GetName())] = obl
}
rsp := &obligations.GetObligationsByFQNsResponse{FqnObligationMap: obls}
return connect.NewResponse(rsp), nil
@@ -170,11 +172,7 @@ func (s *Service) UpdateObligation(ctx context.Context, req *connect.Request[obl
s.logger.DebugContext(ctx, "updating obligation", slog.String("id", id))
err := s.dbClient.RunInTx(ctx, func(txClient *policydb.PolicyDBClient) error {
- original, err := txClient.GetObligation(ctx, &obligations.GetObligationRequest{
- Identifier: &obligations.GetObligationRequest_Id{
- Id: id,
- },
- })
+ original, err := txClient.GetObligation(ctx, &obligations.GetObligationRequest{Id: id})
if err != nil {
return err
}
@@ -253,11 +251,12 @@ func (s *Service) CreateObligationValue(ctx context.Context, req *connect.Reques
}
func (s *Service) GetObligationValue(ctx context.Context, req *connect.Request[obligations.GetObligationValueRequest]) (*connect.Response[obligations.GetObligationValueResponse], error) {
- s.logger.DebugContext(ctx, "getting obligation value", slog.Any("identifier", req.Msg.GetIdentifier()))
+ identifier := req.Msg.GetId() + req.Msg.GetFqn()
+ s.logger.DebugContext(ctx, "getting obligation value", slog.Any("identifier", identifier))
val, err := s.dbClient.GetObligationValue(ctx, req.Msg)
if err != nil {
- return nil, db.StatusifyError(ctx, s.logger, err, db.ErrTextGetRetrievalFailed, slog.Any("identifier", req.Msg.GetIdentifier()))
+ return nil, db.StatusifyError(ctx, s.logger, err, db.ErrTextGetRetrievalFailed, slog.Any("identifier", identifier))
}
rsp := &obligations.GetObligationValueResponse{Value: val}
return connect.NewResponse(rsp), nil
@@ -273,7 +272,7 @@ func (s *Service) GetObligationValuesByFQNs(ctx context.Context, req *connect.Re
vals := make(map[string]*policy.ObligationValue)
for _, val := range vs {
obl := val.GetObligation()
- vals[policydb.BuildOblValFQN(obl.GetNamespace().GetFqn(), obl.GetName(), val.GetValue())] = val
+ vals[identifier.BuildOblValFQN(obl.GetNamespace().GetFqn(), obl.GetName(), val.GetValue())] = val
}
rsp := &obligations.GetObligationValuesByFQNsResponse{FqnValueMap: vals}
return connect.NewResponse(rsp), nil
@@ -293,11 +292,7 @@ func (s *Service) UpdateObligationValue(ctx context.Context, req *connect.Reques
s.logger.DebugContext(ctx, "updating obligation value", slog.String("id", id))
err := s.dbClient.RunInTx(ctx, func(txClient *policydb.PolicyDBClient) error {
- original, err := txClient.GetObligationValue(ctx, &obligations.GetObligationValueRequest{
- Identifier: &obligations.GetObligationValueRequest_Id{
- Id: id,
- },
- })
+ original, err := txClient.GetObligationValue(ctx, &obligations.GetObligationValueRequest{Id: id})
if err != nil {
return err
}
diff --git a/service/policy/obligations/obligations.proto b/service/policy/obligations/obligations.proto
index 6543b148b3..e205f3af24 100644
--- a/service/policy/obligations/obligations.proto
+++ b/service/policy/obligations/obligations.proto
@@ -1,7 +1,6 @@
syntax = "proto3";
package policy.obligations;
-
import "common/common.proto";
import "policy/objects.proto";
import "policy/selectors.proto";
@@ -14,10 +13,14 @@ import "buf/validate/validate.proto";
// Definitions
message GetObligationRequest {
- oneof identifier {
- string id = 1;
- string fqn = 2;
- }
+ option (buf.validate.message).oneof = { fields: ["id", "fqn"], required: true };
+ string id = 1 [(buf.validate.field).string.uuid = true];
+ string fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
}
message ValueTriggerRequest {
@@ -34,7 +37,19 @@ message GetObligationResponse {
}
message GetObligationsByFQNsRequest {
- repeated string fqns = 1;
+ repeated string fqns = 1 [
+ (buf.validate.field).repeated = {
+ min_items: 1,
+ max_items: 250,
+ unique: true,
+ items: {
+ string: {
+ min_len: 1,
+ uri: true
+ }
+ },
+ }
+ ];
}
message GetObligationsByFQNsResponse {
@@ -43,14 +58,38 @@ message GetObligationsByFQNsResponse {
message CreateObligationRequest {
// Required
- oneof namespace_identifier {
- string id = 1;
- string fqn = 2;
- }
- string name = 3;
+ option (buf.validate.message).oneof = { fields: ["namespace_id", "namespace_fqn"], required: true };
+ string namespace_id = 1 [(buf.validate.field).string.uuid = true];
+ string namespace_fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
+ string name = 3 [
+ (buf.validate.field).required = true,
+ (buf.validate.field).string.max_len = 253,
+ (buf.validate.field).cel = {
+ id: "obligation_name_format",
+ message: "Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.",
+ expression: "this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')"
+ }
+ ];
// Optional
- repeated string values = 4;
+ repeated string values = 4 [
+ (buf.validate.field).repeated = {
+ min_items: 0,
+ unique: true,
+ items: {
+ string: {
+ max_len: 253,
+ pattern: "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$"
+ }
+ }
+ }
+ ];
+
// Optional
// Common metadata
common.MetadataMutable metadata = 100;
@@ -62,10 +101,18 @@ message CreateObligationResponse {
message UpdateObligationRequest {
// Required
- string id = 1;
+ string id = 1 [(buf.validate.field).string.uuid = true];
// Optional
- string name = 2;
+ string name = 2 [
+ (buf.validate.field).required = false,
+ (buf.validate.field).string.max_len = 253,
+ (buf.validate.field).cel = {
+ id: "obligation_name_format",
+ message: "Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.",
+ expression: "size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true"
+ }
+ ];
common.MetadataMutable metadata = 100;
common.MetadataUpdateEnum metadata_update_behavior = 101;
}
@@ -75,10 +122,14 @@ message UpdateObligationResponse {
}
message DeleteObligationRequest {
- oneof identifier {
- string id = 1;
- string fqn = 2;
- }
+ option (buf.validate.message).oneof = { fields: ["id", "fqn"], required: true };
+ string id = 1 [(buf.validate.field).string.uuid = true];
+ string fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
}
message DeleteObligationResponse {
@@ -88,10 +139,14 @@ message DeleteObligationResponse {
message ListObligationsRequest {
// Optional
// Namespace ID or FQN
- oneof namespace_identifier {
- string id = 1;
- string fqn = 2;
- }
+ option (buf.validate.message).oneof = { fields: ["namespace_id", "namespace_fqn"], required: false };
+ string namespace_id = 1 [(buf.validate.field).string.uuid = true];
+ string namespace_fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
// Optional
policy.PageRequest pagination = 10;
@@ -105,10 +160,14 @@ message ListObligationsResponse {
// Values
message GetObligationValueRequest {
- oneof identifier {
- string id = 1;
- string fqn = 2;
- }
+ option (buf.validate.message).oneof = { fields: ["id", "fqn"], required: true };
+ string id = 1 [(buf.validate.field).string.uuid = true];
+ string fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
}
message GetObligationValueResponse {
@@ -116,7 +175,19 @@ message GetObligationValueResponse {
}
message GetObligationValuesByFQNsRequest {
- repeated string fqns = 1;
+ repeated string fqns = 1 [
+ (buf.validate.field).repeated = {
+ min_items: 1,
+ max_items: 250,
+ unique: true,
+ items: {
+ string: {
+ min_len: 1,
+ uri: true
+ }
+ },
+ }
+ ];
}
message GetObligationValuesByFQNsResponse {
@@ -125,11 +196,23 @@ message GetObligationValuesByFQNsResponse {
message CreateObligationValueRequest {
// Required
- oneof obligation_identifier {
- string id = 1;
- string fqn = 2;
- }
- string value = 3;
+ option (buf.validate.message).oneof = { fields: ["obligation_id", "obligation_fqn"], required: true };
+ string obligation_id = 1 [(buf.validate.field).string.uuid = true];
+ string obligation_fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
+ string value = 3 [
+ (buf.validate.field).required = true,
+ (buf.validate.field).string.max_len = 253,
+ (buf.validate.field).cel = {
+ id: "obligation_value_format",
+ message: "Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.",
+ expression: "this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')"
+ }
+ ];
// Optional
// Combination of action and attribute_value that will trigger this obligation value policy decisioning.
@@ -146,14 +229,25 @@ message CreateObligationValueResponse {
message UpdateObligationValueRequest {
// Required
- string id = 1;
+ string id = 1 [(buf.validate.field).string.uuid = true];
// Optional
- string value = 2;
+ string value = 2 [
+ (buf.validate.field).required = false,
+ (buf.validate.field).string.max_len = 253,
+ (buf.validate.field).cel = {
+ id: "obligation_value_format",
+ message: "Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.",
+ expression: "size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true"
+ }
+ ];
// Optional
// Obligation Triggers provided here will replace all existing records in the database.
repeated ValueTriggerRequest triggers = 3;
+
+ // Optional
+ // Common metadata
common.MetadataMutable metadata = 100;
common.MetadataUpdateEnum metadata_update_behavior = 101;
}
@@ -163,10 +257,14 @@ message UpdateObligationValueResponse {
}
message DeleteObligationValueRequest {
- oneof identifier {
- string id = 1;
- string fqn = 2;
- }
+ option (buf.validate.message).oneof = { fields: ["id", "fqn"], required: true };
+ string id = 1 [(buf.validate.field).string.uuid = true];
+ string fqn = 2 [
+ (buf.validate.field).string = {
+ min_len : 1
+ uri : true
+ }
+ ];
}
message DeleteObligationValueResponse {
diff --git a/service/policy/obligations/obligations_test.go b/service/policy/obligations/obligations_test.go
index fb31113fac..a6b8db2c10 100644
--- a/service/policy/obligations/obligations_test.go
+++ b/service/policy/obligations/obligations_test.go
@@ -12,9 +12,23 @@ import (
)
const (
- invalidUUID = "invalid-uuid"
- validURI = "https://example.com/attr/value/1"
- invalidName = "&hello"
+ validUUID = "00000000-0000-0000-0000-000000000000"
+ validName = "drm"
+ validValue1 = "watermark"
+ validFQN1 = "https://namespace.com/obl/" + validName + "/value/" + validValue1
+ validValue2 = "expiration"
+ validFQN2 = "https://namespace.com/obl/" + validName + "/value/" + validValue2
+ invalidUUID = "invalid-uuid"
+ invalidName = "invalid name"
+ invalidFQN = "invalid-fqn"
+ errMessageUUID = "string.uuid"
+ errMessageURI = "string.uri"
+ errMessageMinItems = "repeated.min_items"
+ errMessageUnique = "repeated.unique"
+ errMessageOneOf = "message.oneof"
+ errMessageRequired = "required"
+ errMessageNameFormat = "obligation_name_format"
+ errMessageValueFormat = "obligation_value_format"
)
func getValidator() protovalidate.Validator {
@@ -25,6 +39,499 @@ func getValidator() protovalidate.Validator {
return v
}
+func Test_GetObligation_Succeeds(t *testing.T) {
+ req := &obligations.GetObligationRequest{
+ Id: validUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.GetObligationRequest{
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_GetObligation_Fails(t *testing.T) {
+ req := &obligations.GetObligationRequest{
+ Id: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.GetObligationRequest{
+ Fqn: invalidFQN,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ req = &obligations.GetObligationRequest{
+ Id: validUUID,
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+}
+
+func Test_GetObligationsByFQNs_Succeeds(t *testing.T) {
+ validFQNs := []string{
+ validFQN1,
+ validFQN2,
+ }
+ req := &obligations.GetObligationsByFQNsRequest{
+ Fqns: validFQNs,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_GetObligationsByFQNs_Fails(t *testing.T) {
+ emptyFQNs := []string{}
+ req := &obligations.GetObligationsByFQNsRequest{
+ Fqns: emptyFQNs,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageMinItems)
+
+ invalidFQNs := []string{invalidFQN}
+ req = &obligations.GetObligationsByFQNsRequest{
+ Fqns: invalidFQNs,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ duplicateFQNs := []string{validFQN1, validFQN1}
+ req = &obligations.GetObligationsByFQNsRequest{
+ Fqns: duplicateFQNs,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUnique)
+}
+
+func Test_CreateObligation_Succeeds(t *testing.T) {
+ req := &obligations.CreateObligationRequest{
+ NamespaceId: validUUID,
+ Name: validName,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.CreateObligationRequest{
+ NamespaceFqn: validFQN1,
+ Name: validName,
+ Values: []string{validValue1, validValue2},
+ }
+ v = getValidator()
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_CreateObligation_Fails(t *testing.T) {
+ req := &obligations.CreateObligationRequest{
+ NamespaceId: invalidUUID,
+ Name: validName,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.CreateObligationRequest{
+ NamespaceFqn: invalidFQN,
+ Name: validName,
+ }
+ v = getValidator()
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ req = &obligations.CreateObligationRequest{
+ NamespaceId: validUUID,
+ }
+ v = getValidator()
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageRequired)
+
+ req = &obligations.CreateObligationRequest{
+ NamespaceId: validUUID,
+ NamespaceFqn: validFQN1,
+ Name: validName,
+ }
+ v = getValidator()
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+
+ req = &obligations.CreateObligationRequest{
+ NamespaceId: validUUID,
+ NamespaceFqn: validFQN1,
+ Name: validName,
+ Values: []string{validValue1, validValue1},
+ }
+ v = getValidator()
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUnique)
+}
+
+func Test_UpdateObligation_Succeeds(t *testing.T) {
+ req := &obligations.UpdateObligationRequest{
+ Id: validUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.UpdateObligationRequest{
+ Id: validUUID,
+ Name: validName,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_UpdateObligation_Fails(t *testing.T) {
+ req := &obligations.UpdateObligationRequest{
+ Id: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.UpdateObligationRequest{
+ Id: validUUID,
+ Name: invalidName,
+ }
+ v = getValidator()
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageNameFormat)
+}
+
+func Test_DeleteObligation_Succeeds(t *testing.T) {
+ req := &obligations.DeleteObligationRequest{
+ Id: validUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.DeleteObligationRequest{
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_DeleteObligation_Fails(t *testing.T) {
+ req := &obligations.DeleteObligationRequest{
+ Id: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.DeleteObligationRequest{
+ Fqn: invalidFQN,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ req = &obligations.DeleteObligationRequest{
+ Id: validUUID,
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+
+ req = &obligations.DeleteObligationRequest{}
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+}
+
+func Test_ListObligations_Succeeds(t *testing.T) {
+ req := &obligations.ListObligationsRequest{}
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.ListObligationsRequest{
+ NamespaceId: validUUID,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.ListObligationsRequest{
+ NamespaceFqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_ListObligations_Fails(t *testing.T) {
+ req := &obligations.ListObligationsRequest{
+ NamespaceId: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.ListObligationsRequest{
+ NamespaceFqn: invalidFQN,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+}
+
+func Test_GetObligationValue_Succeeds(t *testing.T) {
+ req := &obligations.GetObligationValueRequest{
+ Id: validUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.GetObligationValueRequest{
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_GetObligationValue_Fails(t *testing.T) {
+ req := &obligations.GetObligationValueRequest{
+ Id: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.GetObligationValueRequest{
+ Fqn: invalidFQN,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ req = &obligations.GetObligationValueRequest{
+ Id: validUUID,
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+
+ req = &obligations.GetObligationValueRequest{}
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+}
+
+func Test_GetObligationValuesByFQNs_Succeeds(t *testing.T) {
+ validFQNs := []string{
+ validFQN1,
+ validFQN2,
+ }
+ req := &obligations.GetObligationValuesByFQNsRequest{
+ Fqns: validFQNs,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_GetObligationValuesByFQNs_Fails(t *testing.T) {
+ emptyFQNs := []string{}
+ req := &obligations.GetObligationValuesByFQNsRequest{
+ Fqns: emptyFQNs,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageMinItems)
+
+ invalidFQNs := []string{invalidFQN}
+ req = &obligations.GetObligationValuesByFQNsRequest{
+ Fqns: invalidFQNs,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ duplicateFQNs := []string{validFQN1, validFQN1}
+ req = &obligations.GetObligationValuesByFQNsRequest{
+ Fqns: duplicateFQNs,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUnique)
+}
+
+func Test_CreateObligationValue_Succeeds(t *testing.T) {
+ req := &obligations.CreateObligationValueRequest{
+ ObligationId: validUUID,
+ Value: validValue1,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.CreateObligationValueRequest{
+ ObligationFqn: validFQN1,
+ Value: validValue1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_CreateObligationValue_Fails(t *testing.T) {
+ req := &obligations.CreateObligationValueRequest{
+ ObligationId: invalidUUID,
+ Value: validValue1,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.CreateObligationValueRequest{
+ ObligationFqn: invalidFQN,
+ Value: validValue1,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ req = &obligations.CreateObligationValueRequest{
+ ObligationId: validUUID,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageRequired)
+
+ req = &obligations.CreateObligationValueRequest{
+ ObligationId: validUUID,
+ ObligationFqn: validFQN1,
+ Value: validValue1,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+
+ req = &obligations.CreateObligationValueRequest{
+ ObligationId: validUUID,
+ Value: invalidName,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageValueFormat)
+
+ req = &obligations.CreateObligationValueRequest{}
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+}
+
+func Test_UpdateObligationValue_Succeeds(t *testing.T) {
+ req := &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: validValue1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_UpdateObligationValue_Fails(t *testing.T) {
+ req := &obligations.UpdateObligationValueRequest{
+ Id: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: invalidName,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageValueFormat)
+}
+
+func Test_DeleteObligationValue_Succeeds(t *testing.T) {
+ req := &obligations.DeleteObligationValueRequest{
+ Id: validUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.NoError(t, err)
+
+ req = &obligations.DeleteObligationValueRequest{
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.NoError(t, err)
+}
+
+func Test_DeleteObligationValue_Fails(t *testing.T) {
+ req := &obligations.DeleteObligationValueRequest{
+ Id: invalidUUID,
+ }
+ v := getValidator()
+ err := v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageUUID)
+
+ req = &obligations.DeleteObligationValueRequest{
+ Fqn: invalidFQN,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageURI)
+
+ req = &obligations.DeleteObligationValueRequest{
+ Id: validUUID,
+ Fqn: validFQN1,
+ }
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+
+ req = &obligations.DeleteObligationValueRequest{}
+ err = v.Validate(req)
+ require.Error(t, err)
+ require.Contains(t, err.Error(), errMessageOneOf)
+}
+
func Test_AddObligationTrigger_Request(t *testing.T) {
validUUID := uuid.NewString()
validFQN := "https://example.com/attr/value/1"
@@ -200,6 +707,28 @@ func Test_AddObligationTrigger_Request(t *testing.T) {
expectError: true,
errorMessage: "name_format",
},
+ {
+ name: "missing context pep",
+ req: &obligations.AddObligationTriggerRequest{
+ ObligationValue: &common.IdFqnIdentifier{Id: validUUID},
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ Context: &policy.RequestContext{},
+ },
+ expectError: true,
+ errorMessage: "context.pep",
+ },
+ {
+ name: "missing pep client_id",
+ req: &obligations.AddObligationTriggerRequest{
+ ObligationValue: &common.IdFqnIdentifier{Id: validUUID},
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
+ Context: &policy.RequestContext{Pep: &policy.PolicyEnforcementPoint{}},
+ },
+ expectError: true,
+ errorMessage: "pep.client_id",
+ },
}
v := getValidator()
@@ -279,24 +808,24 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "valid with no triggers",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
},
expectError: false,
},
{
name: "valid with fqn and no triggers",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Fqn{Fqn: "f.q.n"},
- Value: "value",
+ ObligationFqn: validFQN1,
+ Value: "value",
},
expectError: false,
},
{
name: "valid with one trigger and ids",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: validUUID},
@@ -310,12 +839,12 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "valid with one trigger and fqns/names",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Name: validUUID},
- AttributeValue: &common.IdFqnIdentifier{Fqn: validURI},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validFQN1},
Context: validRequestContext,
},
},
@@ -325,12 +854,12 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "valid with one trigger - no context",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Name: validUUID},
- AttributeValue: &common.IdFqnIdentifier{Fqn: validURI},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validFQN1},
},
},
},
@@ -339,8 +868,8 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "valid with multiple triggers",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: validUUID},
@@ -359,8 +888,8 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "invalid trigger with invalid action_id",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: invalidUUID},
@@ -375,8 +904,8 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "invalid trigger with invalid attribute_value_id",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: validUUID},
@@ -391,8 +920,8 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "invalid trigger with missing action_id",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
AttributeValue: &common.IdFqnIdentifier{Id: validUUID},
@@ -406,8 +935,8 @@ func Test_CreateObligationValue_Request(t *testing.T) {
{
name: "invalid trigger with missing attribute_value_id",
req: &obligations.CreateObligationValueRequest{
- ObligationIdentifier: &obligations.CreateObligationValueRequest_Id{Id: validUUID},
- Value: "value",
+ ObligationId: validUUID,
+ Value: "value",
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: validUUID},
@@ -464,7 +993,7 @@ func Test_UpdateObligationValue_Request(t *testing.T) {
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: validUUID},
- AttributeValue: &common.IdFqnIdentifier{Fqn: validURI},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validFQN1},
Context: validRequestContext,
},
},
@@ -479,7 +1008,7 @@ func Test_UpdateObligationValue_Request(t *testing.T) {
Triggers: []*obligations.ValueTriggerRequest{
{
Action: &common.IdNameIdentifier{Id: validUUID},
- AttributeValue: &common.IdFqnIdentifier{Fqn: validURI},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validFQN1},
},
},
},
@@ -567,6 +1096,38 @@ func Test_UpdateObligationValue_Request(t *testing.T) {
expectError: true,
errorMessage: "attribute_value",
},
+ {
+ name: "missing context pep",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validFQN1},
+ Context: &policy.RequestContext{},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "context.pep",
+ },
+ {
+ name: "missing pep client_id",
+ req: &obligations.UpdateObligationValueRequest{
+ Id: validUUID,
+ Value: "value",
+ Triggers: []*obligations.ValueTriggerRequest{
+ {
+ Action: &common.IdNameIdentifier{Id: validUUID},
+ AttributeValue: &common.IdFqnIdentifier{Fqn: validFQN1},
+ Context: &policy.RequestContext{Pep: &policy.PolicyEnforcementPoint{}},
+ },
+ },
+ },
+ expectError: true,
+ errorMessage: "pep.client_id",
+ },
}
v := getValidator()